[FFmpeg-devel] [PATCH 1/4] avformat/avidec: Don't reimplement ff_free_stream()
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Sat Apr 4 17:09:22 EEST 2020
James Almer:
> On 3/27/2020 6:55 AM, Andreas Rheinhardt wrote:
>> Using ff_free_stream() makes the code more readable, more future-proof
>> (the old code freed AVCodecContexts and AVCodecParameters and its
>> substructures manually, so that there is a chance that there would be a
>> memleak for some time if new substructures were added) and reduces
>> code size.
>>
>> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
>> ---
>> libavformat/avidec.c | 17 ++---------------
>> 1 file changed, 2 insertions(+), 15 deletions(-)
>>
>> diff --git a/libavformat/avidec.c b/libavformat/avidec.c
>> index 00c3978b2d..ae343e732a 100644
>> --- a/libavformat/avidec.c
>> +++ b/libavformat/avidec.c
>> @@ -600,21 +600,8 @@ static int avi_read_header(AVFormatContext *s)
>> goto fail;
>>
>> ast = s->streams[0]->priv_data;
>> - av_freep(&s->streams[0]->codecpar->extradata);
>> - av_freep(&s->streams[0]->codecpar);
>> -#if FF_API_LAVF_AVCTX
>> -FF_DISABLE_DEPRECATION_WARNINGS
>> - av_freep(&s->streams[0]->codec);
>> -FF_ENABLE_DEPRECATION_WARNINGS
>> -#endif
>> - if (s->streams[0]->info)
>> - av_freep(&s->streams[0]->info->duration_error);
>> - av_freep(&s->streams[0]->info);
>> - if (s->streams[0]->internal)
>> - av_freep(&s->streams[0]->internal->avctx);
>> - av_freep(&s->streams[0]->internal);
>> - av_freep(&s->streams[0]);
>> - s->nb_streams = 0;
>> + st->priv_data = NULL;
>> + ff_free_stream(s, st);
>
> I stream_index guaranteed to be 0 here? Or in turn, was s->streams[0]
> correct in this chunk to begin with?
>
Yes. See lines 592-595:
/* After some consideration -- I don't think we
* have to support anything but DV in type1 AVIs. */
if (s->nb_streams != 1)
goto fail;
(I basically don't know DV, so I don't know how much additional work it
would be to extend this. I also don't know if simply freeing the last
stream (as ff_free_stream() does automatically) would mean that the
above check could be removed. All I know is that the
avpriv_dv_init_demux() will add a new stream to s.)
- Andreas
More information about the ffmpeg-devel
mailing list