On Fri, Aug 03, 2012 at 10:24:07PM -0400, Derek Buitenhuis wrote:
> If there was a failure inflating, or reinitializing
> the zstream, the current frame's buffer would be lost.
> 
> Signed-off-by: Derek Buitenhuis <[email protected]>
> ---
>  libavcodec/zerocodec.c |   11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/libavcodec/zerocodec.c b/libavcodec/zerocodec.c
> index 8d46bfd..cfbd16f 100644
> --- a/libavcodec/zerocodec.c
> +++ b/libavcodec/zerocodec.c
> @@ -51,17 +51,17 @@ static int zerocodec_decode_frame(AVCodecContext *avctx, 
> void *data,
>          pic->pict_type = AV_PICTURE_TYPE_P;
>      }
>  
> -    if (avctx->get_buffer(avctx, pic) < 0) {
> -        av_log(avctx, AV_LOG_ERROR, "Could not allocate buffer.\n");
> -        return AVERROR(ENOMEM);
> -    }
> -
>      zret = inflateReset(zstream);
>      if (zret != Z_OK) {
>          av_log(avctx, AV_LOG_ERROR, "Could not reset inflate: %d.\n", zret);
>          return AVERROR_INVALIDDATA;
>      }
>  
> +    if (avctx->get_buffer(avctx, pic) < 0) {
> +        av_log(avctx, AV_LOG_ERROR, "Could not allocate buffer.\n");
> +        return AVERROR(ENOMEM);
> +    }
> +
>      zstream->next_in  = avpkt->data;
>      zstream->avail_in = avpkt->size;
>  
> @@ -78,6 +78,7 @@ static int zerocodec_decode_frame(AVCodecContext *avctx, 
> void *data,
>  
>          zret = inflate(zstream, Z_SYNC_FLUSH);
>          if (zret != Z_OK && zret != Z_STREAM_END) {
> +            avctx->release_buffer(avctx, pic);
>              av_log(avctx, AV_LOG_ERROR,
>                     "Inflate failed with return code: %d.\n", zret);
>              return AVERROR_INVALIDDATA;
> -- 

probably OK
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to