Я использую SDL аудио для воспроизведения звуков.
SDL_LockAudio сообщает следующее:
Не вызывать это из обратного вызовафункция или вы будете вызывать тупик.
Но, SDL_PauseAudio не говорит об этом, вместо этого говорит:
Эта функция приостанавливает и приостанавливает обработку обратного вызова аудио
Мой обратный вызов микшера выглядит следующим образом:
void AudioPlaybackCallback( void *, core::bty::UInt8 *stream, int len )
{
// number of bytes left to play in the current sample
const int thisSampleLeft = currentSample.dataLength - currentSample.dataPos;
// number of bytes that will be sent to the audio stream
const int amountToPlay = std::min( thisSampleLeft, len );
if ( amountToPlay > 0 )
{
SDL_MixAudio( stream,
currentSample.data + currentSample.dataPos,
amountToPlay,
currentSample.volume );
// update the current sample
currentSample.dataPos += amountToPlay;
}
else
{
if ( PlayingQueue::QueueHasElements() )
{
// update the current sample
currentSample = PlayingQueue::QueuePop();
}
else
{
// since the current sample finished, and there are no more samples to
// play, pause the playback
SDL_PauseAudio( 1 );
}
}
}
PlayingQueue
- это класс, который обеспечивает доступ к статическому std::queue
объекту.Ничего особенного.
Это работало нормально, пока мы не решили обновить библиотеки SDL и alsa (теперь больше нет пути назад).С тех пор я вижу это в своем журнале:
ALSA lib pcm.c: 7316: (snd_pcm_recover) произошло опустошение
Если я предполагаю, что нет ошибок в SDL илибиблиотека alsa (это, скорее всего, неправильно, после поиска в сообщении), я думаю, что должна быть возможность изменить мой код для исправления или, по крайней мере, избежать опустошения.
Итак, вопрос: могу ли я сделать паузуобратный звонок от себя?Может ли это привести к опустошению, которое я вижу?