You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
vaapi: Always free parameter buffers after vaEndPicture() with libva2
This is an ABI change in libva2: previously the Intel driver had this behaviour and it was implemented as a driver quirk, but now it is part of the specification so all drivers must do it.
This commit is contained in:
@@ -188,14 +188,14 @@ int ff_vaapi_decode_issue(AVCodecContext *avctx,
|
|||||||
av_log(avctx, AV_LOG_ERROR, "Failed to end picture decode "
|
av_log(avctx, AV_LOG_ERROR, "Failed to end picture decode "
|
||||||
"issue: %d (%s).\n", vas, vaErrorStr(vas));
|
"issue: %d (%s).\n", vas, vaErrorStr(vas));
|
||||||
err = AVERROR(EIO);
|
err = AVERROR(EIO);
|
||||||
if (ctx->hwctx->driver_quirks &
|
if (CONFIG_VAAPI_1 || ctx->hwctx->driver_quirks &
|
||||||
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS)
|
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS)
|
||||||
goto fail;
|
goto fail;
|
||||||
else
|
else
|
||||||
goto fail_at_end;
|
goto fail_at_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->hwctx->driver_quirks &
|
if (CONFIG_VAAPI_1 || ctx->hwctx->driver_quirks &
|
||||||
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS)
|
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS)
|
||||||
ff_vaapi_decode_destroy_buffers(avctx, pic);
|
ff_vaapi_decode_destroy_buffers(avctx, pic);
|
||||||
|
|
||||||
|
@@ -399,14 +399,14 @@ static int vaapi_encode_issue(AVCodecContext *avctx,
|
|||||||
err = AVERROR(EIO);
|
err = AVERROR(EIO);
|
||||||
// vaRenderPicture() has been called here, so we should not destroy
|
// vaRenderPicture() has been called here, so we should not destroy
|
||||||
// the parameter buffers unless separate destruction is required.
|
// the parameter buffers unless separate destruction is required.
|
||||||
if (ctx->hwctx->driver_quirks &
|
if (CONFIG_VAAPI_1 || ctx->hwctx->driver_quirks &
|
||||||
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS)
|
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS)
|
||||||
goto fail;
|
goto fail;
|
||||||
else
|
else
|
||||||
goto fail_at_end;
|
goto fail_at_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->hwctx->driver_quirks &
|
if (CONFIG_VAAPI_1 || ctx->hwctx->driver_quirks &
|
||||||
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS) {
|
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS) {
|
||||||
for (i = 0; i < pic->nb_param_buffers; i++) {
|
for (i = 0; i < pic->nb_param_buffers; i++) {
|
||||||
vas = vaDestroyBuffer(ctx->hwctx->display,
|
vas = vaDestroyBuffer(ctx->hwctx->display,
|
||||||
|
@@ -539,7 +539,7 @@ static int deint_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame)
|
|||||||
goto fail_after_render;
|
goto fail_after_render;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->hwctx->driver_quirks &
|
if (CONFIG_VAAPI_1 || ctx->hwctx->driver_quirks &
|
||||||
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS) {
|
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS) {
|
||||||
vas = vaDestroyBuffer(ctx->hwctx->display, params_id);
|
vas = vaDestroyBuffer(ctx->hwctx->display, params_id);
|
||||||
if (vas != VA_STATUS_SUCCESS) {
|
if (vas != VA_STATUS_SUCCESS) {
|
||||||
|
@@ -361,7 +361,7 @@ static int scale_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame)
|
|||||||
goto fail_after_render;
|
goto fail_after_render;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->hwctx->driver_quirks &
|
if (CONFIG_VAAPI_1 || ctx->hwctx->driver_quirks &
|
||||||
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS) {
|
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS) {
|
||||||
vas = vaDestroyBuffer(ctx->hwctx->display, params_id);
|
vas = vaDestroyBuffer(ctx->hwctx->display, params_id);
|
||||||
if (vas != VA_STATUS_SUCCESS) {
|
if (vas != VA_STATUS_SUCCESS) {
|
||||||
|
Reference in New Issue
Block a user