1
/*****************************************************************************
2
* vout.h: Windows video output header file
3
*****************************************************************************
4
* Copyright (C) 2001-2004 the VideoLAN team
5
* $Id: 52bf8169cdb6c3828e1ee088e645ae24628a4220 $
7
* Authors: Gildas Bazin <gbazin@videolan.org>
8
* Damien Fouilleul <damienf@videolan.org>
10
* This program is free software; you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License as published by
12
* the Free Software Foundation; either version 2 of the License, or
13
* (at your option) any later version.
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU General Public License for more details.
20
* You should have received a copy of the GNU General Public License
21
* along with this program; if not, write to the Free Software
22
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23
*****************************************************************************/
25
/*****************************************************************************
26
* event_thread_t: event thread
27
*****************************************************************************/
28
typedef struct event_thread_t
32
vout_thread_t * p_vout;
36
/*****************************************************************************
37
* vout_sys_t: video output method descriptor
38
*****************************************************************************
39
* This structure is part of the video output thread descriptor.
40
* It describes the module specific properties of an output thread.
41
*****************************************************************************/
44
HWND hwnd; /* Handle of the main window */
45
HWND hvideownd; /* Handle of the video sub-window */
46
HWND hparent; /* Handle of the parent window */
47
HWND hfswnd; /* Handle of the fullscreen window */
48
WNDPROC pf_wndproc; /* Window handling callback */
50
/* Multi-monitor support */
51
HMONITOR hmonitor; /* handle of the current monitor */
52
GUID *p_display_driver;
53
HMONITOR (WINAPI* MonitorFromWindow)( HWND, DWORD );
54
BOOL (WINAPI* GetMonitorInfo)( HMONITOR, LPMONITORINFO );
56
/* size of the display */
60
/* size of the overall window (including black bands) */
63
/* Window position and size */
70
volatile uint16_t i_changes; /* changes made to the video display */
73
volatile bool b_cursor_hidden;
74
volatile mtime_t i_lastmoved;
75
mtime_t i_mouse_hide_timeout;
82
/* screensaver system settings to be restored when vout is closed */
83
UINT i_spi_lowpowertimeout;
84
UINT i_spi_powerofftimeout;
85
UINT i_spi_screensavetimeout;
89
/* Coordinates of src and dest images (used when blitting to display) */
91
RECT rect_src_clipped;
93
RECT rect_dest_clipped;
95
bool b_hw_yuv; /* Should we use hardware YUV->RGB conversions */
98
#ifdef MODULE_NAME_IS_vout_directx
99
/* Overlay alignment restrictions */
100
int i_align_src_boundary;
101
int i_align_src_size;
102
int i_align_dest_boundary;
103
int i_align_dest_size;
105
bool b_wallpaper; /* show as desktop wallpaper ? */
107
bool b_using_overlay; /* Are we using an overlay surface */
108
bool b_use_sysmem; /* Should we use system memory for surfaces */
109
bool b_3buf_overlay; /* Should we use triple buffered overlays */
111
/* DDraw capabilities */
112
int b_caps_overlay_clipping;
114
int i_rgb_colorkey; /* colorkey in RGB used by the overlay */
115
int i_colorkey; /* colorkey used by the overlay */
118
COLORREF color_bkgtxt;
120
LPDIRECTDRAW2 p_ddobject; /* DirectDraw object */
121
LPDIRECTDRAWSURFACE2 p_display; /* Display device */
122
LPDIRECTDRAWSURFACE2 p_current_surface; /* surface currently displayed */
123
LPDIRECTDRAWCLIPPER p_clipper; /* clipper used for blitting */
124
HINSTANCE hddraw_dll; /* handle of the opened ddraw dll */
127
#ifdef MODULE_NAME_IS_glwin32
132
#ifdef MODULE_NAME_IS_direct3d
134
HINSTANCE hd3d9_dll; /* handle of the opened d3d9 dll */
135
LPDIRECT3D9 p_d3dobj;
136
LPDIRECT3DDEVICE9 p_d3ddev;
139
LPDIRECT3DTEXTURE9 p_d3dtex;
140
LPDIRECT3DVERTEXBUFFER9 p_d3dvtc;
143
#ifdef MODULE_NAME_IS_wingdi
147
/* Our offscreen bitmap and its framebuffer */
150
uint8_t * p_pic_buffer;
152
int i_pic_pixel_pitch;
154
BITMAPINFO bitmapinfo;
160
#ifdef MODULE_NAME_IS_wingapi
168
HINSTANCE gapi_dll; /* handle of the opened gapi dll */
171
int (*GXOpenDisplay)( HWND hWnd, DWORD dwFlags );
172
int (*GXCloseDisplay)();
173
void *(*GXBeginDraw)();
175
GXDisplayProperties (*GXGetDisplayProperties)();
181
/* suspend display */
182
bool b_suspend_display;
185
event_thread_t *p_event;
189
/*****************************************************************************
190
* Prototypes from directx.c
191
*****************************************************************************/
192
int DirectDrawUpdateOverlay( vout_thread_t *p_vout );
194
/*****************************************************************************
195
* Prototypes from events.c
196
*****************************************************************************/
197
void* EventThread ( vlc_object_t *p_this );
198
void UpdateRects ( vout_thread_t *p_vout, bool b_force );
199
void Win32ToggleFullscreen ( vout_thread_t *p_vout );
201
/*****************************************************************************
203
*****************************************************************************/
204
#define WM_VLC_HIDE_MOUSE WM_APP
205
#define WM_VLC_SHOW_MOUSE WM_APP + 1
206
#define WM_VLC_CHANGE_TEXT WM_APP + 2
207
#define IDM_TOGGLE_ON_TOP WM_USER + 1
208
#define DX_POSITION_CHANGE 0x1000
209
#define DX_WALLPAPER_CHANGE 0x2000
211
/*****************************************************************************
213
*****************************************************************************/
216
#define AdjustWindowRect(a,b,c)
218
#ifndef GCL_HBRBACKGROUND
219
# define GCL_HBRBACKGROUND (-10)
222
#define FindWindowEx(a,b,c,d) 0
224
#define GetWindowPlacement(a,b)
225
#define SetWindowPlacement(a,b)
226
typedef struct _WINDOWPLACEMENT {
232
RECT rcNormalPosition;
235
#ifndef WM_NCMOUSEMOVE
236
# define WM_NCMOUSEMOVE 160
241
#ifndef SC_SCREENSAVE
242
# define SC_SCREENSAVE 0xF140
244
#ifndef SC_MONITORPOWER
245
# define SC_MONITORPOWER 0xF170
248
# define WM_NCPAINT 133
250
#ifndef WS_OVERLAPPEDWINDOW
251
# define WS_OVERLAPPEDWINDOW 0xcf0000
253
#ifndef WS_EX_NOPARENTNOTIFY
254
# define WS_EX_NOPARENTNOTIFY 4
256
#ifndef WS_EX_APPWINDOW
257
#define WS_EX_APPWINDOW 0x40000
260
#define SetWindowLongPtr SetWindowLong
261
#define GetWindowLongPtr GetWindowLong
262
#define GWLP_USERDATA GWL_USERDATA