[vlc-devel] [PATCH] fix teletext framing code in DVB PES packets ignored
Miha Sokolov
newsletter at fab-online.com
Fri Mar 20 11:38:51 CET 2015
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
More information about the vlc-devel
mailing list