From df4e5a1072ac23e9caafa2eb7f64510f757e5437 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Fri, 1 Mar 2013 10:02:01 +0100 Subject: [PATCH] Now calling DeviceClear() in cTransfer::Receive() if the output device blocks, instead of not retrying for 10 seconds --- CONTRIBUTORS | 3 +++ HISTORY | 2 ++ transfer.c | 14 +++----------- transfer.h | 5 +---- 4 files changed, 9 insertions(+), 15 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index c3433ff3..9a8b2727 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -694,6 +694,8 @@ Oliver Endriss for reporting a crash in a plugin using cDeviceHook when VDR ends for reporting that "include" needs to be removed from the DVBDIR setting in the VDR Makefile + for helping to debug a problem with reduced number of retries in Transfer Mode on + SD-FF cards Reinhard Walter Buchner for adding some satellites to 'sources.conf' @@ -1009,6 +1011,7 @@ Andreas Mair but one of them ends in an additional digit, as in "abc" and "abc2" for reporting multiple occurrences of the same directory in the recordings list ini case there are directories that only differ in non-alphanumeric characters + for reporting a problem with reduced number of retries in Transfer Mode on SD-FF cards Olivier Jacques ) for translating OSD texts to the French language diff --git a/HISTORY b/HISTORY index 82e888d3..c851996e 100644 --- a/HISTORY +++ b/HISTORY @@ -7675,3 +7675,5 @@ Video Disk Recorder Revision History - Updated the Dutch OSD texts (thanks to Carel Willemse). - Removed all "fuzzy" translations from the files ar.po, hu_HU.po and sr_SR.po, because more often than not they are just wrong. +- Now calling DeviceClear() in cTransfer::Receive() if the output device blocks, instead + of not retrying for 10 seconds (reported by Andreas Mair, with help from Oliver Endriss). diff --git a/transfer.c b/transfer.c index 51ba912b..653e93b4 100644 --- a/transfer.c +++ b/transfer.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: transfer.c 2.7 2013/01/20 13:40:30 kls Exp $ + * $Id: transfer.c 2.8 2013/03/01 09:50:15 kls Exp $ */ #include "transfer.h" @@ -15,7 +15,6 @@ cTransfer::cTransfer(const cChannel *Channel) :cReceiver(Channel, TRANSFERPRIORITY) { patPmtGenerator.SetChannel(Channel); - retriesExceeded = false; } cTransfer::~cTransfer() @@ -38,7 +37,6 @@ void cTransfer::Activate(bool On) #define MAXRETRIES 5 // max. number of retries for a single TS packet #define RETRYWAIT 5 // time (in ms) between two retries -#define RETRYPAUSE 10000 // time (in ms) for which to pause retrying once a packet has not been accepted void cTransfer::Receive(uchar *Data, int Length) { @@ -48,17 +46,11 @@ void cTransfer::Receive(uchar *Data, int Length) // now and then there may be conditions where the packet just can't be // handled when offered the first time, so that's why we try several times: for (int i = 0; i < MAXRETRIES; i++) { - if (PlayTs(Data, Length) > 0) { - if (retriesExceeded && timer.TimedOut()) - retriesExceeded = false; - return; - } - if (retriesExceeded) // no retries once a packet has not been accepted + if (PlayTs(Data, Length) > 0) return; cCondWait::SleepMs(RETRYWAIT); } - retriesExceeded = true; - timer.Set(RETRYPAUSE); // wait a while before retrying + DeviceClear(); esyslog("ERROR: TS packet not accepted in Transfer Mode"); } } diff --git a/transfer.h b/transfer.h index 0c668370..47a3398e 100644 --- a/transfer.h +++ b/transfer.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: transfer.h 2.3 2013/01/20 13:12:38 kls Exp $ + * $Id: transfer.h 2.4 2013/03/01 09:49:46 kls Exp $ */ #ifndef __TRANSFER_H @@ -13,13 +13,10 @@ #include "player.h" #include "receiver.h" #include "remux.h" -#include "tools.h" class cTransfer : public cReceiver, public cPlayer { private: cPatPmtGenerator patPmtGenerator; - bool retriesExceeded; - cTimeMs timer; protected: virtual void Activate(bool On); virtual void Receive(uchar *Data, int Length);