mirror of
https://github.com/badaix/snapcast.git
synced 2025-06-10 23:01:45 +02:00
recover if no chunks are available
This commit is contained in:
parent
25acbc1717
commit
0f9c86c7c2
2 changed files with 25 additions and 11 deletions
|
@ -84,20 +84,29 @@ void OpenslPlayer::playerCallback(SLAndroidSimpleBufferQueueItf bq)
|
||||||
|
|
||||||
// diff = 0;
|
// diff = 0;
|
||||||
// chronos::usec delay((250 - diff) * 1000);
|
// chronos::usec delay((250 - diff) * 1000);
|
||||||
|
|
||||||
|
// while (active_ && !stream_->waitForChunk(100))
|
||||||
|
// logO << "Waiting for chunk\n";
|
||||||
|
|
||||||
|
if (!active_)
|
||||||
|
return;
|
||||||
|
|
||||||
chronos::usec delay(150 * 1000);
|
chronos::usec delay(150 * 1000);
|
||||||
|
if (!pubStream_->getPlayerChunk(buffer[curBuffer], delay, frames_))
|
||||||
if (pubStream_->getPlayerChunk(buffer[curBuffer], delay, frames_))
|
|
||||||
{
|
{
|
||||||
|
logO << "Failed to get chunk. Playing silence.\n";
|
||||||
SLresult result;
|
memset(buffer[curBuffer], 0, buff_size);
|
||||||
do
|
|
||||||
{
|
|
||||||
result = (*bq)->Enqueue(bq, buffer[curBuffer], buff_size);
|
|
||||||
if (result == SL_RESULT_BUFFER_INSUFFICIENT)
|
|
||||||
usleep(1000);
|
|
||||||
}
|
|
||||||
while (result == SL_RESULT_BUFFER_INSUFFICIENT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (active_)
|
||||||
|
{
|
||||||
|
SLresult result = (*bq)->Enqueue(bq, buffer[curBuffer], buff_size);
|
||||||
|
if (result == SL_RESULT_BUFFER_INSUFFICIENT)
|
||||||
|
usleep(1000);
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
curBuffer ^= 1; // Switch buffer
|
curBuffer ^= 1; // Switch buffer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,12 +265,14 @@ void OpenslPlayer::uninitOpensl()
|
||||||
|
|
||||||
void OpenslPlayer::start()
|
void OpenslPlayer::start()
|
||||||
{
|
{
|
||||||
|
active_ = true;
|
||||||
initOpensl();
|
initOpensl();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void OpenslPlayer::stop()
|
void OpenslPlayer::stop()
|
||||||
{
|
{
|
||||||
|
active_ = false;
|
||||||
uninitOpensl();
|
uninitOpensl();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,9 @@ void Stream::addChunk(msg::PcmChunk* chunk)
|
||||||
|
|
||||||
bool Stream::waitForChunk(size_t ms) const
|
bool Stream::waitForChunk(size_t ms) const
|
||||||
{
|
{
|
||||||
|
if (!chunks_.empty())
|
||||||
|
return true;
|
||||||
|
|
||||||
std::unique_lock<std::mutex> lck(cvMutex_);
|
std::unique_lock<std::mutex> lck(cvMutex_);
|
||||||
cv_.wait_for(lck, std::chrono::milliseconds(ms));
|
cv_.wait_for(lck, std::chrono::milliseconds(ms));
|
||||||
return !chunks_.empty();
|
return !chunks_.empty();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue