[vlc-devel] [PATCH] fix teletext framing code in DVB PES packets ignored

Jean-Baptiste Kempf jb at videolan.org
Fri Mar 20 16:10:48 CET 2015


OK.

On 20 Mar, Miha Sokolov wrote :
> Check the teletext framing code in PES buffer for each of the received lines
> and only copy those with correct framing code (p_block->p_buffer[3]) to the
> p_sliced buffer that is later forwarded to ZVBI vbi_decode. Invalid lines
> will not reach vbi_decode anymore.
> 
> When also packets with erroneous framing code are sent to vbi_decode (often
> 0x00 with some noise), in most cases those are decoded as packet 1/2,
> causing the second text line on the teletext page to be overwritten with
> spaces. So we need to avoid sending such packets with invalid framing code
> to vbi_decode.
> 
> close #14191
> ---
> modules/codec/zvbi.c | 23 +++++++++++++----------
> 1 file changed, 13 insertions(+), 10 deletions(-)
> 
> diff --git a/modules/codec/zvbi.c b/modules/codec/zvbi.c
> --- a/modules/codec/zvbi.c
> +++ b/modules/codec/zvbi.c
> @@ -331,17 +331,20 @@
> 
>             if( ( i_id == 0x02 || i_id == 0x03 ) && i_size >= 44 && i_lines < MAX_SLICES )
>             {
> -                unsigned line_offset  = p_block->p_buffer[2] & 0x1f;
> -                unsigned field_parity = p_block->p_buffer[2] & 0x20;
> +                if(p_block->p_buffer[3] == 0xE4 )    /* framing_code */
> +                {
> +                    unsigned line_offset  = p_block->p_buffer[2] & 0x1f;
> +                    unsigned field_parity = p_block->p_buffer[2] & 0x20;
> 
> -                p_sliced[i_lines].id = VBI_SLICED_TELETEXT_B;
> -                if( line_offset > 0 )
> -                    p_sliced[i_lines].line = line_offset + (field_parity ? 0 : 313);
> -                else
> -                    p_sliced[i_lines].line = 0;
> -                for( int i = 0; i < 42; i++ )
> -                    p_sliced[i_lines].data[i] = vbi_rev8( p_block->p_buffer[4 + i] );
> -                i_lines++;
> +                    p_sliced[i_lines].id = VBI_SLICED_TELETEXT_B;
> +                    if( line_offset > 0 )
> +                        p_sliced[i_lines].line = line_offset + (field_parity ? 0 : 313);
> +                    else
> +                        p_sliced[i_lines].line = 0;
> +                    for( int i = 0; i < 42; i++ )
> +                        p_sliced[i_lines].data[i] = vbi_rev8( p_block->p_buffer[4 + i] );
> +                    i_lines++;
> +                }
>             }
> 
>             p_block->i_buffer -= 2 + i_size;
> 
> -- 
> 2.1.3
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel

-- 
With my kindest regards,

-- 
Jean-Baptiste Kempf
http://www.jbkempf.com/ - +33 672 704 734
Sent from my Electronic Device



More information about the vlc-devel mailing list