mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Moved the detection of a broken video data stream from the cDevice into the cRecorder
This commit is contained in:
parent
0e10fc9599
commit
e944312b65
@ -575,6 +575,8 @@ Jan Ekholm <chakie@infa.abo.fi>
|
|||||||
Marcel Wiesweg <marcel.wiesweg@gmx.de>
|
Marcel Wiesweg <marcel.wiesweg@gmx.de>
|
||||||
for pointing out a problem with high CPU load during replay
|
for pointing out a problem with high CPU load during replay
|
||||||
for reporting broken support for raw OSDs of plugins
|
for reporting broken support for raw OSDs of plugins
|
||||||
|
for reporting a problem with cReceivers that want to receive from PIDs that are
|
||||||
|
currently not transmitting
|
||||||
|
|
||||||
Torsten Herz <torsten.herz@web.de>
|
Torsten Herz <torsten.herz@web.de>
|
||||||
for fixing a possible deadlock when using the "Blue" button in the "Schedules" menu
|
for fixing a possible deadlock when using the "Blue" button in the "Schedules" menu
|
||||||
|
4
HISTORY
4
HISTORY
@ -2159,3 +2159,7 @@ Video Disk Recorder Revision History
|
|||||||
the translators to have their texts translated. Note that there are now 16
|
the translators to have their texts translated. Note that there are now 16
|
||||||
different OSD languages, so please make sure you have 16 versions for each of
|
different OSD languages, so please make sure you have 16 versions for each of
|
||||||
your texts.
|
your texts.
|
||||||
|
- Moved the detection of a broken video data stream from the cDevice into the
|
||||||
|
cRecorder to avoid problems with cReceivers that want to receive from PIDs
|
||||||
|
that are currently not transmitting (thanks to Marcel Wiesweg for reporting
|
||||||
|
this one).
|
||||||
|
15
device.c
15
device.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: device.c 1.42 2003/05/11 08:53:09 kls Exp $
|
* $Id: device.c 1.43 2003/05/16 13:26:43 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
@ -25,10 +25,6 @@
|
|||||||
// The default priority for non-primary devices:
|
// The default priority for non-primary devices:
|
||||||
#define DEFAULTPRIORITY -2
|
#define DEFAULTPRIORITY -2
|
||||||
|
|
||||||
// The maximum time we wait before assuming that a recorded video data stream
|
|
||||||
// is broken:
|
|
||||||
#define MAXBROKENTIMEOUT 30 // seconds
|
|
||||||
|
|
||||||
int cDevice::numDevices = 0;
|
int cDevice::numDevices = 0;
|
||||||
int cDevice::useDevice = 0;
|
int cDevice::useDevice = 0;
|
||||||
int cDevice::nextCardIndex = 0;
|
int cDevice::nextCardIndex = 0;
|
||||||
@ -656,7 +652,6 @@ void cDevice::Action(void)
|
|||||||
dsyslog("receiver thread started on device %d (pid=%d)", CardIndex() + 1, getpid());
|
dsyslog("receiver thread started on device %d (pid=%d)", CardIndex() + 1, getpid());
|
||||||
|
|
||||||
if (OpenDvr()) {
|
if (OpenDvr()) {
|
||||||
time_t t = time(NULL);
|
|
||||||
active = true;
|
active = true;
|
||||||
for (; active;) {
|
for (; active;) {
|
||||||
// Read data from the DVR device:
|
// Read data from the DVR device:
|
||||||
@ -671,18 +666,10 @@ void cDevice::Action(void)
|
|||||||
receiver[i]->Receive(b, TS_SIZE);
|
receiver[i]->Receive(b, TS_SIZE);
|
||||||
}
|
}
|
||||||
Unlock();
|
Unlock();
|
||||||
t = time(NULL);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//XXX+ put this into the recorder??? or give the receiver a flag whether it wants this?
|
|
||||||
if (time(NULL) - t > MAXBROKENTIMEOUT) {
|
|
||||||
esyslog("ERROR: video data stream broken on device %d", CardIndex() + 1);
|
|
||||||
cThread::EmergencyExit(true);
|
|
||||||
t = time(NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
CloseDvr();
|
CloseDvr();
|
||||||
}
|
}
|
||||||
|
13
recorder.c
13
recorder.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recorder.c 1.5 2003/01/25 16:23:36 kls Exp $
|
* $Id: recorder.c 1.6 2003/05/16 13:33:04 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
@ -16,6 +16,10 @@
|
|||||||
// (must be larger than MINVIDEODATA - see remux.h)
|
// (must be larger than MINVIDEODATA - see remux.h)
|
||||||
#define VIDEOBUFSIZE MEGABYTE(5)
|
#define VIDEOBUFSIZE MEGABYTE(5)
|
||||||
|
|
||||||
|
// The maximum time we wait before assuming that a recorded video data stream
|
||||||
|
// is broken:
|
||||||
|
#define MAXBROKENTIMEOUT 30 // seconds
|
||||||
|
|
||||||
#define MINFREEDISKSPACE (512) // MB
|
#define MINFREEDISKSPACE (512) // MB
|
||||||
#define DISKCHECKINTERVAL 100 // seconds
|
#define DISKCHECKINTERVAL 100 // seconds
|
||||||
|
|
||||||
@ -110,6 +114,7 @@ void cRecorder::Action(void)
|
|||||||
{
|
{
|
||||||
dsyslog("recording thread started (pid=%d)", getpid());
|
dsyslog("recording thread started (pid=%d)", getpid());
|
||||||
|
|
||||||
|
time_t t = time(NULL);
|
||||||
active = true;
|
active = true;
|
||||||
while (active) {
|
while (active) {
|
||||||
int r;
|
int r;
|
||||||
@ -134,6 +139,12 @@ void cRecorder::Action(void)
|
|||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
t = time(NULL);
|
||||||
|
}
|
||||||
|
else if (time(NULL) - t > MAXBROKENTIMEOUT) {
|
||||||
|
esyslog("ERROR: video data stream broken");
|
||||||
|
cThread::EmergencyExit(true);
|
||||||
|
t = time(NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
usleep(1); // this keeps the CPU load low
|
usleep(1); // this keeps the CPU load low
|
||||||
|
Loading…
Reference in New Issue
Block a user