Quoting Mark Thompson (2016-06-22 00:27:39)
> No longer leaks memory when used with a driver with the "render does
> not destroy param buffers" quirk (i.e. Intel i965).
> ---
>  libavcodec/vaapi_encode.c | 22 +++++++++++++++++++++-
>  1 file changed, 21 insertions(+), 1 deletion(-)
> 
> diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c
> index c3f4e44..40f8b8c 100644
> --- a/libavcodec/vaapi_encode.c
> +++ b/libavcodec/vaapi_encode.c
> @@ -389,7 +389,27 @@ static int vaapi_encode_issue(AVCodecContext *avctx,
>          av_log(avctx, AV_LOG_ERROR, "Failed to end picture encode issue: "
>                 "%d (%s).\n", vas, vaErrorStr(vas));
>          err = AVERROR(EIO);
> -        goto fail_at_end;
> +        // vaRenderPicture() has been called here, so we should not destroy
> +        // the parameter buffers unless separate destruction is required.
> +        if (ctx->hwctx->driver_quirks &
> +            AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS)
> +            goto fail;
> +        else
> +            goto fail_at_end;
> +    }
> +
> +    if (ctx->hwctx->driver_quirks &
> +        AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS) {
> +        for (i = 0; i < pic->nb_param_buffers; i++) {
> +            vas = vaDestroyBuffer(ctx->hwctx->display,
> +                                  pic->param_buffers[i]);
> +            if (vas != VA_STATUS_SUCCESS) {
> +                av_log(avctx, AV_LOG_ERROR, "Failed to destroy "
> +                       "param buffer %#x: %d (%s).\n",
> +                       pic->param_buffers[i], vas, vaErrorStr(vas));
> +                // And ignore.
> +            }
> +        }
>      }
> 
>      pic->encode_issued = 1;
> -- 
> 2.8.1

LGTM

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

Reply via email to