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_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)
|
||||||
|
|
15
stream.cpp
15
stream.cpp
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
1
stream.h
1
stream.h
|
@ -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;
|
||||||
|
|
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)
|
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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue