On Fri, 15 Feb 2013 11:34:16 +0100, Janne Grunau <janne-li...@jannau.net> wrote: > On 2013-01-08 15:36:29 +0100, Anton Khirnov wrote: > > --- > > libavcodec/zerocodec.c | 34 ++++++---------------------------- > > 1 file changed, 6 insertions(+), 28 deletions(-) > > > > diff --git a/libavcodec/zerocodec.c b/libavcodec/zerocodec.c > > index 8122cca..9af6fb0 100644 > > --- a/libavcodec/zerocodec.c > > +++ b/libavcodec/zerocodec.c > > @@ -96,16 +93,11 @@ static int zerocodec_decode_frame(AVCodecContext > > *avctx, void *data, > > dst -= pic->linesize[0]; > > } > > > > - /* Release the previous buffer if need be */ > > - if (prev_pic->data[0]) > > - avctx->release_buffer(avctx, prev_pic); > > + av_frame_unref(&zc->previous_frame); > > + if ((ret = av_frame_ref(&zc->previous_frame, pic)) < 0) > > + return ret; > > > > *got_frame = 1; > > - *(AVFrame *)data = *pic; > > - > > - /* Store the previous frame for use later. > > - * FFSWAP ensures that e.g. pic->data is NULLed. */ > > - FFSWAP(AVFrame, *pic, *prev_pic); > > > > return avpkt->size; > > } > > @@ -113,16 +105,9 @@ static int zerocodec_decode_frame(AVCodecContext > > *avctx, void *data, > > static av_cold int zerocodec_decode_close(AVCodecContext *avctx) > > { > > ZeroCodecContext *zc = avctx->priv_data; > > - AVFrame *prev_pic = &zc->previous_frame; > > > > inflateEnd(&zc->zstream); > > > > - /* Release last frame */ > > - if (prev_pic->data[0]) > > - avctx->release_buffer(avctx, prev_pic); > > - > > - av_freep(&avctx->coded_frame); > > - > > doesn't the decoder still holds an reference on zc->previous_frame >
Right you are, seems like a brainfart on my side. -- Anton Khirnov _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel