summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2013-03-01 10:02:01 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2013-03-01 10:02:01 +0100
commitdf4e5a1072ac23e9caafa2eb7f64510f757e5437 (patch)
tree62cb67ac472350f819614a74eb236224aa117d64
parent5c47a0033e18ace93453807c8eb1972c6bde5953 (diff)
downloadvdr-df4e5a1072ac23e9caafa2eb7f64510f757e5437.tar.gz
vdr-df4e5a1072ac23e9caafa2eb7f64510f757e5437.tar.bz2
Now calling DeviceClear() in cTransfer::Receive() if the output device blocks, instead of not retrying for 10 seconds
-rw-r--r--CONTRIBUTORS3
-rw-r--r--HISTORY2
-rw-r--r--transfer.c14
-rw-r--r--transfer.h5
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 <o.endriss@gmx.de>
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 <rw.buchner@freenet.de>
for adding some satellites to 'sources.conf'
@@ -1009,6 +1011,7 @@ Andreas Mair <amair.sob@googlemail.com>
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 <jacquesolivier@hotmail.com>)
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);