Taking the complete size of available data into account when deciding whether to clear the transfer buffer to avoid overflows

This commit is contained in:
Klaus Schmidinger 2004-10-23 13:40:56 +02:00
parent af6b8ff533
commit f0a7e75d8e
3 changed files with 6 additions and 2 deletions

View File

@ -873,6 +873,8 @@ Reinhard Nissl <rnissl@gmx.de>
for suggesting to make sure the OSD reports oeWrongAlignment errors before any
oeAreasOverlap error
for reporting a a crash in the time search mechanism
for taking the complete size of available data into account when deciding whether
to clear the transfer buffer to avoid overflows
Richard Robson <richard_robson@beeb.net>
for reporting freezing replay if a timer starts while in Transfer Mode from the

View File

@ -3052,3 +3052,5 @@ Video Disk Recorder Revision History
- Removed the usleep() call from cDvbPlayer::Action() to make VDR run on NPTL
systems (thanks to Alfred Zastrow). The NPTL check at startup has also been
removed.
- Taking the complete size of available data into account when deciding whether
to clear the transfer buffer to avoid overflows (thanks to Reinhard Nissl).

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.17 2004/10/16 09:22:58 kls Exp $
* $Id: transfer.c 1.18 2004/10/23 13:35:08 kls Exp $
*/
#include "transfer.h"
@ -65,7 +65,7 @@ void cTransfer::Action(void)
int Count;
uchar *b = ringBuffer->Get(Count);
if (b) {
if (Count > TRANSFERBUFSIZE * 2 / 3) {
if (ringBuffer->Available() > TRANSFERBUFSIZE * 9 / 10) {
// If the buffer runs full, we have no chance of ever catching up
// since the data comes in at the same rate as it goes out (it's "live").
// So let's clear the buffer instead of suffering from permanent