vlc | branch: master | Steve Lhomme <[email protected]> | Mon Feb 18 15:02:10 2019 +0100| [55ae595eb5e80b4fc66de90803e802e2aa70a77f] | committer: Steve Lhomme
decoder: make decoder_Clean() public The decoder and decoder tests actually load/unload decoders without resetting the whole structure. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=55ae595eb5e80b4fc66de90803e802e2aa70a77f --- include/vlc_codec.h | 7 +++++++ src/input/decoder.c | 32 +++++--------------------------- src/input/decoder_helpers.c | 2 +- src/libvlccore.sym | 1 + test/src/input/decoder.c | 20 ++------------------ 5 files changed, 16 insertions(+), 46 deletions(-) diff --git a/include/vlc_codec.h b/include/vlc_codec.h index 2042ad2424..3961b8c9a1 100644 --- a/include/vlc_codec.h +++ b/include/vlc_codec.h @@ -327,6 +327,13 @@ VLC_API void decoder_Init( decoder_t *dec, const es_format_t * ); VLC_API void decoder_Destroy( decoder_t **p_dec ); /** + * Unload a decoder module and reset the input/output formats. + * + * To be used by decoder owners. + */ +VLC_API void decoder_Clean( decoder_t *p_dec ); + +/** * This function queues a single picture to the video output. * * \note diff --git a/src/input/decoder.c b/src/input/decoder.c index 05ba7f6abb..582a2eaf2e 100644 --- a/src/input/decoder.c +++ b/src/input/decoder.c @@ -189,38 +189,16 @@ static int LoadDecoder( decoder_t *p_dec, bool b_packetizer, if( !p_dec->p_module ) { - es_format_Clean( &p_dec->fmt_in ); + decoder_Clean( p_dec ); return -1; } - else - return 0; -} - -/** - * Unload a decoder module - */ -static void UnloadDecoder( decoder_t *p_dec ) -{ - if( p_dec->p_module ) - { - module_unneed( p_dec, p_dec->p_module ); - p_dec->p_module = NULL; - } - - if( p_dec->p_description ) - { - vlc_meta_Delete( p_dec->p_description ); - p_dec->p_description = NULL; - } - - es_format_Clean( &p_dec->fmt_in ); - es_format_Clean( &p_dec->fmt_out ); + return 0; } static int ReloadDecoder( decoder_t *p_dec, bool b_packetizer, const es_format_t *restrict p_fmt, enum reload reload ) { - /* Copy p_fmt since it can be destroyed by UnloadDecoder */ + /* Copy p_fmt since it can be destroyed by decoder_Clean */ struct decoder_owner *p_owner = dec_get_owner( p_dec ); es_format_t fmt_in; if( es_format_Copy( &fmt_in, p_fmt ) != VLC_SUCCESS ) @@ -230,7 +208,7 @@ static int ReloadDecoder( decoder_t *p_dec, bool b_packetizer, } /* Restart the decoder module */ - UnloadDecoder( p_dec ); + decoder_Clean( p_dec ); p_owner->error = false; if( reload == RELOAD_DECODER_AOUT ) @@ -1974,7 +1952,7 @@ static void DeleteDecoder( decoder_t * p_dec ) (char*)&p_dec->fmt_in.i_codec ); const enum es_format_category_e i_cat =p_dec->fmt_in.i_cat; - UnloadDecoder( p_dec ); + decoder_Clean( p_dec ); /* Free all packets still in the decoder fifo. */ block_FifoRelease( p_owner->p_fifo ); diff --git a/src/input/decoder_helpers.c b/src/input/decoder_helpers.c index b60b830123..693c6b3955 100644 --- a/src/input/decoder_helpers.c +++ b/src/input/decoder_helpers.c @@ -46,7 +46,7 @@ void decoder_Init( decoder_t *p_dec, const es_format_t *restrict p_fmt ) es_format_Init( &p_dec->fmt_out, p_fmt->i_cat, 0 ); } -static void decoder_Clean( decoder_t *p_dec ) +void decoder_Clean( decoder_t *p_dec ) { es_format_Clean( &p_dec->fmt_in ); es_format_Clean( &p_dec->fmt_out ); diff --git a/src/libvlccore.sym b/src/libvlccore.sym index 906a449f2b..d2d1dac6fb 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -74,6 +74,7 @@ date_Decrement date_Increment date_Init decoder_Init +decoder_Clean decoder_Destroy decoder_AbortPictures decoder_NewAudioBuffer diff --git a/test/src/input/decoder.c b/test/src/input/decoder.c index 6ecc584120..df05fcf4ce 100644 --- a/test/src/input/decoder.c +++ b/test/src/input/decoder.c @@ -106,28 +106,12 @@ static int decoder_load(decoder_t *decoder, bool is_packetizer, if (!decoder->p_module) { - es_format_Clean(&decoder->fmt_in); + decoder_Clean( decoder ); return VLC_EGENERIC; } return VLC_SUCCESS; } -static void decoder_unload(decoder_t *decoder) -{ - if (decoder->p_module != NULL) - { - module_unneed(decoder, decoder->p_module); - decoder->p_module = NULL; - es_format_Clean(&decoder->fmt_out); - } - es_format_Clean(&decoder->fmt_in); - if (decoder->p_description) - { - vlc_meta_Delete(decoder->p_description); - decoder->p_description = NULL; - } -} - void test_decoder_destroy(decoder_t *decoder) { struct decoder_owner *owner = dec_get_owner(decoder); @@ -237,7 +221,7 @@ int test_decoder_process(decoder_t *decoder, block_t *p_block) decoder->pf_decode(decoder, NULL); /* Reload decoder */ - decoder_unload(decoder); + decoder_Clean(decoder); if (decoder_load(decoder, false, &packetizer->fmt_out) != VLC_SUCCESS) { block_ChainRelease(p_packetized_block); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
