vlc | branch: master | Francois Cartegnie <[email protected]> | Thu Oct 6 14:38:05 2016 +0200| [fb57b0dbc349db23823961f746e6fc425d1490b2] | committer: Francois Cartegnie
packetizer: hxxx: allow early stop in SEI parsing > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=fb57b0dbc349db23823961f746e6fc425d1490b2 --- modules/packetizer/h264.c | 5 +++-- modules/packetizer/hxxx_sei.c | 9 +++++---- modules/packetizer/hxxx_sei.h | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/modules/packetizer/h264.c b/modules/packetizer/h264.c index f011a93..169888e 100644 --- a/modules/packetizer/h264.c +++ b/modules/packetizer/h264.c @@ -167,7 +167,7 @@ static void PutSPS( decoder_t *p_dec, block_t *p_frag ); static void PutPPS( decoder_t *p_dec, block_t *p_frag ); static bool ParseSlice( decoder_t *p_dec, bool *pb_new_picture, slice_t *p_slice, int i_nal_ref_idc, int i_nal_type, const block_t *p_frag ); -static void ParseSeiCallback( const hxxx_sei_data_t *, void * ); +static bool ParseSeiCallback( const hxxx_sei_data_t *, void * ); static const uint8_t p_h264_startcode[3] = { 0x00, 0x00, 0x01 }; @@ -950,7 +950,7 @@ static bool ParseSlice( decoder_t *p_dec, bool *pb_new_picture, slice_t *p_slice return true; } -static void ParseSeiCallback( const hxxx_sei_data_t *p_sei_data, void *cbdata ) +static bool ParseSeiCallback( const hxxx_sei_data_t *p_sei_data, void *cbdata ) { decoder_t *p_dec = (decoder_t *) cbdata; decoder_sys_t *p_sys = p_dec->p_sys; @@ -993,5 +993,6 @@ static void ParseSeiCallback( const hxxx_sei_data_t *p_sei_data, void *cbdata ) break; } + return true; } diff --git a/modules/packetizer/hxxx_sei.c b/modules/packetizer/hxxx_sei.c index c0238ce..85a59ed 100644 --- a/modules/packetizer/hxxx_sei.c +++ b/modules/packetizer/hxxx_sei.c @@ -40,6 +40,7 @@ void HxxxParseSEI(const uint8_t *p_buf, size_t i_buf, { bs_t s; unsigned i_bitflow = 0; + bool b_continue = true; if( i_buf <= i_header ) return; @@ -48,7 +49,7 @@ void HxxxParseSEI(const uint8_t *p_buf, size_t i_buf, s.p_fwpriv = &i_bitflow; s.pf_forward = hxxx_bsfw_ep3b_to_rbsp; /* Does the emulated 3bytes conversion to rbsp */ - while( bs_remain( &s ) >= 8 && bs_aligned( &s ) ) + while( bs_remain( &s ) >= 8 && bs_aligned( &s ) && b_continue ) { /* Read type */ unsigned i_type = 0; @@ -85,7 +86,7 @@ void HxxxParseSEI(const uint8_t *p_buf, size_t i_buf, case HXXX_SEI_PIC_TIMING: { sei_data.p_bs = &s; - pf_callback( &sei_data, cbdata ); + b_continue = pf_callback( &sei_data, cbdata ); } break; /* Look for user_data_registered_itu_t_t35 */ @@ -120,7 +121,7 @@ void HxxxParseSEI(const uint8_t *p_buf, size_t i_buf, { sei_data.itu_t35.i_cc = i_t35 - 3; sei_data.itu_t35.p_cc = &p_t35[3]; - pf_callback( &sei_data, cbdata ); + b_continue = pf_callback( &sei_data, cbdata ); } free( p_t35 ); @@ -133,7 +134,7 @@ void HxxxParseSEI(const uint8_t *p_buf, size_t i_buf, //bool b_exact_match = bs_read( &s, 1 ); //bool b_broken_link = bs_read( &s, 1 ); //int i_changing_slice_group = bs_read( &s, 2 ); - pf_callback( &sei_data, cbdata ); + b_continue = pf_callback( &sei_data, cbdata ); } break; default: diff --git a/modules/packetizer/hxxx_sei.h b/modules/packetizer/hxxx_sei.h index a51d6e2..6189c17 100644 --- a/modules/packetizer/hxxx_sei.h +++ b/modules/packetizer/hxxx_sei.h @@ -46,7 +46,7 @@ typedef struct }; } hxxx_sei_data_t; -typedef void (*pf_hxxx_sei_callback)(const hxxx_sei_data_t *, void *); +typedef bool (*pf_hxxx_sei_callback)(const hxxx_sei_data_t *, void *); void HxxxParseSEI(const uint8_t *, size_t, uint8_t, pf_hxxx_sei_callback, void *); void HxxxParse_AnnexB_SEI(const uint8_t *, size_t, uint8_t, pf_hxxx_sei_callback, void *); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
