vlc | branch: master | Francois Cartegnie <[email protected]> | Tue May 23 18:09:40 2017 +0200| [8728715d351858d38578dacc9b2b68c21c51c2cf] | committer: Francois Cartegnie
decoder: pass cc sub decoders reorder depth through QueueCC no comment > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=8728715d351858d38578dacc9b2b68c21c51c2cf --- include/vlc_codec.h | 10 ++++++---- modules/codec/avcodec/video.c | 3 +-- modules/codec/libmpeg2.c | 2 +- modules/packetizer/h264.c | 5 +++-- modules/packetizer/hevc.c | 5 +++-- modules/packetizer/mpegvideo.c | 5 +++-- modules/packetizer/vc1.c | 5 +++-- src/input/decoder.c | 13 +++++++------ 8 files changed, 27 insertions(+), 21 deletions(-) diff --git a/include/vlc_codec.h b/include/vlc_codec.h index f152fa14cf..5c2baae517 100644 --- a/include/vlc_codec.h +++ b/include/vlc_codec.h @@ -130,7 +130,7 @@ struct decoder_t * pb_present will be used to known which cc channel are present (but * globaly, not necessary for the current packet. Video decoders should use * the decoder_QueueCc() function to pass closed captions. */ - block_t * ( * pf_get_cc ) ( decoder_t *, bool pb_present[4] ); + block_t * ( * pf_get_cc ) ( decoder_t *, bool pb_present[4], int * ); /* Meta data at codec level * The decoder owner set it back to NULL once it has retreived what it needs. @@ -178,7 +178,7 @@ struct decoder_t /* XXX use decoder_QueueAudio */ int (*pf_queue_audio)( decoder_t *, block_t * ); /* XXX use decoder_QueueCC */ - int (*pf_queue_cc)( decoder_t *, block_t *, bool p_cc_present[4] ); + int (*pf_queue_cc)( decoder_t *, block_t *, bool p_cc_present[4], int ); /* XXX use decoder_QueueSub */ int (*pf_queue_sub)( decoder_t *, subpicture_t *); void *p_queue_ctx; @@ -311,17 +311,19 @@ static inline int decoder_QueueVideo( decoder_t *dec, picture_t *p_pic ) * \param p_cc the closed-caption to queue * \param p_cc_present array-of-bool where each entry indicates whether the * given channel is present or not + * \param i_depth the closed-caption to queue reorder depth, or simply 0 + * if using the old mpgv block flag tagging * \return 0 if queued, -1 on error */ static inline int decoder_QueueCc( decoder_t *dec, block_t *p_cc, - bool p_cc_present[4] ) + bool p_cc_present[4], int i_depth ) { if( dec->pf_queue_cc == NULL ) { block_Release( p_cc ); return -1; } - return dec->pf_queue_cc( dec, p_cc, p_cc_present ); + return dec->pf_queue_cc( dec, p_cc, p_cc_present, i_depth ); } /** diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c index 51ca423b9e..52736c119b 100644 --- a/modules/codec/avcodec/video.c +++ b/modules/codec/avcodec/video.c @@ -1154,8 +1154,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block, bool *error p_cc->i_dts = p_cc->i_pts = i_pts; else p_cc->i_pts = p_cc->i_dts; - p_dec->fmt_out.subs.cc.i_reorder_depth = 4; - decoder_QueueCc( p_dec, p_cc, p_sys->cc.pb_present ); + decoder_QueueCc( p_dec, p_cc, p_sys->cc.pb_present, 4 ); } cc_Flush( &p_sys->cc ); } diff --git a/modules/codec/libmpeg2.c b/modules/codec/libmpeg2.c index 8c6da24f41..52972288c6 100644 --- a/modules/codec/libmpeg2.c +++ b/modules/codec/libmpeg2.c @@ -719,7 +719,7 @@ static void SendCc( decoder_t *p_dec ) p_cc->i_dts = p_cc->i_pts = p_sys->cc.b_reorder ? p_sys->i_cc_pts : p_sys->i_cc_dts; p_cc->i_flags = ( p_sys->cc.b_reorder ? p_sys->i_cc_flags : BLOCK_FLAG_TYPE_P ) & ( BLOCK_FLAG_TYPE_I|BLOCK_FLAG_TYPE_P|BLOCK_FLAG_TYPE_B); - decoder_QueueCc( p_dec, p_cc, p_sys->cc.pb_present ); + decoder_QueueCc( p_dec, p_cc, p_sys->cc.pb_present, 0 ); } cc_Flush( &p_sys->cc ); return; diff --git a/modules/packetizer/h264.c b/modules/packetizer/h264.c index 7da8dc90b8..989eac8f50 100644 --- a/modules/packetizer/h264.c +++ b/modules/packetizer/h264.c @@ -135,7 +135,7 @@ struct decoder_sys_t static block_t *Packetize( decoder_t *, block_t ** ); static block_t *PacketizeAVC1( decoder_t *, block_t ** ); -static block_t *GetCc( decoder_t *p_dec, bool pb_present[4] ); +static block_t *GetCc( decoder_t *p_dec, bool pb_present[4], int * ); static void PacketizeFlush( decoder_t * ); static void PacketizeReset( void *p_private, bool b_broken ); @@ -490,8 +490,9 @@ static block_t *PacketizeAVC1( decoder_t *p_dec, block_t **pp_block ) /***************************************************************************** * GetCc: *****************************************************************************/ -static block_t *GetCc( decoder_t *p_dec, bool pb_present[4] ) +static block_t *GetCc( decoder_t *p_dec, bool pb_present[4], int *pi_reorder_depth ) { + *pi_reorder_depth = 0; return cc_storage_get_current( p_dec->p_sys->p_ccs, pb_present ); } diff --git a/modules/packetizer/hevc.c b/modules/packetizer/hevc.c index b514bb1841..7260fc59db 100644 --- a/modules/packetizer/hevc.c +++ b/modules/packetizer/hevc.c @@ -69,7 +69,7 @@ static block_t *PacketizeParse(void *p_private, bool *pb_ts_used, block_t *); static block_t *ParseNALBlock(decoder_t *, bool *pb_ts_used, block_t *); static int PacketizeValidate(void *p_private, block_t *); static bool ParseSEICallback( const hxxx_sei_data_t *, void * ); -static block_t *GetCc( decoder_t *, bool pb_present[4] ); +static block_t *GetCc( decoder_t *, bool pb_present[4], int * ); struct decoder_sys_t { @@ -300,8 +300,9 @@ static void PacketizeFlush( decoder_t *p_dec ) /***************************************************************************** * GetCc: *****************************************************************************/ -static block_t *GetCc( decoder_t *p_dec, bool pb_present[4] ) +static block_t *GetCc( decoder_t *p_dec, bool pb_present[4], int *pi_reorder_depth ) { + *pi_reorder_depth = 0; return cc_storage_get_current( p_dec->p_sys->p_ccs, pb_present ); } diff --git a/modules/packetizer/mpegvideo.c b/modules/packetizer/mpegvideo.c index 5f84d73017..b716115320 100644 --- a/modules/packetizer/mpegvideo.c +++ b/modules/packetizer/mpegvideo.c @@ -145,7 +145,7 @@ struct decoder_sys_t static block_t *Packetize( decoder_t *, block_t ** ); static void PacketizeFlush( decoder_t * ); -static block_t *GetCc( decoder_t *p_dec, bool pb_present[4] ); +static block_t *GetCc( decoder_t *p_dec, bool pb_present[4], int * ); static void PacketizeReset( void *p_private, bool b_broken ); static block_t *PacketizeParse( void *p_private, bool *pb_ts_used, block_t * ); @@ -281,11 +281,12 @@ static void PacketizeFlush( decoder_t *p_dec ) /***************************************************************************** * GetCc: *****************************************************************************/ -static block_t *GetCc( decoder_t *p_dec, bool pb_present[4] ) +static block_t *GetCc( decoder_t *p_dec, bool pb_present[4], int *pi_reorder_depth ) { decoder_sys_t *p_sys = p_dec->p_sys; block_t *p_cc; int i; + *pi_reorder_depth = 0; for( i = 0; i < 4; i++ ) pb_present[i] = p_sys->cc.pb_present[i]; diff --git a/modules/packetizer/vc1.c b/modules/packetizer/vc1.c index de817c644e..56bb19d094 100644 --- a/modules/packetizer/vc1.c +++ b/modules/packetizer/vc1.c @@ -129,7 +129,7 @@ static block_t *PacketizeParse( void *p_private, bool *pb_ts_used, block_t * ); static int PacketizeValidate( void *p_private, block_t * ); static block_t *ParseIDU( decoder_t *p_dec, bool *pb_ts_used, block_t *p_frag ); -static block_t *GetCc( decoder_t *p_dec, bool pb_present[4] ); +static block_t *GetCc( decoder_t *p_dec, bool pb_present[4], int * ); static const uint8_t p_vc1_startcode[3] = { 0x00, 0x00, 0x01 }; /***************************************************************************** @@ -762,13 +762,14 @@ static block_t *ParseIDU( decoder_t *p_dec, bool *pb_ts_used, block_t *p_frag ) /***************************************************************************** * GetCc: *****************************************************************************/ -static block_t *GetCc( decoder_t *p_dec, bool pb_present[4] ) +static block_t *GetCc( decoder_t *p_dec, bool pb_present[4], int *pi_reorder_depth ) { decoder_sys_t *p_sys = p_dec->p_sys; block_t *p_cc; for( int i = 0; i < 4; i++ ) pb_present[i] = p_sys->cc.pb_present[i]; + *pi_reorder_depth = 0; if( p_sys->cc.i_data <= 0 ) return NULL; diff --git a/src/input/decoder.c b/src/input/decoder.c index 400464d085..187285790c 100644 --- a/src/input/decoder.c +++ b/src/input/decoder.c @@ -874,7 +874,7 @@ static void DecoderProcessSout( decoder_t *p_dec, block_t *p_block ) #endif static void DecoderPlayCc( decoder_t *p_dec, block_t *p_cc, - bool pb_present[4], const subs_format_t *p_fmt ) + bool pb_present[4], int i_reorder_depth ) { decoder_owner_sys_t *p_owner = p_dec->p_owner; bool b_processed = false; @@ -887,7 +887,7 @@ static void DecoderPlayCc( decoder_t *p_dec, block_t *p_cc, if( p_owner->cc.pp_decoder[i] ) i_cc_decoder++; } - p_owner->cc.i_reorder_depth = p_fmt->cc.i_reorder_depth; + p_owner->cc.i_reorder_depth = i_reorder_depth; for( int i = 0; i < 4; i++ ) { @@ -918,14 +918,15 @@ static void PacketizerGetCc( decoder_t *p_dec, decoder_t *p_dec_cc ) assert( p_dec_cc->pf_get_cc != NULL ); - p_cc = p_dec_cc->pf_get_cc( p_dec_cc, pb_present ); + int i_reorder_depth; + p_cc = p_dec_cc->pf_get_cc( p_dec_cc, pb_present, &i_reorder_depth ); if( !p_cc ) return; - DecoderPlayCc( p_dec, p_cc, pb_present, &p_dec_cc->fmt_out.subs ); + DecoderPlayCc( p_dec, p_cc, pb_present, i_reorder_depth ); } static int DecoderQueueCc( decoder_t *p_videodec, block_t *p_cc, - bool p_cc_present[4] ) + bool p_cc_present[4], int i_reorder_depth ) { decoder_owner_sys_t *p_owner = p_videodec->p_owner; @@ -933,7 +934,7 @@ static int DecoderQueueCc( decoder_t *p_videodec, block_t *p_cc, { if( p_owner->cc.b_supported && ( !p_owner->p_packetizer || !p_owner->p_packetizer->pf_get_cc ) ) - DecoderPlayCc( p_videodec, p_cc, p_cc_present, &p_videodec->fmt_out.subs ); + DecoderPlayCc( p_videodec, p_cc, p_cc_present, i_reorder_depth ); else block_Release( p_cc ); } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
