[FFmpeg-cvslog] avcodec/options: do a more thorough clean up in avcodec_copy_context()
James Almer
git at videolan.org
Sat May 6 23:53:32 EEST 2017
ffmpeg | branch: release/3.3 | James Almer <jamrial at gmail.com> | Mon Apr 24 14:53:47 2017 -0300| [8119efdbec1fa3d10031a83ad5a43bd4999ae7c2] | committer: James Almer
avcodec/options: do a more thorough clean up in avcodec_copy_context()
Free coded_frame, coded_side_data and unref hw_device_ctx to prevent
potential leaks.
Reviewed-by: Aaron Levinson <alevinsn at aracnet.com>
Tested-by: Michael Niedermayer <michael at niedermayer.cc>
Signed-off-by: James Almer <jamrial at gmail.com>
(cherry picked from commit cac8de2da5c4935773128335c11b806faa73e19d)
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8119efdbec1fa3d10031a83ad5a43bd4999ae7c2
---
libavcodec/options.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/libavcodec/options.c b/libavcodec/options.c
index b98da9378a..82e12179a6 100644
--- a/libavcodec/options.c
+++ b/libavcodec/options.c
@@ -190,14 +190,26 @@ void avcodec_free_context(AVCodecContext **pavctx)
#if FF_API_COPY_CONTEXT
static void copy_context_reset(AVCodecContext *avctx)
{
+ int i;
+
av_opt_free(avctx);
+#if FF_API_CODED_FRAME
+FF_DISABLE_DEPRECATION_WARNINGS
+ av_frame_free(&avctx->coded_frame);
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
av_freep(&avctx->rc_override);
av_freep(&avctx->intra_matrix);
av_freep(&avctx->inter_matrix);
av_freep(&avctx->extradata);
av_freep(&avctx->subtitle_header);
av_buffer_unref(&avctx->hw_frames_ctx);
+ av_buffer_unref(&avctx->hw_device_ctx);
+ for (i = 0; i < avctx->nb_coded_side_data; i++)
+ av_freep(&avctx->coded_side_data[i].data);
+ av_freep(&avctx->coded_side_data);
avctx->subtitle_header_size = 0;
+ avctx->nb_coded_side_data = 0;
avctx->extradata_size = 0;
}
@@ -238,11 +250,14 @@ FF_ENABLE_DEPRECATION_WARNINGS
/* reallocate values that should be allocated separately */
dest->extradata = NULL;
+ dest->coded_side_data = NULL;
dest->intra_matrix = NULL;
dest->inter_matrix = NULL;
dest->rc_override = NULL;
dest->subtitle_header = NULL;
dest->hw_frames_ctx = NULL;
+ dest->hw_device_ctx = NULL;
+ dest->nb_coded_side_data = 0;
#define alloc_and_copy_or_fail(obj, size, pad) \
if (src->obj && size > 0) { \
More information about the ffmpeg-cvslog
mailing list