Mercurial > mplayer.hg
annotate libvo/vo_directx.c @ 33259:04dc3e55cd90
Increase the maximum value of the DVB timeout to 240 seconds.
Some devices may need more time for the initial tune (e.g. firmware loading).
Let the user specify higher timeout value if there is need to.
The default remains 30 seconds.
author | iive |
---|---|
date | Sun, 01 May 2011 18:07:59 +0000 |
parents | 8fa2f43cb760 |
children | 899d817e56fc |
rev | line source |
---|---|
26739
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25962
diff
changeset
|
1 /* |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25962
diff
changeset
|
2 * Directx v2 or later DirectDraw interface |
7537 | 3 * |
26739
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25962
diff
changeset
|
4 * Copyright (c) 2002 - 2005 Sascha Sommer <saschasommer@freenet.de> |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25962
diff
changeset
|
5 * |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25962
diff
changeset
|
6 * This file is part of MPlayer. |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25962
diff
changeset
|
7 * |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25962
diff
changeset
|
8 * MPlayer is free software; you can redistribute it and/or modify |
7537 | 9 * it under the terms of the GNU General Public License as published by |
10 * the Free Software Foundation; either version 2 of the License, or | |
11 * (at your option) any later version. | |
12 * | |
26739
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25962
diff
changeset
|
13 * MPlayer is distributed in the hope that it will be useful, |
7537 | 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 * GNU General Public License for more details. | |
17 * | |
26739
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25962
diff
changeset
|
18 * You should have received a copy of the GNU General Public License along |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25962
diff
changeset
|
19 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25962
diff
changeset
|
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25962
diff
changeset
|
21 */ |
7537 | 22 |
23 #include <windows.h> | |
24 #include <windowsx.h> | |
25 #include <ddraw.h> | |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
26 #include <stdio.h> |
7537 | 27 #include <stdlib.h> |
28 #include <errno.h> | |
29 #include "config.h" | |
30 #include "video_out.h" | |
31 #include "video_out_internal.h" | |
32 #include "fastmemcpy.h" | |
13787
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13775
diff
changeset
|
33 #include "input/input.h" |
30653
3d23e24c5c60
Declare externally used variables from vd.c as extern in vd.h.
diego
parents:
30301
diff
changeset
|
34 #include "libmpcodecs/vd.h" |
13787
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13775
diff
changeset
|
35 #include "osdep/keycodes.h" |
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13775
diff
changeset
|
36 #include "input/mouse.h" |
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13775
diff
changeset
|
37 #include "mp_msg.h" |
8519 | 38 #include "aspect.h" |
10900 | 39 #include "geometry.h" |
22823
98eaf29b5dee
Code cleanup: don't include a .c file in mplayer.c and fix a few
rathann
parents:
22459
diff
changeset
|
40 #include "mp_fifo.h" |
32467 | 41 #include "sub/sub.h" |
7537 | 42 |
27343 | 43 #ifdef CONFIG_GUI |
23077 | 44 #include "gui/interface.h" |
18913 | 45 #endif |
46 | |
13157 | 47 #ifndef WM_XBUTTONDOWN |
48 # define WM_XBUTTONDOWN 0x020B | |
49 # define WM_XBUTTONUP 0x020C | |
50 # define WM_XBUTTONDBLCLK 0x020D | |
51 #endif | |
52 | |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
53 #define WNDCLASSNAME_WINDOWED "MPlayer - The Movie Player" |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
54 #define WNDCLASSNAME_FULLSCREEN "MPlayer - Fullscreen" |
16966 | 55 #define WNDSTYLE WS_OVERLAPPEDWINDOW|WS_SIZEBOX |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
56 |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
57 static LPDIRECTDRAWCOLORCONTROL g_cc = NULL; //color control interface |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
58 static LPDIRECTDRAW7 g_lpdd = NULL; //DirectDraw Object |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
59 static LPDIRECTDRAWSURFACE7 g_lpddsPrimary = NULL; //Primary Surface: viewport through the Desktop |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
60 static LPDIRECTDRAWSURFACE7 g_lpddsOverlay = NULL; //Overlay Surface |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
61 static LPDIRECTDRAWSURFACE7 g_lpddsBack = NULL; //Back surface |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
62 static LPDIRECTDRAWCLIPPER g_lpddclipper; //clipper object, can only be used without overlay |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
63 static DDSURFACEDESC2 ddsdsf; //surface descripiton needed for locking |
7778
f804db78f704
10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents:
7713
diff
changeset
|
64 static HINSTANCE hddraw_dll; //handle to ddraw.dll |
7537 | 65 static RECT rd; //rect of our stretched image |
66 static RECT rs; //rect of our source image | |
67 static HWND hWnd=NULL; //handle to the window | |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
68 static HWND hWndFS=NULL; //fullscreen window |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
69 static HBRUSH colorbrush = NULL; // Handle to colorkey brush |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
70 static HBRUSH blackbrush = NULL; // Handle to black brush |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
71 static HICON mplayericon = NULL; // Handle to mplayer icon |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
72 static HCURSOR mplayercursor = NULL; // Handle to mplayer cursor |
7537 | 73 static uint32_t image_width, image_height; //image width and height |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
74 static uint32_t d_image_width, d_image_height; //image width and height zoomed |
7537 | 75 static uint8_t *image=NULL; //image data |
24833 | 76 static void* tmp_image = NULL; |
10640
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
77 static uint32_t image_format=0; //image format |
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
78 static uint32_t primary_image_format; |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
79 static uint32_t vm_height=0; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
80 static uint32_t vm_width=0; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
81 static uint32_t vm_bpp=0; |
7537 | 82 static uint32_t dstride; //surface stride |
7682 | 83 static uint32_t nooverlay = 0; //NonOverlay mode |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
84 static DWORD destcolorkey; //colorkey for our surface |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
85 static COLORREF windowcolor = RGB(0,0,16); //windowcolor == colorkey |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
86 static int adapter_count=0; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
87 static GUID selected_guid; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
88 static GUID *selected_guid_ptr = NULL; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
89 static RECT monitor_rect; //monitor coordinates |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
90 static float window_aspect; |
14253 | 91 static BOOL (WINAPI* myGetMonitorInfo)(HMONITOR, LPMONITORINFO) = NULL; |
17853
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
92 static RECT last_rect = {0xDEADC0DE, 0xDEADC0DE, 0xDEADC0DE, 0xDEADC0DE}; |
7537 | 93 |
94 /***************************************************************************** | |
95 * DirectDraw GUIDs. | |
96 * Defining them here allows us to get rid of the dxguid library during | |
97 * the linking stage. | |
98 *****************************************************************************/ | |
30301
a33cf9c69731
Change GUID declarations in vo_directx to be static.
reimar
parents:
29263
diff
changeset
|
99 #define IID_IDirectDraw7 MP_IID_IDirectDraw7 |
a33cf9c69731
Change GUID declarations in vo_directx to be static.
reimar
parents:
29263
diff
changeset
|
100 static const GUID MP_IID_IDirectDraw7 = |
8667 | 101 { |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
102 0x15e65ec0,0x3b9c,0x11d2,{0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b} |
8667 | 103 }; |
7537 | 104 |
30301
a33cf9c69731
Change GUID declarations in vo_directx to be static.
reimar
parents:
29263
diff
changeset
|
105 #define IID_IDirectDrawColorControl MP_IID_IDirectDrawColorControl |
a33cf9c69731
Change GUID declarations in vo_directx to be static.
reimar
parents:
29263
diff
changeset
|
106 static const GUID MP_IID_IDirectDrawColorControl = |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
107 { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
108 0x4b9f0ee0,0x0d7e,0x11d0,{0x9b,0x06,0x00,0xa0,0xc9,0x03,0xa3,0xb8} |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
109 }; |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
110 |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
111 |
7537 | 112 typedef struct directx_fourcc_caps |
113 { | |
114 char* img_format_name; //human readable name | |
115 uint32_t img_format; //as MPlayer image format | |
116 uint32_t drv_caps; //what hw supports with this format | |
117 DDPIXELFORMAT g_ddpfOverlay; //as Directx Sourface description | |
118 } directx_fourcc_caps; | |
119 | |
120 | |
121 static directx_fourcc_caps g_ddpf[] = | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
122 { |
7537 | 123 {"YV12 ",IMGFMT_YV12 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','V','1','2'),0,0,0,0,0}}, |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
124 {"I420 ",IMGFMT_I420 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('I','4','2','0'),0,0,0,0,0}}, //yv12 with swapped uv |
7537 | 125 {"IYUV ",IMGFMT_IYUV ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('I','Y','U','V'),0,0,0,0,0}}, //same as i420 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
126 {"YVU9 ",IMGFMT_YVU9 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','V','U','9'),0,0,0,0,0}}, |
7537 | 127 {"YUY2 ",IMGFMT_YUY2 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','U','Y','2'),0,0,0,0,0}}, |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
128 {"UYVY ",IMGFMT_UYVY ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('U','Y','V','Y'),0,0,0,0,0}}, |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
129 {"BGR8 ",IMGFMT_BGR8 ,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 8, 0x00000000, 0x00000000, 0x00000000, 0}}, |
7537 | 130 {"RGB15",IMGFMT_RGB15,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000001F, 0x000003E0, 0x00007C00, 0}}, //RGB 5:5:5 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
131 {"BGR15",IMGFMT_BGR15,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x00007C00, 0x000003E0, 0x0000001F, 0}}, |
10647 | 132 {"RGB16",IMGFMT_RGB16,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000001F, 0x000007E0, 0x0000F800, 0}}, //RGB 5:6:5 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
133 {"BGR16",IMGFMT_BGR16,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000F800, 0x000007E0, 0x0000001F, 0}}, |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
134 {"RGB24",IMGFMT_RGB24,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 24, 0x000000FF, 0x0000FF00, 0x00FF0000, 0}}, |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
135 {"BGR24",IMGFMT_BGR24,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 24, 0x00FF0000, 0x0000FF00, 0x000000FF, 0}}, |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
136 {"RGB32",IMGFMT_RGB32,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0}}, |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
137 {"BGR32",IMGFMT_BGR32,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x00FF0000, 0x0000FF00, 0x000000FF, 0}} |
7537 | 138 }; |
139 #define NUM_FORMATS (sizeof(g_ddpf) / sizeof(g_ddpf[0])) | |
140 | |
25216 | 141 static const vo_info_t info = |
7537 | 142 { |
143 "Directx DDraw YUV/RGB/BGR renderer", | |
144 "directx", | |
145 "Sascha Sommer <saschasommer@freenet.de>", | |
146 "" | |
147 }; | |
148 | |
25220
c9e9ac2008c2
Mark the vo_functions_t definitions as const where possible.
reimar
parents:
25216
diff
changeset
|
149 const LIBVO_EXTERN(directx) |
7537 | 150 |
151 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, | |
152 unsigned char *srca, int stride) | |
153 { | |
154 switch(image_format) { | |
155 case IMGFMT_YV12 : | |
156 case IMGFMT_I420 : | |
157 case IMGFMT_IYUV : | |
158 case IMGFMT_YVU9 : | |
8495 | 159 vo_draw_alpha_yv12(w,h,src,srca,stride,((uint8_t *) image) + dstride*y0 + x0,dstride); |
7537 | 160 break; |
161 case IMGFMT_YUY2 : | |
8495 | 162 vo_draw_alpha_yuy2(w,h,src,srca,stride,((uint8_t *) image)+ dstride*y0 + 2*x0 ,dstride); |
7537 | 163 break; |
164 case IMGFMT_UYVY : | |
8495 | 165 vo_draw_alpha_yuy2(w,h,src,srca,stride,((uint8_t *) image) + dstride*y0 + 2*x0 + 1,dstride); |
7537 | 166 break; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
167 case IMGFMT_RGB15: |
7537 | 168 case IMGFMT_BGR15: |
169 vo_draw_alpha_rgb15(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+2*x0,dstride); | |
170 break; | |
171 case IMGFMT_RGB16: | |
172 case IMGFMT_BGR16: | |
173 vo_draw_alpha_rgb16(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+2*x0,dstride); | |
174 break; | |
175 case IMGFMT_RGB24: | |
176 case IMGFMT_BGR24: | |
177 vo_draw_alpha_rgb24(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+4*x0,dstride); | |
178 break; | |
179 case IMGFMT_RGB32: | |
180 case IMGFMT_BGR32: | |
181 vo_draw_alpha_rgb32(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+4*x0,dstride); | |
182 break; | |
183 } | |
184 } | |
185 | |
186 static void draw_osd(void) | |
187 { | |
188 vo_draw_text(image_width,image_height,draw_alpha); | |
189 } | |
190 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15690
diff
changeset
|
191 static int |
7537 | 192 query_format(uint32_t format) |
193 { | |
194 uint32_t i=0; | |
195 while ( i < NUM_FORMATS ) | |
196 { | |
197 if (g_ddpf[i].img_format == format) | |
198 return g_ddpf[i].drv_caps; | |
199 i++; | |
200 } | |
201 return 0; | |
202 } | |
203 | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
204 static uint32_t Directx_CreatePrimarySurface(void) |
7537 | 205 { |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
206 DDSURFACEDESC2 ddsd; |
7537 | 207 //cleanup |
208 if(g_lpddsPrimary)g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary); | |
209 g_lpddsPrimary=NULL; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
210 |
12021
cd33d1e3b709
move refreshrate and adapter_num variables to video_out because they might be usefull for other drivers, too
faust3
parents:
12020
diff
changeset
|
211 if(vidmode)g_lpdd->lpVtbl->SetDisplayMode(g_lpdd,vm_width,vm_height,vm_bpp,vo_refresh_rate,0); |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
212 ZeroMemory(&ddsd, sizeof(ddsd)); |
7537 | 213 ddsd.dwSize = sizeof(ddsd); |
214 //set flags and create a primary surface. | |
215 ddsd.dwFlags = DDSD_CAPS; | |
216 ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; | |
217 if(g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsd, &g_lpddsPrimary, NULL )== DD_OK) | |
218 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>primary surface created\n"); | |
219 else | |
220 { | |
221 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>could not create primary surface\n"); | |
222 return 1; | |
223 } | |
224 return 0; | |
225 } | |
226 | |
227 static uint32_t Directx_CreateOverlay(uint32_t imgfmt) | |
228 { | |
229 HRESULT ddrval; | |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
230 DDSURFACEDESC2 ddsdOverlay; |
7537 | 231 uint32_t i=0; |
32481 | 232 while ( i < NUM_FORMATS && imgfmt != g_ddpf[i].img_format) |
7537 | 233 { |
234 i++; | |
235 } | |
32481 | 236 if (!g_lpdd || !g_lpddsPrimary || i == NUM_FORMATS) |
7537 | 237 return 1; |
238 //cleanup | |
239 if (g_lpddsOverlay)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay); | |
240 if (g_lpddsBack)g_lpddsBack->lpVtbl->Release(g_lpddsBack); | |
241 g_lpddsOverlay= NULL; | |
242 g_lpddsBack = NULL; | |
243 //create our overlay | |
244 ZeroMemory(&ddsdOverlay, sizeof(ddsdOverlay)); | |
245 ddsdOverlay.dwSize = sizeof(ddsdOverlay); | |
246 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_FLIP | DDSCAPS_COMPLEX | DDSCAPS_VIDEOMEMORY; | |
247 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_BACKBUFFERCOUNT| DDSD_PIXELFORMAT; | |
248 ddsdOverlay.dwWidth=image_width; | |
249 ddsdOverlay.dwHeight=image_height; | |
250 ddsdOverlay.dwBackBufferCount=2; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
251 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay; |
7537 | 252 if(vo_doublebuffering) //tribblebuffering |
253 { | |
254 if (g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL)== DD_OK) | |
255 { | |
256 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>overlay with format %s created\n",g_ddpf[i].img_format_name); | |
257 //get the surface directly attached to the primary (the back buffer) | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
258 ddsdOverlay.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; |
7537 | 259 if(g_lpddsOverlay->lpVtbl->GetAttachedSurface(g_lpddsOverlay,&ddsdOverlay.ddsCaps, &g_lpddsBack) != DD_OK) |
260 { | |
261 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't get attached surface\n"); | |
262 return 1; | |
263 } | |
264 return 0; | |
265 } | |
266 vo_doublebuffering=0; //disable tribblebuffering | |
267 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><WARN>cannot create tribblebuffer overlay with format %s\n",g_ddpf[i].img_format_name); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
268 } |
7537 | 269 //single buffer |
270 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>using singlebuffer overlay\n"); | |
271 ddsdOverlay.dwBackBufferCount=0; | |
272 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY; | |
273 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT; | |
274 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay; | |
275 // try to create the overlay surface | |
276 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL); | |
277 if(ddrval != DD_OK) | |
278 { | |
10640
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
279 if(ddrval == DDERR_INVALIDPIXELFORMAT)mp_msg(MSGT_VO,MSGL_V,"<vo_directx><ERROR> invalid pixelformat: %s\n",g_ddpf[i].img_format_name); |
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
280 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>"); |
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
281 switch(ddrval) |
7537 | 282 { |
283 case DDERR_INCOMPATIBLEPRIMARY: | |
284 {mp_msg(MSGT_VO, MSGL_ERR,"incompatible primary surface\n");break;} | |
285 case DDERR_INVALIDCAPS: | |
286 {mp_msg(MSGT_VO, MSGL_ERR,"invalid caps\n");break;} | |
287 case DDERR_INVALIDOBJECT: | |
288 {mp_msg(MSGT_VO, MSGL_ERR,"invalid object\n");break;} | |
289 case DDERR_INVALIDPARAMS: | |
290 {mp_msg(MSGT_VO, MSGL_ERR,"invalid parameters\n");break;} | |
291 case DDERR_NODIRECTDRAWHW: | |
292 {mp_msg(MSGT_VO, MSGL_ERR,"no directdraw hardware\n");break;} | |
293 case DDERR_NOEMULATION: | |
11000 | 294 {mp_msg(MSGT_VO, MSGL_ERR,"can't emulate\n");break;} |
7537 | 295 case DDERR_NOFLIPHW: |
296 {mp_msg(MSGT_VO, MSGL_ERR,"hardware can't do flip\n");break;} | |
297 case DDERR_NOOVERLAYHW: | |
298 {mp_msg(MSGT_VO, MSGL_ERR,"hardware can't do overlay\n");break;} | |
299 case DDERR_OUTOFMEMORY: | |
300 {mp_msg(MSGT_VO, MSGL_ERR,"not enough system memory\n");break;} | |
301 case DDERR_UNSUPPORTEDMODE: | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
302 {mp_msg(MSGT_VO, MSGL_ERR,"unsupported mode\n");break;} |
7537 | 303 case DDERR_OUTOFVIDEOMEMORY: |
304 {mp_msg(MSGT_VO, MSGL_ERR,"not enough video memory\n");break;} | |
12156
ff9f315741a7
print at least the error number when there is no text for it
faust3
parents:
12021
diff
changeset
|
305 default: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
306 mp_msg(MSGT_VO, MSGL_ERR,"create surface failed with 0x%x\n",ddrval); |
7537 | 307 } |
308 return 1; | |
309 } | |
310 g_lpddsBack = g_lpddsOverlay; | |
311 return 0; | |
312 } | |
313 | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
314 static uint32_t Directx_CreateBackpuffer(void) |
7537 | 315 { |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
316 DDSURFACEDESC2 ddsd; |
7537 | 317 //cleanup |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
318 if (g_lpddsBack)g_lpddsBack->lpVtbl->Release(g_lpddsBack); |
7537 | 319 g_lpddsBack=NULL; |
320 ZeroMemory(&ddsd, sizeof(ddsd)); | |
321 ddsd.dwSize = sizeof(ddsd); | |
322 ddsd.ddsCaps.dwCaps= DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; | |
323 ddsd.dwFlags= DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; | |
324 ddsd.dwWidth=image_width; | |
325 ddsd.dwHeight=image_height; | |
326 if(g_lpdd->lpVtbl->CreateSurface( g_lpdd, &ddsd, &g_lpddsBack, 0 ) != DD_OK ) | |
327 { | |
328 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't create backpuffer\n"); | |
329 return 1; | |
330 } | |
331 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>backbuffer created\n"); | |
332 return 0; | |
333 } | |
334 | |
335 static void uninit(void) | |
336 { | |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
337 if (g_cc != NULL) |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
338 { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
339 g_cc->lpVtbl->Release(g_cc); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
340 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
341 g_cc=NULL; |
7537 | 342 if (g_lpddclipper != NULL) g_lpddclipper->lpVtbl->Release(g_lpddclipper); |
9619 | 343 g_lpddclipper = NULL; |
7537 | 344 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>clipper released\n"); |
345 if (g_lpddsBack != NULL) g_lpddsBack->lpVtbl->Release(g_lpddsBack); | |
346 g_lpddsBack = NULL; | |
347 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>back surface released\n"); | |
10640
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
348 if(vo_doublebuffering && !nooverlay) |
7537 | 349 { |
350 if (g_lpddsOverlay != NULL)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay); | |
351 g_lpddsOverlay = NULL; | |
352 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>overlay surface released\n"); | |
353 } | |
354 if (g_lpddsPrimary != NULL) g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary); | |
7682 | 355 g_lpddsPrimary = NULL; |
356 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>primary released\n"); | |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
357 if(hWndFS)DestroyWindow(hWndFS); |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
358 hWndFS = NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
359 if((WinID == -1) && hWnd) DestroyWindow(hWnd); |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
360 hWnd = NULL; |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
361 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>window destroyed\n"); |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
362 UnregisterClass(WNDCLASSNAME_WINDOWED, GetModuleHandle(NULL)); |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
363 UnregisterClass(WNDCLASSNAME_FULLSCREEN, GetModuleHandle(NULL)); |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
364 if (mplayericon) DestroyIcon(mplayericon); |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
365 mplayericon = NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
366 if (mplayercursor) DestroyCursor(mplayercursor); |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
367 mplayercursor = NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
368 if (blackbrush) DeleteObject(blackbrush); |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
369 blackbrush = NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
370 if (colorbrush) DeleteObject(colorbrush); |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
371 colorbrush = NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
372 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>GDI resources deleted\n"); |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
373 if (g_lpdd != NULL){ |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
374 if(vidmode)g_lpdd->lpVtbl->RestoreDisplayMode(g_lpdd); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
375 g_lpdd->lpVtbl->Release(g_lpdd); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
376 } |
7537 | 377 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>directdrawobject released\n"); |
7778
f804db78f704
10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents:
7713
diff
changeset
|
378 FreeLibrary( hddraw_dll); |
f804db78f704
10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents:
7713
diff
changeset
|
379 hddraw_dll= NULL; |
f804db78f704
10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents:
7713
diff
changeset
|
380 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>ddraw.dll freed\n"); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
381 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>uninitialized\n"); |
7537 | 382 } |
383 | |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
384 static BOOL WINAPI EnumCallbackEx(GUID FAR *lpGUID, LPSTR lpDriverDescription, LPSTR lpDriverName, LPVOID lpContext, HMONITOR hm) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
385 { |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
386 mp_msg(MSGT_VO, MSGL_INFO ,"<vo_directx> adapter %d: ", adapter_count); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
387 |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
388 if (!lpGUID) |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
389 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
390 mp_msg(MSGT_VO, MSGL_INFO ,"%s", "Primary Display Adapter"); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
391 } |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
392 else |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
393 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
394 mp_msg(MSGT_VO, MSGL_INFO ,"%s", lpDriverDescription); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
395 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
396 |
12021
cd33d1e3b709
move refreshrate and adapter_num variables to video_out because they might be usefull for other drivers, too
faust3
parents:
12020
diff
changeset
|
397 if(adapter_count == vo_adapter_num){ |
13775
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
398 MONITORINFO mi; |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
399 if (!lpGUID) |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
400 selected_guid_ptr = NULL; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
401 else |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
402 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
403 selected_guid = *lpGUID; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
404 selected_guid_ptr = &selected_guid; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
405 } |
13775
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
406 mi.cbSize = sizeof(mi); |
14302
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
407 |
14253 | 408 if (myGetMonitorInfo(hm, &mi)) { |
13775
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
409 monitor_rect = mi.rcMonitor; |
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
410 } |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
411 mp_msg(MSGT_VO, MSGL_INFO ,"\t\t<--"); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
412 } |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
413 mp_msg(MSGT_VO, MSGL_INFO ,"\n"); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
414 |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
415 adapter_count++; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
416 |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
417 return 1; // list all adapters |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
418 } |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
419 |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
420 static uint32_t Directx_InitDirectDraw(void) |
7537 | 421 { |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
422 HRESULT (WINAPI *OurDirectDrawCreateEx)(GUID *,LPVOID *, REFIID,IUnknown FAR *); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
423 DDSURFACEDESC2 ddsd; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
424 LPDIRECTDRAWENUMERATEEX OurDirectDrawEnumerateEx; |
14253 | 425 HINSTANCE user32dll=LoadLibrary("user32.dll"); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
426 |
17534
13cdba48ff98
reinitialize adapter_count to 0, EnumCallbackEx will not work otherwise
reimar
parents:
16975
diff
changeset
|
427 adapter_count = 0; |
14253 | 428 if(user32dll){ |
14302
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
429 myGetMonitorInfo=GetProcAddress(user32dll,"GetMonitorInfoA"); |
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
430 if(!myGetMonitorInfo && vo_adapter_num){ |
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
431 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx> -adapter is not supported on Win95\n"); |
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
432 vo_adapter_num = 0; |
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
433 } |
14253 | 434 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
435 |
7537 | 436 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>Initing DirectDraw\n" ); |
437 | |
438 //load direct draw DLL: based on videolans code | |
439 hddraw_dll = LoadLibrary("DDRAW.DLL"); | |
440 if( hddraw_dll == NULL ) | |
441 { | |
442 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>failed loading ddraw.dll\n" ); | |
443 return 1; | |
444 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
445 |
17853
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
446 last_rect.left = 0xDEADC0DE; // reset window position cache |
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
447 |
12021
cd33d1e3b709
move refreshrate and adapter_num variables to video_out because they might be usefull for other drivers, too
faust3
parents:
12020
diff
changeset
|
448 if(vo_adapter_num){ //display other than default |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
449 OurDirectDrawEnumerateEx = (LPDIRECTDRAWENUMERATEEX) GetProcAddress(hddraw_dll,"DirectDrawEnumerateExA"); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
450 if (!OurDirectDrawEnumerateEx){ |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
451 FreeLibrary( hddraw_dll ); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
452 hddraw_dll = NULL; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
453 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>failed geting proc address: DirectDrawEnumerateEx\n"); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
454 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>no directx 7 or higher installed\n"); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
455 return 1; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
456 } |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
457 |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
458 // enumerate all display devices attached to the desktop |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
459 OurDirectDrawEnumerateEx(EnumCallbackEx, NULL, DDENUM_ATTACHEDSECONDARYDEVICES ); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
460 |
12021
cd33d1e3b709
move refreshrate and adapter_num variables to video_out because they might be usefull for other drivers, too
faust3
parents:
12020
diff
changeset
|
461 if(vo_adapter_num >= adapter_count) |
cd33d1e3b709
move refreshrate and adapter_num variables to video_out because they might be usefull for other drivers, too
faust3
parents:
12020
diff
changeset
|
462 mp_msg(MSGT_VO, MSGL_ERR,"Selected adapter (%d) doesn't exist: Default Display Adapter selected\n",vo_adapter_num); |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
463 } |
14253 | 464 FreeLibrary(user32dll); |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
465 |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
466 OurDirectDrawCreateEx = (void *)GetProcAddress(hddraw_dll, "DirectDrawCreateEx"); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
467 if ( OurDirectDrawCreateEx == NULL ) |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
468 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
469 FreeLibrary( hddraw_dll ); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
470 hddraw_dll = NULL; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
471 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>failed geting proc address: DirectDrawCreateEx\n"); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
472 return 1; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
473 } |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
474 |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
475 // initialize DirectDraw and create directx v7 object |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
476 if (OurDirectDrawCreateEx(selected_guid_ptr, (VOID**)&g_lpdd, &IID_IDirectDraw7, NULL ) != DD_OK ) |
7537 | 477 { |
478 FreeLibrary( hddraw_dll ); | |
479 hddraw_dll = NULL; | |
480 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't initialize ddraw\n"); | |
481 return 1; | |
482 } | |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
483 |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
484 //get current screen siz for selected monitor ... |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
485 ddsd.dwSize=sizeof(ddsd); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
486 ddsd.dwFlags=DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
487 g_lpdd->lpVtbl->GetDisplayMode(g_lpdd, &ddsd); |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
488 if(vo_screenwidth && vo_screenheight) |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
489 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
490 vm_height=vo_screenheight; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
491 vm_width=vo_screenwidth; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
492 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
493 else |
7537 | 494 { |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
495 vm_height=ddsd.dwHeight; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
496 vm_width=ddsd.dwWidth; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
497 } |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
498 |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
499 |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
500 if(vo_dbpp)vm_bpp=vo_dbpp; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
501 else vm_bpp=ddsd.ddpfPixelFormat.dwRGBBitCount; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
502 |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
503 if(vidmode){ |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
504 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, hWnd, DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN) != DD_OK) |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
505 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
506 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't set cooperativelevel for exclusive mode\n"); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
507 return 1; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
508 } |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
509 /*SetDisplayMode(ddobject,width,height,bpp,refreshrate,aditionalflags)*/ |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
510 if(g_lpdd->lpVtbl->SetDisplayMode(g_lpdd,vm_width, vm_height, vm_bpp,0,0) != DD_OK) |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
511 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
512 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't set displaymode\n"); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
513 return 1; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
514 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
515 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>Initialized adapter %i for %i x %i @ %i \n",vo_adapter_num,vm_width,vm_height,vm_bpp); |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
516 return 0; |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
517 } |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
518 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, hWnd, DDSCL_NORMAL) != DD_OK) // or DDSCL_SETFOCUSWINDOW |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
519 { |
7537 | 520 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>could not set cooperativelevel for hardwarecheck\n"); |
521 return 1; | |
522 } | |
25962 | 523 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>DirectDraw Initialized\n"); |
7537 | 524 return 0; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
525 } |
7537 | 526 |
527 static void check_events(void) | |
528 { | |
529 MSG msg; | |
530 while (PeekMessage(&msg, NULL, 0, 0,PM_REMOVE)) | |
531 { | |
532 TranslateMessage(&msg); | |
533 DispatchMessage(&msg); | |
534 } | |
535 } | |
536 | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
537 static uint32_t Directx_ManageDisplay(void) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
538 { |
7537 | 539 HRESULT ddrval; |
540 DDCAPS capsDrv; | |
541 DDOVERLAYFX ovfx; | |
8667 | 542 DWORD dwUpdateFlags=0; |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
543 int width,height; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
544 |
17853
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
545 if(!vidmode && !vo_fs && WinID!=-1) { |
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
546 RECT current_rect = {0, 0, 0, 0}; |
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
547 GetWindowRect(hWnd, ¤t_rect); |
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
548 if ((current_rect.left == last_rect.left) |
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
549 && (current_rect.top == last_rect.top) |
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
550 && (current_rect.right == last_rect.right) |
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
551 && (current_rect.bottom == last_rect.bottom)) |
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
552 return 0; |
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
553 last_rect = current_rect; |
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
554 } |
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
555 |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
556 if(vo_fs || vidmode){ |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
557 aspect(&width,&height,A_ZOOM); |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
558 rd.left=(vo_screenwidth-width)/2; |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
559 rd.top=(vo_screenheight-height)/2; |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
560 if (WinID == -1) |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
561 if(ShowCursor(FALSE)>=0)while(ShowCursor(FALSE)>=0){} |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
562 } |
14207 | 563 else if (WinID != -1 && vo_geometry) { |
564 POINT pt; | |
565 pt.x = vo_dx; | |
566 pt.y = vo_dy; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
567 ClientToScreen(hWnd,&pt); |
14207 | 568 width=d_image_width; |
569 height=d_image_height; | |
570 rd.left = pt.x; | |
571 rd.top = pt.y; | |
572 while(ShowCursor(TRUE)<=0){} | |
573 } | |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
574 else { |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
575 POINT pt; |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
576 pt.x = 0; //overlayposition relative to the window |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
577 pt.y = 0; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
578 ClientToScreen(hWnd,&pt); |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
579 GetClientRect(hWnd, &rd); |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
580 width=rd.right - rd.left; |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
581 height=rd.bottom - rd.top; |
13775
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
582 pt.x -= monitor_rect.left; /* move coordinates from global to local monitor space */ |
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
583 pt.y -= monitor_rect.top; |
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
584 rd.right -= monitor_rect.left; |
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
585 rd.bottom -= monitor_rect.top; |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
586 rd.left = pt.x; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
587 rd.top = pt.y; |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
588 if(!nooverlay && (!width || !height)){ |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
589 /*window is minimized*/ |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
590 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,NULL, g_lpddsPrimary, NULL, DDOVER_HIDE, NULL); |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
591 return 0; |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
592 } |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
593 if(vo_keepaspect){ |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
594 int tmpheight=((float)width/window_aspect); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
595 tmpheight+=tmpheight%2; |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
596 if(tmpheight > height){ |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
597 width=((float)height*window_aspect); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
598 width+=width%2; |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
599 } |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
600 else height=tmpheight; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
601 } |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
602 if (WinID == -1) |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
603 while(ShowCursor(TRUE)<=0){} |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
604 } |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
605 rd.right=rd.left+width; |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
606 rd.bottom=rd.top+height; |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
607 |
8667 | 608 /*ok, let's workaround some overlay limitations*/ |
609 if(!nooverlay) | |
610 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
611 uint32_t uStretchFactor1000; //minimum stretch |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
612 uint32_t xstretch1000,ystretch1000; |
8667 | 613 /*get driver capabilities*/ |
614 ZeroMemory(&capsDrv, sizeof(capsDrv)); | |
615 capsDrv.dwSize = sizeof(capsDrv); | |
616 if(g_lpdd->lpVtbl->GetCaps(g_lpdd,&capsDrv, NULL) != DD_OK)return 1; | |
12485
d6885dbe1017
more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents:
12387
diff
changeset
|
617 /*get minimum stretch, depends on display adaptor and mode (refresh rate!) */ |
d6885dbe1017
more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents:
12387
diff
changeset
|
618 uStretchFactor1000 = capsDrv.dwMinOverlayStretch>1000 ? capsDrv.dwMinOverlayStretch : 1000; |
d6885dbe1017
more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents:
12387
diff
changeset
|
619 rd.right = ((width+rd.left)*uStretchFactor1000+999)/1000; |
d6885dbe1017
more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents:
12387
diff
changeset
|
620 rd.bottom = (height+rd.top)*uStretchFactor1000/1000; |
d6885dbe1017
more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents:
12387
diff
changeset
|
621 /*calculate xstretch1000 and ystretch1000*/ |
d6885dbe1017
more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents:
12387
diff
changeset
|
622 xstretch1000 = ((rd.right - rd.left)* 1000)/image_width ; |
d6885dbe1017
more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents:
12387
diff
changeset
|
623 ystretch1000 = ((rd.bottom - rd.top)* 1000)/image_height; |
d6885dbe1017
more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents:
12387
diff
changeset
|
624 rs.left=0; |
d6885dbe1017
more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents:
12387
diff
changeset
|
625 rs.right=image_width; |
d6885dbe1017
more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents:
12387
diff
changeset
|
626 rs.top=0; |
d6885dbe1017
more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents:
12387
diff
changeset
|
627 rs.bottom=image_height; |
d6885dbe1017
more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents:
12387
diff
changeset
|
628 if(rd.left < 0)rs.left=(-rd.left*1000)/xstretch1000; |
d6885dbe1017
more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents:
12387
diff
changeset
|
629 if(rd.top < 0)rs.top=(-rd.top*1000)/ystretch1000; |
d6885dbe1017
more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents:
12387
diff
changeset
|
630 if(rd.right > vo_screenwidth)rs.right=((vo_screenwidth-rd.left)*1000)/xstretch1000; |
d6885dbe1017
more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents:
12387
diff
changeset
|
631 if(rd.bottom > vo_screenheight)rs.bottom=((vo_screenheight-rd.top)*1000)/ystretch1000; |
8667 | 632 /*do not allow to zoom or shrink if hardware isn't able to do so*/ |
633 if((width < image_width)&& !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKX)) | |
634 { | |
635 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKXN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only shrinkN\n"); | |
636 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't shrink x\n"); | |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
637 rd.right=rd.left+image_width; |
8667 | 638 } |
639 else if((width > image_width)&& !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHX)) | |
640 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
641 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHXN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only stretchN\n"); |
8667 | 642 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't stretch x\n"); |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
643 rd.right = rd.left+image_width; |
8667 | 644 } |
645 if((height < image_height) && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKY)) | |
646 { | |
647 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKYN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only shrinkN\n"); | |
648 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't shrink y\n"); | |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
649 rd.bottom = rd.top + image_height; |
8667 | 650 } |
651 else if((height > image_height ) && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHY)) | |
652 { | |
653 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHYN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only stretchN\n"); | |
654 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't stretch y\n"); | |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
655 rd.bottom = rd.top + image_height; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
656 } |
8667 | 657 /*the last thing to check are alignment restrictions |
658 these expressions (x & -y) just do alignment by dropping low order bits... | |
659 so to round up, we add first, then truncate*/ | |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
660 if((capsDrv.dwCaps & DDCAPS_ALIGNBOUNDARYSRC) && capsDrv.dwAlignBoundarySrc) |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
661 rs.left = (rs.left + capsDrv.dwAlignBoundarySrc / 2) & -(signed)(capsDrv.dwAlignBoundarySrc); |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
662 if((capsDrv.dwCaps & DDCAPS_ALIGNSIZESRC) && capsDrv.dwAlignSizeSrc) |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
663 rs.right = rs.left + ((rs.right - rs.left + capsDrv.dwAlignSizeSrc / 2) & -(signed) (capsDrv.dwAlignSizeSrc)); |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
664 if((capsDrv.dwCaps & DDCAPS_ALIGNBOUNDARYDEST) && capsDrv.dwAlignBoundaryDest) |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
665 rd.left = (rd.left + capsDrv.dwAlignBoundaryDest / 2) & -(signed)(capsDrv.dwAlignBoundaryDest); |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
666 if((capsDrv.dwCaps & DDCAPS_ALIGNSIZEDEST) && capsDrv.dwAlignSizeDest) |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
667 rd.right = rd.left + ((rd.right - rd.left) & -(signed) (capsDrv.dwAlignSizeDest)); |
8667 | 668 /*create an overlay FX structure to specify a destination color key*/ |
669 ZeroMemory(&ovfx, sizeof(ovfx)); | |
670 ovfx.dwSize = sizeof(ovfx); | |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
671 if(vo_fs||vidmode) |
8667 | 672 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
673 ovfx.dckDestColorkey.dwColorSpaceLowValue = 0; |
8667 | 674 ovfx.dckDestColorkey.dwColorSpaceHighValue = 0; |
675 } | |
676 else | |
677 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
678 ovfx.dckDestColorkey.dwColorSpaceLowValue = destcolorkey; |
8667 | 679 ovfx.dckDestColorkey.dwColorSpaceHighValue = destcolorkey; |
680 } | |
22289
780caed72ac7
cosmetics: typo fixes, usefuLL --> useful and aswell --> as well
diego
parents:
20394
diff
changeset
|
681 // set the flags we'll send to UpdateOverlay //DDOVER_AUTOFLIP|DDOVERFX_MIRRORLEFTRIGHT|DDOVERFX_MIRRORUPDOWN could be useful?; |
8667 | 682 dwUpdateFlags = DDOVER_SHOW | DDOVER_DDFX; |
683 /*if hardware can't do colorkeying set the window on top*/ | |
684 if(capsDrv.dwCKeyCaps & DDCKEYCAPS_DESTOVERLAY) dwUpdateFlags |= DDOVER_KEYDESTOVERRIDE; | |
24833 | 685 else if (!tmp_image) vo_ontop = 1; |
7537 | 686 } |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
687 else |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
688 { |
13110 | 689 g_lpddclipper->lpVtbl->SetHWnd(g_lpddclipper, 0,(vo_fs && !vidmode)?hWndFS: hWnd); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
690 } |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
691 |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
692 if(!vidmode && !vo_fs){ |
14207 | 693 if(WinID == -1) { |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
694 RECT rdw=rd; |
16968
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
695 if (vo_border) |
16966 | 696 AdjustWindowRect(&rdw,WNDSTYLE,FALSE); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
697 // printf("window: %i %i %ix%i\n",rdw.left,rdw.top,rdw.right - rdw.left,rdw.bottom - rdw.top); |
13775
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
698 rdw.left += monitor_rect.left; /* move to global coordinate space */ |
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
699 rdw.top += monitor_rect.top; |
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
700 rdw.right += monitor_rect.left; |
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
701 rdw.bottom += monitor_rect.top; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
702 SetWindowPos(hWnd,(vo_ontop)?HWND_TOPMOST:(vo_rootwin?HWND_BOTTOM:HWND_NOTOPMOST),rdw.left,rdw.top,rdw.right-rdw.left,rdw.bottom-rdw.top,SWP_NOOWNERZORDER); |
14207 | 703 } |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
704 } |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
705 else SetWindowPos(vidmode?hWnd:hWndFS,vo_rootwin?HWND_BOTTOM:HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOOWNERZORDER|SWP_NOCOPYBITS); |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
706 |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
707 /*make sure the overlay is inside the screen*/ |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
708 if(rd.left<0)rd.left=0; |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
709 if(rd.right>vo_screenwidth)rd.right=vo_screenwidth; |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
710 if(rd.top<0)rd.top=0; |
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
711 if(rd.bottom>vo_screenheight)rd.bottom=vo_screenheight; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
712 |
14207 | 713 /*for nonoverlay mode we are finished, for overlay mode we have to display the overlay first*/ |
714 if(nooverlay)return 0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
715 |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
716 // printf("overlay: %i %i %ix%i\n",rd.left,rd.top,rd.right - rd.left,rd.bottom - rd.top); |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
717 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,&rs, g_lpddsPrimary, &rd, dwUpdateFlags, &ovfx); |
7537 | 718 if(FAILED(ddrval)) |
719 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
720 // one cause might be the driver lied about minimum stretch |
7537 | 721 // we should try upping the destination size a bit, or |
722 // perhaps shrinking the source size | |
723 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>UpdateOverlay failed\n" ); | |
724 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>Overlay:x1:%i,y1:%i,x2:%i,y2:%i,w:%i,h:%i\n",rd.left,rd.top,rd.right,rd.bottom,rd.right - rd.left,rd.bottom - rd.top ); | |
725 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>"); | |
726 switch (ddrval) | |
727 { | |
728 case DDERR_NOSTRETCHHW: | |
729 {mp_msg(MSGT_VO, MSGL_ERR ,"hardware can't stretch: try to size the window back\n");break;} | |
730 case DDERR_INVALIDRECT: | |
731 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid rectangle\n");break;} | |
732 case DDERR_INVALIDPARAMS: | |
733 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid parameters\n");break;} | |
734 case DDERR_HEIGHTALIGN: | |
735 {mp_msg(MSGT_VO, MSGL_ERR ,"height align\n");break;} | |
736 case DDERR_XALIGN: | |
737 {mp_msg(MSGT_VO, MSGL_ERR ,"x align\n");break;} | |
738 case DDERR_UNSUPPORTED: | |
739 {mp_msg(MSGT_VO, MSGL_ERR ,"unsupported\n");break;} | |
740 case DDERR_INVALIDSURFACETYPE: | |
741 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid surfacetype\n");break;} | |
742 case DDERR_INVALIDOBJECT: | |
743 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid object\n");break;} | |
744 case DDERR_SURFACELOST: | |
745 { | |
746 mp_msg(MSGT_VO, MSGL_ERR ,"surfaces lost\n"); | |
747 g_lpddsOverlay->lpVtbl->Restore( g_lpddsOverlay ); //restore and try again | |
748 g_lpddsPrimary->lpVtbl->Restore( g_lpddsPrimary ); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
749 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,&rs, g_lpddsPrimary, &rd, dwUpdateFlags, &ovfx); |
7537 | 750 if(ddrval !=DD_OK)mp_msg(MSGT_VO, MSGL_FATAL ,"<vo_directx><FATAL ERROR>UpdateOverlay failed again\n" ); |
751 break; | |
752 } | |
12156
ff9f315741a7
print at least the error number when there is no text for it
faust3
parents:
12021
diff
changeset
|
753 default: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
754 mp_msg(MSGT_VO, MSGL_ERR ," 0x%x\n",ddrval); |
7537 | 755 } |
8667 | 756 /*ok we can't do anything about it -> hide overlay*/ |
7537 | 757 if(ddrval != DD_OK) |
758 { | |
759 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,NULL, g_lpddsPrimary, NULL, DDOVER_HIDE, NULL); | |
760 return 1; | |
761 } | |
762 } | |
763 return 0; | |
764 } | |
765 | |
766 //find out supported overlay pixelformats | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
767 static uint32_t Directx_CheckOverlayPixelformats(void) |
7537 | 768 { |
769 DDCAPS capsDrv; | |
770 HRESULT ddrval; | |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
771 DDSURFACEDESC2 ddsdOverlay; |
7537 | 772 uint32_t i; |
773 uint32_t formatcount = 0; | |
774 //get driver caps to determine overlay support | |
775 ZeroMemory(&capsDrv, sizeof(capsDrv)); | |
776 capsDrv.dwSize = sizeof(capsDrv); | |
777 ddrval = g_lpdd->lpVtbl->GetCaps(g_lpdd,&capsDrv, NULL); | |
778 if (FAILED(ddrval)) | |
779 { | |
780 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>failed getting ddrawcaps\n"); | |
781 return 1; | |
782 } | |
783 if (!(capsDrv.dwCaps & DDCAPS_OVERLAY)) | |
784 { | |
785 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>Your card doesn't support overlay\n"); | |
786 return 1; | |
787 } | |
788 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>testing supported overlay pixelformats\n"); | |
789 //it is not possible to query for pixel formats supported by the | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
790 //overlay hardware: try out various formats till one works |
7537 | 791 ZeroMemory(&ddsdOverlay, sizeof(ddsdOverlay)); |
792 ddsdOverlay.dwSize = sizeof(ddsdOverlay); | |
793 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY; | |
794 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH| DDSD_PIXELFORMAT; | |
795 ddsdOverlay.dwWidth=300; | |
796 ddsdOverlay.dwHeight=280; | |
797 ddsdOverlay.dwBackBufferCount=0; | |
798 //try to create an overlay surface using one of the pixel formats in our global list | |
799 i=0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
800 do |
7537 | 801 { |
802 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay; | |
803 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL); | |
804 if (ddrval == DD_OK) | |
805 { | |
806 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><FORMAT OVERLAY>%i %s supported\n",i,g_ddpf[i].img_format_name); | |
807 g_ddpf[i].drv_caps = VFCAP_CSP_SUPPORTED |VFCAP_OSD |VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_HWSCALE_UP; | |
808 formatcount++;} | |
809 else mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><FORMAT OVERLAY>%i %s not supported\n",i,g_ddpf[i].img_format_name); | |
810 if (g_lpddsOverlay != NULL) {g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);g_lpddsOverlay = NULL;} | |
811 } while( ++i < NUM_FORMATS ); | |
812 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>Your card supports %i of %i overlayformats\n",formatcount, NUM_FORMATS); | |
813 if (formatcount == 0) | |
814 { | |
815 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><WARN>Your card supports overlay, but we couldn't create one\n"); | |
816 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>This can have the following reasons:\n"); | |
817 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>- you are already using an overlay with another app\n"); | |
818 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>- you don't have enough videomemory\n"); | |
819 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>- vo_directx doesn't support the cards overlay pixelformat\n"); | |
820 return 1; | |
821 } | |
822 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYMIRRORLEFTRIGHT)mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>can mirror left right\n"); //I don't have hardware which | |
823 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYMIRRORUPDOWN )mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>can mirror up down\n"); //supports those send me one and I'll implement ;) | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
824 return 0; |
7537 | 825 } |
826 | |
827 //find out the Pixelformat of the Primary Surface | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
828 static uint32_t Directx_CheckPrimaryPixelformat(void) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
829 { |
7537 | 830 uint32_t i=0; |
831 uint32_t formatcount = 0; | |
832 DDPIXELFORMAT ddpf; | |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
833 DDSURFACEDESC2 ddsd; |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
834 HDC hdc; |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
835 HRESULT hres; |
8667 | 836 COLORREF rgbT=RGB(0,0,0); |
7537 | 837 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>checking primary surface\n"); |
838 memset( &ddpf, 0, sizeof( DDPIXELFORMAT )); | |
839 ddpf.dwSize = sizeof( DDPIXELFORMAT ); | |
840 //we have to create a primary surface first | |
841 if(Directx_CreatePrimarySurface()!=0)return 1; | |
842 if(g_lpddsPrimary->lpVtbl->GetPixelFormat( g_lpddsPrimary, &ddpf ) != DD_OK ) | |
843 { | |
844 mp_msg(MSGT_VO, MSGL_FATAL ,"<vo_directx><FATAL ERROR>can't get pixelformat\n"); | |
845 return 1; | |
846 } | |
847 while ( i < NUM_FORMATS ) | |
848 { | |
849 if (g_ddpf[i].g_ddpfOverlay.dwRGBBitCount == ddpf.dwRGBBitCount) | |
850 { | |
851 if (g_ddpf[i].g_ddpfOverlay.dwRBitMask == ddpf.dwRBitMask) | |
852 { | |
853 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><FORMAT PRIMARY>%i %s supported\n",i,g_ddpf[i].img_format_name); | |
7713 | 854 g_ddpf[i].drv_caps = VFCAP_CSP_SUPPORTED |VFCAP_OSD; |
7537 | 855 formatcount++; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
856 primary_image_format=g_ddpf[i].img_format; |
7537 | 857 } |
858 } | |
859 i++; | |
860 } | |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
861 //get the colorkey for overlay mode |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
862 destcolorkey = CLR_INVALID; |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
863 if (windowcolor != CLR_INVALID && g_lpddsPrimary->lpVtbl->GetDC(g_lpddsPrimary,&hdc) == DD_OK) |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
864 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
865 rgbT = GetPixel(hdc, 0, 0); |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
866 SetPixel(hdc, 0, 0, windowcolor); |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
867 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary,hdc); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
868 } |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
869 // read back the converted color |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
870 ddsd.dwSize = sizeof(ddsd); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
871 while ((hres = g_lpddsPrimary->lpVtbl->Lock(g_lpddsPrimary,NULL, &ddsd, 0, NULL)) == DDERR_WASSTILLDRAWING) |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
872 ; |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
873 if (hres == DD_OK) |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
874 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
875 destcolorkey = *(DWORD *) ddsd.lpSurface; |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
876 if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
877 destcolorkey &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1; |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
878 g_lpddsPrimary->lpVtbl->Unlock(g_lpddsPrimary,NULL); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
879 } |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
880 if (windowcolor != CLR_INVALID && g_lpddsPrimary->lpVtbl->GetDC(g_lpddsPrimary,&hdc) == DD_OK) |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
881 { |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
882 SetPixel(hdc, 0, 0, rgbT); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
883 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary,hdc); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
884 } |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
885 //release primary |
7537 | 886 g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary); |
887 g_lpddsPrimary = NULL; | |
888 if(formatcount==0) | |
889 { | |
890 mp_msg(MSGT_VO, MSGL_FATAL ,"<vo_directx><FATAL ERROR>Unknown Pixelformat\n"); | |
891 return 1; | |
892 } | |
893 return 0; | |
894 } | |
895 | |
896 //function handles input | |
897 static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) | |
898 { | |
899 switch (message) | |
900 { | |
12192 | 901 case WM_MOUSEACTIVATE: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
902 return MA_ACTIVATEANDEAT; |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
903 case WM_NCACTIVATE: |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
904 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
905 if(vidmode && adapter_count > 2) //only disable if more than one adapter. |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
906 return 0; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
907 break; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
908 } |
7537 | 909 case WM_DESTROY: |
910 { | |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
911 PostQuitMessage(0); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
912 return 0; |
7537 | 913 } |
914 case WM_CLOSE: | |
915 { | |
16892
3470c810527b
libvo input cleanup: remove the dependency on libinput,
albeu
parents:
16499
diff
changeset
|
916 mplayer_put_key(KEY_CLOSE_WIN); |
7537 | 917 return 0; |
918 } | |
919 case WM_WINDOWPOSCHANGED: | |
920 { | |
921 //printf("Windowposchange\n"); | |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
922 if(g_lpddsBack != NULL) //or it will crash with -vm |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
923 { |
13775
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
924 Directx_ManageDisplay(); |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
925 } |
7537 | 926 break; |
927 } | |
928 case WM_SYSCOMMAND: | |
929 { | |
930 switch (wParam) | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
931 { //kill screensaver etc. |
7537 | 932 //note: works only when the window is active |
933 //you can workaround this by disabling the allow screensaver option in | |
934 //the link to the app | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
935 case SC_SCREENSAVE: |
7537 | 936 case SC_MONITORPOWER: |
937 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>killing screensaver\n" ); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
938 return 0; |
16973
78ac0dd386c0
Intercept maximize event and go into fullscreen mode.
joey
parents:
16968
diff
changeset
|
939 case SC_MAXIMIZE: |
78ac0dd386c0
Intercept maximize event and go into fullscreen mode.
joey
parents:
16968
diff
changeset
|
940 if (!vo_fs) control(VOCTRL_FULLSCREEN, NULL); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
941 return 0; |
7537 | 942 } |
16499 | 943 break; |
7537 | 944 } |
945 case WM_KEYDOWN: | |
946 { | |
947 switch (wParam) | |
948 { | |
949 case VK_LEFT: | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
950 {mplayer_put_key(KEY_LEFT);break;} |
7537 | 951 case VK_UP: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
952 {mplayer_put_key(KEY_UP);break;} |
7537 | 953 case VK_RIGHT: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
954 {mplayer_put_key(KEY_RIGHT);break;} |
7537 | 955 case VK_DOWN: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
956 {mplayer_put_key(KEY_DOWN);break;} |
7537 | 957 case VK_TAB: |
958 {mplayer_put_key(KEY_TAB);break;} | |
11510 | 959 case VK_BACK: |
960 {mplayer_put_key(KEY_BS);break;} | |
7537 | 961 case VK_DELETE: |
962 {mplayer_put_key(KEY_DELETE);break;} | |
963 case VK_INSERT: | |
964 {mplayer_put_key(KEY_INSERT);break;} | |
965 case VK_HOME: | |
966 {mplayer_put_key(KEY_HOME);break;} | |
967 case VK_END: | |
9894
3933e0ef000c
10l noticed by Joey Parrish <joey at nicewarrior.org>
faust3
parents:
9728
diff
changeset
|
968 {mplayer_put_key(KEY_END);break;} |
7537 | 969 case VK_PRIOR: |
970 {mplayer_put_key(KEY_PAGE_UP);break;} | |
971 case VK_NEXT: | |
972 {mplayer_put_key(KEY_PAGE_DOWN);break;} | |
973 case VK_ESCAPE: | |
974 {mplayer_put_key(KEY_ESC);break;} | |
975 } | |
976 break; | |
977 } | |
978 case WM_CHAR: | |
979 { | |
980 mplayer_put_key(wParam); | |
981 break; | |
982 } | |
12020
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
983 case WM_LBUTTONDOWN: |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
984 { |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
985 if (!vo_nomouse_input) |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
986 mplayer_put_key(MOUSE_BTN0); |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
987 break; |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
988 } |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
989 case WM_MBUTTONDOWN: |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
990 { |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
991 if (!vo_nomouse_input) |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
992 mplayer_put_key(MOUSE_BTN1); |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
993 break; |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
994 } |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
995 case WM_RBUTTONDOWN: |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
996 { |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
997 if (!vo_nomouse_input) |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
998 mplayer_put_key(MOUSE_BTN2); |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
999 break; |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1000 } |
16975 | 1001 case WM_LBUTTONDBLCLK: |
1002 { | |
1003 if(!vo_nomouse_input) | |
1004 mplayer_put_key(MOUSE_BTN0_DBL); | |
1005 break; | |
1006 } | |
1007 case WM_MBUTTONDBLCLK: | |
1008 { | |
1009 if(!vo_nomouse_input) | |
1010 mplayer_put_key(MOUSE_BTN1_DBL); | |
1011 break; | |
1012 } | |
1013 case WM_RBUTTONDBLCLK: | |
1014 { | |
1015 if(!vo_nomouse_input) | |
1016 mplayer_put_key(MOUSE_BTN2_DBL); | |
1017 break; | |
1018 } | |
12020
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1019 case WM_MOUSEWHEEL: |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1020 { |
20394 | 1021 int x; |
12020
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1022 if (vo_nomouse_input) |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1023 break; |
20394 | 1024 x = GET_WHEEL_DELTA_WPARAM(wParam); |
12020
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1025 if (x > 0) |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1026 mplayer_put_key(MOUSE_BTN3); |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1027 else |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1028 mplayer_put_key(MOUSE_BTN4); |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1029 break; |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1030 } |
13157 | 1031 case WM_XBUTTONDOWN: |
1032 { | |
1033 if (vo_nomouse_input) | |
1034 break; | |
1035 if (HIWORD(wParam) == 1) | |
1036 mplayer_put_key(MOUSE_BTN5); | |
1037 else | |
1038 mplayer_put_key(MOUSE_BTN6); | |
1039 break; | |
1040 } | |
16975 | 1041 case WM_XBUTTONDBLCLK: |
1042 { | |
1043 if (vo_nomouse_input) | |
1044 break; | |
1045 if (HIWORD(wParam) == 1) | |
1046 mplayer_put_key(MOUSE_BTN5_DBL); | |
1047 else | |
1048 mplayer_put_key(MOUSE_BTN6_DBL); | |
1049 break; | |
1050 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1051 |
7537 | 1052 } |
1053 return DefWindowProc(hWnd, message, wParam, lParam); | |
1054 } | |
1055 | |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1056 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15690
diff
changeset
|
1057 static int preinit(const char *arg) |
7537 | 1058 { |
1059 HINSTANCE hInstance = GetModuleHandle(NULL); | |
9943 | 1060 char exedir[MAX_PATH]; |
7537 | 1061 WNDCLASS wc; |
7682 | 1062 if(arg) |
1063 { | |
9488
abe81caa8cc1
fix fullscreenswitching patch by Joey Parrish <joey at nicewarrior.org>
faust3
parents:
9380
diff
changeset
|
1064 if(strstr(arg,"noaccel")) |
7682 | 1065 { |
1066 mp_msg(MSGT_VO,MSGL_V,"<vo_directx><INFO>disabled overlay\n"); | |
1067 nooverlay = 1; | |
1068 } | |
1069 } | |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1070 /*load icon from the main app*/ |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1071 if(GetModuleFileName(NULL,exedir,MAX_PATH)) |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1072 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1073 mplayericon = ExtractIcon( hInstance, exedir, 0 ); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1074 } |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1075 if(!mplayericon)mplayericon=LoadIcon(NULL,IDI_APPLICATION); |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1076 mplayercursor = LoadCursor(NULL, IDC_ARROW); |
13775
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
1077 monitor_rect.right=GetSystemMetrics(SM_CXSCREEN); |
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
1078 monitor_rect.bottom=GetSystemMetrics(SM_CYSCREEN); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1079 |
14205 | 1080 windowcolor = vo_colorkey; |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1081 colorbrush = CreateSolidBrush(windowcolor); |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1082 blackbrush = (HBRUSH)GetStockObject(BLACK_BRUSH); |
16975 | 1083 wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1084 wc.lpfnWndProc = WndProc; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1085 wc.cbClsExtra = 0; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1086 wc.cbWndExtra = 0; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1087 wc.hInstance = hInstance; |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1088 wc.hCursor = mplayercursor; |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1089 wc.hIcon = mplayericon; |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1090 wc.hbrBackground = vidmode ? blackbrush : colorbrush; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1091 wc.lpszClassName = WNDCLASSNAME_WINDOWED; |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1092 wc.lpszMenuName = NULL; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1093 RegisterClass(&wc); |
14207 | 1094 if (WinID != -1) hWnd = WinID; |
1095 else | |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1096 hWnd = CreateWindowEx(vidmode?WS_EX_TOPMOST:0, |
16968
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1097 WNDCLASSNAME_WINDOWED,"",(vidmode || !vo_border)?WS_POPUP:WNDSTYLE, |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1098 CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,NULL,NULL,hInstance,NULL); |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1099 wc.hbrBackground = blackbrush; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1100 wc.lpszClassName = WNDCLASSNAME_FULLSCREEN; |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1101 RegisterClass(&wc); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1102 |
7537 | 1103 if (Directx_InitDirectDraw()!= 0)return 1; //init DirectDraw |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1104 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1105 if(!vidmode)hWndFS = CreateWindow(WNDCLASSNAME_FULLSCREEN,"MPlayer Fullscreen",WS_POPUP,monitor_rect.left,monitor_rect.top,monitor_rect.right-monitor_rect.left,monitor_rect.bottom-monitor_rect.top,hWnd,NULL,hInstance,NULL); |
13775
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
1106 mp_msg(MSGT_VO, MSGL_DBG3 ,"<vo_directx><INFO>initial mplayer windows created\n"); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1107 |
7537 | 1108 if (Directx_CheckPrimaryPixelformat()!=0)return 1; |
7682 | 1109 if (!nooverlay && Directx_CheckOverlayPixelformats() == 0) //check for supported hardware |
7537 | 1110 { |
1111 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>hardware supports overlay\n"); | |
1112 nooverlay = 0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1113 } |
7537 | 1114 else //if we can't have overlay we create a backpuffer with the same imageformat as the primary surface |
1115 { | |
1116 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>using backpuffer\n"); | |
1117 nooverlay = 1; | |
1118 } | |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1119 mp_msg(MSGT_VO, MSGL_DBG3 ,"<vo_directx><INFO>preinit succesfully finished\n"); |
7537 | 1120 return 0; |
1121 } | |
1122 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15690
diff
changeset
|
1123 static int draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y ) |
7537 | 1124 { |
1125 uint8_t *s; | |
1126 uint8_t *d; | |
24840 | 1127 uint32_t uvstride=dstride/2; |
7537 | 1128 // copy Y |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1129 d=image+dstride*y+x; |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1130 s=src[0]; |
19242
8298ac25902e
optimize and simplify memcpy usage, use mem2agpcpy_pic
reimar
parents:
18952
diff
changeset
|
1131 mem2agpcpy_pic(d,s,w,h,dstride,stride[0]); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1132 |
7537 | 1133 w/=2;h/=2;x/=2;y/=2; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1134 |
7537 | 1135 // copy U |
8490
ac40496c7d9e
1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents:
8148
diff
changeset
|
1136 d=image+dstride*image_height + uvstride*y+x; |
8667 | 1137 if(image_format == IMGFMT_YV12)s=src[2]; |
7537 | 1138 else s=src[1]; |
19242
8298ac25902e
optimize and simplify memcpy usage, use mem2agpcpy_pic
reimar
parents:
18952
diff
changeset
|
1139 mem2agpcpy_pic(d,s,w,h,uvstride,stride[1]); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1140 |
7537 | 1141 // copy V |
8490
ac40496c7d9e
1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents:
8148
diff
changeset
|
1142 d=image+dstride*image_height +uvstride*(image_height/2) + uvstride*y+x; |
8667 | 1143 if(image_format == IMGFMT_YV12)s=src[1]; |
7537 | 1144 else s=src[2]; |
19242
8298ac25902e
optimize and simplify memcpy usage, use mem2agpcpy_pic
reimar
parents:
18952
diff
changeset
|
1145 mem2agpcpy_pic(d,s,w,h,uvstride,stride[2]); |
7537 | 1146 return 0; |
1147 } | |
1148 | |
1149 static void flip_page(void) | |
1150 { | |
1151 HRESULT dxresult; | |
8519 | 1152 g_lpddsBack->lpVtbl->Unlock (g_lpddsBack,NULL); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1153 if (vo_doublebuffering) |
7537 | 1154 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1155 // flip to the next image in the sequence |
7537 | 1156 dxresult = g_lpddsOverlay->lpVtbl->Flip( g_lpddsOverlay,NULL, DDFLIP_WAIT); |
1157 if(dxresult == DDERR_SURFACELOST) | |
1158 { | |
1159 mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR><vo_directx><INFO>Restoring Surface\n"); | |
1160 g_lpddsBack->lpVtbl->Restore( g_lpddsBack ); | |
24833 | 1161 // restore overlay and primary before calling |
1162 // Directx_ManageDisplay() to avoid error messages | |
1163 g_lpddsOverlay->lpVtbl->Restore( g_lpddsOverlay ); | |
1164 g_lpddsPrimary->lpVtbl->Restore( g_lpddsPrimary ); | |
1165 // update overlay in case we return from screensaver | |
1166 Directx_ManageDisplay(); | |
7537 | 1167 dxresult = g_lpddsOverlay->lpVtbl->Flip( g_lpddsOverlay,NULL, DDFLIP_WAIT); |
1168 } | |
1169 if(dxresult != DD_OK)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't flip page\n"); | |
1170 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1171 if(nooverlay) |
7537 | 1172 { |
1173 DDBLTFX ddbltfx; | |
1174 // ask for the "NOTEARING" option | |
1175 memset( &ddbltfx, 0, sizeof(DDBLTFX) ); | |
1176 ddbltfx.dwSize = sizeof(DDBLTFX); | |
1177 ddbltfx.dwDDFX = DDBLTFX_NOTEARING; | |
1178 g_lpddsPrimary->lpVtbl->Blt(g_lpddsPrimary, &rd, g_lpddsBack, NULL, DDBLT_WAIT, &ddbltfx); | |
24833 | 1179 } |
1180 if (g_lpddsBack->lpVtbl->Lock(g_lpddsBack,NULL,&ddsdsf, DDLOCK_NOSYSLOCK | DDLOCK_WAIT , NULL) == DD_OK) { | |
24835 | 1181 if(vo_directrendering && (dstride != ddsdsf.lPitch)){ |
1182 mp_msg(MSGT_VO,MSGL_WARN,"<vo_directx><WARN>stride changed !!!! disabling direct rendering\n"); | |
1183 vo_directrendering=0; | |
1184 } | |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
32481
diff
changeset
|
1185 free(tmp_image); |
24835 | 1186 tmp_image = NULL; |
1187 dstride = ddsdsf.lPitch; | |
1188 image = ddsdsf.lpSurface; | |
24833 | 1189 } else if (!tmp_image) { |
1190 mp_msg(MSGT_VO, MSGL_WARN, "<vo_directx><WARN>Locking the surface failed, rendering to a hidden surface!\n"); | |
1191 tmp_image = image = calloc(1, image_height * dstride * 2); | |
1192 } | |
7537 | 1193 } |
1194 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15690
diff
changeset
|
1195 static int draw_frame(uint8_t *src[]) |
7537 | 1196 { |
23457
a124f3abc1ec
Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents:
23077
diff
changeset
|
1197 fast_memcpy( image, *src, dstride * image_height ); |
7537 | 1198 return 0; |
1199 } | |
1200 | |
1201 static uint32_t get_image(mp_image_t *mpi) | |
1202 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1203 if(mpi->flags&MP_IMGFLAG_READABLE) {mp_msg(MSGT_VO, MSGL_V,"<vo_directx><ERROR>slow video ram\n");return VO_FALSE;} |
7537 | 1204 if(mpi->type==MP_IMGTYPE_STATIC) {mp_msg(MSGT_VO, MSGL_V,"<vo_directx><ERROR>not static\n");return VO_FALSE;} |
1205 if((mpi->width==dstride) || (mpi->flags&(MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_ACCEPT_WIDTH))) | |
1206 { | |
8667 | 1207 if(mpi->flags&MP_IMGFLAG_PLANAR) |
7537 | 1208 { |
8667 | 1209 if(image_format == IMGFMT_YV12) |
7537 | 1210 { |
1211 mpi->planes[2]= image + dstride*image_height; | |
1212 mpi->planes[1]= image + dstride*image_height+ dstride*image_height/4; | |
8667 | 1213 mpi->stride[1]=mpi->stride[2]=dstride/2; |
7537 | 1214 } |
8667 | 1215 else if(image_format == IMGFMT_IYUV || image_format == IMGFMT_I420) |
7537 | 1216 { |
1217 mpi->planes[1]= image + dstride*image_height; | |
1218 mpi->planes[2]= image + dstride*image_height+ dstride*image_height/4; | |
8667 | 1219 mpi->stride[1]=mpi->stride[2]=dstride/2; |
7537 | 1220 } |
8667 | 1221 else if(image_format == IMGFMT_YVU9) |
1222 { | |
1223 mpi->planes[2] = image + dstride*image_height; | |
1224 mpi->planes[1] = image + dstride*image_height+ dstride*image_height/16; | |
1225 mpi->stride[1]=mpi->stride[2]=dstride/4; | |
1226 } | |
7537 | 1227 } |
8667 | 1228 mpi->planes[0]=image; |
1229 mpi->stride[0]=dstride; | |
1230 mpi->width=image_width; | |
1231 mpi->height=image_height; | |
7537 | 1232 mpi->flags|=MP_IMGFLAG_DIRECT; |
1233 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>Direct Rendering ENABLED\n"); | |
1234 return VO_TRUE; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1235 } |
7537 | 1236 return VO_FALSE; |
1237 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1238 |
7537 | 1239 static uint32_t put_image(mp_image_t *mpi){ |
1240 | |
1241 uint8_t *d; | |
1242 uint8_t *s; | |
1243 uint32_t x = mpi->x; | |
1244 uint32_t y = mpi->y; | |
1245 uint32_t w = mpi->w; | |
1246 uint32_t h = mpi->h; | |
14207 | 1247 |
1248 if (WinID != -1) Directx_ManageDisplay(); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1249 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1250 if((mpi->flags&MP_IMGFLAG_DIRECT)||(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK)) |
7537 | 1251 { |
1252 mp_msg(MSGT_VO, MSGL_DBG3 ,"<vo_directx><INFO>put_image: nothing to do: drawslices\n"); | |
1253 return VO_TRUE; | |
1254 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1255 |
7537 | 1256 if (mpi->flags&MP_IMGFLAG_PLANAR) |
1257 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1258 |
8667 | 1259 if(image_format!=IMGFMT_YVU9)draw_slice(mpi->planes,mpi->stride,mpi->w,mpi->h,0,0); |
1260 else | |
7537 | 1261 { |
1262 // copy Y | |
1263 d=image+dstride*y+x; | |
1264 s=mpi->planes[0]; | |
19242
8298ac25902e
optimize and simplify memcpy usage, use mem2agpcpy_pic
reimar
parents:
18952
diff
changeset
|
1265 mem2agpcpy_pic(d,s,w,h,dstride,mpi->stride[0]); |
8519 | 1266 w/=4;h/=4;x/=4;y/=4; |
7537 | 1267 // copy V |
8519 | 1268 d=image+dstride*image_height + dstride*y/4+x; |
8667 | 1269 s=mpi->planes[2]; |
19242
8298ac25902e
optimize and simplify memcpy usage, use mem2agpcpy_pic
reimar
parents:
18952
diff
changeset
|
1270 mem2agpcpy_pic(d,s,w,h,dstride/4,mpi->stride[1]); |
7537 | 1271 // copy U |
8519 | 1272 d=image+dstride*image_height + dstride*image_height/16 + dstride/4*y+x; |
8667 | 1273 s=mpi->planes[1]; |
19242
8298ac25902e
optimize and simplify memcpy usage, use mem2agpcpy_pic
reimar
parents:
18952
diff
changeset
|
1274 mem2agpcpy_pic(d,s,w,h,dstride/4,mpi->stride[2]); |
7537 | 1275 } |
1276 } | |
1277 else //packed | |
1278 { | |
27738
c89a913b5d5e
Honour differences between src and dst stride for packed yuv
faust3
parents:
27343
diff
changeset
|
1279 mem2agpcpy_pic(image, mpi->planes[0], w * (mpi->bpp / 8), h, dstride, mpi->stride[0]); |
7537 | 1280 } |
1281 return VO_TRUE; | |
1282 } | |
1283 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15690
diff
changeset
|
1284 static int |
7537 | 1285 config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t options, char *title, uint32_t format) |
1286 { | |
13438 | 1287 RECT rd; |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1288 vo_fs = options & 0x01; |
7537 | 1289 image_format = format; |
1290 image_width = width; | |
1291 image_height = height; | |
8519 | 1292 d_image_width = d_width; |
1293 d_image_height = d_height; | |
13438 | 1294 if(format != primary_image_format)nooverlay = 0; |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
1295 window_aspect= (float)d_image_width / (float)d_image_height; |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1296 |
27343 | 1297 #ifdef CONFIG_GUI |
18952 | 1298 if(use_gui){ |
18913 | 1299 guiGetEvent(guiSetShVideo, 0); |
1300 } | |
1301 #endif | |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1302 /*release all directx objects*/ |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1303 if (g_cc != NULL)g_cc->lpVtbl->Release(g_cc); |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1304 g_cc=NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1305 if(g_lpddclipper)g_lpddclipper->lpVtbl->Release(g_lpddclipper); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1306 g_lpddclipper=NULL; |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1307 if (g_lpddsBack != NULL) g_lpddsBack->lpVtbl->Release(g_lpddsBack); |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1308 g_lpddsBack = NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1309 if(vo_doublebuffering) |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1310 if (g_lpddsOverlay != NULL)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay); |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1311 g_lpddsOverlay = NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1312 if (g_lpddsPrimary != NULL) g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary); |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1313 g_lpddsPrimary = NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1314 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>overlay surfaces released\n"); |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1315 |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1316 if(!vidmode){ |
22459
d870e862d272
Simplify config by using code available in video_out.c
reimar
parents:
22289
diff
changeset
|
1317 if(!vo_geometry){ |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1318 GetWindowRect(hWnd,&rd); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1319 vo_dx=rd.left; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1320 vo_dy=rd.top; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1321 } |
13775
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
1322 vo_dx += monitor_rect.left; /* move position to global window space */ |
f4cbdc7d5c49
make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents:
13736
diff
changeset
|
1323 vo_dy += monitor_rect.top; |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1324 rd.left = vo_dx; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1325 rd.top = vo_dy; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1326 rd.right = rd.left + d_image_width; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1327 rd.bottom = rd.top + d_image_height; |
14207 | 1328 if (WinID == -1) { |
16968
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1329 if (vo_border) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1330 AdjustWindowRect(&rd,WNDSTYLE,FALSE); |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1331 SetWindowPos(hWnd,NULL, vo_dx, vo_dy,rd.right-rd.left,rd.bottom-rd.top,SWP_SHOWWINDOW|SWP_NOOWNERZORDER); |
14207 | 1332 } |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1333 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1334 else ShowWindow(hWnd,SW_SHOW); |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1335 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1336 if(vo_fs && !vidmode)ShowWindow(hWndFS,SW_SHOW); |
14207 | 1337 if (WinID == -1) |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1338 SetWindowText(hWnd,title); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1339 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1340 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1341 if(vidmode)vo_fs=0; |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1342 |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1343 |
8667 | 1344 /*create the surfaces*/ |
1345 if(Directx_CreatePrimarySurface())return 1; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1346 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1347 //create palette for 256 color mode |
14400
50d99489dfe5
256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents:
14302
diff
changeset
|
1348 if(image_format==IMGFMT_BGR8){ |
50d99489dfe5
256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents:
14302
diff
changeset
|
1349 LPDIRECTDRAWPALETTE ddpalette=NULL; |
50d99489dfe5
256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents:
14302
diff
changeset
|
1350 char* palette=malloc(4*256); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1351 int i; |
14400
50d99489dfe5
256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents:
14302
diff
changeset
|
1352 for(i=0; i<256; i++){ |
50d99489dfe5
256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents:
14302
diff
changeset
|
1353 palette[4*i+0] = ((i >> 5) & 0x07) * 255 / 7; |
50d99489dfe5
256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents:
14302
diff
changeset
|
1354 palette[4*i+1] = ((i >> 2) & 0x07) * 255 / 7; |
50d99489dfe5
256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents:
14302
diff
changeset
|
1355 palette[4*i+2] = ((i >> 0) & 0x03) * 255 / 3; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1356 palette[4*i+3] = PC_NOCOLLAPSE; |
14400
50d99489dfe5
256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents:
14302
diff
changeset
|
1357 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1358 g_lpdd->lpVtbl->CreatePalette(g_lpdd,DDPCAPS_8BIT|DDPCAPS_INITIALIZE,palette,&ddpalette,NULL); |
14400
50d99489dfe5
256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents:
14302
diff
changeset
|
1359 g_lpddsPrimary->lpVtbl->SetPalette(g_lpddsPrimary,ddpalette); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1360 free(palette); |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1361 ddpalette->lpVtbl->Release(ddpalette); |
14400
50d99489dfe5
256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents:
14302
diff
changeset
|
1362 } |
50d99489dfe5
256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents:
14302
diff
changeset
|
1363 |
8667 | 1364 if (!nooverlay && Directx_CreateOverlay(image_format)) |
7537 | 1365 { |
10640
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
1366 if(format == primary_image_format)nooverlay=1; /*overlay creation failed*/ |
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
1367 else { |
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
1368 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't use overlay mode: please use -vo directx:noaccel\n"); |
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
1369 return 1; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1370 } |
7537 | 1371 } |
8667 | 1372 if(nooverlay) |
1373 { | |
1374 if(Directx_CreateBackpuffer()) | |
1375 { | |
1376 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't get the driver to work on your system :(\n"); | |
1377 return 1; | |
1378 } | |
1379 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>back surface created\n"); | |
1380 vo_doublebuffering = 0; | |
1381 /*create clipper for nonoverlay mode*/ | |
1382 if(g_lpdd->lpVtbl->CreateClipper(g_lpdd, 0, &g_lpddclipper,NULL)!= DD_OK){mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't create clipper\n");return 1;} | |
1383 if(g_lpddclipper->lpVtbl->SetHWnd (g_lpddclipper, 0, hWnd)!= DD_OK){mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't associate clipper with window\n");return 1;} | |
1384 if(g_lpddsPrimary->lpVtbl->SetClipper (g_lpddsPrimary,g_lpddclipper)!=DD_OK){mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't associate primary surface with clipper\n");return 1;} | |
1385 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>clipper succesfully created\n"); | |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1386 }else{ |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1387 if(DD_OK != g_lpddsOverlay->lpVtbl->QueryInterface(g_lpddsOverlay,&IID_IDirectDrawColorControl,(void**)&g_cc)) |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1388 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><WARN>unable to get DirectDraw ColorControl interface\n"); |
8667 | 1389 } |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1390 Directx_ManageDisplay(); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1391 memset(&ddsdsf, 0,sizeof(DDSURFACEDESC2)); |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1392 ddsdsf.dwSize = sizeof (DDSURFACEDESC2); |
24833 | 1393 if (g_lpddsBack->lpVtbl->Lock(g_lpddsBack,NULL,&ddsdsf, DDLOCK_NOSYSLOCK | DDLOCK_WAIT, NULL) == DD_OK) { |
24835 | 1394 dstride = ddsdsf.lPitch; |
1395 image = ddsdsf.lpSurface; | |
1396 return 0; | |
24833 | 1397 } |
1398 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><ERROR>Initial Lock on the Surface failed.\n"); | |
1399 return 1; | |
7537 | 1400 } |
1401 | |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1402 //function to set color controls |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1403 // brightness [0, 10000] |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1404 // contrast [0, 20000] |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1405 // hue [-180, 180] |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1406 // saturation [0, 20000] |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1407 static uint32_t color_ctrl_set(char *what, int value) |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1408 { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1409 uint32_t r = VO_NOTIMPL; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1410 DDCOLORCONTROL dcc; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1411 //printf("\n*** %s = %d\n", what, value); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1412 if (!g_cc) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1413 //printf("\n *** could not get color control interface!!!\n"); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1414 return VO_NOTIMPL; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1415 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1416 ZeroMemory(&dcc, sizeof(dcc)); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1417 dcc.dwSize = sizeof(dcc); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1418 |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1419 if (!strcmp(what, "brightness")) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1420 dcc.dwFlags = DDCOLOR_BRIGHTNESS; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1421 dcc.lBrightness = (value + 100) * 10000 / 200; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1422 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1423 } else if (!strcmp(what, "contrast")) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1424 dcc.dwFlags = DDCOLOR_CONTRAST; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1425 dcc.lContrast = (value + 100) * 20000 / 200; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1426 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1427 } else if (!strcmp(what, "hue")) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1428 dcc.dwFlags = DDCOLOR_HUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1429 dcc.lHue = value * 180 / 100; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1430 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1431 } else if (!strcmp(what, "saturation")) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1432 dcc.dwFlags = DDCOLOR_SATURATION; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1433 dcc.lSaturation = (value + 100) * 20000 / 200; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1434 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1435 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1436 |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1437 if (r == VO_TRUE) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1438 g_cc->lpVtbl->SetColorControls(g_cc, &dcc); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1439 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1440 return r; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1441 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1442 |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1443 //analoguous to color_ctrl_set |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1444 static uint32_t color_ctrl_get(char *what, int *value) |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1445 { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1446 uint32_t r = VO_NOTIMPL; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1447 DDCOLORCONTROL dcc; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1448 if (!g_cc) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1449 //printf("\n *** could not get color control interface!!!\n"); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1450 return VO_NOTIMPL; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1451 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1452 ZeroMemory(&dcc, sizeof(dcc)); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1453 dcc.dwSize = sizeof(dcc); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1454 |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1455 if (g_cc->lpVtbl->GetColorControls(g_cc, &dcc) != DD_OK) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1456 return r; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1457 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1458 |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1459 if (!strcmp(what, "brightness") && (dcc.dwFlags & DDCOLOR_BRIGHTNESS)) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1460 *value = dcc.lBrightness * 200 / 10000 - 100; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1461 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1462 } else if (!strcmp(what, "contrast") && (dcc.dwFlags & DDCOLOR_CONTRAST)) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1463 *value = dcc.lContrast * 200 / 20000 - 100; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1464 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1465 } else if (!strcmp(what, "hue") && (dcc.dwFlags & DDCOLOR_HUE)) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1466 *value = dcc.lHue * 100 / 180; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1467 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1468 } else if (!strcmp(what, "saturation") && (dcc.dwFlags & DDCOLOR_SATURATION)) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1469 *value = dcc.lSaturation * 200 / 20000 - 100; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1470 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1471 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1472 // printf("\n*** %s = %d\n", what, *value); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1473 |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1474 return r; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1475 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1476 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15690
diff
changeset
|
1477 static int control(uint32_t request, void *data, ...) |
7537 | 1478 { |
1479 switch (request) { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1480 |
7537 | 1481 case VOCTRL_GET_IMAGE: |
1482 return get_image(data); | |
1483 case VOCTRL_QUERY_FORMAT: | |
17853
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
1484 last_rect.left = 0xDEADC0DE; // reset window position cache |
7537 | 1485 return query_format(*((uint32_t*)data)); |
1486 case VOCTRL_DRAW_IMAGE: | |
1487 return put_image(data); | |
16968
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1488 case VOCTRL_BORDER: |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1489 if(WinID != -1) return VO_TRUE; |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1490 if(vidmode) |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1491 { |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1492 mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>border has no meaning in exclusive mode\n"); |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1493 } |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1494 else |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1495 { |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1496 if(vo_border) { |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1497 vo_border = 0; |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1498 SetWindowLong(hWnd, GWL_STYLE, WS_POPUP); |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1499 } else { |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1500 vo_border = 1; |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1501 SetWindowLong(hWnd, GWL_STYLE, WNDSTYLE); |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1502 } |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1503 // needed AFAICT to force the window to |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1504 // redisplay with the new style. --Joey |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1505 if (!vo_fs) { |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1506 ShowWindow(hWnd,SW_HIDE); |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1507 ShowWindow(hWnd,SW_SHOW); |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1508 } |
17870
d5971cc55b39
10l the cpu hog fix broke fullscreenswitching with -wid
faust3
parents:
17853
diff
changeset
|
1509 last_rect.left = 0xDEADC0DE; // reset window position cache |
16968
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1510 Directx_ManageDisplay(); |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1511 } |
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1512 return VO_TRUE; |
11542 | 1513 case VOCTRL_ONTOP: |
14207 | 1514 if(WinID != -1) return VO_TRUE; |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1515 if(vidmode) |
11542 | 1516 { |
1517 mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>ontop has no meaning in exclusive mode\n"); | |
1518 } | |
1519 else | |
1520 { | |
1521 if(vo_ontop) vo_ontop = 0; | |
1522 else vo_ontop = 1; | |
17870
d5971cc55b39
10l the cpu hog fix broke fullscreenswitching with -wid
faust3
parents:
17853
diff
changeset
|
1523 last_rect.left = 0xDEADC0DE; // reset window position cache |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1524 Directx_ManageDisplay(); |
11542 | 1525 } |
1526 return VO_TRUE; | |
13091 | 1527 case VOCTRL_ROOTWIN: |
14207 | 1528 if(WinID != -1) return VO_TRUE; |
13091 | 1529 if(vidmode) |
1530 { | |
1531 mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>rootwin has no meaning in exclusive mode\n"); | |
1532 } | |
1533 else | |
1534 { | |
1535 if(vo_rootwin) vo_rootwin = 0; | |
1536 else vo_rootwin = 1; | |
17870
d5971cc55b39
10l the cpu hog fix broke fullscreenswitching with -wid
faust3
parents:
17853
diff
changeset
|
1537 last_rect.left = 0xDEADC0DE; // reset window position cache |
13091 | 1538 Directx_ManageDisplay(); |
1539 } | |
1540 return VO_TRUE; | |
7537 | 1541 case VOCTRL_FULLSCREEN: |
1542 { | |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1543 if(vidmode) |
7537 | 1544 { |
1545 mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>currently we do not allow to switch from exclusive to windowed mode\n"); | |
1546 } | |
1547 else | |
1548 { | |
13090 | 1549 if(!vo_fs) |
1550 { | |
1551 vo_fs=1; | |
1552 ShowWindow(hWndFS,SW_SHOW); | |
1553 ShowWindow(hWnd,SW_HIDE); | |
14692
f9b417d4a18a
always take the focus in fullscreen mode patch by Gianluigi Tiesi <mplayer at netfarm.it>
faust3
parents:
14401
diff
changeset
|
1554 SetForegroundWindow(hWndFS); |
13090 | 1555 } |
1556 else | |
1557 { | |
1558 vo_fs=0; | |
1559 ShowWindow(hWndFS,SW_HIDE); | |
1560 ShowWindow(hWnd,SW_SHOW); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1561 } |
17870
d5971cc55b39
10l the cpu hog fix broke fullscreenswitching with -wid
faust3
parents:
17853
diff
changeset
|
1562 last_rect.left = 0xDEADC0DE; // reset window position cache |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1563 Directx_ManageDisplay(); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1564 break; |
7537 | 1565 } |
1566 return VO_TRUE; | |
1567 } | |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1568 case VOCTRL_SET_EQUALIZER: { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1569 va_list ap; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1570 int value; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1571 |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1572 va_start(ap, data); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1573 value = va_arg(ap, int); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1574 va_end(ap); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1575 return color_ctrl_set(data, value); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1576 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1577 case VOCTRL_GET_EQUALIZER: { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1578 va_list ap; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1579 int *value; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1580 |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1581 va_start(ap, data); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1582 value = va_arg(ap, int*); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1583 va_end(ap); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1584 return color_ctrl_get(data, value); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1585 } |
22459
d870e862d272
Simplify config by using code available in video_out.c
reimar
parents:
22289
diff
changeset
|
1586 case VOCTRL_UPDATE_SCREENINFO: |
d870e862d272
Simplify config by using code available in video_out.c
reimar
parents:
22289
diff
changeset
|
1587 if (vidmode) { |
d870e862d272
Simplify config by using code available in video_out.c
reimar
parents:
22289
diff
changeset
|
1588 vo_screenwidth = vm_width; |
d870e862d272
Simplify config by using code available in video_out.c
reimar
parents:
22289
diff
changeset
|
1589 vo_screenheight = vm_height; |
d870e862d272
Simplify config by using code available in video_out.c
reimar
parents:
22289
diff
changeset
|
1590 } else { |
d870e862d272
Simplify config by using code available in video_out.c
reimar
parents:
22289
diff
changeset
|
1591 vo_screenwidth = monitor_rect.right - monitor_rect.left; |
d870e862d272
Simplify config by using code available in video_out.c
reimar
parents:
22289
diff
changeset
|
1592 vo_screenheight = monitor_rect.bottom - monitor_rect.top; |
d870e862d272
Simplify config by using code available in video_out.c
reimar
parents:
22289
diff
changeset
|
1593 } |
d870e862d272
Simplify config by using code available in video_out.c
reimar
parents:
22289
diff
changeset
|
1594 aspect_save_screenres(vo_screenwidth, vo_screenheight); |
d870e862d272
Simplify config by using code available in video_out.c
reimar
parents:
22289
diff
changeset
|
1595 return VO_TRUE; |
17853
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
1596 case VOCTRL_RESET: |
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
1597 last_rect.left = 0xDEADC0DE; // reset window position cache |
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
1598 // fall-through intended |
7537 | 1599 }; |
1600 return VO_NOTIMPL; | |
1601 } |