summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2007-11-09 13:09:09 +0000
committerJohan Hedberg <johan.hedberg@nokia.com>2007-11-09 13:09:09 +0000
commit344e38a9616a11072a123dacb70daf6ab69d5270 (patch)
tree5ec5fd3eebd0fd6273aef58e3434e29911b0cbd7
parent65086658fce4caf34e85e35a7edf8c312908986d (diff)
Use clock_gettime instead of gettimeofday
-rw-r--r--audio/pcm_bluetooth.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/audio/pcm_bluetooth.c b/audio/pcm_bluetooth.c
index 28f5de43..89ce8965 100644
--- a/audio/pcm_bluetooth.c
+++ b/audio/pcm_bluetooth.c
@@ -28,6 +28,7 @@
#include <stdint.h>
#include <sys/socket.h>
#include <sys/un.h>
+#include <time.h>
#include <sys/time.h>
#include <pthread.h>
#include <signal.h>
@@ -67,6 +68,13 @@
#define SCO_RXBUFS 0x04
#endif
+#ifndef TIMESPEC_TO_TIMEVAL
+# define TIMESPEC_TO_TIMEVAL(tv, ts) { \
+ (tv)->tv_sec = (ts)->tv_sec; \
+ (tv)->tv_usec = (ts)->tv_nsec / 1000; \
+}
+#endif
+
struct bluetooth_a2dp {
sbc_t sbc; /* Codec data */
int codesize; /* SBC codesize */
@@ -115,6 +123,7 @@ static void *playback_hw_thread(void *param)
unsigned int prev_periods;
double period_time;
struct timeval start;
+ struct timespec start_monotonic;
struct pollfd fds[2];
int poll_timeout;
@@ -131,11 +140,13 @@ static void *playback_hw_thread(void *param)
else
poll_timeout = MIN_PERIOD_TIME;
- gettimeofday(&start, 0);
+ clock_gettime(CLOCK_MONOTONIC, &start_monotonic);
+ TIMESPEC_TO_TIMEVAL(&start, &start_monotonic);
while (1) {
unsigned int dtime, periods;
struct timeval cur, delta;
+ struct timespec cur_monotonic;
int ret;
if (data->stopped)
@@ -144,11 +155,13 @@ static void *playback_hw_thread(void *param)
if (data->reset) {
DBG("Handle XRUN in hw-thread.");
data->reset = 0;
- gettimeofday(&start, 0);
+ clock_gettime(CLOCK_MONOTONIC, &start_monotonic);
+ TIMESPEC_TO_TIMEVAL(&start, &start_monotonic);
prev_periods = 0;
}
- gettimeofday(&cur, 0);
+ clock_gettime(CLOCK_MONOTONIC, &cur_monotonic);
+ TIMESPEC_TO_TIMEVAL(&cur, &cur_monotonic);
timersub(&cur, &start, &delta);