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