vdr 1.7.12 - issue with some mpeg2 channels (cVideoRepacker: switching to MPEG1/2 mode)

Message ID 4B70896E.5060205@gmx.de
State New
Headers

Commit Message

Reinhard Nissl Feb. 8, 2010, 10 p.m. UTC
  Hi,

Am 08.02.2010 22:29, schrieb Klaus Schmidinger:

>> I can only reproduce this issue on channels with separate PCR
>> pid. I'll have to investigate further to find a solution.
> 
> As of version 1.7.12 VDR records the PCR pid if it is different
> than the video PID. For lack of better knowledge I made cDevice::PlayTs()
> send the PCR packets to PlayTsVideo(). The FF cards don't have a problem
> with that, but maybe xine or the cVideoRepacker does.
> Maybe VDR shouldn't even "replay" the PCR data - please advise.

As it is possible to access cPatPmtParser since a few releases,
I've changed vdr-xine to pull VPID from there instead of picking
it from packets passed to PlayTsVideo.

Bye.
  

Comments

Goga777 Feb. 9, 2010, 3:52 p.m. UTC | #1
thank you very much for your patch. Now everything is ok.

> >> I can only reproduce this issue on channels with separate PCR
> >> pid. I'll have to investigate further to find a solution.
> > 
> > As of version 1.7.12 VDR records the PCR pid if it is different
> > than the video PID. For lack of better knowledge I made cDevice::PlayTs()
> > send the PCR packets to PlayTsVideo(). The FF cards don't have a problem
> > with that, but maybe xine or the cVideoRepacker does.
> > Maybe VDR shouldn't even "replay" the PCR data - please advise.
> 
> As it is possible to access cPatPmtParser since a few releases,
> I've changed vdr-xine to pull VPID from there instead of picking
> it from packets passed to PlayTsVideo.
  

Patch

--- ../xine-0.9.3/xineDevice.c	2009-06-17 20:06:35.000000000 +0200
+++ xineDevice.c	2010-02-08 22:54:00.000000000 +0100
@@ -1539,7 +1546,13 @@  fclose(ff);
   {
 #if APIVERSNUM >= 10701
     if (Length >= TS_SIZE)
-      m_tsVideoPid = TsPid(Data);   
+    {
+#if APIVERSNUM >= 10712
+      m_tsVideoPid = PatPmtParser()->Vpid();
+#else
+      m_tsVideoPid = TsPid(Data);
+#endif
+    }
 #endif
     return Length;
   }
@@ -4119,6 +4132,8 @@  store_frame(jumboPESdata, todo, __LINE__
   
   void cXineDevice::MakePrimaryDevice(bool On)
   {
+    cDevice::MakePrimaryDevice(On);
+
     xfprintf(stderr, "-------------------------\n");
     xfprintf(stderr, "MakePrimaryDevice: %d\n", On);
     xfprintf(stderr, "=========================\n");