mirror of
https://github.com/badaix/snapcast.git
synced 2025-05-10 07:36:41 +02:00
chunk time
git-svn-id: svn://elaine/murooma/trunk@117 d8a302eb-03bc-478d-80e4-98257eca68ef
This commit is contained in:
parent
73ef1cda12
commit
b5615ec185
4 changed files with 31 additions and 21 deletions
1
chunk.h
1
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)
|
||||
|
|
15
stream.cpp
15
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)
|
||||
{
|
||||
|
|
1
stream.h
1
stream.h
|
@ -22,6 +22,7 @@ public:
|
|||
void setBufferLen(size_t bufferLenMs);
|
||||
|
||||
private:
|
||||
void updateChunkTime(Chunk* chunk);
|
||||
void sleepMs(int ms);
|
||||
|
||||
int sleep;
|
||||
|
|
35
timeUtils.h
35
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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue