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

otherwise ok.

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

Reply via email to