[vlc-devel] [vlc-commits] decoder: make decoder_Clean() public

Thomas Guillem thomas at gllm.fr
Tue Feb 19 13:41:48 CET 2019


Why not calling it decoder_Unload() since its mean goal is to unload the decoder module.

You should really use an other prefix for decoder owner functions. I really don't like having the the same prefix for functions that can only be used by the owner and some by module implementations.

vlc_dec_owner, for example. 

On Mon, Feb 18, 2019, at 16:11, Steve Lhomme wrote:
> vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | 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
> vlc-commits at videolan.org
> https://mailman.videolan.org/listinfo/vlc-commits
>


More information about the vlc-devel mailing list