diff options
-rw-r--r-- | CONTRIBUTORS | 2 | ||||
-rw-r--r-- | HISTORY | 4 | ||||
-rw-r--r-- | transfer.c | 29 |
3 files changed, 21 insertions, 14 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 0260a40b..9bc892c7 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1138,6 +1138,8 @@ Marco Schlüßler <marco@lordzodiac.de> for adding CMD_SPU_CHG_COLCON to cDvbSpuDecoder::setTime() for suggesting to force a new resync after a call to cRemux::Clear() for suggestions that led to the addition of the 'Id' parameter to cAudio::Play(). + for removing the "Cleared/PlayPes(NULL, 0)" handling from cTransfer::Action(), since + this is now done when attaching the player to the device Jürgen Schmitz <j.schmitz@web.de> for reporting a bug in displaying the current channel when switching via the SVDRP @@ -3392,3 +3392,7 @@ Video Disk Recorder Revision History the function the substream id of the given audio packet, so that a plugin can take the right action for the various kinds if audio data (based on suggestions by Werner Fink and Macro Schlüßler). +- Removed the "Cleared/PlayPes(NULL, 0)" handling from cTransfer::Action(), since this + is now done when attaching the player to the device (thanks to Marco Schlüßler). +- Making sure the buffer reserve in cTransfer::Action() is re-established after + clearing the buffer. @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: transfer.c 1.25 2005/01/23 14:27:40 kls Exp $ + * $Id: transfer.c 1.26 2005/02/12 13:51:21 kls Exp $ */ #include "transfer.h" @@ -61,17 +61,12 @@ void cTransfer::Action(void) int Result = 0; #define FW_NEEDS_BUFFER_RESERVE_FOR_AC3 #ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3 - bool Cleared = false; bool GotBufferReserve = false; #endif active = true; while (active) { #ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3 - if (needsBufferReserve) { - if (IsAttached() && !Cleared) { - PlayPes(NULL, 0); - Cleared = true; - } + if (needsBufferReserve && !GotBufferReserve) { //XXX For dolby we've to fill the buffer because the firmware does //XXX not decode dolby but use a PCM stream for transport, therefore //XXX the firmware has not enough buffer for noiseless skipping early @@ -79,14 +74,12 @@ void cTransfer::Action(void) //XXX audio is mostly to early in comparison to video). //XXX To resolve this, the remuxer or PlayPes() should synchronize //XXX audio with the video frames. 2004/09/09 Werner - if (!GotBufferReserve) { - if (ringBuffer->Available() < 3 * KILOBYTE(192) / 2) { // used to be MAXFRAMESIZE, but the HDTV value of KILOBYTE(512) is way too much here - cCondWait::SleepMs(20); // allow the buffer to collect some reserve - continue; - } - else - GotBufferReserve = true; + if (ringBuffer->Available() < 3 * KILOBYTE(192) / 2) { // used to be MAXFRAMESIZE, but the HDTV value of KILOBYTE(512) is way too much here + cCondWait::SleepMs(20); // allow the buffer to collect some reserve + continue; } + else + GotBufferReserve = true; } #endif int Count; @@ -98,10 +91,14 @@ void cTransfer::Action(void) // So let's clear the buffer instead of suffering from permanent // overflows. dsyslog("clearing transfer buffer to avoid overflows"); + DeviceClear(); ringBuffer->Clear(); remux->Clear(); PlayPes(NULL, 0); p = NULL; +#ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3 + GotBufferReserve = false; +#endif continue; } Count = remux->Put(b, Count); @@ -132,7 +129,11 @@ void cTransfer::Action(void) DeviceClear(); ringBuffer->Clear(); remux->Clear(); + PlayPes(NULL, 0); p = NULL; +#ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3 + GotBufferReserve = false; +#endif } } } |