chunk time

git-svn-id: svn://elaine/murooma/trunk@117 d8a302eb-03bc-478d-80e4-98257eca68ef
This commit is contained in:
(no author) 2014-07-28 06:48:28 +00:00
parent 73ef1cda12
commit b5615ec185
4 changed files with 31 additions and 21 deletions

View file

@ -7,6 +7,7 @@
#define WIRE_CHUNK_MS (50) #define WIRE_CHUNK_MS (50)
#define WIRE_CHUNK_SIZE ((SAMPLE_RATE*CHANNELS*WIRE_CHUNK_MS)/1000) #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_MS (10)
#define PLAYER_CHUNK_SIZE ((SAMPLE_RATE*CHANNELS*PLAYER_CHUNK_MS)/1000) #define PLAYER_CHUNK_SIZE ((SAMPLE_RATE*CHANNELS*PLAYER_CHUNK_MS)/1000)

View file

@ -48,6 +48,8 @@ void Stream::getSilentPlayerChunk(short* outputBuffer)
} }
timeval Stream::getNextPlayerChunk(short* outputBuffer, int correction) timeval Stream::getNextPlayerChunk(short* outputBuffer, int correction)
{ {
Chunk* chunk = getNextChunk(); 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"; //std::cerr << "Idx: " << chunk->idx << " => " << idx+2 << "\t" << WIRE_CHUNK_SIZE << "\t" << PLAYER_CHUNK_SIZE/2 << "\n";
chunk->idx = idx; chunk->idx = idx;
/// timeval nextTv = getTimeval(chunk);
/// addMs(nextTv, idx / WIRE_CHUNK_MS_SIZE);
/// setTimeval(chunk, nextTv);
//timeval chunkTv = getTimeval(chunk); //timeval chunkTv = getTimeval(chunk);
timeval nextTv = tv; // timeval nextTv = tv;
addMs(nextTv, samples / PLAYER_CHUNK_MS_SIZE); // addMs(nextTv, samples / PLAYER_CHUNK_MS_SIZE);
setTimeval(chunk, nextTv); // setTimeval(chunk, nextTv);
//timeval tvLater = getTimeval(chunk); //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"; //std::cerr << timeToStr(tv) << "\n" << timeToStr(chunkTv) << "\n" << timeToStr(tvLater) << "\n";
return tv; return tv;
} }
@ -119,7 +124,7 @@ std::cerr << "Diff: " << diff_ms(nextTv, tv) << "\t" << chunk->idx / PLAYER_CHUN
timeval nextTv = tv; timeval nextTv = tv;
addMs(nextTv, PLAYER_CHUNK_MS); addMs(nextTv, PLAYER_CHUNK_MS);
setTimeval(chunk, nextTv); // setTimeval(chunk, nextTv);
chunk->idx += missing; chunk->idx += missing;
if (chunk->idx >= WIRE_CHUNK_SIZE) if (chunk->idx >= WIRE_CHUNK_SIZE)
{ {

View file

@ -22,6 +22,7 @@ public:
void setBufferLen(size_t bufferLenMs); void setBufferLen(size_t bufferLenMs);
private: private:
void updateChunkTime(Chunk* chunk);
void sleepMs(int ms); void sleepMs(int ms);
int sleep; int sleep;

View file

@ -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) static timeval getTimeval(const Chunk* chunk)
{ {
timeval ts; timeval ts;
ts.tv_sec = chunk->tv_sec; ts.tv_sec = chunk->tv_sec;
ts.tv_usec = chunk->tv_usec; ts.tv_usec = chunk->tv_usec;
addMs(ts, chunk->idx / WIRE_CHUNK_MS_SIZE);
return ts; 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) static void addMs(Chunk* chunk, int ms)
{ {
timeval tv = getTimeval(chunk); timeval tv = getTimeval(chunk);
@ -93,7 +96,7 @@ static void addMs(Chunk* chunk, int ms)
chunk->tv_sec = tv.tv_sec; chunk->tv_sec = tv.tv_sec;
chunk->tv_usec = tv.tv_usec; chunk->tv_usec = tv.tv_usec;
} }
*/
#endif #endif