aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLynne <dev@lynne.ee>2024-08-30 16:40:37 +0000
committerLynne <dev@lynne.ee>2024-09-09 07:05:42 +0200
commite6019ed075d6d2557dc834a09c92102055837d73 (patch)
tree83e92eba8176de0c3f199ae59620c8798e35a917
parent034e25e1a4687167c8f8abacecb543ac3aa6a217 (diff)
downloadffmpeg-e6019ed075d6d2557dc834a09c92102055837d73.tar.gz
hw_base_encode: allocate DPB image upfront
Vulkan requires this, as it needs to initialize state upfront.
-rw-r--r--libavcodec/d3d12va_encode.c6
-rw-r--r--libavcodec/hw_base_encode.c6
-rw-r--r--libavcodec/vaapi_encode.c5
3 files changed, 6 insertions, 11 deletions
diff --git a/libavcodec/d3d12va_encode.c b/libavcodec/d3d12va_encode.c
index d437750598..68fb9927a8 100644
--- a/libavcodec/d3d12va_encode.c
+++ b/libavcodec/d3d12va_encode.c
@@ -264,12 +264,6 @@ static int d3d12va_encode_issue(AVCodecContext *avctx,
av_log(avctx, AV_LOG_DEBUG, "Input surface is %p.\n", pic->input_surface->texture);
- err = av_hwframe_get_buffer(base_ctx->recon_frames_ref, base_pic->recon_image, 0);
- if (err < 0) {
- err = AVERROR(ENOMEM);
- goto fail;
- }
-
pic->recon_surface = (AVD3D12VAFrame *)base_pic->recon_image->data[0];
av_log(avctx, AV_LOG_DEBUG, "Recon surface is %p.\n",
pic->recon_surface->texture);
diff --git a/libavcodec/hw_base_encode.c b/libavcodec/hw_base_encode.c
index 35dac6e596..8411cc7582 100644
--- a/libavcodec/hw_base_encode.c
+++ b/libavcodec/hw_base_encode.c
@@ -446,6 +446,12 @@ static int hw_base_encode_send_frame(AVCodecContext *avctx, FFHWBaseEncodeContex
goto fail;
}
+ err = av_hwframe_get_buffer(ctx->recon_frames_ref, pic->recon_image, 0);
+ if (err < 0) {
+ err = AVERROR(ENOMEM);
+ goto fail;
+ }
+
pic->priv = av_mallocz(ctx->op->priv_size);
if (!pic->priv) {
err = AVERROR(ENOMEM);
diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c
index b72e9035cb..0058e1e772 100644
--- a/libavcodec/vaapi_encode.c
+++ b/libavcodec/vaapi_encode.c
@@ -313,11 +313,6 @@ static int vaapi_encode_issue(AVCodecContext *avctx,
av_log(avctx, AV_LOG_DEBUG, "Input surface is %#x.\n", pic->input_surface);
- err = av_hwframe_get_buffer(base_ctx->recon_frames_ref, base_pic->recon_image, 0);
- if (err < 0) {
- err = AVERROR(ENOMEM);
- goto fail;
- }
pic->recon_surface = (VASurfaceID)(uintptr_t)base_pic->recon_image->data[3];
av_log(avctx, AV_LOG_DEBUG, "Recon surface is %#x.\n", pic->recon_surface);