]> git.sesse.net Git - vlc/blobdiff - modules/video_output/msw/direct3d.c
Pass full window state to window providers
[vlc] / modules / video_output / msw / direct3d.c
index ef62ed54cdf28e28906fde3bc69e29f797b71422..f04368d25638b068a42c3a549f2a89167884a787 100644 (file)
@@ -66,7 +66,7 @@ vlc_module_begin ()
     add_bool("direct3d-desktop", false, NULL, DESKTOP_TEXT, DESKTOP_LONGTEXT, true)
 
     set_description(N_("DirectX 3D video output"))
-    set_capability("vout display", 50)
+    set_capability("vout display", 70)
     add_shortcut("direct3d_xp")
     set_callbacks(OpenVideoXP, Close)
 
@@ -74,7 +74,7 @@ vlc_module_begin ()
     linked_with_a_crap_library_which_uses_atexit()
 
     add_submodule()
-        set_capability("video output", 150)
+        set_capability("vout display", 150)
         add_shortcut("direct3d_vista")
         set_callbacks(OpenVideoVista, Close)
 vlc_module_end ()
@@ -97,11 +97,11 @@ struct picture_sys_t
 
 static int  Open(vlc_object_t *);
 
-static picture_t *Get    (vout_display_t *);
-static void       Prepare(vout_display_t *, picture_t *);
-static void       Display(vout_display_t *, picture_t *);
-static int        Control(vout_display_t *, int, va_list);
-static void       Manage (vout_display_t *);
+static picture_pool_t *Pool  (vout_display_t *, unsigned);
+static void           Prepare(vout_display_t *, picture_t *);
+static void           Display(vout_display_t *, picture_t *);
+static int            Control(vout_display_t *, int, va_list);
+static void           Manage (vout_display_t *);
 
 static int  Direct3DCreate (vout_display_t *);
 static int  Direct3DReset  (vout_display_t *);
@@ -177,7 +177,7 @@ static int Open(vlc_object_t *object)
     vd->fmt  = fmt;
     vd->info = info;
 
-    vd->get     = Get;
+    vd->pool    = Pool;
     vd->prepare = Prepare;
     vd->display = Display;
     vd->control = Control;
@@ -231,13 +231,10 @@ static void Close(vlc_object_t *object)
 }
 
 /* */
-static picture_t *Get(vout_display_t *vd)
+static picture_pool_t *Pool(vout_display_t *vd, unsigned count)
 {
-    vout_display_sys_t *sys = vd->sys;
-
-    if (!sys->pool)
-        return NULL;
-    return picture_pool_Get(sys->pool);
+    VLC_UNUSED(count);
+    return vd->sys->pool;
 }
 
 static int  Direct3DLockSurface(picture_t *);
@@ -277,27 +274,14 @@ static void Display(vout_display_t *vd, picture_t *picture)
     if (FAILED(hr)) {
         msg_Dbg(vd, "%s:%d (hr=0x%0lX)", __FUNCTION__, __LINE__, hr);
     }
-
-    if (sys->is_first_display) {
-        /* Video window is initially hidden, show it now since we got a
-         * picture to show.
-         */
-        SetWindowPos(vd->sys->hvideownd, 0, 0, 0, 0, 0,
-                     SWP_ASYNCWINDOWPOS|
-                     SWP_FRAMECHANGED|
-                     SWP_SHOWWINDOW|
-                     SWP_NOMOVE|
-                     SWP_NOSIZE|
-                     SWP_NOZORDER);
-        sys->is_first_display = false;
-    }
-
 #if 0
     VLC_UNUSED(picture);
 #else
     /* XXX See Prepare() */
     picture_Release(picture);
 #endif
+
+    CommonDisplay(vd);
 }
 static int ControlResetDevice(vout_display_t *vd)
 {
@@ -531,8 +515,10 @@ static int Direct3DFillPresentationParameters(vout_display_t *vd)
     d3dpp->Flags                  = D3DPRESENTFLAG_VIDEO;
     d3dpp->Windowed               = TRUE;
     d3dpp->hDeviceWindow          = vd->sys->hvideownd;
-    d3dpp->BackBufferWidth        = d3ddm.Width;
-    d3dpp->BackBufferHeight       = d3ddm.Height;
+    d3dpp->BackBufferWidth        = __MAX(GetSystemMetrics(SM_CXVIRTUALSCREEN),
+                                          d3ddm.Width);
+    d3dpp->BackBufferHeight       = __MAX(GetSystemMetrics(SM_CYVIRTUALSCREEN),
+                                          d3ddm.Height);
     d3dpp->SwapEffect             = D3DSWAPEFFECT_COPY;
     d3dpp->MultiSampleType        = D3DMULTISAMPLE_NONE;
     d3dpp->PresentationInterval   = D3DPRESENT_INTERVAL_DEFAULT;
@@ -540,15 +526,6 @@ static int Direct3DFillPresentationParameters(vout_display_t *vd)
     d3dpp->BackBufferCount        = 1;
     d3dpp->EnableAutoDepthStencil = FALSE;
 
-    const unsigned adapter_count = IDirect3D9_GetAdapterCount(sys->d3dobj);
-    for (unsigned i = 1; i < adapter_count; i++) {
-        hr = IDirect3D9_GetAdapterDisplayMode(sys->d3dobj, i, &d3ddm);
-        if (FAILED(hr))
-            continue;
-        d3dpp->BackBufferWidth  = __MAX(d3dpp->BackBufferWidth,  d3ddm.Width);
-        d3dpp->BackBufferHeight = __MAX(d3dpp->BackBufferHeight, d3ddm.Height);
-    }
-
     /* */
     RECT *display = &vd->sys->rect_display;
     display->left   = 0;