[vlc-devel] [PATCH 1/2] vout: use the window size to configure the vout display size
Thomas Guillem
thomas at gllm.fr
Thu Mar 26 16:31:30 CET 2020
On Wed, Mar 25, 2020, at 17:32, Rémi Denis-Courmont wrote:
> Le keskiviikkona 25. maaliskuuta 2020, 16.32.10 EET Thomas Guillem a écrit :
> > Refs #22674
> > ---
> > include/vlc_vout_display.h | 10 +++++++---
> > modules/video_output/splitter.c | 4 ++--
> > src/video_output/display.c | 23 +++++++++++++++++++----
> > src/video_output/vout_wrapper.c | 1 +
> > 4 files changed, 29 insertions(+), 9 deletions(-)
> >
> > diff --git a/include/vlc_vout_display.h b/include/vlc_vout_display.h
> > index cd183fb56c..8209f61cac 100644
> > --- a/include/vlc_vout_display.h
> > +++ b/include/vlc_vout_display.h
> > @@ -371,8 +371,8 @@ struct vout_display_t {
> > VLC_API
> > vout_display_t *vout_display_New(vlc_object_t *,
> > const video_format_t *, vlc_video_context *,
> > - const vout_display_cfg_t *, const char *module,
> > - const vout_display_owner_t *);
> > + const vout_display_cfg_t *, unsigned window_width, unsigned
> > window_height,
> > + const char *module, const vout_display_owner_t *);
>
> That's horrible and it won't scale if we need to add other window properties
> (which seems quite likely in the near term). Just put the window and its
> dimensions together in a sub-compound of the configuration.
I tried to do that. But I preferred to move the window out of this cfg struct.
cf. my next patch set.
>
> >
> > /**
> > * Destroys a video output display.
> > @@ -462,7 +462,11 @@ static inline bool vout_display_cfg_IsWindowed(const
> > vout_display_cfg_t *cfg) *
> > * This asssumes that the picture is already cropped.
> > */
> > -VLC_API void vout_display_GetDefaultDisplaySize(unsigned *width, unsigned
> > *height, const video_format_t *source, const vout_display_cfg_t *);
> > +VLC_API void vout_display_GetDefaultDisplaySize(unsigned *width, unsigned
> > *height, + const
> > video_format_t *source, +
> > const vout_display_cfg_t *, +
> > unsigned window_width, +
> > unsigned window_height);
> >
> >
> > /**
> > diff --git a/modules/video_output/splitter.c
> > b/modules/video_output/splitter.c index 71ceda4674..a8a548314c 100644
> > --- a/modules/video_output/splitter.c
> > +++ b/modules/video_output/splitter.c
> > @@ -207,7 +207,7 @@ static vout_window_t
> > *video_splitter_CreateWindow(vlc_object_t *obj, };
> >
> > vout_display_GetDefaultDisplaySize(&cfg.width, &cfg.height, source,
> > - vdcfg);
> > + vdcfg, 0, 0);
> >
> > vout_window_t *window = vout_window_New(obj, NULL, &owner);
> > if (window != NULL) {
> > @@ -288,7 +288,7 @@ static int vlc_vidsplit_Open(vout_display_t *vd,
> >
> > vdcfg.window = part->window;
> > vout_display_t *display = vout_display_New(obj, &output->fmt, ctx,
> > &vdcfg, - modname, NULL);
> > + modname, NULL, 0, 0);
> > if (display == NULL) {
> > vout_window_Disable(part->window);
> > vout_window_Delete(part->window);
> > diff --git a/src/video_output/display.c b/src/video_output/display.c
> > index 76d49ee240..6c0aa69cb8 100644
> > --- a/src/video_output/display.c
> > +++ b/src/video_output/display.c
> > @@ -100,8 +100,14 @@ static int vout_display_start(void *func, bool forced,
> > va_list ap) /* */
> > void vout_display_GetDefaultDisplaySize(unsigned *width, unsigned *height,
> > const video_format_t *source,
> > - const vout_display_cfg_t *cfg)
> > + const vout_display_cfg_t *cfg,
> > + unsigned window_width,
> > + unsigned window_height)
> > {
> > + /* The window size is either fully valid or not at all */
> > + assert((window_width == 0) == (window_height == 0));
> > +
> > + /* Requested by the user */
> > if (cfg->display.width != 0 && cfg->display.height != 0) {
> > *width = cfg->display.width;
> > *height = cfg->display.height;
> > @@ -113,7 +119,14 @@ void vout_display_GetDefaultDisplaySize(unsigned
> > *width, unsigned *height, *width = (int64_t)source->i_visible_width *
> > source->i_sar_num * cfg->display.height * cfg->display.sar.den /
> > source->i_visible_height / source->i_sar_den / cfg->display.sar.num;
> > *height = cfg->display.height;
> > - } else if (source->i_sar_num >= source->i_sar_den) {
> > + }
> > + /* Size reported by the window module */
> > + else if (window_width != 0 && window_height != 0) {
> > + *width = window_width;
> > + *height = window_height;
> > + }
> > + /* Use the original video size */
> > + else if (source->i_sar_num >= source->i_sar_den) {
> > *width = (int64_t)source->i_visible_width * source->i_sar_num *
> > cfg->display.sar.den / source->i_sar_den / cfg->display.sar.num; *height =
> > source->i_visible_height;
> > } else {
> > @@ -159,7 +172,7 @@ void vout_display_PlacePicture(vout_display_place_t
> > *place, cfg_tmp.display.width = 0;
> > cfg_tmp.display.height = 0;
> > vout_display_GetDefaultDisplaySize(&display_width, &display_height,
> > - source, &cfg_tmp);
> > + source, &cfg_tmp, 0, 0);
> > }
> >
> > const unsigned width = source->i_visible_width;
> > @@ -725,6 +738,7 @@ vout_display_t *vout_display_New(vlc_object_t *parent,
> > const video_format_t *source,
> > vlc_video_context *vctx,
> > const vout_display_cfg_t *cfg,
> > + unsigned window_width, unsigned
> > window_height, const char *module,
> > const vout_display_owner_t *owner)
> > {
> > @@ -736,7 +750,8 @@ vout_display_t *vout_display_New(vlc_object_t *parent,
> > osys->cfg = *cfg;
> > vout_display_GetDefaultDisplaySize(&osys->cfg.display.width,
> > &osys->cfg.display.height,
> > - source, &osys->cfg);
> > + source, &osys->cfg,
> > + window_width, window_height);
> > #ifdef _WIN32
> > osys->reset_pictures = false;
> > #endif
> > diff --git a/src/video_output/vout_wrapper.c
> > b/src/video_output/vout_wrapper.c index 9e5b14a56b..f92da8cfab 100644
> > --- a/src/video_output/vout_wrapper.c
> > +++ b/src/video_output/vout_wrapper.c
> > @@ -74,6 +74,7 @@ vout_display_t *vout_OpenWrapper(vout_thread_t *vout,
> > modlist = "splitter,none";
> >
> > vd = vout_display_New(VLC_OBJECT(vout), &sys->original, vctx, cfg,
> > + 0, 0,
> > modlist, &owner);
> > free(modlistbuf);
>
>
> --
> 雷米‧德尼-库尔蒙
> http://www.remlab.net/
>
>
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list