Removed the "buffer reserve" in Transfer Mode - it's no longer necessary with recent driver/firmware versions

This commit is contained in:
Klaus Schmidinger 2006-01-28 14:25:06 +01:00
parent 1530b5647b
commit 5e623525e9
3 changed files with 4 additions and 44 deletions

View File

@ -4251,3 +4251,5 @@ Video Disk Recorder Revision History
- Increased the timeout in cInterface::GetKey() to avoid problems with remote
controls that don't deliver "repeat" keypresses very fast (problem with the new
handling of k_Repeat keypresses in channel switching reported by Udo Richter).
- Removed the "buffer reserve" in Transfer Mode - it's no longer necessary with
recent driver/firmware versions.

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: dvbosd.c 1.29 2005/12/30 15:41:54 kls Exp $
* $Id: dvbosd.c 1.30 2006/01/28 14:24:04 kls Exp $
*/
#include "dvbosd.h"
@ -48,13 +48,6 @@ cDvbOsd::cDvbOsd(int Left, int Top, int OsdDev)
cap.cmd = OSD_CAP_MEMSIZE;
if (ioctl(osdDev, OSD_GET_CAPABILITY, &cap) == 0)
osdMem = cap.val;
#define FW_NEEDS_BUFFER_RESERVE_FOR_AC3
#ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3
//XXX This is a very ugly hack to allow cDvbOsd to reduce the buffer
//XXX requirements in cTransfer if it detects a 4MB full featured DVB card.
extern bool DvbCardWith4MBofSDRAM;
DvbCardWith4MBofSDRAM = osdMem >= 1000000;
#endif
#endif
// must clear all windows here to avoid flashing effects - doesn't work if done
// in Flush() only for the windows that are actually used...

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: transfer.c 1.31 2006/01/21 14:13:16 kls Exp $
* $Id: transfer.c 1.32 2006/01/28 14:23:38 kls Exp $
*/
#include "transfer.h"
@ -49,41 +49,12 @@ void cTransfer::Receive(uchar *Data, int Length)
}
}
#define FW_NEEDS_BUFFER_RESERVE_FOR_AC3
#ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3
//XXX This is a very ugly hack to allow cDvbOsd to reduce the buffer
//XXX requirements in cTransfer if it detects a 4MB full featured DVB card.
bool DvbCardWith4MBofSDRAM = false;
#endif
void cTransfer::Action(void)
{
int PollTimeouts = 0;
uchar *p = NULL;
int Result = 0;
#ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3
bool GotBufferReserve = false;
GotBufferReserve = true; //XXX remove this line if you absolutely need the buffer reserve
int RequiredBufferReserve = KILOBYTE(DvbCardWith4MBofSDRAM ? 288 : 576);
#endif
while (Running()) {
#ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3
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
//XXX PCM samples (each dolby frame requires 6144 bytes in PCM and
//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 (ringBuffer->Available() < RequiredBufferReserve) { // 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;
uchar *b = ringBuffer->Get(Count);
if (b) {
@ -98,9 +69,6 @@ void cTransfer::Action(void)
remux->Clear();
PlayPes(NULL, 0);
p = NULL;
#ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3
GotBufferReserve = false;
#endif
continue;
}
Count = remux->Put(b, Count);
@ -133,9 +101,6 @@ void cTransfer::Action(void)
remux->Clear();
PlayPes(NULL, 0);
p = NULL;
#ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3
GotBufferReserve = false;
#endif
}
}
}