vlc | branch: master | Thomas Guillem <[email protected]> | Wed Mar 18 14:23:00 2020 +0100| [0681ee69d4aea9380a330686949f00b6946b37da] | committer: Thomas Guillem
decoder: manage VBI from decoder.c This is the only direct usage of the decoder_t created by input_DecoderCreate(). This will allow to use a new opaque struct for the decoder_t input API. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0681ee69d4aea9380a330686949f00b6946b37da --- src/input/decoder.c | 28 ++++++++++++++++++++++++++++ src/input/decoder.h | 4 ++++ src/input/es_out.c | 22 +++++++++++----------- 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/src/input/decoder.c b/src/input/decoder.c index 20df3f2230..b6208368d6 100644 --- a/src/input/decoder.c +++ b/src/input/decoder.c @@ -2583,6 +2583,34 @@ size_t input_DecoderGetFifoSize( decoder_t *p_dec ) return block_FifoSize( p_owner->p_fifo ); } +static bool DecoderHasVbi( decoder_t *dec ) +{ + return dec->fmt_in.i_cat == SPU_ES && dec->fmt_in.i_codec == VLC_CODEC_TELETEXT + && var_Type( dec, "vbi-page" ) == VLC_VAR_INTEGER; +} + +int input_DecoderGetVbiPage( decoder_t *dec, bool *opaque ) +{ + if( !DecoderHasVbi( dec ) ) + return -1; + *opaque = var_GetBool( dec, "vbi-opaque" ); + return var_GetInteger( dec, "vbi-page" ); +} + +int input_DecoderSetVbiPage( decoder_t *dec, unsigned page ) +{ + if( !DecoderHasVbi( dec ) ) + return VLC_EGENERIC; + return var_SetInteger( dec, "vbi-page", page ); +} + +int input_DecoderSetVbiOpaque( decoder_t *dec, bool opaque ) +{ + if( !DecoderHasVbi( dec ) ) + return VLC_EGENERIC; + return var_SetBool( dec, "vbi-opaque", opaque ); +} + void input_DecoderSetVoutMouseEvent( decoder_t *dec, vlc_mouse_event mouse_event, void *user_data ) { diff --git a/src/input/decoder.h b/src/input/decoder.h index af9f7c7bdb..216d02b053 100644 --- a/src/input/decoder.h +++ b/src/input/decoder.h @@ -134,6 +134,10 @@ bool input_DecoderHasFormatChanged( decoder_t *p_dec, es_format_t *p_fmt, vlc_me */ size_t input_DecoderGetFifoSize( decoder_t *p_dec ); +int input_DecoderGetVbiPage( decoder_t *, bool *opaque ); +int input_DecoderSetVbiPage( decoder_t *, unsigned page ); +int input_DecoderSetVbiOpaque( decoder_t *, bool opaque ); + void input_DecoderSetVoutMouseEvent( decoder_t *, vlc_mouse_event, void * ); int input_DecoderAddVoutOverlay( decoder_t *, subpicture_t *, size_t * ); int input_DecoderDelVoutOverlay( decoder_t *, size_t ); diff --git a/src/input/es_out.c b/src/input/es_out.c index e4e0e460ac..3973e3e0fc 100644 --- a/src/input/es_out.c +++ b/src/input/es_out.c @@ -2313,14 +2313,15 @@ static void EsOutSelectEs( es_out_t *out, es_out_id_t *es, bool b_force ) /* Special case of the zvbi decoder for teletext: send the initial selected * page and transparency */ - if( !es->p_master && es->fmt.i_cat == SPU_ES - && es->fmt.i_codec == VLC_CODEC_TELETEXT - && var_Type( es->p_dec, "vbi-page" ) == VLC_VAR_INTEGER ) + if( !es->p_master ) { - input_SendEventVbiPage( p_input, - var_GetInteger( es->p_dec, "vbi-page" ) ); - input_SendEventVbiTransparency( p_input, - var_GetBool( es->p_dec, "vbi-opaque" ) ); + bool vbi_opaque; + int vbi_page = input_DecoderGetVbiPage( es->p_dec, &vbi_opaque ); + if( vbi_page >= 0 ) + { + input_SendEventVbiPage( p_input, vbi_page ); + input_SendEventVbiTransparency( p_input, vbi_opaque ); + } } } @@ -3718,22 +3719,21 @@ static int EsOutVaPrivControlLocked( es_out_t *out, int query, va_list args ) vlc_es_id_t *es_id = va_arg( args, vlc_es_id_t * ); es_out_id_t *es = vlc_es_id_get_out( es_id ); assert(es); - if( !es->p_dec || es->fmt.i_cat != SPU_ES - || es->fmt.i_codec != VLC_CODEC_TELETEXT ) + if( !es->p_dec ) return VLC_EGENERIC; int ret; if( query == ES_OUT_PRIV_SET_VBI_PAGE ) { unsigned page = va_arg( args, unsigned ); - ret = var_SetInteger( es->p_dec, "vbi-page", page ); + ret = input_DecoderSetVbiPage( es->p_dec, page ); if( ret == VLC_SUCCESS ) input_SendEventVbiPage( p_sys->p_input, page ); } else { bool opaque = va_arg( args, int ); - ret = var_SetBool( es->p_dec, "vbi-opaque", opaque ); + ret = input_DecoderSetVbiOpaque( es->p_dec, opaque ); if( ret == VLC_SUCCESS ) input_SendEventVbiTransparency( p_sys->p_input, opaque ); } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
