[vlc-commits] vout: win32: move each vout_display_sys_t in their respective module

Steve Lhomme git at videolan.org
Thu Feb 2 16:59:41 CET 2017


vlc | branch: master | Steve Lhomme <robUx4 at videolabs.io> | Thu Feb  2 14:54:04 2017 +0100| [a4b7b6566a886c4c185ac8cf0e33c141372467ad] | committer: Jean-Baptiste Kempf

vout: win32: move each vout_display_sys_t in their respective module

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a4b7b6566a886c4c185ac8cf0e33c141372467ad
---

 modules/video_output/win32/common.c     |  24 ++--
 modules/video_output/win32/common.h     | 187 --------------------------------
 modules/video_output/win32/direct3d11.c |  71 ++++++++++++
 modules/video_output/win32/direct3d9.c  |  44 ++++++++
 modules/video_output/win32/directdraw.c |  33 ++++++
 modules/video_output/win32/events.c     |   4 +-
 modules/video_output/win32/glwin32.c    |  11 ++
 modules/video_output/win32/wgl.c        |  10 ++
 modules/video_output/win32/wingdi.c     |  19 ++++
 9 files changed, 204 insertions(+), 199 deletions(-)

diff --git a/modules/video_output/win32/common.c b/modules/video_output/win32/common.c
index 9261169..45830a3 100644
--- a/modules/video_output/win32/common.c
+++ b/modules/video_output/win32/common.c
@@ -41,6 +41,8 @@
 #define COBJMACROS
 #include <shobjidl.h>
 
+#define vout_display_sys_win32_t vout_display_sys_t
+
 #include "common.h"
 
 #if !defined(NDEBUG) && defined(HAVE_DXGIDEBUG_H)
@@ -59,7 +61,7 @@ static void RestoreScreensaver(vout_display_t *);
 /* */
 int CommonInit(vout_display_t *vd)
 {
-    vout_display_sys_win32_t *sys = &vd->sys->sys;
+    vout_display_sys_t *sys = vd->sys;
 
     sys->hwnd      = NULL;
     sys->hvideownd = NULL;
@@ -124,7 +126,7 @@ int CommonInit(vout_display_t *vd)
 picture_pool_t *CommonPool(vout_display_t *vd, unsigned count)
 {
     VLC_UNUSED(count);
-    return vd->sys->sys.pool;
+    return vd->sys->pool;
 }
 
 /*****************************************************************************
@@ -139,7 +141,7 @@ void UpdateRects(vout_display_t *vd,
     const video_format_t *source,
     bool is_forced)
 {
-    vout_display_sys_win32_t *sys = &vd->sys->sys;
+    vout_display_sys_t *sys = vd->sys;
 #define rect_src sys->rect_src
 #define rect_src_clipped sys->rect_src_clipped
 #define rect_dest sys->rect_dest
@@ -355,7 +357,7 @@ exit:
 /* */
 void CommonClean(vout_display_t *vd)
 {
-    vout_display_sys_win32_t *sys = &vd->sys->sys;
+    vout_display_sys_t *sys = vd->sys;
     if (sys->event) {
         CommonChangeThumbnailClip(vd, false);
         EventThreadStop(sys->event);
@@ -382,7 +384,7 @@ void CommonClean(vout_display_t *vd)
 
 void CommonManage(vout_display_t *vd)
 {
-    vout_display_sys_win32_t *sys = &vd->sys->sys;
+    vout_display_sys_t *sys = vd->sys;
 
     /* We used to call the Win32 PeekMessage function here to read the window
      * messages. But since window can stay blocked into this function for a
@@ -432,7 +434,7 @@ void CommonManage(vout_display_t *vd)
  */
 void CommonDisplay(vout_display_t *vd)
 {
-    vout_display_sys_win32_t *sys = &vd->sys->sys;
+    vout_display_sys_t *sys = vd->sys;
     if (!sys->is_first_display)
         return;
 
@@ -536,7 +538,7 @@ void AlignRect(RECT *r, int align_boundary, int align_size)
 /* */
 static void CommonChangeThumbnailClip(vout_display_t *vd, bool show)
 {
-    vout_display_sys_win32_t *sys = &vd->sys->sys;
+    vout_display_sys_t *sys = vd->sys;
 
     /* Windows 7 taskbar thumbnail code */
     OSVERSIONINFO winVer;
@@ -578,7 +580,7 @@ static void CommonChangeThumbnailClip(vout_display_t *vd, bool show)
 
 static int CommonControlSetFullscreen(vout_display_t *vd, bool is_fullscreen)
 {
-    vout_display_sys_win32_t *sys = &vd->sys->sys;
+    vout_display_sys_t *sys = vd->sys;
 
 #ifdef MODULE_NAME_IS_direct3d9
     if (sys->use_desktop && is_fullscreen)
@@ -665,7 +667,7 @@ static int CommonControlSetFullscreen(vout_display_t *vd, bool is_fullscreen)
 
 int CommonControl(vout_display_t *vd, int query, va_list args)
 {
-    vout_display_sys_win32_t *sys = &vd->sys->sys;
+    vout_display_sys_t *sys = vd->sys;
 
     switch (query) {
     case VOUT_DISPLAY_CHANGE_DISPLAY_SIZE:   /* const vout_display_cfg_t *p_cfg */
@@ -741,7 +743,7 @@ int CommonControl(vout_display_t *vd, int query, va_list args)
 
 static void DisableScreensaver(vout_display_t *vd)
 {
-    vout_display_sys_win32_t *sys = &vd->sys->sys;
+    vout_display_sys_t *sys = vd->sys;
 
     /* disable screensaver by temporarily changing system settings */
     sys->i_spi_screensaveactive = 0;
@@ -758,7 +760,7 @@ static void DisableScreensaver(vout_display_t *vd)
 
 static void RestoreScreensaver(vout_display_t *vd)
 {
-    vout_display_sys_win32_t *sys = &vd->sys->sys;
+    vout_display_sys_t *sys = vd->sys;
 
     /* restore screensaver system settings */
     if (0 != sys->i_spi_screensaveactive) {
diff --git a/modules/video_output/win32/common.h b/modules/video_output/win32/common.h
index 1b84697..32474c7 100644
--- a/modules/video_output/win32/common.h
+++ b/modules/video_output/win32/common.h
@@ -23,57 +23,11 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
-#ifdef MODULE_NAME_IS_directdraw
-# include <ddraw.h>
-#endif
-#ifdef MODULE_NAME_IS_direct3d11
-# include <d3d11.h>
-# include <dxgi1_2.h>
-# include <d3dcompiler.h>
-#endif
-#ifdef MODULE_NAME_IS_direct3d9
-# include <d3d9.h>
-# include <d3dx9effect.h>
-#endif
-#if defined(MODULE_NAME_IS_glwin32) || defined(MODULE_NAME_IS_wgl)
-# include "../opengl/vout_helper.h"
-#endif
-
 /*****************************************************************************
  * event_thread_t: event thread
  *****************************************************************************/
 #include "events.h"
 
-#ifdef MODULE_NAME_IS_direct3d11
-#include "../../video_chroma/dxgi_fmt.h"
-#ifdef HAVE_ID3D11VIDEODECODER
-#include "../../video_chroma/d3d11_fmt.h"
-#endif
-typedef struct
-{
-    DXGI_FORMAT   textureFormat;
-    DXGI_FORMAT   resourceFormatYRGB;
-    DXGI_FORMAT   resourceFormatUV;
-} d3d_quad_cfg_t;
-
-typedef struct
-{
-    ID3D11Buffer              *pVertexBuffer;
-    UINT                      vertexCount;
-    ID3D11VertexShader        *d3dvertexShader;
-    ID3D11Buffer              *pIndexBuffer;
-    UINT                      indexCount;
-    ID3D11Buffer              *pVertexShaderConstants;
-    ID3D11Texture2D           *pTexture;
-    ID3D11Buffer              *pPixelShaderConstants[2];
-    UINT                       PSConstantsCount;
-    ID3D11ShaderResourceView  *d3dresViewY;
-    ID3D11ShaderResourceView  *d3dresViewUV;
-    ID3D11PixelShader         *d3dpixelShader;
-    D3D11_VIEWPORT            cropViewport;
-} d3d_quad_t;
-#endif
-
 #if VLC_WINSTORE_APP
 extern const GUID GUID_SWAPCHAIN_WIDTH;
 extern const GUID GUID_SWAPCHAIN_HEIGHT;
@@ -135,147 +89,6 @@ typedef struct vout_display_sys_win32_t
 } vout_display_sys_win32_t;
 
 
-struct vout_display_sys_t
-{
-    vout_display_sys_win32_t sys;
-#ifdef MODULE_NAME_IS_directdraw
-    /* Multi-monitor support */
-    HMONITOR             hmonitor;          /* handle of the current monitor */
-    GUID                 *display_driver;
-
-    bool   use_wallpaper;   /* show as desktop wallpaper ? */
-
-    bool   restore_overlay;
-
-    /* DDraw capabilities */
-    bool            can_blit_fourcc;
-
-    uint32_t        i_rgb_colorkey;      /* colorkey in RGB used by the overlay */
-    uint32_t        i_colorkey;                 /* colorkey used by the overlay */
-
-    COLORREF        color_bkg;
-    COLORREF        color_bkgtxt;
-
-    LPDIRECTDRAW2        ddobject;                    /* DirectDraw object */
-    LPDIRECTDRAWSURFACE2 display;                        /* Display device */
-    LPDIRECTDRAWCLIPPER  clipper;             /* clipper used for blitting */
-    HINSTANCE            hddraw_dll;       /* handle of the opened ddraw dll */
-
-    picture_sys_t        *picsys;
-
-    /* It protects the following variables */
-    vlc_mutex_t    lock;
-    bool           ch_wallpaper;
-    bool           wallpaper_requested;
-#endif
-
-#if defined(MODULE_NAME_IS_glwin32) || defined(MODULE_NAME_IS_wgl)
-    HDC                   hGLDC;
-    HGLRC                 hGLRC;
-    vlc_gl_t              *gl;
-# ifdef MODULE_NAME_IS_glwin32
-    vout_display_opengl_t *vgl;
-# endif
-    HDC                   affinityHDC; // DC for the selected GPU
-#endif
-
-#ifdef MODULE_NAME_IS_direct3d11
-#if !VLC_WINSTORE_APP
-    HINSTANCE                hdxgi_dll;        /* handle of the opened dxgi dll */
-    HINSTANCE                hd3d11_dll;       /* handle of the opened d3d11 dll */
-    HINSTANCE                hd3dcompiler_dll; /* handle of the opened d3dcompiler dll */
-    IDXGIFactory2            *dxgifactory;     /* DXGI 1.2 factory */
-    /* We should find a better way to store this or atleast a shorter name */
-    PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN OurD3D11CreateDeviceAndSwapChain;
-    PFN_D3D11_CREATE_DEVICE                OurD3D11CreateDevice;
-    pD3DCompile                            OurD3DCompile;
-#endif
-#if defined(HAVE_ID3D11VIDEODECODER)
-    HANDLE                   context_lock;     /* D3D11 Context lock necessary
-                                                  for hw decoding */
-#endif
-    IDXGISwapChain1          *dxgiswapChain;   /* DXGI 1.1 swap chain */
-    ID3D11Device             *d3ddevice;       /* D3D device */
-    ID3D11DeviceContext      *d3dcontext;      /* D3D context */
-    d3d_quad_t               picQuad;
-    d3d_quad_cfg_t           picQuadConfig;
-
-    /* staging quad to adjust visible borders */
-    d3d_quad_t               stagingQuad;
-
-    ID3D11RenderTargetView   *d3drenderTargetView;
-    ID3D11DepthStencilView   *d3ddepthStencilView;
-    const char               *d3dPxShader;
-
-    ID3D11VertexShader        *flatVSShader;
-    ID3D11VertexShader        *projectionVSShader;
-
-    // SPU
-    vlc_fourcc_t             pSubpictureChromas[2];
-    const char               *psz_rgbaPxShader;
-    ID3D11PixelShader        *pSPUPixelShader;
-    DXGI_FORMAT              d3dregion_format;
-    int                      d3dregion_count;
-    picture_t                **d3dregions;
-#endif
-
-#ifdef MODULE_NAME_IS_direct3d9
-    bool allow_hw_yuv;    /* Should we use hardware YUV->RGB conversions */
-    struct {
-        bool is_fullscreen;
-        bool is_on_top;
-        RECT win;
-    } desktop_save;
-    vout_display_cfg_t cfg_saved; /* configuration used before going into desktop mode */
-
-    // core objects
-    HINSTANCE               hd3d9_dll;       /* handle of the opened d3d9 dll */
-    HINSTANCE               hd3d9x_dll;      /* handle of the opened d3d9x dll */
-    IDirect3DPixelShader9*  d3dx_shader;
-    LPDIRECT3D9             d3dobj;
-    D3DCAPS9                d3dcaps;
-    LPDIRECT3DDEVICE9       d3ddev;
-    D3DPRESENT_PARAMETERS   d3dpp;
-    bool                    use_d3d9ex;
-
-    // scene objects
-    LPDIRECT3DTEXTURE9      d3dtex;
-    LPDIRECT3DVERTEXBUFFER9 d3dvtc;
-    D3DFORMAT               d3dregion_format;
-    int                     d3dregion_count;
-    struct d3d_region_t     *d3dregion;
-
-    picture_sys_t           *picsys;
-
-    /* */
-    bool                    reset_device;
-    bool                    reopen_device;
-    bool                    lost_not_ready;
-    bool                    clear_scene;
-
-    /* It protects the following variables */
-    vlc_mutex_t    lock;
-    bool           ch_desktop;
-    bool           desktop_requested;
-#endif
-
-#if defined(MODULE_NAME_IS_wingdi)
-    int  i_depth;
-
-    /* Our offscreen bitmap and its framebuffer */
-    HDC        off_dc;
-    HBITMAP    off_bitmap;
-
-    struct
-    {
-        BITMAPINFO bitmapinfo;
-        RGBQUAD    red;
-        RGBQUAD    green;
-        RGBQUAD    blue;
-    };
-#endif
-};
-
 /*****************************************************************************
  * Prototypes from common.c
  *****************************************************************************/
diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c
index 046b9d3..28f2bfb 100644
--- a/modules/video_output/win32/direct3d11.c
+++ b/modules/video_output/win32/direct3d11.c
@@ -40,6 +40,8 @@
 #define COBJMACROS
 #include <initguid.h>
 #include <d3d11.h>
+#include <dxgi1_2.h>
+#include <d3dcompiler.h>
 
 /* avoided until we can pass ISwapchainPanel without c++/cx mode
 # include <windows.ui.xaml.media.dxinterop.h> */
@@ -87,6 +89,75 @@ vlc_module_begin ()
     set_callbacks(Open, Close)
 vlc_module_end ()
 
+/* A Quad is texture that can be displayed in a rectangle */
+typedef struct
+{
+    DXGI_FORMAT   textureFormat;
+    DXGI_FORMAT   resourceFormatYRGB;
+    DXGI_FORMAT   resourceFormatUV;
+} d3d_quad_cfg_t;
+
+typedef struct
+{
+    ID3D11Buffer              *pVertexBuffer;
+    UINT                      vertexCount;
+    ID3D11VertexShader        *d3dvertexShader;
+    ID3D11Buffer              *pIndexBuffer;
+    UINT                      indexCount;
+    ID3D11Buffer              *pVertexShaderConstants;
+    picture_sys_t             picSys;
+    ID3D11Texture2D           *pTexture;
+    ID3D11Buffer              *pPixelShaderConstants[2];
+    UINT                       PSConstantsCount;
+    ID3D11ShaderResourceView  *d3dresViewY;
+    ID3D11ShaderResourceView  *d3dresViewUV;
+    ID3D11PixelShader         *d3dpixelShader;
+    D3D11_VIEWPORT            cropViewport;
+} d3d_quad_t;
+
+struct vout_display_sys_t
+{
+    vout_display_sys_win32_t sys;
+
+#if !VLC_WINSTORE_APP
+    HINSTANCE                hdxgi_dll;        /* handle of the opened dxgi dll */
+    HINSTANCE                hd3d11_dll;       /* handle of the opened d3d11 dll */
+    HINSTANCE                hd3dcompiler_dll; /* handle of the opened d3dcompiler dll */
+    IDXGIFactory2            *dxgifactory;     /* DXGI 1.2 factory */
+    /* We should find a better way to store this or atleast a shorter name */
+    PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN OurD3D11CreateDeviceAndSwapChain;
+    PFN_D3D11_CREATE_DEVICE                OurD3D11CreateDevice;
+    pD3DCompile                            OurD3DCompile;
+#endif
+#if defined(HAVE_ID3D11VIDEODECODER)
+    HANDLE                   context_lock;     /* D3D11 Context lock necessary
+                                                  for hw decoding */
+#endif
+    IDXGISwapChain1          *dxgiswapChain;   /* DXGI 1.1 swap chain */
+    ID3D11Device             *d3ddevice;       /* D3D device */
+    ID3D11DeviceContext      *d3dcontext;      /* D3D context */
+    d3d_quad_t               picQuad;
+    d3d_quad_cfg_t       picQuadConfig;
+
+    /* staging quad to adjust visible borders */
+    d3d_quad_t               stagingQuad;
+
+    ID3D11RenderTargetView   *d3drenderTargetView;
+    ID3D11DepthStencilView   *d3ddepthStencilView;
+    const char               *d3dPxShader;
+
+    ID3D11VertexShader        *flatVSShader;
+    ID3D11VertexShader        *projectionVSShader;
+
+    // SPU
+    vlc_fourcc_t             pSubpictureChromas[2];
+    const char               *psz_rgbaPxShader;
+    ID3D11PixelShader        *pSPUPixelShader;
+    DXGI_FORMAT              d3dregion_format;
+    int                      d3dregion_count;
+    picture_t                **d3dregions;
+};
+
 /* internal picture_t pool  */
 typedef struct
 {
diff --git a/modules/video_output/win32/direct3d9.c b/modules/video_output/win32/direct3d9.c
index 0908d71..c0379dc 100644
--- a/modules/video_output/win32/direct3d9.c
+++ b/modules/video_output/win32/direct3d9.c
@@ -47,6 +47,7 @@
 
 #include <windows.h>
 #include <d3d9.h>
+#include <d3dx9effect.h>
 
 #include "common.h"
 #include "builtin_shaders.h"
@@ -104,6 +105,49 @@ static const vlc_fourcc_t d3d_subpicture_chromas[] = {
     0
 };
 
+struct vout_display_sys_t
+{
+    vout_display_sys_win32_t sys;
+
+    bool allow_hw_yuv;    /* Should we use hardware YUV->RGB conversions */
+    struct {
+        bool is_fullscreen;
+        bool is_on_top;
+        RECT win;
+    } desktop_save;
+    vout_display_cfg_t cfg_saved; /* configuration used before going into desktop mode */
+
+    // core objects
+    HINSTANCE               hd3d9_dll;       /* handle of the opened d3d9 dll */
+    HINSTANCE               hd3d9x_dll;      /* handle of the opened d3d9x dll */
+    IDirect3DPixelShader9*  d3dx_shader;
+    LPDIRECT3D9             d3dobj;
+    D3DCAPS9                d3dcaps;
+    LPDIRECT3DDEVICE9       d3ddev;
+    D3DPRESENT_PARAMETERS   d3dpp;
+    bool                    use_d3d9ex;
+
+    // scene objects
+    LPDIRECT3DTEXTURE9      d3dtex;
+    LPDIRECT3DVERTEXBUFFER9 d3dvtc;
+    D3DFORMAT               d3dregion_format;
+    int                     d3dregion_count;
+    struct d3d_region_t     *d3dregion;
+
+    picture_sys_t           *picsys;
+
+    /* */
+    bool                    reset_device;
+    bool                    reopen_device;
+    bool                    lost_not_ready;
+    bool                    clear_scene;
+
+    /* It protects the following variables */
+    vlc_mutex_t    lock;
+    bool           ch_desktop;
+    bool           desktop_requested;
+};
+
 struct picture_sys_t
 {
     LPDIRECT3DSURFACE9 surface;
diff --git a/modules/video_output/win32/directdraw.c b/modules/video_output/win32/directdraw.c
index 3f7cff6..d3c5931 100644
--- a/modules/video_output/win32/directdraw.c
+++ b/modules/video_output/win32/directdraw.c
@@ -129,6 +129,39 @@ struct picture_sys_t {
     picture_t            *fallback;
 };
 
+struct vout_display_sys_t
+{
+    vout_display_sys_win32_t sys;
+    /* Multi-monitor support */
+    HMONITOR             hmonitor;          /* handle of the current monitor */
+    GUID                 *display_driver;
+
+    bool   use_wallpaper;   /* show as desktop wallpaper ? */
+
+    bool   restore_overlay;
+
+    /* DDraw capabilities */
+    bool            can_blit_fourcc;
+
+    uint32_t        i_rgb_colorkey;      /* colorkey in RGB used by the overlay */
+    uint32_t        i_colorkey;                 /* colorkey used by the overlay */
+
+    COLORREF        color_bkg;
+    COLORREF        color_bkgtxt;
+
+    LPDIRECTDRAW2        ddobject;                    /* DirectDraw object */
+    LPDIRECTDRAWSURFACE2 display;                        /* Display device */
+    LPDIRECTDRAWCLIPPER  clipper;             /* clipper used for blitting */
+    HINSTANCE            hddraw_dll;       /* handle of the opened ddraw dll */
+
+    picture_sys_t        *picsys;
+
+    /* It protects the following variables */
+    vlc_mutex_t    lock;
+    bool           ch_wallpaper;
+    bool           wallpaper_requested;
+};
+
 /*****************************************************************************
  * DirectDraw GUIDs.
  * Defining them here allows us to get rid of the dxguid library during
diff --git a/modules/video_output/win32/events.c b/modules/video_output/win32/events.c
index 23e2eb7..231086c 100644
--- a/modules/video_output/win32/events.c
+++ b/modules/video_output/win32/events.c
@@ -41,6 +41,8 @@
 #include <windowsx.h>                                        /* GET_X_LPARAM */
 #include <shellapi.h>                                         /* ExtractIcon */
 
+#define vout_display_sys_win32_t vout_display_sys_t
+
 #include "common.h"
 
 /*****************************************************************************
@@ -1020,7 +1022,7 @@ static long FAR PASCAL WinVoutEventProc( HWND hwnd, UINT message,
         case IDM_TOGGLE_ON_TOP:            /* toggle the "on top" status */
         {
             msg_Dbg(vd, "WinProc WM_SYSCOMMAND: IDM_TOGGLE_ON_TOP");
-            HMENU hMenu = GetSystemMenu(vd->sys->sys.hwnd, FALSE);
+            HMENU hMenu = GetSystemMenu(vd->sys->hwnd, FALSE);
             vout_display_SendWindowState(vd, (GetMenuState(hMenu, IDM_TOGGLE_ON_TOP, MF_BYCOMMAND) & MF_CHECKED) ?
                     VOUT_WINDOW_STATE_NORMAL : VOUT_WINDOW_STATE_ABOVE);
             return 0;
diff --git a/modules/video_output/win32/glwin32.c b/modules/video_output/win32/glwin32.c
index 4b4e437..4b94a28 100644
--- a/modules/video_output/win32/glwin32.c
+++ b/modules/video_output/win32/glwin32.c
@@ -60,6 +60,17 @@ vlc_module_end()
 /*****************************************************************************
  * Local prototypes.
  *****************************************************************************/
+struct vout_display_sys_t
+{
+    vout_display_sys_win32_t sys;
+
+    HDC                   hGLDC;
+    HGLRC                 hGLRC;
+    vlc_gl_t              *gl;
+    vout_display_opengl_t *vgl;
+    HDC                   affinityHDC; // DC for the selected GPU
+};
+
 static picture_pool_t *Pool  (vout_display_t *, unsigned);
 static void           Prepare(vout_display_t *, picture_t *, subpicture_t *);
 static void           Display(vout_display_t *, picture_t *, subpicture_t *);
diff --git a/modules/video_output/win32/wgl.c b/modules/video_output/win32/wgl.c
index 8d47612..3baee6e 100644
--- a/modules/video_output/win32/wgl.c
+++ b/modules/video_output/win32/wgl.c
@@ -58,6 +58,16 @@ vlc_module_end()
  * Local prototypes.
  *****************************************************************************/
 
+struct vout_display_sys_t
+{
+    vout_display_sys_win32_t sys;
+
+    HDC                   hGLDC;
+    HGLRC                 hGLRC;
+    vlc_gl_t              *gl;
+    HDC                   affinityHDC; // DC for the selected GPU
+};
+
 static void          Swap(vlc_gl_t *);
 static void          *OurGetProcAddress(vlc_gl_t *, const char *);
 static int           MakeCurrent(vlc_gl_t *gl);
diff --git a/modules/video_output/win32/wingdi.c b/modules/video_output/win32/wingdi.c
index b496603..4dc43a7 100644
--- a/modules/video_output/win32/wingdi.c
+++ b/modules/video_output/win32/wingdi.c
@@ -58,6 +58,25 @@ vlc_module_end ()
 /*****************************************************************************
  * Local prototypes
  *****************************************************************************/
+struct vout_display_sys_t
+{
+    vout_display_sys_win32_t sys;
+
+    int  i_depth;
+
+    /* Our offscreen bitmap and its framebuffer */
+    HDC        off_dc;
+    HBITMAP    off_bitmap;
+
+    struct
+    {
+        BITMAPINFO bitmapinfo;
+        RGBQUAD    red;
+        RGBQUAD    green;
+        RGBQUAD    blue;
+    };
+};
+
 static picture_pool_t *Pool  (vout_display_t *, unsigned);
 static void           Display(vout_display_t *, picture_t *, subpicture_t *subpicture);
 static int            Control(vout_display_t *, int, va_list);



More information about the vlc-commits mailing list