[FFmpeg-cvslog] hw_base_encode: allocate DPB image upfront

Lynne git at videolan.org
Mon Sep 9 08:09:45 EEST 2024


ffmpeg | branch: master | Lynne <dev at lynne.ee> | Fri Aug 30 16:40:37 2024 +0000| [e6019ed075d6d2557dc834a09c92102055837d73] | committer: Lynne

hw_base_encode: allocate DPB image upfront

Vulkan requires this, as it needs to initialize state upfront.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e6019ed075d6d2557dc834a09c92102055837d73
---

 libavcodec/d3d12va_encode.c | 6 ------
 libavcodec/hw_base_encode.c | 6 ++++++
 libavcodec/vaapi_encode.c   | 5 -----
 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);
 



More information about the ffmpeg-cvslog mailing list