Changed cRecorder::Action() to use cTimeMs instead of time()

This commit is contained in:
Klaus Schmidinger 2013-10-12 12:08:37 +02:00
parent adf0dac2c3
commit 446c3b4cfd
3 changed files with 11 additions and 6 deletions

View File

@ -3020,6 +3020,8 @@ Torsten Lang <info@torstenlang.de>
for reporting a problem with setting the system time from the TDT in case devices
are tuned to the same transponder on different sources, and these broadcast different
time data
for reporting a problem with unjustified "video data stream broken" errors in case
the system time is changed while a recording is active
Christian Ruppert <idl0r@gentoo.org>
for some improvements to the Makefiles

View File

@ -7990,3 +7990,6 @@ Video Disk Recorder Revision History
system time from the TDT, which avoids problems in case devices are tuned to the
same transponder on different sources, and these broadcast different time data
(reported by Torsten Lang).
- Changed cRecorder::Action() to use cTimeMs instead of time() to avoid problems with
unjustified "video data stream broken" errors in case the system time is changed
while a recording is active (reported by Torsten Lang).

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: recorder.c 2.17 2012/09/22 11:53:57 kls Exp $
* $Id: recorder.c 3.1 2013/10/12 11:49:42 kls Exp $
*/
#include "recorder.h"
@ -14,7 +14,7 @@
// The maximum time we wait before assuming that a recorded video data stream
// is broken:
#define MAXBROKENTIMEOUT 30 // seconds
#define MAXBROKENTIMEOUT 30000 // milliseconds
#define MINFREEDISKSPACE (512) // MB
#define DISKCHECKINTERVAL 100 // seconds
@ -117,7 +117,7 @@ void cRecorder::Receive(uchar *Data, int Length)
void cRecorder::Action(void)
{
time_t t = time(NULL);
cTimeMs t(MAXBROKENTIMEOUT);
bool InfoWritten = false;
bool FirstIframeSeen = false;
while (Running()) {
@ -160,16 +160,16 @@ void cRecorder::Action(void)
break;
}
fileSize += Count;
t = time(NULL);
t.Set(MAXBROKENTIMEOUT);
}
}
ringBuffer->Del(Count);
}
}
if (time(NULL) - t > MAXBROKENTIMEOUT) {
if (t.TimedOut()) {
esyslog("ERROR: video data stream broken");
ShutdownHandler.RequestEmergencyExit();
t = time(NULL);
t.Set(MAXBROKENTIMEOUT);
}
}
}