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

Steve Lhomme robux4 at ycbcr.xyz
Wed Feb 20 09:53:59 CET 2019


On 19/02/2019 13:41, Thomas Guillem wrote:
> Why not calling it decoder_Unload() since its mean goal is to unload the decoder module.

I did use that name in my work branch. But given there's no decoder_Load 
to balance it, it didn't seem right.

And since you mentioned it:

 > This function should be called Load() and load the decoder module 
according to the es category.

I don't think it *should*. That's what the code factorization/regrouping 
did. If anything the vlc_object_create() that usually precedes this call 
could be merged in there and be called decoder_Create(). But since this 
vlc_object_create() is done on the "owner" (remember, it's the same 
thing) we can't do that. We can't have a proper create unless we tell it 
the extra size to allocate for the owner. If we do that we could also 
add an extra size for things internal to each decoder that might not be 
seen from the outside.

As for the code code that follows it, the load of the module is usually 
done after some owner specific code so it cannot simply be merged in 
that function. So it cannot be a Load().

>
> 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
>>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel



More information about the vlc-devel mailing list