|
|
@@ -385,7 +385,27 @@ static int vaapi_encode_issue(AVCodecContext *avctx, |
|
|
av_log(avctx, AV_LOG_ERROR, "Failed to end picture encode issue: " |
|
|
av_log(avctx, AV_LOG_ERROR, "Failed to end picture encode issue: " |
|
|
"%d (%s).\n", vas, vaErrorStr(vas)); |
|
|
"%d (%s).\n", vas, vaErrorStr(vas)); |
|
|
err = AVERROR(EIO); |
|
|
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; |
|
|
pic->encode_issued = 1; |
|
|
|