diff --git a/chunk.h b/chunk.h index 15168809..1cf3b07e 100644 --- a/chunk.h +++ b/chunk.h @@ -7,6 +7,7 @@ #define WIRE_CHUNK_MS (50) #define WIRE_CHUNK_SIZE ((SAMPLE_RATE*CHANNELS*WIRE_CHUNK_MS)/1000) +#define WIRE_CHUNK_MS_SIZE ((SAMPLE_RATE*CHANNELS)/1000) #define PLAYER_CHUNK_MS (10) #define PLAYER_CHUNK_SIZE ((SAMPLE_RATE*CHANNELS*PLAYER_CHUNK_MS)/1000) diff --git a/stream.cpp b/stream.cpp index 43707a1c..5541bd3b 100644 --- a/stream.cpp +++ b/stream.cpp @@ -48,6 +48,8 @@ void Stream::getSilentPlayerChunk(short* outputBuffer) } + + timeval Stream::getNextPlayerChunk(short* outputBuffer, int correction) { Chunk* chunk = getNextChunk(); @@ -87,13 +89,16 @@ timeval Stream::getNextPlayerChunk(short* outputBuffer, int correction) } //std::cerr << "Idx: " << chunk->idx << " => " << idx+2 << "\t" << WIRE_CHUNK_SIZE << "\t" << PLAYER_CHUNK_SIZE/2 << "\n"; chunk->idx = idx; +/// timeval nextTv = getTimeval(chunk); +/// addMs(nextTv, idx / WIRE_CHUNK_MS_SIZE); +/// setTimeval(chunk, nextTv); //timeval chunkTv = getTimeval(chunk); - timeval nextTv = tv; - addMs(nextTv, samples / PLAYER_CHUNK_MS_SIZE); - setTimeval(chunk, nextTv); +// timeval nextTv = tv; +// addMs(nextTv, samples / PLAYER_CHUNK_MS_SIZE); +// setTimeval(chunk, nextTv); //timeval tvLater = getTimeval(chunk); -std::cerr << "Diff: " << diff_ms(nextTv, tv) << "\t" << chunk->idx / PLAYER_CHUNK_MS_SIZE << "\n"; +std::cerr << "Diff: " << diff_ms(getTimeval(chunk), tv) << "\t" << chunk->idx / PLAYER_CHUNK_MS_SIZE << "\n"; //std::cerr << timeToStr(tv) << "\n" << timeToStr(chunkTv) << "\n" << timeToStr(tvLater) << "\n"; return tv; } @@ -119,7 +124,7 @@ std::cerr << "Diff: " << diff_ms(nextTv, tv) << "\t" << chunk->idx / PLAYER_CHUN timeval nextTv = tv; addMs(nextTv, PLAYER_CHUNK_MS); - setTimeval(chunk, nextTv); +// setTimeval(chunk, nextTv); chunk->idx += missing; if (chunk->idx >= WIRE_CHUNK_SIZE) { diff --git a/stream.h b/stream.h index 4cb98ba5..4fd2e8da 100644 --- a/stream.h +++ b/stream.h @@ -22,6 +22,7 @@ public: void setBufferLen(size_t bufferLenMs); private: + void updateChunkTime(Chunk* chunk); void sleepMs(int ms); int sleep; diff --git a/timeUtils.h b/timeUtils.h index 8fa873b9..93c1a340 100644 --- a/timeUtils.h +++ b/timeUtils.h @@ -17,11 +17,28 @@ static std::string timeToStr(const timeval& timestamp) } +static void addMs(timeval& tv, int ms) +{ + if (ms < 0) + { + timeval t; + t.tv_sec = -ms / 1000; + t.tv_usec = (-ms % 1000) * 1000; + timersub(&tv, &t, &tv); + return; + } + tv.tv_usec += ms*1000; + tv.tv_sec += (tv.tv_usec / 1000000); + tv.tv_usec %= 1000000; +} + + static timeval getTimeval(const Chunk* chunk) { timeval ts; ts.tv_sec = chunk->tv_sec; ts.tv_usec = chunk->tv_usec; + addMs(ts, chunk->idx / WIRE_CHUNK_MS_SIZE); return ts; } @@ -70,22 +87,8 @@ static long getTickCount() } -static void addMs(timeval& tv, int ms) -{ - if (ms < 0) - { - timeval t; - t.tv_sec = -ms / 1000; - t.tv_usec = (-ms % 1000) * 1000; - timersub(&tv, &t, &tv); - return; - } - tv.tv_usec += ms*1000; - tv.tv_sec += (tv.tv_usec / 1000000); - tv.tv_usec %= 1000000; -} - +/* static void addMs(Chunk* chunk, int ms) { timeval tv = getTimeval(chunk); @@ -93,7 +96,7 @@ static void addMs(Chunk* chunk, int ms) chunk->tv_sec = tv.tv_sec; chunk->tv_usec = tv.tv_usec; } - +*/ #endif