[vlc-commits] codec: dvbsub: remove usage of bs_show
Francois Cartegnie
git at videolan.org
Mon Aug 20 16:18:24 CEST 2018
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Mon Aug 20 11:08:48 2018 +0200| [83bb84d75658d7557ef1afe1c05fa328bdc33572] | committer: Francois Cartegnie
codec: dvbsub: remove usage of bs_show
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=83bb84d75658d7557ef1afe1c05fa328bdc33572
---
modules/codec/dvbsub.c | 85 +++++++++++++++++++++-----------------------------
1 file changed, 36 insertions(+), 49 deletions(-)
diff --git a/modules/codec/dvbsub.c b/modules/codec/dvbsub.c
index 8231796b70..593436cd25 100644
--- a/modules/codec/dvbsub.c
+++ b/modules/codec/dvbsub.c
@@ -305,11 +305,11 @@ typedef struct
* Local prototypes
*****************************************************************************/
static void decode_segment( decoder_t *, bs_t * );
-static void decode_page_composition( decoder_t *, bs_t * );
-static void decode_region_composition( decoder_t *, bs_t * );
-static void decode_object( decoder_t *, bs_t * );
-static void decode_display_definition( decoder_t *, bs_t * );
-static void decode_clut( decoder_t *, bs_t * );
+static void decode_page_composition( decoder_t *, bs_t *, uint16_t );
+static void decode_region_composition( decoder_t *, bs_t *, uint16_t );
+static void decode_object( decoder_t *, bs_t *, uint16_t );
+static void decode_display_definition( decoder_t *, bs_t *, uint16_t );
+static void decode_clut( decoder_t *, bs_t *, uint16_t );
static void free_all( decoder_t * );
static void default_clut_init( decoder_t * );
@@ -458,12 +458,15 @@ static int Decode( decoder_t *p_dec, block_t *p_block )
#endif
p_sys->b_page = false;
- while( bs_show( &p_sys->bs, 8 ) == 0x0f ) /* Sync byte */
+
+ uint8_t i_sync_byte = bs_read( &p_sys->bs, 8 );
+ while( i_sync_byte == 0x0f ) /* Sync byte */
{
decode_segment( p_dec, &p_sys->bs );
+ i_sync_byte = bs_read( &p_sys->bs, 8 );
}
- if( ( bs_read( &p_sys->bs, 8 ) & 0x3f ) != 0x3f ) /* End marker */
+ if( ( i_sync_byte & 0x3f ) != 0x3f ) /* End marker */
{
msg_Warn( p_dec, "end marker not found (corrupted subtitle ?)" );
block_Release( p_block );
@@ -556,7 +559,7 @@ static void decode_segment( decoder_t *p_dec, bs_t *s )
int i_size;
/* sync_byte (already checked) */
- bs_skip( s, 8 );
+ //bs_skip( s, 8 );
/* segment type */
i_type = bs_read( s, 8 );
@@ -565,7 +568,7 @@ static void decode_segment( decoder_t *p_dec, bs_t *s )
i_page_id = bs_read( s, 16 );
/* segment size */
- i_size = bs_show( s, 16 );
+ i_size = bs_read( s, 16 );
if( ( i_page_id != p_sys->i_id ) &&
( i_page_id != p_sys->i_ancillary_id ) )
@@ -574,7 +577,7 @@ static void decode_segment( decoder_t *p_dec, bs_t *s )
msg_Dbg( p_dec, "subtitle skipped (page id: %i, %i)",
i_page_id, p_sys->i_id );
#endif
- bs_skip( s, 8 * ( 2 + i_size ) );
+ bs_skip( s, 8 * i_size );
return;
}
@@ -585,7 +588,7 @@ static void decode_segment( decoder_t *p_dec, bs_t *s )
#ifdef DEBUG_DVBSUB
msg_Dbg( p_dec, "skipped invalid ancillary subtitle packet" );
#endif
- bs_skip( s, 8 * ( 2 + i_size ) );
+ bs_skip( s, 8 * i_size );
return;
}
@@ -602,67 +605,65 @@ static void decode_segment( decoder_t *p_dec, bs_t *s )
#ifdef DEBUG_DVBSUB
msg_Dbg( p_dec, "decode_page_composition" );
#endif
- decode_page_composition( p_dec, s );
+ decode_page_composition( p_dec, s, i_size );
break;
case DVBSUB_ST_REGION_COMPOSITION:
#ifdef DEBUG_DVBSUB
msg_Dbg( p_dec, "decode_region_composition" );
#endif
- decode_region_composition( p_dec, s );
+ decode_region_composition( p_dec, s, i_size );
break;
case DVBSUB_ST_CLUT_DEFINITION:
#ifdef DEBUG_DVBSUB
msg_Dbg( p_dec, "decode_clut" );
#endif
- decode_clut( p_dec, s );
+ decode_clut( p_dec, s, i_size );
break;
case DVBSUB_ST_OBJECT_DATA:
#ifdef DEBUG_DVBSUB
msg_Dbg( p_dec, "decode_object" );
#endif
- decode_object( p_dec, s );
+ decode_object( p_dec, s, i_size );
break;
case DVBSUB_ST_DISPLAY_DEFINITION:
#ifdef DEBUG_DVBSUB
msg_Dbg( p_dec, "decode_display_definition" );
#endif
- decode_display_definition( p_dec, s );
+ decode_display_definition( p_dec, s, i_size );
break;
case DVBSUB_ST_ENDOFDISPLAY:
#ifdef DEBUG_DVBSUB
msg_Dbg( p_dec, "end of display" );
#endif
- bs_skip( s, 8 * ( 2 + i_size ) );
+ bs_skip( s, 8 * i_size );
break;
case DVBSUB_ST_STUFFING:
#ifdef DEBUG_DVBSUB
msg_Dbg( p_dec, "skip stuffing" );
#endif
- bs_skip( s, 8 * ( 2 + i_size ) );
+ bs_skip( s, 8 * i_size );
break;
default:
msg_Warn( p_dec, "unsupported segment type: (%04x)", i_type );
- bs_skip( s, 8 * ( 2 + i_size ) );
+ bs_skip( s, 8 * i_size );
break;
}
}
-static void decode_clut( decoder_t *p_dec, bs_t *s )
+static void decode_clut( decoder_t *p_dec, bs_t *s, uint16_t i_segment_length )
{
decoder_sys_t *p_sys = p_dec->p_sys;
- uint16_t i_segment_length;
uint16_t i_processed_length;
dvbsub_clut_t *p_clut, *p_next;
int i_id, i_version;
- i_segment_length = bs_read( s, 16 );
i_id = bs_read( s, 8 );
i_version = bs_read( s, 4 );
@@ -763,13 +764,12 @@ static void decode_clut( decoder_t *p_dec, bs_t *s )
}
}
-static void decode_page_composition( decoder_t *p_dec, bs_t *s )
+static void decode_page_composition( decoder_t *p_dec, bs_t *s, uint16_t i_segment_length )
{
decoder_sys_t *p_sys = p_dec->p_sys;
- int i_version, i_state, i_segment_length, i_timeout, i;
+ int i_version, i_state, i_timeout, i;
/* A page is composed by 0 or more region */
- i_segment_length = bs_read( s, 16 );
i_timeout = bs_read( s, 8 );
i_version = bs_read( s, 4 );
i_state = bs_read( s, 2 );
@@ -855,16 +855,15 @@ static void decode_page_composition( decoder_t *p_dec, bs_t *s )
}
}
-static void decode_region_composition( decoder_t *p_dec, bs_t *s )
+static void decode_region_composition( decoder_t *p_dec, bs_t *s, uint16_t i_segment_length )
{
decoder_sys_t *p_sys = p_dec->p_sys;
dvbsub_region_t *p_region, **pp_region = &p_sys->p_regions;
- int i_segment_length, i_processed_length, i_id, i_version;
+ int i_processed_length, i_id, i_version;
int i_width, i_height, i_level_comp, i_depth, i_clut;
int i_8_bg, i_4_bg, i_2_bg;
bool b_fill;
- i_segment_length = bs_read( s, 16 );
i_id = bs_read( s, 8 );
i_version = bs_read( s, 4 );
@@ -995,14 +994,12 @@ static void decode_region_composition( decoder_t *p_dec, bs_t *s )
}
/* ETSI 300 743 [7.2.1] */
-static void decode_display_definition( decoder_t *p_dec, bs_t *s )
+static void decode_display_definition( decoder_t *p_dec, bs_t *s, uint16_t i_segment_length )
{
decoder_sys_t *p_sys = p_dec->p_sys;
- uint16_t i_segment_length;
uint16_t i_processed_length = 40;
int i_version;
- i_segment_length = bs_read( s, 16 );
i_version = bs_read( s, 4 );
/* Check version number */
@@ -1067,16 +1064,15 @@ static void dvbsub_pdata2bpp( bs_t *, uint8_t *, int, int * );
static void dvbsub_pdata4bpp( bs_t *, uint8_t *, int, int * );
static void dvbsub_pdata8bpp( bs_t *, uint8_t *, int, int * );
-static void decode_object( decoder_t *p_dec, bs_t *s )
+static void decode_object( decoder_t *p_dec, bs_t *s, uint16_t i_segment_length )
{
decoder_sys_t *p_sys = p_dec->p_sys;
dvbsub_region_t *p_region;
- int i_segment_length, i_coding_method, i_id, i;
+ int i_coding_method, i_id, i;
/* ETSI 300-743 paragraph 7.2.4
* sync_byte, segment_type and page_id have already been processed.
*/
- i_segment_length = bs_read( s, 16 );
i_id = bs_read( s, 16 );
bs_skip( s, 4 ); /* version */
i_coding_method = bs_read( s, 2 );
@@ -1348,15 +1344,12 @@ static void dvbsub_pdata4bpp( bs_t *s, uint8_t *p, int i_width, int *pi_off )
{
if( bs_read( s, 1 ) == 0x00 ) // Switch1
{
- if( bs_show( s, 3 ) != 0x00 )
- {
- i_count = 2 + bs_read( s, 3 );
- }
- else
+ i_count = bs_read( s, 3 );
+ if( i_count != 0x00 )
{
- bs_skip( s, 3 );
- b_stop = true;
+ i_count += 2;
}
+ else b_stop = true;
}
else
{
@@ -1420,15 +1413,9 @@ static void dvbsub_pdata8bpp( bs_t *s, uint8_t *p, int i_width, int *pi_off )
{
if( bs_read( s, 1 ) == 0x00 ) // Switch1
{
- if( bs_show( s, 7 ) != 0x00 )
- {
- i_count = bs_read( s, 7 );
- }
- else
- {
- bs_skip( s, 7 );
+ i_count = bs_read( s, 7 );
+ if( i_count == 0x00 )
b_stop = true;
- }
}
else
{
More information about the vlc-commits
mailing list