From 17bc969d4518fc512bbe4c77c0b04c104e03cc76 Mon Sep 17 00:00:00 2001 From: Steve Lhomme Date: Wed, 6 Mar 2024 09:38:33 +0100 Subject: [PATCH] vlc_spu: assume display module that can render subpicture regions can scale it We already require these display modules to be able to place and scale/stretch the video picture. --- include/vlc_spu.h | 3 +-- include/vlc_vout_display.h | 1 - modules/hw/mmal/vout.c | 1 - modules/stream_out/transcode/video.c | 2 +- modules/video_output/android/display.c | 1 - modules/video_output/apple/VLCSampleBufferDisplay.m | 1 - modules/video_output/caopengllayer.m | 1 - modules/video_output/libplacebo/display.c | 1 - modules/video_output/macosx.m | 1 - modules/video_output/opengl/display.c | 1 - modules/video_output/win32/direct3d11.cpp | 2 -- modules/video_output/win32/direct3d9.c | 2 -- modules/video_output/win32/glwin32.c | 1 - modules/video_output/xcb/render.c | 1 - src/video_output/video_output.c | 2 +- src/video_output/vout_subpictures.c | 4 ++-- 16 files changed, 5 insertions(+), 20 deletions(-) diff --git a/include/vlc_spu.h b/include/vlc_spu.h index 22047ebfb2..47998540af 100644 --- a/include/vlc_spu.h +++ b/include/vlc_spu.h @@ -75,14 +75,13 @@ VLC_API void spu_PutSubpicture( spu_t *, subpicture_t * ); * \param system_now the reference current time * \param pts the timestamp of the rendered frame * \param ignore_osd whether we display the OSD or not - * \param external_scale whether scaling picture is done by the client or this function * * The returned value if non NULL must be released by subpicture_Delete(). */ VLC_API struct vlc_render_subpicture * spu_Render( spu_t *spu, const vlc_fourcc_t *p_chroma_list, const video_format_t *p_fmt_dst, const video_format_t *p_fmt_src, vlc_tick_t system_now, vlc_tick_t pts, - bool ignore_osd, bool external_scale ); + bool ignore_osd ); /** * It registers a new SPU channel. diff --git a/include/vlc_vout_display.h b/include/vlc_vout_display.h index bd08a56cfd..f955f6fea1 100644 --- a/include/vlc_vout_display.h +++ b/include/vlc_vout_display.h @@ -129,7 +129,6 @@ typedef struct vout_display_cfg { * */ typedef struct { - bool can_scale_spu; /* Handles subpictures with a non default zoom factor */ const vlc_fourcc_t *subpicture_chromas; /* List of supported chromas for subpicture rendering. */ } vout_display_info_t; diff --git a/modules/hw/mmal/vout.c b/modules/hw/mmal/vout.c index f5b693c430..923cb879e5 100644 --- a/modules/hw/mmal/vout.c +++ b/modules/hw/mmal/vout.c @@ -1258,7 +1258,6 @@ static int OpenMmalVout(vout_display_t *vd, vd->info = (vout_display_info_t){ .subpicture_chromas = hw_mmal_vzc_subpicture_chromas, - .can_scale_spu = true, }; vd->ops = &ops; diff --git a/modules/stream_out/transcode/video.c b/modules/stream_out/transcode/video.c index ac7086d2b7..635bbe8163 100644 --- a/modules/stream_out/transcode/video.c +++ b/modules/stream_out/transcode/video.c @@ -469,7 +469,7 @@ static picture_t * RenderSubpictures( sout_stream_id_sys_t *id, picture_t *p_pic vlc_render_subpicture *p_subpic = spu_Render( id->p_spu, NULL, &fmt, &outfmt, vlc_tick_now(), p_pic->date, - false, false ); + false ); /* Overlay subpicture */ if( p_subpic ) diff --git a/modules/video_output/android/display.c b/modules/video_output/android/display.c index aabbe864e6..f8117c43c5 100644 --- a/modules/video_output/android/display.c +++ b/modules/video_output/android/display.c @@ -370,7 +370,6 @@ static int subpicture_OpenDisplay(vout_display_t *vd) 0 }; vd->info.subpicture_chromas = gl_subpicture_chromas; - vd->info.can_scale_spu = true; return 0; diff --git a/modules/video_output/apple/VLCSampleBufferDisplay.m b/modules/video_output/apple/VLCSampleBufferDisplay.m index 37447866cb..e57514e70d 100644 --- a/modules/video_output/apple/VLCSampleBufferDisplay.m +++ b/modules/video_output/apple/VLCSampleBufferDisplay.m @@ -673,7 +673,6 @@ static int Open (vout_display_t *vd, }; vd->info.subpicture_chromas = subfmts; - vd->info.can_scale_spu = true; return VLC_SUCCESS; } diff --git a/modules/video_output/caopengllayer.m b/modules/video_output/caopengllayer.m index 08017d6e31..8f33b0a1da 100644 --- a/modules/video_output/caopengllayer.m +++ b/modules/video_output/caopengllayer.m @@ -462,7 +462,6 @@ static int Open (vout_display_t *vd, } vd->info.subpicture_chromas = spu_chromas; - vd->info.can_scale_spu = true; vd->ops = &ops; diff --git a/modules/video_output/libplacebo/display.c b/modules/video_output/libplacebo/display.c index a060530564..49e39bb031 100644 --- a/modules/video_output/libplacebo/display.c +++ b/modules/video_output/libplacebo/display.c @@ -167,7 +167,6 @@ static int Open(vout_display_t *vd, }; vd->info.subpicture_chromas = subfmts; - vd->info.can_scale_spu = true; vd->ops = &ops; UpdateParams(vd); diff --git a/modules/video_output/macosx.m b/modules/video_output/macosx.m index 6b91477c5d..a1a825b6b5 100644 --- a/modules/video_output/macosx.m +++ b/modules/video_output/macosx.m @@ -240,7 +240,6 @@ static int Open (vout_display_t *vd, /* Setup vout_display_t once everything is fine */ vd->info.subpicture_chromas = subpicture_chromas; - vd->info.can_scale_spu = true; vd->ops = &ops; diff --git a/modules/video_output/opengl/display.c b/modules/video_output/opengl/display.c index fcfeba8bf7..0a82ba05fa 100644 --- a/modules/video_output/opengl/display.c +++ b/modules/video_output/opengl/display.c @@ -262,7 +262,6 @@ static int Open(vout_display_t *vd, sys->viewpoint = vd->cfg->viewpoint; vd->info.subpicture_chromas = spu_chromas; - vd->info.can_scale_spu = true; vd->ops = &ops; return VLC_SUCCESS; diff --git a/modules/video_output/win32/direct3d11.cpp b/modules/video_output/win32/direct3d11.cpp index ab47227547..aa6cd448e7 100644 --- a/modules/video_output/win32/direct3d11.cpp +++ b/modules/video_output/win32/direct3d11.cpp @@ -491,8 +491,6 @@ static int Open(vout_display_t *vd, vlc_window_SetTitle(vd->cfg->window, VOUT_TITLE " (Direct3D11 output)"); msg_Dbg(vd, "Direct3D11 display adapter successfully initialized"); - vd->info.can_scale_spu = true; - if (var_InheritBool(vd, "direct3d11-hw-blending") && sys->regionQuad.generic.textureFormat != NULL) { diff --git a/modules/video_output/win32/direct3d9.c b/modules/video_output/win32/direct3d9.c index eb07749d0e..907254fd73 100644 --- a/modules/video_output/win32/direct3d9.c +++ b/modules/video_output/win32/direct3d9.c @@ -1834,8 +1834,6 @@ static int Open(vout_display_t *vd, goto error; } - vd->info.can_scale_spu = true; - /* Setup vout_display now that everything is fine */ if (var_InheritBool(vd, "direct3d9-hw-blending") && sys->d3dregion_format != D3DFMT_UNKNOWN && diff --git a/modules/video_output/win32/glwin32.c b/modules/video_output/win32/glwin32.c index d2f2df7358..d7da9a04e2 100644 --- a/modules/video_output/win32/glwin32.c +++ b/modules/video_output/win32/glwin32.c @@ -197,7 +197,6 @@ static int Open(vout_display_t *vd, /* Setup vout_display now that everything is fine */ vd->info.subpicture_chromas = subpicture_chromas; - vd->info.can_scale_spu = true; vd->ops = &ops; diff --git a/modules/video_output/xcb/render.c b/modules/video_output/xcb/render.c index 16d10abec5..ad0d6c445a 100644 --- a/modules/video_output/xcb/render.c +++ b/modules/video_output/xcb/render.c @@ -735,7 +735,6 @@ static int Open(vout_display_t *vd, sys->spu_chromas[1] = 0; vd->info.subpicture_chromas = sys->spu_chromas; - vd->info.can_scale_spu = true; vd->ops = &ops; (void) ctx; diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c index 604dee1601..168ab31688 100644 --- a/src/video_output/video_output.c +++ b/src/video_output/video_output.c @@ -1129,7 +1129,7 @@ static vlc_render_subpicture *RenderSPUs(vout_thread_sys_t *sys, subpicture_chromas, spu_frame, sys->display->source, system_now, render_subtitle_date, - ignore_osd, sys->display->info.can_scale_spu); + ignore_osd); } static int PrerenderPicture(vout_thread_sys_t *sys, picture_t *filtered, diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c index d7cdb1b5e2..7625b34e44 100644 --- a/src/video_output/vout_subpictures.c +++ b/src/video_output/vout_subpictures.c @@ -2042,10 +2042,10 @@ vlc_render_subpicture *spu_Render(spu_t *spu, const video_format_t *fmt_src, vlc_tick_t system_now, vlc_tick_t render_subtitle_date, - bool ignore_osd, - bool external_scale) + bool ignore_osd) { spu_private_t *sys = spu->p; + const bool external_scale = chroma_list != NULL; /* Update sub-source chain */ vlc_mutex_lock(&sys->lock);