summaryrefslogtreecommitdiff
path: root/libavcodec/utils.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2012-10-23 08:22:23 +0200
committerAnton Khirnov <anton@khirnov.net>2012-10-24 08:46:45 +0200
commit1bc64c2814d409d3cc129c27c493ee915bebdc4a (patch)
tree4bd099889acdb63db50d0b1d0e43207a3d333fe3 /libavcodec/utils.c
parentc68317ebbe4915035df0b08c23eea7a0b80ab881 (diff)
downloadffmpeg-1bc64c2814d409d3cc129c27c493ee915bebdc4a.tar.gz
lavc: initialize output AVFrame before decoding.
Avoids memleaks with audio when extended_data is nontrivial and the user doesn't reset the frame. Shouldn't have any effect for video for now, but might be useful in the future.
Diffstat (limited to 'libavcodec/utils.c')
-rw-r--r--libavcodec/utils.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 10230cad47..8daacbe8cf 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -1305,6 +1305,8 @@ int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *pi
avctx->pkt = avpkt;
apply_param_change(avctx, avpkt);
+ avcodec_get_frame_defaults(picture);
+
if ((avctx->codec->capabilities & CODEC_CAP_DELAY) || avpkt->size || (avctx->active_thread_type & FF_THREAD_FRAME)) {
if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME)
ret = ff_thread_decode_frame(avctx, picture, got_picture_ptr,
@@ -1400,6 +1402,8 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
apply_param_change(avctx, avpkt);
+ avcodec_get_frame_defaults(frame);
+
if ((avctx->codec->capabilities & CODEC_CAP_DELAY) || avpkt->size) {
ret = avctx->codec->decode(avctx, frame, got_frame_ptr, avpkt);
if (ret >= 0 && *got_frame_ptr) {