[ANNOUNCE] VDR developer version 1.7.3

Message ID 49690C0A.9050901@web.de
State New
Headers

Commit Message

Johann Friedrichs Jan. 10, 2009, 8:58 p.m. UTC
  Hi,

there seems to be problem in pausing replays of new recordings (output
to FF). 4 out of 5 times vdr freezes when trying to continue the replay.
Poll in PlayVideo runs into a timeout and a new write gives EAGAIN. This
does not happen with old recordings.
Most likely splitting long PES-packets not on frame-boundaries prevents
the FF-driver from finding a good start-point after DvbDevice->Freeze().
A rough workaround is attached, but maybe the idea to dump the old remux
code was not the best one, as long as the FF and some plugins need
PES-output.

Replaying TS with VLC gives lots of TS discontinuities for PID 0 and
132. Attached is a fix.

Regards
Johann
  

Comments

Udo Richter Jan. 11, 2009, 7:55 p.m. UTC | #1
On 10.01.2009 21:58, Johann Friedrichs wrote:
> there seems to be problem in pausing replays of new recordings (output
> to FF). 4 out of 5 times vdr freezes when trying to continue the replay.
> Poll in PlayVideo runs into a timeout and a new write gives EAGAIN. This
> does not happen with old recordings.

I don't like the whole rewrite of PlayVideo/PlayAudio at all. As already 
written in the VDR-1.7.2 topic of VDR portal [1], even playback of PES 
recordings is unstable for me when using the looped PlayVideo functions, 
no matter what fixes were applied. My vote would be to return to the 
simple non-looped version of VDR 1.7.1 and before, where partly written 
buffers timeout after 1s and non-written buffers are rejected instantly.

However, this requires more complex PlayTs**** functions, as they would 
have to check whether PlayVideo/PlayAudio have read some of the buffers, 
and re-offer the rest on next call, while not accepting any more data 
until the whole buffer got accepted by PlayVideo/PlayAudio. (PutTs 
resets the buffer.)


[1] http://www.vdr-portal.de/board/thread.php?threadid=82622


Cheers,

Udo
  

Patch

--- vdr-1.7.3/remux.c.dist	2009-01-07 20:40:53.000000000 +0100
+++ vdr-1.7.3/remux.c	2009-01-10 14:48:31.000000000 +0100
@@ -320,7 +320,7 @@  uchar *cPatPmtGenerator::GetPat(void)
 uchar *cPatPmtGenerator::GetPmt(int &Index)
 {
   if (Index < numPmtPackets) {
-     IncCounter(patCounter, pmt[Index]);
+     IncCounter(pmtCounter, pmt[Index]);
      return pmt[Index++];
      }
   return NULL;