vdr 1.7.10 no record channel

Message ID 4BE1D102.30704@libertysurf.fr
State New
Headers

Commit Message

Senufo May 5, 2010, 8:11 p.m. UTC
  Hi,

I found the problem. VDR does not detect the frame independent in this
stream because in the function :

cFrameDetector:: Analyze (const uchar * Data, int Length)

in the file remux.c.

((Data [i +2]>> 3) & 0x07) is equal to 0 instead of 1 for stream that work.

I applied this patch :


and record is working again.
I do not know what has changed in the stream.

I tested this patch since yesterday and so far I have not had any problems.

What do you think?

Senufo
  

Comments

Klaus Schmidinger May 14, 2010, 2:17 p.m. UTC | #1
On 05.05.2010 22:11, Senufo wrote:
> Hi,
> 
> I found the problem. VDR does not detect the frame independent in this
> stream because in the function :
> 
> cFrameDetector:: Analyze (const uchar * Data, int Length)
> 
> in the file remux.c.
> 
> ((Data [i +2]>> 3) & 0x07) is equal to 0 instead of 1 for stream that work.
> 
> I applied this patch :
> 
> --- remux.c    2010-05-04 14:55:50.000000000 +0200
> +++ remux.c.orig 2010-05-04 21:57:38.000000000 +0200
> @@ -960,6 +960,7 @@
>    return Processed; // flush everything before this new frame
>         newFrame = true;
>         independentFrame = ((Data[i + 2] >> 3) & 0x07) == 1; // I-Frame
> +       if (((Data[i + 2] >> 3) & 0x07) == 0) { independentFrame = 1;}
>                                 if (synced) {
>                                    if (framesPerPayloadUnit <= 1)
>                                       scanning = false;
> 
> and record is working again.
> I do not know what has changed in the stream.
> 
> I tested this patch since yesterday and so far I have not had any problems.
> 
> What do you think?

If this stream marks independent frames with '0' instead if '1',
I would say it is broken.

Klaus
  

Patch

--- remux.c    2010-05-04 14:55:50.000000000 +0200
+++ remux.c.orig 2010-05-04 21:57:38.000000000 +0200
@@ -960,6 +960,7 @@ 
    return Processed; // flush everything before this new frame
         newFrame = true;
         independentFrame = ((Data[i + 2] >> 3) & 0x07) == 1; // I-Frame
+       if (((Data[i + 2] >> 3) & 0x07) == 0) { independentFrame = 1;}
                                 if (synced) {
                                    if (framesPerPayloadUnit <= 1)
                                       scanning = false;