diff options
| author | Johan Hedberg <johan.hedberg@nokia.com> | 2007-08-22 11:13:27 +0000 | 
|---|---|---|
| committer | Johan Hedberg <johan.hedberg@nokia.com> | 2007-08-22 11:13:27 +0000 | 
| commit | 714cd0ab444bd51731131866463f5c565c8a33f6 (patch) | |
| tree | f253eef15a99fca57faab685bd559321c10366f4 | |
| parent | b22d297c0c679b400d7825367e31fed46c552a49 (diff) | |
Use "unsigned int" instead of "unsigned long long" and reset the point of reference at proper intervals to avoid overflow
| -rw-r--r-- | audio/pcm_bluetooth.c | 18 | 
1 files changed, 14 insertions, 4 deletions
diff --git a/audio/pcm_bluetooth.c b/audio/pcm_bluetooth.c index 495f1521..77c8045e 100644 --- a/audio/pcm_bluetooth.c +++ b/audio/pcm_bluetooth.c @@ -25,6 +25,7 @@  #include <config.h>  #endif +#include <stdint.h>  #include <sys/socket.h>  #include <sys/un.h>  #include <sys/time.h> @@ -43,6 +44,10 @@  //#define ENABLE_DEBUG +#define UINT_SECS_MAX (UINT_MAX / 1000000 - 1) + +#define MIN_PERIOD_TIME 1000 +  #define BUFFER_SIZE 2048  #ifdef ENABLE_DEBUG @@ -136,8 +141,7 @@ static void *a2dp_playback_hw_thread(void *param)  	gettimeofday(&start, 0);  	while (1) { -		unsigned long long dtime; -		unsigned int periods; +		unsigned int dtime, periods;  		struct timeval cur, delta;  		gettimeofday(&cur, 0); @@ -160,10 +164,16 @@ static void *a2dp_playback_hw_thread(void *param)  			if (write(data->a2dp.pipefd[1], &c, 1) < 0)  				pthread_testcancel(); -			prev_periods = periods; +			/* Reset point of reference to avoid too big values +			 * that wont fit an unsigned int */ +			if (delta.tv_sec > UINT_SECS_MAX) { +				prev_periods = 0; +				gettimeofday(&start, 0); +			} else +				prev_periods = periods;  		} -		usleep(period_time); +		usleep(MIN_PERIOD_TIME);  		/* Offer opportunity to be canceled by main thread */  		pthread_testcancel();  | 
