diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c index 1a8829efdbfe138cd3669872c5250c6ea11d7bcb..d154b53a958374da0d591b9353bd710bf83af9a4 100644 --- a/src/video_output/video_output.c +++ b/src/video_output/video_output.c @@ -196,20 +196,15 @@ static void vout_SizeWindow(vout_thread_t *vout, unsigned *restrict width, &sys->display_cfg); } -static void vout_ControlUpdateWindowSize(vout_thread_t *vout) +static void vout_UpdateWindowSize(vout_thread_t *vout) { - vout_window_t *window; + unsigned width, height; vlc_mutex_assert(&vout->p->window_lock); - window = vout->p->display_cfg.window; - if (likely(window != NULL)) { - unsigned width, height; - - vout_SizeWindow(vout, &width, &height); - msg_Dbg(window, "requested size: %ux%u", width, height); - vout_window_SetSize(window, width, height); - } + vout_SizeWindow(vout, &width, &height); + msg_Dbg(vout, "requested window size: %ux%u", width, height); + vout_window_SetSize(vout->p->display_cfg.window, width, height); } /* */ @@ -351,45 +346,33 @@ int vout_GetSnapshot(vout_thread_t *vout, } /* vout_Control* are usable by anyone at anytime */ -void vout_ControlChangeFullscreen(vout_thread_t *vout, const char *id) +void vout_ChangeFullscreen(vout_thread_t *vout, const char *id) { - vout_window_t *window; - vlc_mutex_lock(&vout->p->window_lock); - window = vout->p->display_cfg.window; - /* Window is NULL if the output was already closed by its owner. */ - if (window != NULL) - vout_window_SetFullScreen(window, id); + vout_window_SetFullScreen(vout->p->display_cfg.window, id); vlc_mutex_unlock(&vout->p->window_lock); } -void vout_ControlChangeWindowed(vout_thread_t *vout) +void vout_ChangeWindowed(vout_thread_t *vout) { - vout_window_t *window; - vlc_mutex_lock(&vout->p->window_lock); - window = vout->p->display_cfg.window; - if (window != NULL) - vout_window_UnsetFullScreen(window); + vout_window_UnsetFullScreen(vout->p->display_cfg.window); /* Attempt to reset the intended window size */ - vout_ControlUpdateWindowSize(vout); + vout_UpdateWindowSize(vout); vlc_mutex_unlock(&vout->p->window_lock); } -void vout_ControlChangeWindowState(vout_thread_t *vout, unsigned st) +void vout_ChangeWindowState(vout_thread_t *vout, unsigned st) { - vout_window_t *window; - vlc_mutex_lock(&vout->p->window_lock); - window = vout->p->display_cfg.window; - if (window != NULL) - vout_window_SetState(window, st); + vout_window_SetState(vout->p->display_cfg.window, st); vlc_mutex_unlock(&vout->p->window_lock); } -void vout_ControlChangeDisplaySize(vout_thread_t *vout, - unsigned width, unsigned height) +void vout_ChangeDisplaySize(vout_thread_t *vout, + unsigned width, unsigned height) { + /* DO NOT call this outside the vout window callbacks */ vout_control_cmd_t cmd; vout_control_cmd_Init(&cmd, VOUT_CONTROL_DISPLAY_SIZE); @@ -400,7 +383,7 @@ void vout_ControlChangeDisplaySize(vout_thread_t *vout, vout_control_Push(&vout->p->control, &cmd); } -void vout_ControlChangeDisplayFilled(vout_thread_t *vout, bool is_filled) +void vout_ChangeDisplayFilled(vout_thread_t *vout, bool is_filled) { vout_thread_sys_t *sys = vout->p; @@ -413,7 +396,7 @@ void vout_ControlChangeDisplayFilled(vout_thread_t *vout, bool is_filled) is_filled); } -void vout_ControlChangeZoom(vout_thread_t *vout, unsigned num, unsigned den) +void vout_ChangeZoom(vout_thread_t *vout, unsigned num, unsigned den) { vout_thread_sys_t *sys = vout->p; @@ -436,15 +419,15 @@ void vout_ControlChangeZoom(vout_thread_t *vout, unsigned num, unsigned den) sys->display_cfg.zoom.num = num; sys->display_cfg.zoom.den = den; - vout_ControlUpdateWindowSize(vout); + vout_UpdateWindowSize(vout); vlc_mutex_unlock(&sys->window_lock); vout_control_PushPair(&vout->p->control, VOUT_CONTROL_ZOOM, num, den); } -void vout_ControlChangeSampleAspectRatio(vout_thread_t *vout, - unsigned num, unsigned den) +void vout_ChangeSampleAspectRatio(vout_thread_t *vout, + unsigned num, unsigned den) { vout_thread_sys_t *sys = vout->p; @@ -452,15 +435,14 @@ void vout_ControlChangeSampleAspectRatio(vout_thread_t *vout, sys->source.dar.num = num; sys->source.dar.den = den; - vout_ControlUpdateWindowSize(vout); + vout_UpdateWindowSize(vout); vlc_mutex_unlock(&sys->window_lock); vout_control_PushPair(&vout->p->control, VOUT_CONTROL_ASPECT_RATIO, num, den); } -void vout_ControlChangeCropRatio(vout_thread_t *vout, - unsigned num, unsigned den) +void vout_ChangeCropRatio(vout_thread_t *vout, unsigned num, unsigned den) { vout_thread_sys_t *sys = vout->p; @@ -472,15 +454,15 @@ void vout_ControlChangeCropRatio(vout_thread_t *vout, } else sys->source.crop.mode = VOUT_CROP_NONE; - vout_ControlUpdateWindowSize(vout); + vout_UpdateWindowSize(vout); vlc_mutex_unlock(&sys->window_lock); vout_control_PushPair(&vout->p->control, VOUT_CONTROL_CROP_RATIO, num, den); } -void vout_ControlChangeCropWindow(vout_thread_t *vout, - int x, int y, int width, int height) +void vout_ChangeCropWindow(vout_thread_t *vout, + int x, int y, int width, int height) { vout_thread_sys_t *sys = vout->p; vout_control_cmd_t cmd; @@ -501,7 +483,7 @@ void vout_ControlChangeCropWindow(vout_thread_t *vout, sys->source.crop.window.width = width; sys->source.crop.window.height = height; - vout_ControlUpdateWindowSize(vout); + vout_UpdateWindowSize(vout); vlc_mutex_unlock(&sys->window_lock); vout_control_cmd_Init(&cmd, VOUT_CONTROL_CROP_WINDOW); @@ -512,8 +494,8 @@ void vout_ControlChangeCropWindow(vout_thread_t *vout, vout_control_Push(&vout->p->control, &cmd); } -void vout_ControlChangeCropBorder(vout_thread_t *vout, - int left, int top, int right, int bottom) +void vout_ChangeCropBorder(vout_thread_t *vout, + int left, int top, int right, int bottom) { vout_thread_sys_t *sys = vout->p; vout_control_cmd_t cmd; @@ -534,7 +516,7 @@ void vout_ControlChangeCropBorder(vout_thread_t *vout, sys->source.crop.border.top = top; sys->source.crop.border.bottom = bottom; - vout_ControlUpdateWindowSize(vout); + vout_UpdateWindowSize(vout); vlc_mutex_unlock(&sys->window_lock); vout_control_cmd_Init(&cmd, VOUT_CONTROL_CROP_BORDER); @@ -567,16 +549,18 @@ void vout_ControlChangeSubFilters(vout_thread_t *vout, const char *filters) vlc_mutex_unlock(&vout->p->spu_lock); } -void vout_ControlChangeSubMargin(vout_thread_t *vout, int margin) +void vout_ChangeSubMargin(vout_thread_t *vout, int margin) { + if (unlikely(vout->p->spu == NULL)) + return; + vlc_mutex_lock(&vout->p->spu_lock); - if (likely(vout->p->spu != NULL)) - spu_ChangeMargin(vout->p->spu, margin); + spu_ChangeMargin(vout->p->spu, margin); vlc_mutex_unlock(&vout->p->spu_lock); } -void vout_ControlChangeViewpoint(vout_thread_t *vout, - const vlc_viewpoint_t *p_viewpoint) +void vout_ChangeViewpoint(vout_thread_t *vout, + const vlc_viewpoint_t *p_viewpoint) { vout_thread_sys_t *sys = vout->p; vout_control_cmd_t cmd; @@ -1815,7 +1799,7 @@ vout_thread_t *vout_Request(vlc_object_t *object, sys->dpb_size = cfg->dpb_size; vlc_mutex_lock(&vout->p->window_lock); - vout_ControlUpdateWindowSize(vout); + vout_UpdateWindowSize(vout); vlc_mutex_unlock(&vout->p->window_lock); } else { vout = VoutCreate(object, cfg); diff --git a/src/video_output/vout_internal.h b/src/video_output/vout_internal.h index e7143dfc622dff3e9f6bfe32713757e68afc39c8..c4c1ffcd71b0c0823277d9a8f4085c84e3a4f2ef 100644 --- a/src/video_output/vout_internal.h +++ b/src/video_output/vout_internal.h @@ -211,22 +211,21 @@ void vout_Stop(vout_thread_t *); void vout_Close( vout_thread_t *p_vout ); /* TODO to move them to vlc_vout.h */ -void vout_ControlChangeFullscreen(vout_thread_t *, const char *id); -void vout_ControlChangeWindowed(vout_thread_t *); -void vout_ControlChangeWindowState(vout_thread_t *, unsigned state); -void vout_ControlChangeDisplaySize(vout_thread_t *, - unsigned width, unsigned height); -void vout_ControlChangeDisplayFilled(vout_thread_t *, bool is_filled); -void vout_ControlChangeZoom(vout_thread_t *, unsigned num, unsigned den); -void vout_ControlChangeSampleAspectRatio(vout_thread_t *, unsigned num, unsigned den); -void vout_ControlChangeCropRatio(vout_thread_t *, unsigned num, unsigned den); -void vout_ControlChangeCropWindow(vout_thread_t *, int x, int y, int width, int height); -void vout_ControlChangeCropBorder(vout_thread_t *, int left, int top, int right, int bottom); +void vout_ChangeFullscreen(vout_thread_t *, const char *id); +void vout_ChangeWindowed(vout_thread_t *); +void vout_ChangeWindowState(vout_thread_t *, unsigned state); +void vout_ChangeDisplaySize(vout_thread_t *, unsigned width, unsigned height); +void vout_ChangeDisplayFilled(vout_thread_t *, bool is_filled); +void vout_ChangeZoom(vout_thread_t *, unsigned num, unsigned den); +void vout_ChangeSampleAspectRatio(vout_thread_t *, unsigned num, unsigned den); +void vout_ChangeCropRatio(vout_thread_t *, unsigned num, unsigned den); +void vout_ChangeCropWindow(vout_thread_t *, int x, int y, int width, int height); +void vout_ChangeCropBorder(vout_thread_t *, int left, int top, int right, int bottom); void vout_ControlChangeFilters(vout_thread_t *, const char *); void vout_ControlChangeSubSources(vout_thread_t *, const char *); void vout_ControlChangeSubFilters(vout_thread_t *, const char *); -void vout_ControlChangeSubMargin(vout_thread_t *, int); -void vout_ControlChangeViewpoint( vout_thread_t *, const vlc_viewpoint_t *); +void vout_ChangeSubMargin(vout_thread_t *, int); +void vout_ChangeViewpoint( vout_thread_t *, const vlc_viewpoint_t *); /* */ void vout_IntfInit( vout_thread_t * ); diff --git a/src/video_output/vout_intf.c b/src/video_output/vout_intf.c index 7008cf69bdec19cd28b9e8a1327e013246aeaf48..bb9d33524191ad92cc4110085120ce9242283033 100644 --- a/src/video_output/vout_intf.c +++ b/src/video_output/vout_intf.c @@ -456,15 +456,15 @@ static int CropCallback( vlc_object_t *object, char const *cmd, unsigned left, top, right, bottom; if (sscanf(newval.psz_string, "%u:%u", &num, &den) == 2) { - vout_ControlChangeCropRatio(vout, num, den); + vout_ChangeCropRatio(vout, num, den); } else if (sscanf(newval.psz_string, "%ux%u+%u+%u", &width, &height, &x, &y) == 4) { - vout_ControlChangeCropWindow(vout, x, y, width, height); + vout_ChangeCropWindow(vout, x, y, width, height); } else if (sscanf(newval.psz_string, "%u+%u+%u+%u", &left, &top, &right, &bottom) == 4) { - vout_ControlChangeCropBorder(vout, left, top, right, bottom); + vout_ChangeCropBorder(vout, left, top, right, bottom); } else if (*newval.psz_string == '\0') { - vout_ControlChangeCropRatio(vout, 0, 0); + vout_ChangeCropRatio(vout, 0, 0); } else { msg_Err(object, "Unknown crop format (%s)", newval.psz_string); } @@ -496,9 +496,9 @@ static int AspectCallback( vlc_object_t *object, char const *cmd, if (sscanf(newval.psz_string, "%u:%u", &num, &den) == 2 && (num != 0) == (den != 0)) - vout_ControlChangeSampleAspectRatio(vout, num, den); + vout_ChangeSampleAspectRatio(vout, num, den); else if (*newval.psz_string == '\0') - vout_ControlChangeSampleAspectRatio(vout, 0, 0); + vout_ChangeSampleAspectRatio(vout, 0, 0); return VLC_SUCCESS; } @@ -508,7 +508,7 @@ static int AutoScaleCallback( vlc_object_t *obj, char const *name, vout_thread_t *p_vout = (vout_thread_t *)obj; (void) name; (void) prev; (void) data; - vout_ControlChangeDisplayFilled( p_vout, cur.b_bool ); + vout_ChangeDisplayFilled(p_vout, cur.b_bool); return VLC_SUCCESS; } @@ -518,15 +518,15 @@ static int ZoomCallback( vlc_object_t *obj, char const *name, vout_thread_t *p_vout = (vout_thread_t *)obj; (void) name; (void) prev; (void) data; - vout_ControlChangeZoom( p_vout, 1000 * cur.f_float, 1000 ); + vout_ChangeZoom(p_vout, 1000 * cur.f_float, 1000); return VLC_SUCCESS; } static int AboveCallback( vlc_object_t *obj, char const *name, vlc_value_t prev, vlc_value_t cur, void *data ) { - vout_ControlChangeWindowState( (vout_thread_t *)obj, - cur.b_bool ? VOUT_WINDOW_STATE_ABOVE : VOUT_WINDOW_STATE_NORMAL ); + vout_ChangeWindowState((vout_thread_t *)obj, + cur.b_bool ? VOUT_WINDOW_STATE_ABOVE : VOUT_WINDOW_STATE_NORMAL); (void) name; (void) prev; (void) data; return VLC_SUCCESS; } @@ -538,8 +538,8 @@ static int WallPaperCallback( vlc_object_t *obj, char const *name, if( cur.b_bool ) { - vout_ControlChangeWindowState( vout, VOUT_WINDOW_STATE_BELOW ); - vout_ControlChangeFullscreen( vout, NULL ); + vout_ChangeWindowState(vout, VOUT_WINDOW_STATE_BELOW); + vout_ChangeFullscreen(vout, NULL); } else { @@ -557,9 +557,9 @@ static int FullscreenCallback( vlc_object_t *p_this, char const *psz_cmd, (void)psz_cmd; (void) oldval; (void)p_data; if( newval.b_bool ) - vout_ControlChangeFullscreen( p_vout, NULL ); + vout_ChangeFullscreen(p_vout, NULL); else - vout_ControlChangeWindowed( p_vout ); + vout_ChangeWindowed(p_vout); return VLC_SUCCESS; } @@ -610,7 +610,7 @@ static int SubMarginCallback( vlc_object_t *p_this, char const *psz_cmd, vout_thread_t *p_vout = (vout_thread_t *)p_this; VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval); VLC_UNUSED(p_data); - vout_ControlChangeSubMargin( p_vout, newval.i_int ); + vout_ChangeSubMargin(p_vout, newval.i_int); return VLC_SUCCESS; } @@ -621,6 +621,6 @@ static int ViewpointCallback( vlc_object_t *p_this, char const *psz_cmd, VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval); VLC_UNUSED(p_data); if( newval.p_address != NULL ) - vout_ControlChangeViewpoint( p_vout, newval.p_address ); + vout_ChangeViewpoint(p_vout, newval.p_address); return VLC_SUCCESS; } diff --git a/src/video_output/window.c b/src/video_output/window.c index b14405631f718a586a7962e212590bac30785621..a09aea5f14b7a8a333928ec5e3db81586f17c296 100644 --- a/src/video_output/window.c +++ b/src/video_output/window.c @@ -152,7 +152,7 @@ static void vout_display_window_ResizeNotify(vout_window_t *window, vout_thread_t *vout = (vout_thread_t *)window->obj.parent; msg_Dbg(window, "resized to %ux%u", width, height); - vout_ControlChangeDisplaySize(vout, width, height); + vout_ChangeDisplaySize(vout, width, height); } static void vout_display_window_CloseNotify(vout_window_t *window)