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

Git pushed a commit to branch master
in repository ffmpeg.

commit e76c73afaf5ade0c3e29dec33399482f1183b320
Author:     Marton Balint <[email protected]>
AuthorDate: Thu Jan 15 00:49:44 2026 +0100
Commit:     Marton Balint <[email protected]>
CommitDate: Wed Jan 21 22:02:50 2026 +0000

    fftools/ffplay: add video_bg and aspect ratio support to vulkan renderer
    
    Signed-off-by: Marton Balint <[email protected]>
---
 fftools/ffplay.c          |  4 ++--
 fftools/ffplay_renderer.c | 29 +++++++++++++++++++++++------
 fftools/ffplay_renderer.h |  2 +-
 3 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/fftools/ffplay.c b/fftools/ffplay.c
index ca5d6305f7..6529986c2b 100644
--- a/fftools/ffplay.c
+++ b/fftools/ffplay.c
@@ -1006,8 +1006,9 @@ static void video_image_display(VideoState *is)
     SDL_Rect *rect = &is->render_params.target_rect;
 
     vp = frame_queue_peek_last(&is->pictq);
+    calculate_display_rect(rect, is->xleft, is->ytop, is->width, is->height, 
vp->width, vp->height, vp->sar);
     if (vk_renderer) {
-        vk_renderer_display(vk_renderer, vp->frame);
+        vk_renderer_display(vk_renderer, vp->frame, &is->render_params);
         return;
     }
 
@@ -1056,7 +1057,6 @@ static void video_image_display(VideoState *is)
         }
     }
 
-    calculate_display_rect(rect, is->xleft, is->ytop, is->width, is->height, 
vp->width, vp->height, vp->sar);
     set_sdl_yuv_conversion_mode(vp->frame);
 
     if (!vp->uploaded) {
diff --git a/fftools/ffplay_renderer.c b/fftools/ffplay_renderer.c
index 1321452ad8..97e79f134b 100644
--- a/fftools/ffplay_renderer.c
+++ b/fftools/ffplay_renderer.c
@@ -53,7 +53,7 @@ struct VkRenderer {
 
     int (*get_hw_dev)(VkRenderer *renderer, AVBufferRef **dev);
 
-    int (*display)(VkRenderer *renderer, AVFrame *frame);
+    int (*display)(VkRenderer *renderer, AVFrame *frame, RenderParams *params);
 
     int (*resize)(VkRenderer *renderer, int width, int height);
 
@@ -702,11 +702,13 @@ static int convert_frame(VkRenderer *renderer, AVFrame 
*frame)
     return ret;
 }
 
-static int display(VkRenderer *renderer, AVFrame *frame)
+static int display(VkRenderer *renderer, AVFrame *frame, RenderParams *params)
 {
+    SDL_Rect *rect = &params->target_rect;
     struct pl_swapchain_frame swap_frame = {0};
     struct pl_frame pl_frame = {0};
     struct pl_frame target = {0};
+    struct pl_render_params pl_params = pl_render_default_params;
     RendererContext *ctx = (RendererContext *) renderer;
     int ret = 0;
     struct pl_color_space hint = {0};
@@ -731,8 +733,23 @@ static int display(VkRenderer *renderer, AVFrame *frame)
     }
 
     pl_frame_from_swapchain(&target, &swap_frame);
-    if (!pl_render_image(ctx->renderer, &pl_frame, &target,
-                         &pl_render_default_params)) {
+
+    target.crop = (pl_rect2df){.x0 = rect->x, .x1 = rect->x + rect->w,
+                               .y0 = rect->y, .y1 = rect->y + rect->h};
+    switch (params->video_background_type) {
+    case VIDEO_BACKGROUND_TILES:
+        pl_params.background = PL_CLEAR_TILES;
+        pl_params.tile_size = VIDEO_BACKGROUND_TILE_SIZE * 2;
+        break;
+    case VIDEO_BACKGROUND_COLOR:
+        pl_params.background = PL_CLEAR_COLOR;
+        for (int i = 0; i < 3; i++)
+            pl_params.background_color[i] = params->video_background_color[i] 
/ 255.0;
+        pl_params.background_transparency = (255 - 
params->video_background_color[3]) / 255.0;
+        break;
+    }
+
+    if (!pl_render_image(ctx->renderer, &pl_frame, &target, &pl_params)) {
         av_log(NULL, AV_LOG_ERROR, "pl_render_image failed\n");
         ret = AVERROR_EXTERNAL;
         goto out;
@@ -835,9 +852,9 @@ int vk_renderer_get_hw_dev(VkRenderer *renderer, 
AVBufferRef **dev)
     return renderer->get_hw_dev(renderer, dev);
 }
 
-int vk_renderer_display(VkRenderer *renderer, AVFrame *frame)
+int vk_renderer_display(VkRenderer *renderer, AVFrame *frame, RenderParams 
*render_params)
 {
-    return renderer->display(renderer, frame);
+    return renderer->display(renderer, frame, render_params);
 }
 
 int vk_renderer_resize(VkRenderer *renderer, int width, int height)
diff --git a/fftools/ffplay_renderer.h b/fftools/ffplay_renderer.h
index 05f739b3ba..655576c602 100644
--- a/fftools/ffplay_renderer.h
+++ b/fftools/ffplay_renderer.h
@@ -45,7 +45,7 @@ int vk_renderer_create(VkRenderer *renderer, SDL_Window 
*window,
 
 int vk_renderer_get_hw_dev(VkRenderer *renderer, AVBufferRef **dev);
 
-int vk_renderer_display(VkRenderer *renderer, AVFrame *frame);
+int vk_renderer_display(VkRenderer *renderer, AVFrame *frame, RenderParams 
*params);
 
 int vk_renderer_resize(VkRenderer *renderer, int width, int height);
 

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to