- i_lines = vbi_dvb_demux_cor( p_sys->p_dvb_demux, p_sliced,
- MAX_SLICES, &i_pts, &p_pos, &i_left );
+ p_block->i_buffer--;
+ p_block->p_buffer++;
+ while( p_block->i_buffer >= 2 )
+ {
+ int i_id = p_block->p_buffer[0];
+ unsigned i_size = p_block->p_buffer[1];
+
+ if( 2 + i_size > p_block->i_buffer )
+ break;
+
+ 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;
+
+ 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;
+ p_block->p_buffer += 2 + i_size;
+ }