From 05e6afd6ea12352e38db41df1a92eb9730bb9cfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Wed, 15 Sep 2010 22:23:50 +0000 Subject: [PATCH] Always wait for buffers in AudioProducer::_FillNextBuffer(). Seems to work around a problem in the system mixer. When it happens once that the AudioProducer does not send a buffer, then it can eventually lead to a drop into the debugger from BBuffer::SetHeader(), which to me looks like the BMediaEventLooper thread of the mixer still runs when the System Mixer has been shut down, which itself is yet another problem. I shall investigate, but for the time being, one should enjoy a more stable media_addon_server life-time. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38664 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../mediaplayer/media_node_framework/audio/AudioProducer.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/apps/mediaplayer/media_node_framework/audio/AudioProducer.cpp b/src/apps/mediaplayer/media_node_framework/audio/AudioProducer.cpp index 82c934b736..c220cdb544 100644 --- a/src/apps/mediaplayer/media_node_framework/audio/AudioProducer.cpp +++ b/src/apps/mediaplayer/media_node_framework/audio/AudioProducer.cpp @@ -645,13 +645,13 @@ printf("B_START: start time: %lld\n", fStartTime); if (RunState() == BMediaEventLooper::B_STARTED && fOutput.destination != media_destination::null) { BBuffer* buffer = _FillNextBuffer(event->event_time); - if (buffer) { + if (buffer != NULL) { status_t err = B_ERROR; if (fOutputEnabled) { err = SendBuffer(buffer, fOutput.source, fOutput.destination); } - if (err) + if (err != B_OK) buffer->Recycle(); } size_t sampleSize = fOutput.format.u.raw_audio.format @@ -810,6 +810,7 @@ AudioProducer::_AllocateBuffers(const media_format& format) BBuffer* AudioProducer::_FillNextBuffer(bigtime_t eventTime) { + fBufferGroup->WaitForBuffers(); BBuffer* buffer = fBufferGroup->RequestBuffer( fOutput.format.u.raw_audio.buffer_size, BufferDuration());