H.264 VPID's

Message ID 478BB362.7020805@gmx.de
State New
Headers

Commit Message

Reinhard Nissl Jan. 14, 2008, 7:09 p.m. UTC
  Hi,

ShorTie schrieb:

> Been playing with this genpix, hd and xine. Pretty much got everything
> running except for 1 thing seems to be hiding from me.
> 
> For vdr to be able to tune to a hd channel I need to add 10000 to the
> vpid’s which I do in my nscan/convert/pad10 no biggie.
> 
> The problem is that when I tune away from a hd channel vdr rights back
> to the channels.conf with the normal vpid not the vpid+10000 like I had.
> 
> Thus I can’t tune back to that channel till i manually change the
> channels.conf back again.
> 
> I’m I missing a setting somewhere?

No -- looks like your service provider announces the stream as
MPEG2. Please ask your service provider to fix this issue.

Try the attached patch as workaround meanwhile. It doesn't change
vpid anymore to MPEG2 once you've changed it to H.264 manually.

Bye.
  

Comments

ShorTie Jan. 15, 2008, 5:57 p.m. UTC | #1
Many thankz once again Reinhard Nissl, yes it keeps vdr from removing the 1,
but it kills the video on h.264 channels .. :/~
I get a picture but no motion and normally a green line across the tv.

In looking thru messages I see see stuff like this

ERROR: H264::cContext::ActivateSPS(): id out of range
ERROR: H264::cContext::DefineSPS(): id out of range
ERROR: H264::cBitReader::ReadBits(): bitbuffer overflow
ERROR: H264::cContext::ActivateSPS(): requested SPS is undefined
ERROR: H264::cContext::ActivatePPS(): requested PPS is undefined
ERROR: H264::cBitReader::NextByte(): premature end of data

ERROR: cAudGenerator::Generate(): dropping frame without slices

Changing channels back to a sd 1 can be tricky but that could be cause it's
trying to recover from a freakout, lol.

ShorTie

-----Original Message-----
From: vdr-bounces@linuxtv.org [mailto:vdr-bounces@linuxtv.org] On Behalf Of
Reinhard Nissl
Sent: Monday, January 14, 2008 2:09 PM
To: VDR Mailing List
Subject: Re: [vdr] H.264 VPID's

Hi,

ShorTie schrieb:

> Been playing with this genpix, hd and xine. Pretty much got everything
> running except for 1 thing seems to be hiding from me.
> 
> For vdr to be able to tune to a hd channel I need to add 10000 to the
> vpid’s which I do in my nscan/convert/pad10 no biggie.
> 
> The problem is that when I tune away from a hd channel vdr rights back
> to the channels.conf with the normal vpid not the vpid+10000 like I had.
> 
> Thus I can’t tune back to that channel till i manually change the
> channels.conf back again.
> 
> I’m I missing a setting somewhere?

No -- looks like your service provider announces the stream as
MPEG2. Please ask your service provider to fix this issue.

Try the attached patch as workaround meanwhile. It doesn't change
vpid anymore to MPEG2 once you've changed it to H.264 manually.

Bye.
  
Reinhard Nissl Jan. 15, 2008, 7:41 p.m. UTC | #2
Hi,

ShorTie schrieb:

> Many thankz once again Reinhard Nissl, yes it keeps vdr from removing the 1,
> but it kills the video on h.264 channels .. :/~

I do not see, how this can happen due to the cheat.

> I get a picture but no motion and normally a green line across the tv.
> 
> In looking thru messages I see see stuff like this
> 
> ERROR: H264::cContext::ActivateSPS(): id out of range
> ERROR: H264::cContext::DefineSPS(): id out of range
> ERROR: H264::cBitReader::ReadBits(): bitbuffer overflow
> ERROR: H264::cContext::ActivateSPS(): requested SPS is undefined
> ERROR: H264::cContext::ActivatePPS(): requested PPS is undefined
> ERROR: H264::cBitReader::NextByte(): premature end of data
> 
> ERROR: cAudGenerator::Generate(): dropping frame without slices

In case it didn't work (and does still not work) without the
cheat (i. e. you get the same errors), try increasing the
nalUnitDataBuffer a bit in h264parser.c:

>   cParser::cParser(bool OmitPicTiming)
>     : nalUnitDataBuffer(1000)
>   {
>     // the above buffer size of 1000 bytes wont hold a complete NAL unit but
>     // should be sufficient for the relevant part used for parsing.
>     omitPicTiming = OmitPicTiming; // only necessary to determine frames per second
>     Reset();
>   }

Bye.
  

Patch

--- ../vdr-1.5.12-dvbs2-other/pat.c	2008-01-01 22:55:18.000000000 +0100
+++ pat.c	2008-01-14 20:07:30.000000000 +0100
@@ -343,7 +343,10 @@  void cPatFilter::Process(u_short Pid, u_
             switch (stream.getStreamType()) {
               case 1: // STREAMTYPE_11172_VIDEO
               case 2: // STREAMTYPE_13818_VIDEO
-                      Vpid = stream.getPid();
+                      if (VPID_IS_H264(Channel->Vpid()))
+                         Vpid = VPID_TO_H264(stream.getPid());
+                      else
+                         Vpid = stream.getPid();
                       break;
               case 3: // STREAMTYPE_11172_AUDIO
               case 4: // STREAMTYPE_13818_AUDIO