Luca Olivetti wrote:
Following up my report lost in the announce thread.
vdr-1.3.15, with a budget card (skystar2) and a dxr3.
When the dish is moving the call
if (!HasLock(TUNER_LOCK_TIMEOUT)...
in cDevice::AttachReceiver is problematic since it's not enough time to reach the target satellite, causing an error (and displaying nothing once the position has been reached).
[...]
I commented out that call altogether and it seems to work fine for live tv but not for recordings:The second problem is "solved" by the attached patch (as long as the dish doesn't take more than 5 minutes to reach the target position). The proper solution would probably be to check that the dish is positioned, but I don't know how to do it inside of recorder.c (since cFileWriter doesn't know which device is sending it data).
- with the dish positioned on hotbird (13E) I scheduled a recording on astra 2 (28.2E). No problems with this recording (the satellite switch from 13E to 28.2E takes around 20 seconds)
- then I scheduled a recording on hispasat (30W) and this didn't work (since it takes a lot more time, almost 2 minutes):
Nov 2 19:18:00 vdr vdr[971]: ERROR: thread 1195641776 won't end (waited 200 se
conds) - cancelling it...
Nov 2 19:18:00 vdr vdr[971]: timer 1 (6059 1918-1921 'CCValenciana') start
Nov 2 19:18:04 vdr vdr[971]: record /home/vdr/video/CCValenciana/2004-11-02.19
:18.50.99.rec
Nov 2 19:18:06 vdr vdr[971]: switching to channel 4011
Nov 2 19:18:06 vdr vdr[971]: info: !Canal no disponible!
Nov 2 19:18:08 vdr vdr[971]: switching to channel 6059
Nov 2 19:18:36 vdr vdr[971]: ERROR: video data stream broken
--- recorder.c.orig 2004-11-02 21:18:52.897932030 +0100 +++ recorder.c 2004-11-02 21:18:52.904929888 +0100 @@ -96,11 +96,13 @@ void cFileWriter::Action(void) { time_t t = time(NULL); + time_t m = MAXBROKENTIMEOUT * 10; //give more time to first packet active = true; while (active) { int Count; uchar *p = remux->Get(Count, &pictureType); if (p) { + m = MAXBROKENTIMEOUT; //XXX+ active??? see old version (Busy) if (!active && pictureType == I_FRAME) // finish the recording before the next 'I' frame break; @@ -118,7 +120,7 @@ break; t = time(NULL); } - else if (time(NULL) - t > MAXBROKENTIMEOUT) { + else if (time(NULL) - t > m) { esyslog("ERROR: video data stream broken"); cThread::EmergencyExit(true); t = time(NULL);
Attachment:
signature.asc
Description: OpenPGP digital signature