[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