On Mon, 12 Nov 2012 10:57:30 +0000, Gil Pedersen <g...@cmi.aau.dk> wrote:
> On 23/10/2012, at 08.33, Anton Khirnov <an...@khirnov.net> wrote:
> 
> > 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.
> > ---
> > libavcodec/utils.c |    4 ++++
> > 1 file changed, 4 insertions(+)
> > 
> > diff --git a/libavcodec/utils.c b/libavcodec/utils.c
> > index 5e22b9f..da798d9 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) {
> 
> This patch breaks the API for avcodec_decode_audio4(). The frame parameter is
> specified as an "out" option, but it now requires the input data to be
> zero'ed, otherwise you risk free() being called on a random location.

What would cause the frame to be filled with random data? Both
avcodec_alloc_frame() and avcodec_get_frame_defaults() initialize the frame
properly.

-- 
Anton Khirnov
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to