[FFmpeg-devel] [PATCH 1/2] avformat: call AVOutputFormat->deinit() when freeing the context
Michael Niedermayer
michael at niedermayer.cc
Sun Oct 20 11:19:38 EEST 2019
On Sat, Oct 19, 2019 at 11:11:07AM -0300, James Almer wrote:
> Despite the doxy stating that it's called when the muxer is destroyed,
> this was not true in practice. It's only called by av_write_trailer()
> and on init() failure.
>
> An AVFormatContext may be closed without writing the trailer if errors
> ocurred while muxing packets, so in order to prevent memory leaks, it
> should effectively be called when freeing the muxer.
>
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
> libavformat/mux.c | 4 +++-
> libavformat/utils.c | 3 +++
> 2 files changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/libavformat/mux.c b/libavformat/mux.c
> index 0227c0dadc..719dec8346 100644
> --- a/libavformat/mux.c
> +++ b/libavformat/mux.c
> @@ -538,6 +538,8 @@ int avformat_write_header(AVFormatContext *s, AVDictionary **options)
> fail:
> if (s->oformat->deinit)
> s->oformat->deinit(s);
> + s->internal->initialized =
> + s->internal->streams_initialized = 0;
> return ret;
> }
>
> @@ -1286,7 +1288,7 @@ fail:
> }
> }
>
> - if (s->oformat->deinit)
> + if (s->oformat->deinit && s->internal->initialized)
> s->oformat->deinit(s);
>
> s->internal->initialized =
> diff --git a/libavformat/utils.c b/libavformat/utils.c
> index 60f0229adc..cfb6d03397 100644
> --- a/libavformat/utils.c
> +++ b/libavformat/utils.c
> @@ -4437,6 +4437,9 @@ void avformat_free_context(AVFormatContext *s)
> if (!s)
> return;
>
> + if (s->oformat && s->oformat->deinit && s->internal->initialized)
> + s->oformat->deinit(s);
> +
maybe this whole set of checks and clears could be factored in a function ?
something like:
deinit() {
if (s->oformat && s->oformat->deinit && s->internal->initialized)
s->oformat->deinit(s);
s->internal->initialized =
s->internal->streams_initialized = 0;
}
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Concerning the gods, I have no means of knowing whether they exist or not
or of what sort they may be, because of the obscurity of the subject, and
the brevity of human life -- Protagoras
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20191020/281526e3/attachment.sig>
More information about the ffmpeg-devel
mailing list