Browse Source

display: allow owner to set the fitting mode

(rather than just the fill flag)
pull/136/head
Rémi Denis-Courmont 4 years ago
parent
commit
412fc33c50
  1. 2
      include/vlc_vout_display.h
  2. 7
      src/video_output/display.c
  3. 7
      src/video_output/video_output.c
  4. 2
      src/video_output/vout_wrapper.h

2
include/vlc_vout_display.h

@ -145,7 +145,7 @@ enum vout_display_query {
VOUT_DISPLAY_CHANGE_DISPLAY_SIZE,
/**
* Notifies a change of the display fill display flag by the user.
* Notifies a change of the display fitting mode by the user.
*
* \retval VLC_SUCCESS if the display handled the change
* \retval VLC_EGENERIC if a \ref vlc_display_operations::reset_pictures

7
src/video_output/display.c

@ -545,15 +545,14 @@ void vout_display_SetSize(vout_display_t *vd, unsigned width, unsigned height)
vout_display_Reset(vd);
}
void vout_SetDisplayFilled(vout_display_t *vd, bool is_filled)
void vout_SetDisplayFitting(vout_display_t *vd, enum vlc_video_fitting fit)
{
vout_display_priv_t *osys = container_of(vd, vout_display_priv_t, display);
if (is_filled == (osys->cfg.display.fitting != VLC_VIDEO_FIT_NONE))
if (fit == osys->cfg.display.fitting)
return; /* nothing to do */
osys->cfg.display.fitting = is_filled ? VLC_VIDEO_FIT_SMALLER
: VLC_VIDEO_FIT_NONE;
osys->cfg.display.fitting = fit;
if (vout_display_Control(vd, VOUT_DISPLAY_CHANGE_DISPLAY_FILLED))
vout_display_Reset(vd);
}

7
src/video_output/video_output.c

@ -487,18 +487,19 @@ void vout_ChangeDisplaySize(vout_thread_t *vout,
void vout_ChangeDisplayFilled(vout_thread_t *vout, bool is_filled)
{
vout_thread_sys_t *sys = VOUT_THREAD_TO_SYS(vout);
enum vlc_video_fitting fit = is_filled ? VLC_VIDEO_FIT_SMALLER
: VLC_VIDEO_FIT_NONE;
assert(!sys->dummy);
vlc_mutex_lock(&sys->window_lock);
sys->display_cfg.display.fitting = is_filled ? VLC_VIDEO_FIT_SMALLER
: VLC_VIDEO_FIT_NONE;
sys->display_cfg.display.fitting = fit;
/* no window size update here */
vlc_mutex_lock(&sys->display_lock);
vlc_mutex_unlock(&sys->window_lock);
if (sys->display != NULL)
vout_SetDisplayFilled(sys->display, is_filled);
vout_SetDisplayFitting(sys->display, fit);
vlc_mutex_unlock(&sys->display_lock);
}

2
src/video_output/vout_wrapper.h

@ -34,7 +34,7 @@ bool vout_IsDisplayFiltered(vout_display_t *);
picture_t * vout_ConvertForDisplay(vout_display_t *, picture_t *);
void vout_FilterFlush(vout_display_t *);
void vout_SetDisplayFilled(vout_display_t *, bool is_filled);
void vout_SetDisplayFitting(vout_display_t *, enum vlc_video_fitting);
void vout_SetDisplayZoom(vout_display_t *, unsigned num, unsigned den);
void vout_SetDisplayAspect(vout_display_t *, unsigned num, unsigned den);
void vout_SetDisplayCrop(vout_display_t *, const struct vout_crop *);

Loading…
Cancel
Save