X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fcodec%2Fspudec%2Fparse.c;h=aeb7c91a4f8862539a45936f6ae356a9767b534c;hb=4e9597b800d1140dfab1cf33c3df8c608d58878f;hp=6caebf6f0da305a36e0b8965627b74cd88807e71;hpb=a63d4a7744503f81b96b796f1e1558e9b558fcfe;p=vlc diff --git a/modules/codec/spudec/parse.c b/modules/codec/spudec/parse.c index 6caebf6f0d..aeb7c91a4f 100644 --- a/modules/codec/spudec/parse.c +++ b/modules/codec/spudec/parse.c @@ -26,9 +26,13 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include -#include -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include #include "spudec.h" @@ -61,7 +65,7 @@ static inline unsigned int AddNibble( unsigned int i_code, * This function parses the SPU packet and, if valid, sends it to the * video output. *****************************************************************************/ -subpicture_t * E_(ParsePacket)( decoder_t *p_dec ) +subpicture_t * ParsePacket( decoder_t *p_dec ) { decoder_sys_t *p_sys = p_dec->p_sys; subpicture_data_t *p_spu_data; @@ -71,14 +75,16 @@ subpicture_t * E_(ParsePacket)( decoder_t *p_dec ) p_spu = p_dec->pf_spu_buffer_new( p_dec ); if( !p_spu ) return NULL; + p_spu->b_pausable = true; + /* Rationale for the "p_spudec->i_rle_size * 4": we are going to * expand the RLE stuff so that we won't need to read nibbles later * on. This will speed things up a lot. Plus, we'll only need to do * this stupid interlacing stuff once. */ p_spu_data = malloc( sizeof(subpicture_data_t) + 4 * p_sys->i_rle_size ); p_spu_data->p_data = (uint8_t *)p_spu_data + sizeof(subpicture_data_t); - p_spu_data->b_palette = VLC_FALSE; - p_spu_data->b_auto_crop = VLC_FALSE; + p_spu_data->b_palette = false; + p_spu_data->b_auto_crop = false; p_spu_data->i_y_top_offset = 0; p_spu_data->i_y_bottom_offset = 0; @@ -145,9 +151,12 @@ static int ParseControlSeq( decoder_t *p_dec, subpicture_t *p_spu, uint8_t i_command = SPU_CMD_END; mtime_t date = 0; + if( !p_spu || !p_spu_data ) + return VLC_EGENERIC; + /* Initialize the structure */ p_spu->i_start = p_spu->i_stop = 0; - p_spu->b_ephemer = VLC_FALSE; + p_spu->b_ephemer = false; for( i_index = 4 + p_sys->i_rle_size; i_index < p_sys->i_spu_size ; ) { @@ -187,7 +196,7 @@ static int ParseControlSeq( decoder_t *p_dec, subpicture_t *p_spu, { case SPU_CMD_FORCE_DISPLAY: /* 00 (force displaying) */ p_spu->i_start = p_spu_data->i_pts + date; - p_spu->b_ephemer = VLC_TRUE; + p_spu->b_ephemer = true; i_index += 1; break; @@ -203,7 +212,6 @@ static int ParseControlSeq( decoder_t *p_dec, subpicture_t *p_spu, break; case SPU_CMD_SET_PALETTE: - /* 03xxxx (palette) */ if( i_index + 3 > p_sys->i_spu_size ) { @@ -216,7 +224,7 @@ static int ParseControlSeq( decoder_t *p_dec, subpicture_t *p_spu, unsigned int idx[4]; int i; - p_spu_data->b_palette = VLC_TRUE; + p_spu_data->b_palette = true; idx[0] = (p_sys->buffer[i_index+1]>>4)&0x0f; idx[1] = (p_sys->buffer[i_index+1])&0x0f; @@ -271,7 +279,7 @@ static int ParseControlSeq( decoder_t *p_dec, subpicture_t *p_spu, /* Auto crop fullscreen subtitles */ if( p_spu->i_height > 250 ) - p_spu_data->b_auto_crop = VLC_TRUE; + p_spu_data->b_auto_crop = true; i_index += 7; break; @@ -319,7 +327,7 @@ static int ParseControlSeq( decoder_t *p_dec, subpicture_t *p_spu, } /* We need to check for quit commands here */ - if( p_dec->b_die ) + if( !vlc_object_alive (p_dec) ) { return VLC_EGENERIC; } @@ -348,13 +356,14 @@ static int ParseControlSeq( decoder_t *p_dec, subpicture_t *p_spu, if( !p_spu->i_start ) { msg_Err( p_dec, "no `start display' command" ); + return VLC_EGENERIC; } if( p_spu->i_stop <= p_spu->i_start && !p_spu->b_ephemer ) { /* This subtitle will live for 5 seconds or until the next subtitle */ p_spu->i_stop = p_spu->i_start + (mtime_t)500 * 11000; - p_spu->b_ephemer = VLC_TRUE; + p_spu->b_ephemer = true; } /* Get rid of padding bytes */ @@ -398,7 +407,7 @@ static int ParseRLE( decoder_t *p_dec, subpicture_t * p_spu, unsigned int *pi_offset; /* Cropping */ - vlc_bool_t b_empty_top = VLC_TRUE; + bool b_empty_top = true; unsigned int i_skipped_top = 0, i_skipped_bottom = 0; unsigned int i_transparent_code = 0; @@ -478,7 +487,7 @@ static int ParseRLE( decoder_t *p_dec, subpicture_t * p_spu, } else { - p_spu_data->b_auto_crop = VLC_FALSE; + p_spu_data->b_auto_crop = false; } } @@ -503,7 +512,7 @@ static int ParseRLE( decoder_t *p_dec, subpicture_t * p_spu, *p_dest++ = i_code; /* Valid code means no blank line */ - b_empty_top = VLC_FALSE; + b_empty_top = false; i_skipped_bottom = 0; } }