[vlc-devel] [PATCH 1/2] vout: add window properties in vout_display_cfg_t
Thomas Guillem
thomas at gllm.fr
Fri Mar 27 10:39:55 CET 2020
On Fri, Mar 27, 2020, at 10:18, Rémi Denis-Courmont wrote:
> Le perjantaina 27. maaliskuuta 2020, 10.57.35 EET Thomas Guillem a écrit :
> > It should be used before the initialisation of the vd plugin. During the
> > lifetime of the vd plugin, only cfg->display size should be used.
> >
> > Refs #22674
> > ---
> > include/vlc_vout_display.h | 9 +++++++++
> > src/video_output/display.c | 29 +++++++++++++++++++++++++----
> > 2 files changed, 34 insertions(+), 4 deletions(-)
> >
> > diff --git a/include/vlc_vout_display.h b/include/vlc_vout_display.h
> > index cd183fb56c..f9fbc4e0e1 100644
> > --- a/include/vlc_vout_display.h
> > +++ b/include/vlc_vout_display.h
> > @@ -86,6 +86,7 @@ typedef struct vlc_video_align {
> > * window, as follows:
> > * - If \ref is_display_filled is set,
> > * the video size is fitted to the display size.
> > + * - If \ref window size is valid, the video size is set to the window
> > size, * - Otherwise, the video size is determined from the original video
> > format, * multiplied by the zoom factor.
> > */
> > @@ -102,6 +103,14 @@ typedef struct vout_display_cfg {
> > vlc_rational_t sar; /**< Requested sample aspect ratio */
> > } display;
> >
> > + /** Window properties (should be ignored from display modules) */
> > + struct {
> > + /** Current window width, if valid (>0), height need to be valid.
> > */
>
> Nit: Doxygen wants empty line to separate the short and long description.
>
> I am not sure if windowing systems universally treat 0 as an invalid dimension
> though.
>
> > + unsigned width;
> > + /** Current window height, if valid (>0), width need to be valid.
> > */ + unsigned height;
> > + } window_props;
>
> I would have first moved window as window.handle or something, and then added
> window.width and window.height, but whatever.
OK.
>
> > +
> > /** Alignment of the video within the window */
> > vlc_video_align_t align;
> >
> > diff --git a/src/video_output/display.c b/src/video_output/display.c
> > index 76d49ee240..de8f39a836 100644
> > --- a/src/video_output/display.c
> > +++ b/src/video_output/display.c
> > @@ -102,6 +102,9 @@ void vout_display_GetDefaultDisplaySize(unsigned *width,
> > unsigned *height, const video_format_t *source, const vout_display_cfg_t
> > *cfg) {
> > + assert((cfg->window_props.width == 0) == (cfg->window_props.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 +116,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 (cfg->window_props.width != 0) {
> > + *width = cfg->window_props.width;
> > + *height = cfg->window_props.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 {
> > @@ -137,6 +147,10 @@ void vout_display_PlacePicture(vout_display_place_t
> > *place, const video_format_t *source,
> > const vout_display_cfg_t *cfg)
> > {
> > + /* vout_display_PlacePicture() is called from vd plugins. They should
> > not + * care about the initial window properties. */
> > + assert(cfg->window_props.width == 0 && cfg->window_props.height == 0);
> > +
> > /* */
> > memset(place, 0, sizeof(*place));
> > if (cfg->display.width == 0 || cfg->display.height == 0)
> > @@ -733,10 +747,17 @@ vout_display_t *vout_display_New(vlc_object_t *parent,
> > if (unlikely(osys == NULL))
> > return NULL;
> >
> > + unsigned display_width, display_height;
> > + vout_display_GetDefaultDisplaySize(&display_width, &display_height,
> > + source, cfg);
> > +
> > osys->cfg = *cfg;
> > - vout_display_GetDefaultDisplaySize(&osys->cfg.display.width,
> > - &osys->cfg.display.height,
> > - source, &osys->cfg);
> > + /* The window size was used for the initial setup. Now it can be
> > dropped in + * favor of the calculated display size. */
> > + osys->cfg.display.width = display_width;
> > + osys->cfg.display.height = display_height;
> > + osys->cfg.window_props.width = osys->cfg.window_props.height = 0;
> > +
> > #ifdef _WIN32
> > osys->reset_pictures = false;
> > #endif
>
>
> --
> 雷米‧德尼-库尔蒙
> 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