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 = ¶ms->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]
