[vdr] VDR 1.5.17 - pre 1.3.19 compatibility mode problems

Stefan Lucke stefan at lucke.in-berlin.de
Wed Apr 9 08:54:56 CEST 2008


On Wednesday 05 March 2008, Klaus Schmidinger wrote:
> On 03/04/08 10:58, Tero Siironen wrote:
> > Hi,
> > 
> > I upgraded from VDR 1.4.7 to 1.5.17 and noticed that some of my old  
> > recordings won't play decently with this new version. Here's a syslog  
> > entry and example clip can be found from http://kotisivu.suomi.net/izero/vdr-darwin/ddmode_example.zip 
> >   (9MB)
> > 
> > Those problematic recordings were done with some 1.3.x series VDR with  
> > ttxtsubs plugin in fall 2004. Plays fine with VDR 1.4.7, but playback  
> > stutters when playing with VDR 1.5.17. My system has DVB-C FF 2.1 and  
> > DVB-C budget cards. Running on Fedora 5.
> 
> My guess would be that the offending data comes from the ttxtsubs plugin.
> Maybe you need to patch VDR to become aware of this.

My guess is that this is introduced by vdr-1.5.11

Original vdr-1.6.0:
Apr  9 08:29:38 jarada vdr: [7997] replay /net_data/video/Extra/Enterprise_1/%1-01_Aufbruch_ins_Unbekannte_-_Teil_1/2004-01-31.19:05.99.99.rec
Apr  9 08:29:38 jarada vdr: [7997] playing '/net_data/video/Extra/Enterprise_1/%1-01_Aufbruch_ins_Unbekannte_-_Teil_1/2004-01-31.19:05.99.99.rec/001.vdr'
Apr  9 08:29:38 jarada vdr: [7997] loading /net_data/video/Extra/Enterprise_1/%1-01_Aufbruch_ins_Unbekannte_-_Teil_1/2004-01-31.19:05.99.99.rec//marks.vdr
Apr  9 08:29:38 jarada vdr: [8019] dvbplayer thread started (pid=7997, tid=8019)
Apr  9 08:29:38 jarada vdr: [8020] non blocking file reader thread started (pid=7997, tid=8020)
Apr  9 08:29:38 jarada vdr: [8019] unknown PS1 packet, substream id = EB (counter is at 0)
Apr  9 08:29:38 jarada vdr: [8019] unknown PS1 packet, substream id = 0B (counter is at 1)
Apr  9 08:29:38 jarada vdr: [8019] unknown PS1 packet, substream id = D1 (counter is at 2)
Apr  9 08:29:38 jarada vdr: [8019] unknown PS1 packet, substream id = 5D (counter is at 3)
Apr  9 08:29:38 jarada vdr: [8019] unknown PS1 packet, substream id = F0 (counter is at 4)
Apr  9 08:29:38 jarada vdr: [8019] unknown PS1 packet, substream id = 7E (counter is at 5)

In this case there is no sound at all :-(.
Recording was done with vdr-1.2.1.

Plain vdr 1.6.0 with pre_1_3_19 change (from vdr-1.5.11) reverted:
Apr  9 08:25:50 jarada vdr: [7837] replay /net_data/video/Extra/Enterprise_1/%1-01_Aufbruch_ins_Unbekannte_-_Teil_1/2004-01-31.19:05.99.99.rec
Apr  9 08:25:50 jarada vdr: [7837] playing '/net_data/video/Extra/Enterprise_1/%1-01_Aufbruch_ins_Unbekannte_-_Teil_1/2004-01-31.19:05.99.99.rec/001.vdr'
Apr  9 08:25:50 jarada vdr: [7837] loading /net_data/video/Extra/Enterprise_1/%1-01_Aufbruch_ins_Unbekannte_-_Teil_1/2004-01-31.19:05.99.99.rec//marks.vdr
Apr  9 08:25:50 jarada vdr: [7859] dvbplayer thread started (pid=7837, tid=7859)
Apr  9 08:25:50 jarada vdr: [7859] resuming replay at index 69 (0:00:02.20)
Apr  9 08:25:50 jarada vdr: [7860] non blocking file reader thread started (pid=7837, tid=7860)
Apr  9 08:25:50 jarada vdr: [7859] SetBrokenLink: no GOP header found in video packet
Apr  9 08:25:50 jarada vdr: [7859] switching to pre 1.3.19 Dolby Digital compatibility mode

Attached pach fixes this problem for me.

Just found Klaus message from 2007-10-21:
    "[vdr] VDR 1.5.10, Subtitles gets out of sync":
    http://www.linuxtv.org/pipermail/vdr/2007-October/014316.html

-- 
Stefan Lucke
-------------- next part --------------
--- device.c.orig	2007-11-03 14:30:09.000000000 +0100
+++ device.c	2008-04-08 15:06:51.000000000 +0200
@@ -209,9 +209,6 @@
 // The default priority for non-primary devices:
 #define DEFAULTPRIORITY  -1
 
-// The minimum number of unknown PS1 packets to consider this a "pre 1.3.19 private stream":
-#define MIN_PRE_1_3_19_PRIVATESTREAM 10
-
 int cDevice::numDevices = 0;
 int cDevice::useDevice = 0;
 int cDevice::nextCardIndex = 0;
@@ -934,7 +931,7 @@
         }
      else
         memset(availableTracks, 0, sizeof(availableTracks));
-     pre_1_3_19_PrivateStream = 0;
+     pre_1_3_19_PrivateStream = false;
      SetAudioChannel(0); // fall back to stereo
      currentAudioTrackMissingCount = 0;
      currentAudioTrack = ttNone;
@@ -1239,7 +1236,7 @@
                int PayloadOffset = Data[8] + 9;
 
                // Compatibility mode for old subtitles plugin:
-               if ((Data[7] & 0x01) && (Data[PayloadOffset - 3] & 0x81) == 0x01 && Data[PayloadOffset - 2] == 0x81)
+               if ((Data[PayloadOffset - 3] & 0x81) == 1 && Data[PayloadOffset - 2] == 0x81)
                   PayloadOffset--;
 
                uchar SubStreamId = Data[PayloadOffset];
@@ -1248,13 +1245,11 @@
 
                // Compatibility mode for old VDR recordings, where 0xBD was only AC3:
 pre_1_3_19_PrivateStreamDeteced:
-               if (pre_1_3_19_PrivateStream > MIN_PRE_1_3_19_PRIVATESTREAM) {
+               if (pre_1_3_19_PrivateStream) {
                   SubStreamId = c;
                   SubStreamType = 0x80;
                   SubStreamIndex = 0;
                   }
-               else if (pre_1_3_19_PrivateStream)
-                  pre_1_3_19_PrivateStream--; // every known PS1 packet counts down towards 0 to recover from glitches...
                switch (SubStreamType) {
                  case 0x20: // SPU
                  case 0x30: // SPU
@@ -1282,14 +1277,11 @@
                       break;
                  default:
                       // Compatibility mode for old VDR recordings, where 0xBD was only AC3:
-                      if (pre_1_3_19_PrivateStream <= MIN_PRE_1_3_19_PRIVATESTREAM) {
-                         dsyslog("unknown PS1 packet, substream id = %02X (counter is at %d)", SubStreamId, pre_1_3_19_PrivateStream);
-                         pre_1_3_19_PrivateStream += 2; // ...and every unknown PS1 packet counts up (the very first one counts twice, but that's ok)
-                         if (pre_1_3_19_PrivateStream > MIN_PRE_1_3_19_PRIVATESTREAM) {
-                            dsyslog("switching to pre 1.3.19 Dolby Digital compatibility mode - substream id = %02X", SubStreamId);
-                            ClrAvailableTracks();
-                            goto pre_1_3_19_PrivateStreamDeteced;
-                            }
+                      if (!pre_1_3_19_PrivateStream) {
+                         dsyslog("switching to pre 1.3.19 Dolby Digital compatibility mode");
+                         ClrAvailableTracks();
+                         pre_1_3_19_PrivateStream = true;
+                         goto pre_1_3_19_PrivateStreamDeteced;
                          }
                  }
                }


More information about the vdr mailing list