vlc | branch: master | Steve Lhomme <[email protected]> | Thu Jan 17 11:28:34 2019 +0100| [6871e31ebe0e7723d42d30d68c6d08f60d71fa9e] | committer: Steve Lhomme
direct3d9: update the desktop mode synchronously in manage No need to reopen the device for that. Fixes #21733 > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6871e31ebe0e7723d42d30d68c6d08f60d71fa9e --- modules/video_output/win32/direct3d9.c | 72 +--------------------------------- 1 file changed, 2 insertions(+), 70 deletions(-) diff --git a/modules/video_output/win32/direct3d9.c b/modules/video_output/win32/direct3d9.c index f296f95766..c1c75b6262 100644 --- a/modules/video_output/win32/direct3d9.c +++ b/modules/video_output/win32/direct3d9.c @@ -138,7 +138,6 @@ struct vout_display_sys_t struct { bool is_fullscreen; bool is_on_top; - RECT win; } desktop_save; // core objects @@ -157,7 +156,6 @@ struct vout_display_sys_t /* */ bool reset_device; - bool reopen_device; bool lost_not_ready; bool clear_scene; @@ -912,10 +910,6 @@ static void UpdateDesktopMode(vout_display_t *vd) /* Save non-desktop state */ sys->desktop_save.is_fullscreen = sys->sys.vdcfg.is_fullscreen; sys->desktop_save.is_on_top = sys->sys.is_on_top; - - WINDOWPLACEMENT wp = { .length = sizeof(wp), }; - GetWindowPlacement(sys->sys.hparent ? sys->sys.hparent : sys->sys.hwnd, &wp); - sys->desktop_save.win = wp.rcNormalPosition; } /* */ @@ -951,11 +945,8 @@ static void Manage (vout_display_t *vd) sys->ch_desktop = false; vlc_mutex_unlock(&sys->lock); - if (ch_desktop) { - sys->reopen_device = true; - if (vd->info.has_pictures_invalid) - vout_display_SendEventPicturesInvalid(vd); - } + if (ch_desktop) + UpdateDesktopMode(vd); /* Position Change */ if (sys->sys.changes & DX_POSITION_CHANGE) { @@ -1548,54 +1539,6 @@ static void Direct3D9Close(vout_display_t *vd) D3D9_ReleaseDevice(&sys->d3d_dev); } -static int ControlReopenDevice(vout_display_t *vd, video_format_t *fmtp) -{ - vout_display_sys_t *sys = vd->sys; - - /* */ - Direct3D9Close(vd); - if (!sys->sys.b_windowless) - EventThreadStop(sys->sys.event); - - /* */ - event_cfg_t cfg; - memset(&cfg, 0, sizeof(cfg)); - cfg.use_desktop = sys->sys.use_desktop; - if (!sys->sys.use_desktop) { - cfg.x = sys->desktop_save.win.left; - cfg.y = sys->desktop_save.win.top; - cfg.width = sys->desktop_save.win.right - sys->desktop_save.win.left; - cfg.height = sys->desktop_save.win.bottom - sys->desktop_save.win.top; - } - - event_hwnd_t hwnd; - if (!sys->sys.b_windowless && EventThreadStart(sys->sys.event, &hwnd, &cfg)) { - msg_Err(vd, "Failed to restart event thread"); - return VLC_EGENERIC; - } - sys->sys.parent_window = hwnd.parent_window; - sys->sys.hparent = hwnd.hparent; - sys->sys.hwnd = hwnd.hwnd; - sys->sys.hvideownd = hwnd.hvideownd; - sys->sys.hfswnd = hwnd.hfswnd; - SetRectEmpty(&sys->sys.rect_parent); - - /* */ - video_format_t fmt; - IDirect3DDevice9 *d3d9_device = var_InheritAddress(vd, "vout-engine-ctx"); - if (Direct3D9Open(vd, &fmt, d3d9_device)) { - CommonClean(vd); - msg_Err(vd, "Failed to reopen device"); - return VLC_EGENERIC; - } - *fmtp = fmt; - sys->sys.is_first_display = true; - - UpdateDesktopMode(vd); - - return VLC_SUCCESS; -} - static int Control(vout_display_t *vd, int query, va_list args) { vout_display_sys_t *sys = vd->sys; @@ -1612,12 +1555,6 @@ static int Control(vout_display_t *vd, int query, va_list args) return VLC_EGENERIC; } sys->reset_device = false; - } else if(sys->reopen_device) { - if (ControlReopenDevice(vd, fmt)) { - msg_Err(vd, "Failed to reopen device"); - return VLC_EGENERIC; - } - sys->reopen_device = false; } (void) cfg; return VLC_SUCCESS; @@ -1745,15 +1682,10 @@ static int Open(vout_display_t *vd, const vout_display_cfg_t *cfg, sys->sys.use_desktop = var_CreateGetBool(vd, "video-wallpaper"); sys->reset_device = false; - sys->reopen_device = false; sys->lost_not_ready = false; sys->allow_hw_yuv = var_CreateGetBool(vd, "directx-hw-yuv"); sys->desktop_save.is_fullscreen = cfg->is_fullscreen; sys->desktop_save.is_on_top = false; - sys->desktop_save.win.left = var_InheritInteger(vd, "video-x"); - sys->desktop_save.win.right = cfg->display.width; - sys->desktop_save.win.top = var_InheritInteger(vd, "video-y"); - sys->desktop_save.win.bottom = cfg->display.height; if (CommonInit(vd, d3d9_device != NULL, cfg)) goto error; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
