[FFmpeg-devel] [PATCH 8/8] avcodec/avcodec: Document current behaviour for extradata

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Sat Apr 24 15:53:44 EEST 2021


James Almer:
> On 4/24/2021 9:29 AM, Andreas Rheinhardt wrote:
>> Despite the documentation saying that it is not freed by libavcodec
>> for a decoder, avcodec_free_context() does so and has been doing so
>> since this function has been added more than seven years ago.
>>
>> Honouring the current documentation in avcodec_free_context() would
>> add memleaks to all users of it that don't free their extradata
>> manually; given how long this behaviour has been around we can safely
>> assume that these are many (i.e. the fftools are among them, as is
>> libavformat as well as parts of libavcodec itself).
>>
>> Therefore adapt the documentation to match actual behaviour.
>> This fixes ticket #5027.
>>
>> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
>> ---
>>   libavcodec/avcodec.h | 2 ++
>>   1 file changed, 2 insertions(+)
>>
>> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
>> index b9b487be41..4596d12647 100644
>> --- a/libavcodec/avcodec.h
>> +++ b/libavcodec/avcodec.h
>> @@ -633,6 +633,8 @@ typedef struct AVCodecContext {
>>        * Must be allocated with the av_malloc() family of functions.
>>        * - encoding: Set/allocated/freed by libavcodec.
>>        * - decoding: Set/allocated/freed by user.
>> +     * Additionally, avcodec_free_context() frees it regardless of
>> whether
>> +     * the context is used for encoding or not.
> 
> I'd prefer to instead change the decoding line to
> 
> * - decoding: Set/allocated by user, freed by libavcodec.

This would be wrong as avcodec_close() does not free it for decoders.
Changing the behaviour would be a breaking change.

- Andreas


More information about the ffmpeg-devel mailing list