On 06/08, Will Kelleher wrote: > > That works for me. I can update the patch with that warning. Thanks! > Updated patch attached.
>From 3229edf9e52dfd61580209630f20ddef3e39e78e Mon Sep 17 00:00:00 2001 From: Will Kelleher <wkelle...@gogoair.com> Date: Tue, 7 Jun 2016 20:49:48 -0500 Subject: [PATCH] vaapi_encode: explicitly free buffers after vaEndPicture otherwise they leak, contrary to what the documentation seems to say. --- libavcodec/vaapi_encode.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c index 329b33c..01b8c70 100644 --- a/libavcodec/vaapi_encode.c +++ b/libavcodec/vaapi_encode.c @@ -370,6 +370,29 @@ static int vaapi_encode_issue(AVCodecContext *avctx, goto fail_at_end; } + // We free all of the parameter buffers here. + // This is not consistent with what VAAPI states is required; under + // vaDestroyBuffer, it says: "Only call this if the buffer is not + // going to be passed to vaRenderBuffer" [sic; vaRenderPicture]. + // Doing this here is a pragmatic decision to preferentially support + // the Intel i965 back-end driver, which does not and has never + // freed the buffers as required by the specification - if we don't + // free here, memory will leak for every frame submitted when using + // that driver. + // If other drivers are supported in future, this decision may need + // to be revisted - if the driver really has already freed the + // buffer, doing so here is disaster for thread-safety because we + // may free buffers which have been allocated in other threads. + for(i = 0; i < pic->nb_param_buffers; i++) { + if (pic->param_buffers[i] != VA_INVALID_ID) { + vas = vaDestroyBuffer(ctx->hwctx->display, pic->param_buffers[i]); + if (vas != 0) { + av_log(avctx, AV_LOG_WARNING, "Failed to destroy param buffer %d\n",i); + } + pic->param_buffers[i] = VA_INVALID_ID; + } + } + pic->encode_issued = 1; if (ctx->issue_mode == ISSUE_MODE_SERIALISE_EVERYTHING) -- 2.8.0
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel