This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit bdd454504f06f482e3837bd5918fcccff63ca0fa
Author:     Niklas Haas <[email protected]>
AuthorDate: Wed Oct 28 15:20:00 2026 +0100
Commit:     Niklas Haas <[email protected]>
CommitDate: Sat Oct 31 13:37:58 2026 +0100

    avfilter/vf_libplacebo: make the GPU setup idempotent
    
    So config_input() can simply set up the GPU for every input, rather than
    tracking whether the device still needs to be inherited.
    
    Co-Authored-By: Claude Opus 5.5 <[email protected]>
    Sponsored-by: nxtedition AB
    Signed-off-by: Niklas Haas <[email protected]>
---
 libavfilter/vf_libplacebo.c | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c
index 817a5be568..e4ad39fb23 100644
--- a/libavfilter/vf_libplacebo.c
+++ b/libavfilter/vf_libplacebo.c
@@ -697,11 +697,15 @@ static int copy_pl_queue(const AVVulkanDeviceContext 
*hwctx,
     return 0;
 }
 
+/* Creates or imports the Vulkan device, unless already done */
 static int init_vulkan(AVFilterContext *avctx, const AVVulkanDeviceContext 
*hwctx)
 {
     int err = 0;
     LibplaceboContext *s = avctx->priv;
 
+    if (s->gpu)
+        return 0;
+
     if (hwctx) {
         struct pl_vulkan_import_params import_params = {
             .instance       = hwctx->inst,
@@ -754,6 +758,7 @@ fail:
     return err;
 }
 
+/* Sets up the state depending on the GPU, unless already done */
 static int libplacebo_setup_gpu(AVFilterContext *avctx)
 {
     int err = 0;
@@ -761,6 +766,9 @@ static int libplacebo_setup_gpu(AVFilterContext *avctx)
     uint8_t *buf = NULL;
     size_t buf_len;
 
+    if (s->inputs)
+        return 0;
+
     /* Parse the user shaders, if requested */
     if (s->shader_bin_len)
         RET(parse_shader(avctx, s->shader_bin, s->shader_bin_len));
@@ -1417,14 +1425,19 @@ fail:
     return err;
 }
 
-/* Adopt the Vulkan device of the input's hardware frames. query_formats
- * advertised Vulkan only, so a non-Vulkan input here is a configuration 
error. */
+/* Adopt the Vulkan device of the input's hardware frames, unless a device was
+ * already set up. query_formats advertised Vulkan only, so a non-Vulkan input
+ * here is a configuration error. */
 static int inherit_device(AVFilterLink *inlink)
 {
     AVFilterContext *avctx = inlink->dst;
+    LibplaceboContext *s   = avctx->priv;
     FilterLink        *l   = ff_filter_link(inlink);
     AVHWFramesContext *hwfc;
 
+    if (s->gpu)
+        return 0;
+
     if (inlink->format != AV_PIX_FMT_VULKAN || !l->hw_frames_ctx) {
         av_log(avctx, AV_LOG_ERROR, "inherit_device requires a Vulkan "
                "hardware frames context on the input.\n");
@@ -1465,15 +1478,10 @@ static int libplacebo_config_input(AVFilterLink *inlink)
             inlink->sample_aspect_ratio = 
av_inv_q(inlink->sample_aspect_ratio);
     }
 
-    /* Deferred Vulkan setup (inherit_device): the device was not created at
-     * init; adopt the one the input frames live on. */
-    if (!s->gpu) {
-        av_assert0(s->inherit_device);
+    if (s->inherit_device)
         RET(inherit_device(inlink));
-        RET(init_vulkan(avctx, choose_default_device(avctx)));
-        RET(libplacebo_setup_gpu(avctx));
-    }
-
+    RET(init_vulkan(avctx, choose_default_device(avctx)));
+    RET(libplacebo_setup_gpu(avctx));
     return config_input_vulkan(inlink);
 
 fail:

-- 
To stop receiving notification emails like this one, please contact
[email protected].
_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to