Mercurial > mplayer.hg
annotate libvo/vo_directx.c @ 29851:eaa7bfc52c2c
Set the EOF flag when dvdnav reached the end of the requested title.
Otherwise it would just hang, either at the menu or trying to play the
last played frame as a still frame.
author | reimar |
---|---|
date | Wed, 11 Nov 2009 09:09:08 +0000 |
parents | 0f1b5b68af32 |
children | a33cf9c69731 |
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" |
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13775
diff
changeset
|
34 #include "osdep/keycodes.h" |
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13775
diff
changeset
|
35 #include "input/mouse.h" |
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13775
diff
changeset
|
36 #include "mp_msg.h" |
8519 | 37 #include "aspect.h" |
10900 | 38 #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
|
39 #include "mp_fifo.h" |
28121
2a6dfdf16b6b
#include sub.h instead of locally declaring vo_draw_text().
diego
parents:
28051
diff
changeset
|
40 #include "sub.h" |
7537 | 41 |
27343 | 42 #ifdef CONFIG_GUI |
23077 | 43 #include "gui/interface.h" |
18913 | 44 #endif |
45 | |
13157 | 46 #ifndef WM_XBUTTONDOWN |
47 # define WM_XBUTTONDOWN 0x020B | |
48 # define WM_XBUTTONUP 0x020C | |
49 # define WM_XBUTTONDBLCLK 0x020D | |
50 #endif | |
51 | |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
52 #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
|
53 #define WNDCLASSNAME_FULLSCREEN "MPlayer - Fullscreen" |
16966 | 54 #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
|
55 |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
56 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
|
57 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
|
58 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
|
59 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
|
60 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
|
61 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
|
62 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
|
63 static HINSTANCE hddraw_dll; //handle to ddraw.dll |
7537 | 64 static RECT rd; //rect of our stretched image |
65 static RECT rs; //rect of our source image | |
66 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
|
67 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
|
68 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
|
69 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
|
70 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
|
71 static HCURSOR mplayercursor = NULL; // Handle to mplayer cursor |
7537 | 72 static uint32_t image_width, image_height; //image width and height |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
73 static uint32_t d_image_width, d_image_height; //image width and height zoomed |
7537 | 74 static uint8_t *image=NULL; //image data |
24833 | 75 static void* tmp_image = NULL; |
10640
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
76 static uint32_t image_format=0; //image format |
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
77 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
|
78 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
|
79 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
|
80 static uint32_t vm_bpp=0; |
7537 | 81 static uint32_t dstride; //surface stride |
7682 | 82 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
|
83 static DWORD destcolorkey; //colorkey for our surface |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
84 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
|
85 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
|
86 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
|
87 static GUID *selected_guid_ptr = NULL; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
88 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
|
89 static float window_aspect; |
14253 | 90 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
|
91 static RECT last_rect = {0xDEADC0DE, 0xDEADC0DE, 0xDEADC0DE, 0xDEADC0DE}; |
7537 | 92 |
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
|
93 extern int vidmode; |
7537 | 94 |
95 /***************************************************************************** | |
96 * DirectDraw GUIDs. | |
97 * Defining them here allows us to get rid of the dxguid library during | |
98 * the linking stage. | |
99 *****************************************************************************/ | |
15690
1b3f0f7aa994
match the declaration in the includes to make it compile with gcc 4.1, patch by Gianluigi Tiesi <mplayer at netfarm.it>
faust3
parents:
15428
diff
changeset
|
100 const GUID 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 |
15690
1b3f0f7aa994
match the declaration in the includes to make it compile with gcc 4.1, patch by Gianluigi Tiesi <mplayer at netfarm.it>
faust3
parents:
15428
diff
changeset
|
105 const GUID IID_IDirectDrawColorControl = |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
106 { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
107 0x4b9f0ee0,0x0d7e,0x11d0,{0x9b,0x06,0x00,0xa0,0xc9,0x03,0xa3,0xb8} |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
108 }; |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
109 |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
110 |
7537 | 111 typedef struct directx_fourcc_caps |
112 { | |
113 char* img_format_name; //human readable name | |
114 uint32_t img_format; //as MPlayer image format | |
115 uint32_t drv_caps; //what hw supports with this format | |
116 DDPIXELFORMAT g_ddpfOverlay; //as Directx Sourface description | |
117 } directx_fourcc_caps; | |
118 | |
119 | |
120 static directx_fourcc_caps g_ddpf[] = | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
121 { |
7537 | 122 {"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
|
123 {"I420 ",IMGFMT_I420 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('I','4','2','0'),0,0,0,0,0}}, //yv12 with swapped uv |
7537 | 124 {"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
|
125 {"YVU9 ",IMGFMT_YVU9 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','V','U','9'),0,0,0,0,0}}, |
7537 | 126 {"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
|
127 {"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
|
128 {"BGR8 ",IMGFMT_BGR8 ,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 8, 0x00000000, 0x00000000, 0x00000000, 0}}, |
7537 | 129 {"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
|
130 {"BGR15",IMGFMT_BGR15,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x00007C00, 0x000003E0, 0x0000001F, 0}}, |
10647 | 131 {"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
|
132 {"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
|
133 {"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
|
134 {"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
|
135 {"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
|
136 {"BGR32",IMGFMT_BGR32,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x00FF0000, 0x0000FF00, 0x000000FF, 0}} |
7537 | 137 }; |
138 #define NUM_FORMATS (sizeof(g_ddpf) / sizeof(g_ddpf[0])) | |
139 | |
25216 | 140 static const vo_info_t info = |
7537 | 141 { |
142 "Directx DDraw YUV/RGB/BGR renderer", | |
143 "directx", | |
144 "Sascha Sommer <saschasommer@freenet.de>", | |
145 "" | |
146 }; | |
147 | |
25220
c9e9ac2008c2
Mark the vo_functions_t definitions as const where possible.
reimar
parents:
25216
diff
changeset
|
148 const LIBVO_EXTERN(directx) |
7537 | 149 |
150 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, | |
151 unsigned char *srca, int stride) | |
152 { | |
153 switch(image_format) { | |
154 case IMGFMT_YV12 : | |
155 case IMGFMT_I420 : | |
156 case IMGFMT_IYUV : | |
157 case IMGFMT_YVU9 : | |
8495 | 158 vo_draw_alpha_yv12(w,h,src,srca,stride,((uint8_t *) image) + dstride*y0 + x0,dstride); |
7537 | 159 break; |
160 case IMGFMT_YUY2 : | |
8495 | 161 vo_draw_alpha_yuy2(w,h,src,srca,stride,((uint8_t *) image)+ dstride*y0 + 2*x0 ,dstride); |
7537 | 162 break; |
163 case IMGFMT_UYVY : | |
8495 | 164 vo_draw_alpha_yuy2(w,h,src,srca,stride,((uint8_t *) image) + dstride*y0 + 2*x0 + 1,dstride); |
7537 | 165 break; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
166 case IMGFMT_RGB15: |
7537 | 167 case IMGFMT_BGR15: |
168 vo_draw_alpha_rgb15(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+2*x0,dstride); | |
169 break; | |
170 case IMGFMT_RGB16: | |
171 case IMGFMT_BGR16: | |
172 vo_draw_alpha_rgb16(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+2*x0,dstride); | |
173 break; | |
174 case IMGFMT_RGB24: | |
175 case IMGFMT_BGR24: | |
176 vo_draw_alpha_rgb24(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+4*x0,dstride); | |
177 break; | |
178 case IMGFMT_RGB32: | |
179 case IMGFMT_BGR32: | |
180 vo_draw_alpha_rgb32(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+4*x0,dstride); | |
181 break; | |
182 } | |
183 } | |
184 | |
185 static void draw_osd(void) | |
186 { | |
187 vo_draw_text(image_width,image_height,draw_alpha); | |
188 } | |
189 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15690
diff
changeset
|
190 static int |
7537 | 191 query_format(uint32_t format) |
192 { | |
193 uint32_t i=0; | |
194 while ( i < NUM_FORMATS ) | |
195 { | |
196 if (g_ddpf[i].img_format == format) | |
197 return g_ddpf[i].drv_caps; | |
198 i++; | |
199 } | |
200 return 0; | |
201 } | |
202 | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
203 static uint32_t Directx_CreatePrimarySurface(void) |
7537 | 204 { |
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
|
205 DDSURFACEDESC2 ddsd; |
7537 | 206 //cleanup |
207 if(g_lpddsPrimary)g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary); | |
208 g_lpddsPrimary=NULL; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
209 |
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
|
210 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
|
211 ZeroMemory(&ddsd, sizeof(ddsd)); |
7537 | 212 ddsd.dwSize = sizeof(ddsd); |
213 //set flags and create a primary surface. | |
214 ddsd.dwFlags = DDSD_CAPS; | |
215 ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; | |
216 if(g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsd, &g_lpddsPrimary, NULL )== DD_OK) | |
217 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>primary surface created\n"); | |
218 else | |
219 { | |
220 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>could not create primary surface\n"); | |
221 return 1; | |
222 } | |
223 return 0; | |
224 } | |
225 | |
226 static uint32_t Directx_CreateOverlay(uint32_t imgfmt) | |
227 { | |
228 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
|
229 DDSURFACEDESC2 ddsdOverlay; |
7537 | 230 uint32_t i=0; |
231 while ( i < NUM_FORMATS +1 && imgfmt != g_ddpf[i].img_format) | |
232 { | |
233 i++; | |
234 } | |
235 if (!g_lpdd || !g_lpddsPrimary) | |
236 return 1; | |
237 //cleanup | |
238 if (g_lpddsOverlay)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay); | |
239 if (g_lpddsBack)g_lpddsBack->lpVtbl->Release(g_lpddsBack); | |
240 g_lpddsOverlay= NULL; | |
241 g_lpddsBack = NULL; | |
242 //create our overlay | |
243 ZeroMemory(&ddsdOverlay, sizeof(ddsdOverlay)); | |
244 ddsdOverlay.dwSize = sizeof(ddsdOverlay); | |
245 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_FLIP | DDSCAPS_COMPLEX | DDSCAPS_VIDEOMEMORY; | |
246 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_BACKBUFFERCOUNT| DDSD_PIXELFORMAT; | |
247 ddsdOverlay.dwWidth=image_width; | |
248 ddsdOverlay.dwHeight=image_height; | |
249 ddsdOverlay.dwBackBufferCount=2; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
250 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay; |
7537 | 251 if(vo_doublebuffering) //tribblebuffering |
252 { | |
253 if (g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL)== DD_OK) | |
254 { | |
255 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>overlay with format %s created\n",g_ddpf[i].img_format_name); | |
256 //get the surface directly attached to the primary (the back buffer) | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
257 ddsdOverlay.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; |
7537 | 258 if(g_lpddsOverlay->lpVtbl->GetAttachedSurface(g_lpddsOverlay,&ddsdOverlay.ddsCaps, &g_lpddsBack) != DD_OK) |
259 { | |
260 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't get attached surface\n"); | |
261 return 1; | |
262 } | |
263 return 0; | |
264 } | |
265 vo_doublebuffering=0; //disable tribblebuffering | |
266 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
|
267 } |
7537 | 268 //single buffer |
269 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>using singlebuffer overlay\n"); | |
270 ddsdOverlay.dwBackBufferCount=0; | |
271 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY; | |
272 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT; | |
273 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay; | |
274 // try to create the overlay surface | |
275 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL); | |
276 if(ddrval != DD_OK) | |
277 { | |
10640
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
278 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
|
279 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
|
280 switch(ddrval) |
7537 | 281 { |
282 case DDERR_INCOMPATIBLEPRIMARY: | |
283 {mp_msg(MSGT_VO, MSGL_ERR,"incompatible primary surface\n");break;} | |
284 case DDERR_INVALIDCAPS: | |
285 {mp_msg(MSGT_VO, MSGL_ERR,"invalid caps\n");break;} | |
286 case DDERR_INVALIDOBJECT: | |
287 {mp_msg(MSGT_VO, MSGL_ERR,"invalid object\n");break;} | |
288 case DDERR_INVALIDPARAMS: | |
289 {mp_msg(MSGT_VO, MSGL_ERR,"invalid parameters\n");break;} | |
290 case DDERR_NODIRECTDRAWHW: | |
291 {mp_msg(MSGT_VO, MSGL_ERR,"no directdraw hardware\n");break;} | |
292 case DDERR_NOEMULATION: | |
11000 | 293 {mp_msg(MSGT_VO, MSGL_ERR,"can't emulate\n");break;} |
7537 | 294 case DDERR_NOFLIPHW: |
295 {mp_msg(MSGT_VO, MSGL_ERR,"hardware can't do flip\n");break;} | |
296 case DDERR_NOOVERLAYHW: | |
297 {mp_msg(MSGT_VO, MSGL_ERR,"hardware can't do overlay\n");break;} | |
298 case DDERR_OUTOFMEMORY: | |
299 {mp_msg(MSGT_VO, MSGL_ERR,"not enough system memory\n");break;} | |
300 case DDERR_UNSUPPORTEDMODE: | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
301 {mp_msg(MSGT_VO, MSGL_ERR,"unsupported mode\n");break;} |
7537 | 302 case DDERR_OUTOFVIDEOMEMORY: |
303 {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
|
304 default: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
305 mp_msg(MSGT_VO, MSGL_ERR,"create surface failed with 0x%x\n",ddrval); |
7537 | 306 } |
307 return 1; | |
308 } | |
309 g_lpddsBack = g_lpddsOverlay; | |
310 return 0; | |
311 } | |
312 | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
313 static uint32_t Directx_CreateBackpuffer(void) |
7537 | 314 { |
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
|
315 DDSURFACEDESC2 ddsd; |
7537 | 316 //cleanup |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
317 if (g_lpddsBack)g_lpddsBack->lpVtbl->Release(g_lpddsBack); |
7537 | 318 g_lpddsBack=NULL; |
319 ZeroMemory(&ddsd, sizeof(ddsd)); | |
320 ddsd.dwSize = sizeof(ddsd); | |
321 ddsd.ddsCaps.dwCaps= DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; | |
322 ddsd.dwFlags= DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; | |
323 ddsd.dwWidth=image_width; | |
324 ddsd.dwHeight=image_height; | |
325 if(g_lpdd->lpVtbl->CreateSurface( g_lpdd, &ddsd, &g_lpddsBack, 0 ) != DD_OK ) | |
326 { | |
327 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't create backpuffer\n"); | |
328 return 1; | |
329 } | |
330 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>backbuffer created\n"); | |
331 return 0; | |
332 } | |
333 | |
334 static void uninit(void) | |
335 { | |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
336 if (g_cc != NULL) |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
337 { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
338 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
|
339 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
340 g_cc=NULL; |
7537 | 341 if (g_lpddclipper != NULL) g_lpddclipper->lpVtbl->Release(g_lpddclipper); |
9619 | 342 g_lpddclipper = NULL; |
7537 | 343 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>clipper released\n"); |
344 if (g_lpddsBack != NULL) g_lpddsBack->lpVtbl->Release(g_lpddsBack); | |
345 g_lpddsBack = NULL; | |
346 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
|
347 if(vo_doublebuffering && !nooverlay) |
7537 | 348 { |
349 if (g_lpddsOverlay != NULL)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay); | |
350 g_lpddsOverlay = NULL; | |
351 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>overlay surface released\n"); | |
352 } | |
353 if (g_lpddsPrimary != NULL) g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary); | |
7682 | 354 g_lpddsPrimary = NULL; |
355 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
|
356 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
|
357 hWndFS = NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
358 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
|
359 hWnd = NULL; |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
360 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
|
361 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
|
362 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
|
363 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
|
364 mplayericon = NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
365 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
|
366 mplayercursor = NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
367 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
|
368 blackbrush = NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
369 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
|
370 colorbrush = NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
371 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
|
372 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
|
373 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
|
374 g_lpdd->lpVtbl->Release(g_lpdd); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
375 } |
7537 | 376 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
|
377 FreeLibrary( hddraw_dll); |
f804db78f704
10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents:
7713
diff
changeset
|
378 hddraw_dll= NULL; |
f804db78f704
10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents:
7713
diff
changeset
|
379 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
|
380 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>uninitialized\n"); |
7537 | 381 } |
382 | |
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
|
383 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
|
384 { |
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
|
385 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
|
386 |
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 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
|
388 { |
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 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
|
390 } |
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 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
|
392 { |
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 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
|
394 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
395 |
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
|
396 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
|
397 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
|
398 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
|
399 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
|
400 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
|
401 { |
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 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
|
403 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
|
404 } |
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
|
405 mi.cbSize = sizeof(mi); |
14302
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
406 |
14253 | 407 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
|
408 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
|
409 } |
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
|
410 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
|
411 } |
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 mp_msg(MSGT_VO, MSGL_INFO ,"\n"); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
413 |
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
|
414 adapter_count++; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
415 |
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
|
416 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
|
417 } |
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 |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
419 static uint32_t Directx_InitDirectDraw(void) |
7537 | 420 { |
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
|
421 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
|
422 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
|
423 LPDIRECTDRAWENUMERATEEX OurDirectDrawEnumerateEx; |
14253 | 424 HINSTANCE user32dll=LoadLibrary("user32.dll"); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
425 |
17534
13cdba48ff98
reinitialize adapter_count to 0, EnumCallbackEx will not work otherwise
reimar
parents:
16975
diff
changeset
|
426 adapter_count = 0; |
14253 | 427 if(user32dll){ |
14302
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
428 myGetMonitorInfo=GetProcAddress(user32dll,"GetMonitorInfoA"); |
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
429 if(!myGetMonitorInfo && vo_adapter_num){ |
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
430 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
|
431 vo_adapter_num = 0; |
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
432 } |
14253 | 433 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
434 |
7537 | 435 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>Initing DirectDraw\n" ); |
436 | |
437 //load direct draw DLL: based on videolans code | |
438 hddraw_dll = LoadLibrary("DDRAW.DLL"); | |
439 if( hddraw_dll == NULL ) | |
440 { | |
441 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>failed loading ddraw.dll\n" ); | |
442 return 1; | |
443 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
444 |
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
|
445 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
|
446 |
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
|
447 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
|
448 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
|
449 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
|
450 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
|
451 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
|
452 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
|
453 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
|
454 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
|
455 } |
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 // 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
|
458 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
|
459 |
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
|
460 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
|
461 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
|
462 } |
14253 | 463 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
|
464 |
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 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
|
466 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
|
467 { |
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 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
|
469 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
|
470 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
|
471 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
|
472 } |
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 // 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
|
475 if (OurDirectDrawCreateEx(selected_guid_ptr, (VOID**)&g_lpdd, &IID_IDirectDraw7, NULL ) != DD_OK ) |
7537 | 476 { |
477 FreeLibrary( hddraw_dll ); | |
478 hddraw_dll = NULL; | |
479 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't initialize ddraw\n"); | |
480 return 1; | |
481 } | |
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
|
482 |
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 //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
|
484 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
|
485 ddsd.dwFlags=DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
486 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
|
487 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
|
488 { |
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 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
|
490 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
|
491 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
492 else |
7537 | 493 { |
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
|
494 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
|
495 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
|
496 } |
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 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
|
500 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
|
501 |
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 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
|
503 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
|
504 { |
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 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
|
506 return 1; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
507 } |
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
|
508 /*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
|
509 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
|
510 { |
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 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
|
512 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
|
513 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
514 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
|
515 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
|
516 } |
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 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
|
518 { |
7537 | 519 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>could not set cooperativelevel for hardwarecheck\n"); |
520 return 1; | |
521 } | |
25962 | 522 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>DirectDraw Initialized\n"); |
7537 | 523 return 0; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
524 } |
7537 | 525 |
526 static void check_events(void) | |
527 { | |
528 MSG msg; | |
529 while (PeekMessage(&msg, NULL, 0, 0,PM_REMOVE)) | |
530 { | |
531 TranslateMessage(&msg); | |
532 DispatchMessage(&msg); | |
533 } | |
534 } | |
535 | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
536 static uint32_t Directx_ManageDisplay(void) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
537 { |
7537 | 538 HRESULT ddrval; |
539 DDCAPS capsDrv; | |
540 DDOVERLAYFX ovfx; | |
8667 | 541 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
|
542 int width,height; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
543 |
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
|
544 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
|
545 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
|
546 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
|
547 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
|
548 && (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
|
549 && (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
|
550 && (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
|
551 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
|
552 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
|
553 } |
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 |
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
|
555 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
|
556 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
|
557 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
|
558 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
|
559 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
|
560 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
|
561 } |
14207 | 562 else if (WinID != -1 && vo_geometry) { |
563 POINT pt; | |
564 pt.x = vo_dx; | |
565 pt.y = vo_dy; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
566 ClientToScreen(hWnd,&pt); |
14207 | 567 width=d_image_width; |
568 height=d_image_height; | |
569 rd.left = pt.x; | |
570 rd.top = pt.y; | |
571 while(ShowCursor(TRUE)<=0){} | |
572 } | |
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
|
573 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
|
574 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
|
575 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
|
576 pt.y = 0; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
577 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
|
578 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
|
579 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
|
580 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
|
581 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
|
582 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
|
583 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
|
584 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
|
585 rd.left = pt.x; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
586 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
|
587 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
|
588 /*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
|
589 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
|
590 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
|
591 } |
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 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
|
593 int tmpheight=((float)width/window_aspect); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
594 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
|
595 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
|
596 width=((float)height*window_aspect); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
597 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
|
598 } |
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 else height=tmpheight; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
600 } |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
601 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
|
602 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
|
603 } |
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 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
|
605 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
|
606 |
8667 | 607 /*ok, let's workaround some overlay limitations*/ |
608 if(!nooverlay) | |
609 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
610 uint32_t uStretchFactor1000; //minimum stretch |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
611 uint32_t xstretch1000,ystretch1000; |
8667 | 612 /*get driver capabilities*/ |
613 ZeroMemory(&capsDrv, sizeof(capsDrv)); | |
614 capsDrv.dwSize = sizeof(capsDrv); | |
615 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
|
616 /*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
|
617 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
|
618 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
|
619 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
|
620 /*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
|
621 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
|
622 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
|
623 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
|
624 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
|
625 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
|
626 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
|
627 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
|
628 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
|
629 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
|
630 if(rd.bottom > vo_screenheight)rs.bottom=((vo_screenheight-rd.top)*1000)/ystretch1000; |
8667 | 631 /*do not allow to zoom or shrink if hardware isn't able to do so*/ |
632 if((width < image_width)&& !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKX)) | |
633 { | |
634 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKXN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only shrinkN\n"); | |
635 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
|
636 rd.right=rd.left+image_width; |
8667 | 637 } |
638 else if((width > image_width)&& !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHX)) | |
639 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
640 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHXN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only stretchN\n"); |
8667 | 641 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
|
642 rd.right = rd.left+image_width; |
8667 | 643 } |
644 if((height < image_height) && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKY)) | |
645 { | |
646 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKYN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only shrinkN\n"); | |
647 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
|
648 rd.bottom = rd.top + image_height; |
8667 | 649 } |
650 else if((height > image_height ) && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHY)) | |
651 { | |
652 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHYN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only stretchN\n"); | |
653 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
|
654 rd.bottom = rd.top + image_height; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
655 } |
8667 | 656 /*the last thing to check are alignment restrictions |
657 these expressions (x & -y) just do alignment by dropping low order bits... | |
658 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
|
659 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
|
660 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
|
661 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
|
662 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
|
663 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
|
664 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
|
665 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
|
666 rd.right = rd.left + ((rd.right - rd.left) & -(signed) (capsDrv.dwAlignSizeDest)); |
8667 | 667 /*create an overlay FX structure to specify a destination color key*/ |
668 ZeroMemory(&ovfx, sizeof(ovfx)); | |
669 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
|
670 if(vo_fs||vidmode) |
8667 | 671 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
672 ovfx.dckDestColorkey.dwColorSpaceLowValue = 0; |
8667 | 673 ovfx.dckDestColorkey.dwColorSpaceHighValue = 0; |
674 } | |
675 else | |
676 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
677 ovfx.dckDestColorkey.dwColorSpaceLowValue = destcolorkey; |
8667 | 678 ovfx.dckDestColorkey.dwColorSpaceHighValue = destcolorkey; |
679 } | |
22289
780caed72ac7
cosmetics: typo fixes, usefuLL --> useful and aswell --> as well
diego
parents:
20394
diff
changeset
|
680 // set the flags we'll send to UpdateOverlay //DDOVER_AUTOFLIP|DDOVERFX_MIRRORLEFTRIGHT|DDOVERFX_MIRRORUPDOWN could be useful?; |
8667 | 681 dwUpdateFlags = DDOVER_SHOW | DDOVER_DDFX; |
682 /*if hardware can't do colorkeying set the window on top*/ | |
683 if(capsDrv.dwCKeyCaps & DDCKEYCAPS_DESTOVERLAY) dwUpdateFlags |= DDOVER_KEYDESTOVERRIDE; | |
24833 | 684 else if (!tmp_image) vo_ontop = 1; |
7537 | 685 } |
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
|
686 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
|
687 { |
13110 | 688 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
|
689 } |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
690 |
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
|
691 if(!vidmode && !vo_fs){ |
14207 | 692 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
|
693 RECT rdw=rd; |
16968
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
694 if (vo_border) |
16966 | 695 AdjustWindowRect(&rdw,WNDSTYLE,FALSE); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
696 // 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
|
697 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
|
698 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
|
699 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
|
700 rdw.bottom += monitor_rect.top; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
701 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 | 702 } |
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
|
703 } |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
704 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
|
705 |
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
|
706 /*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
|
707 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
|
708 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
|
709 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
|
710 if(rd.bottom>vo_screenheight)rd.bottom=vo_screenheight; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
711 |
14207 | 712 /*for nonoverlay mode we are finished, for overlay mode we have to display the overlay first*/ |
713 if(nooverlay)return 0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
714 |
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
|
715 // 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
|
716 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,&rs, g_lpddsPrimary, &rd, dwUpdateFlags, &ovfx); |
7537 | 717 if(FAILED(ddrval)) |
718 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
719 // one cause might be the driver lied about minimum stretch |
7537 | 720 // we should try upping the destination size a bit, or |
721 // perhaps shrinking the source size | |
722 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>UpdateOverlay failed\n" ); | |
723 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 ); | |
724 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>"); | |
725 switch (ddrval) | |
726 { | |
727 case DDERR_NOSTRETCHHW: | |
728 {mp_msg(MSGT_VO, MSGL_ERR ,"hardware can't stretch: try to size the window back\n");break;} | |
729 case DDERR_INVALIDRECT: | |
730 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid rectangle\n");break;} | |
731 case DDERR_INVALIDPARAMS: | |
732 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid parameters\n");break;} | |
733 case DDERR_HEIGHTALIGN: | |
734 {mp_msg(MSGT_VO, MSGL_ERR ,"height align\n");break;} | |
735 case DDERR_XALIGN: | |
736 {mp_msg(MSGT_VO, MSGL_ERR ,"x align\n");break;} | |
737 case DDERR_UNSUPPORTED: | |
738 {mp_msg(MSGT_VO, MSGL_ERR ,"unsupported\n");break;} | |
739 case DDERR_INVALIDSURFACETYPE: | |
740 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid surfacetype\n");break;} | |
741 case DDERR_INVALIDOBJECT: | |
742 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid object\n");break;} | |
743 case DDERR_SURFACELOST: | |
744 { | |
745 mp_msg(MSGT_VO, MSGL_ERR ,"surfaces lost\n"); | |
746 g_lpddsOverlay->lpVtbl->Restore( g_lpddsOverlay ); //restore and try again | |
747 g_lpddsPrimary->lpVtbl->Restore( g_lpddsPrimary ); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
748 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,&rs, g_lpddsPrimary, &rd, dwUpdateFlags, &ovfx); |
7537 | 749 if(ddrval !=DD_OK)mp_msg(MSGT_VO, MSGL_FATAL ,"<vo_directx><FATAL ERROR>UpdateOverlay failed again\n" ); |
750 break; | |
751 } | |
12156
ff9f315741a7
print at least the error number when there is no text for it
faust3
parents:
12021
diff
changeset
|
752 default: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
753 mp_msg(MSGT_VO, MSGL_ERR ," 0x%x\n",ddrval); |
7537 | 754 } |
8667 | 755 /*ok we can't do anything about it -> hide overlay*/ |
7537 | 756 if(ddrval != DD_OK) |
757 { | |
758 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,NULL, g_lpddsPrimary, NULL, DDOVER_HIDE, NULL); | |
759 return 1; | |
760 } | |
761 } | |
762 return 0; | |
763 } | |
764 | |
765 //find out supported overlay pixelformats | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
766 static uint32_t Directx_CheckOverlayPixelformats(void) |
7537 | 767 { |
768 DDCAPS capsDrv; | |
769 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
|
770 DDSURFACEDESC2 ddsdOverlay; |
7537 | 771 uint32_t i; |
772 uint32_t formatcount = 0; | |
773 //get driver caps to determine overlay support | |
774 ZeroMemory(&capsDrv, sizeof(capsDrv)); | |
775 capsDrv.dwSize = sizeof(capsDrv); | |
776 ddrval = g_lpdd->lpVtbl->GetCaps(g_lpdd,&capsDrv, NULL); | |
777 if (FAILED(ddrval)) | |
778 { | |
779 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>failed getting ddrawcaps\n"); | |
780 return 1; | |
781 } | |
782 if (!(capsDrv.dwCaps & DDCAPS_OVERLAY)) | |
783 { | |
784 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>Your card doesn't support overlay\n"); | |
785 return 1; | |
786 } | |
787 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>testing supported overlay pixelformats\n"); | |
788 //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
|
789 //overlay hardware: try out various formats till one works |
7537 | 790 ZeroMemory(&ddsdOverlay, sizeof(ddsdOverlay)); |
791 ddsdOverlay.dwSize = sizeof(ddsdOverlay); | |
792 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY; | |
793 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH| DDSD_PIXELFORMAT; | |
794 ddsdOverlay.dwWidth=300; | |
795 ddsdOverlay.dwHeight=280; | |
796 ddsdOverlay.dwBackBufferCount=0; | |
797 //try to create an overlay surface using one of the pixel formats in our global list | |
798 i=0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
799 do |
7537 | 800 { |
801 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay; | |
802 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL); | |
803 if (ddrval == DD_OK) | |
804 { | |
805 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><FORMAT OVERLAY>%i %s supported\n",i,g_ddpf[i].img_format_name); | |
806 g_ddpf[i].drv_caps = VFCAP_CSP_SUPPORTED |VFCAP_OSD |VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_HWSCALE_UP; | |
807 formatcount++;} | |
808 else mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><FORMAT OVERLAY>%i %s not supported\n",i,g_ddpf[i].img_format_name); | |
809 if (g_lpddsOverlay != NULL) {g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);g_lpddsOverlay = NULL;} | |
810 } while( ++i < NUM_FORMATS ); | |
811 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>Your card supports %i of %i overlayformats\n",formatcount, NUM_FORMATS); | |
812 if (formatcount == 0) | |
813 { | |
814 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><WARN>Your card supports overlay, but we couldn't create one\n"); | |
815 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>This can have the following reasons:\n"); | |
816 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>- you are already using an overlay with another app\n"); | |
817 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>- you don't have enough videomemory\n"); | |
818 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>- vo_directx doesn't support the cards overlay pixelformat\n"); | |
819 return 1; | |
820 } | |
821 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 | |
822 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
|
823 return 0; |
7537 | 824 } |
825 | |
826 //find out the Pixelformat of the Primary Surface | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
827 static uint32_t Directx_CheckPrimaryPixelformat(void) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
828 { |
7537 | 829 uint32_t i=0; |
830 uint32_t formatcount = 0; | |
831 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
|
832 DDSURFACEDESC2 ddsd; |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
833 HDC hdc; |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
834 HRESULT hres; |
8667 | 835 COLORREF rgbT=RGB(0,0,0); |
7537 | 836 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>checking primary surface\n"); |
837 memset( &ddpf, 0, sizeof( DDPIXELFORMAT )); | |
838 ddpf.dwSize = sizeof( DDPIXELFORMAT ); | |
839 //we have to create a primary surface first | |
840 if(Directx_CreatePrimarySurface()!=0)return 1; | |
841 if(g_lpddsPrimary->lpVtbl->GetPixelFormat( g_lpddsPrimary, &ddpf ) != DD_OK ) | |
842 { | |
843 mp_msg(MSGT_VO, MSGL_FATAL ,"<vo_directx><FATAL ERROR>can't get pixelformat\n"); | |
844 return 1; | |
845 } | |
846 while ( i < NUM_FORMATS ) | |
847 { | |
848 if (g_ddpf[i].g_ddpfOverlay.dwRGBBitCount == ddpf.dwRGBBitCount) | |
849 { | |
850 if (g_ddpf[i].g_ddpfOverlay.dwRBitMask == ddpf.dwRBitMask) | |
851 { | |
852 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><FORMAT PRIMARY>%i %s supported\n",i,g_ddpf[i].img_format_name); | |
7713 | 853 g_ddpf[i].drv_caps = VFCAP_CSP_SUPPORTED |VFCAP_OSD; |
7537 | 854 formatcount++; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
855 primary_image_format=g_ddpf[i].img_format; |
7537 | 856 } |
857 } | |
858 i++; | |
859 } | |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
860 //get the colorkey for overlay mode |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
861 destcolorkey = CLR_INVALID; |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
862 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
|
863 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
864 rgbT = GetPixel(hdc, 0, 0); |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
865 SetPixel(hdc, 0, 0, windowcolor); |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
866 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary,hdc); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
867 } |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
868 // read back the converted color |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
869 ddsd.dwSize = sizeof(ddsd); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
870 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
|
871 ; |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
872 if (hres == DD_OK) |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
873 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
874 destcolorkey = *(DWORD *) ddsd.lpSurface; |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
875 if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
876 destcolorkey &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1; |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
877 g_lpddsPrimary->lpVtbl->Unlock(g_lpddsPrimary,NULL); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
878 } |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
879 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
|
880 { |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
881 SetPixel(hdc, 0, 0, rgbT); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
882 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary,hdc); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
883 } |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
884 //release primary |
7537 | 885 g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary); |
886 g_lpddsPrimary = NULL; | |
887 if(formatcount==0) | |
888 { | |
889 mp_msg(MSGT_VO, MSGL_FATAL ,"<vo_directx><FATAL ERROR>Unknown Pixelformat\n"); | |
890 return 1; | |
891 } | |
892 return 0; | |
893 } | |
894 | |
895 //function handles input | |
896 static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) | |
897 { | |
898 switch (message) | |
899 { | |
12192 | 900 case WM_MOUSEACTIVATE: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
901 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
|
902 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
|
903 { |
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 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
|
905 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
|
906 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
|
907 } |
7537 | 908 case WM_DESTROY: |
909 { | |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
910 PostQuitMessage(0); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
911 return 0; |
7537 | 912 } |
913 case WM_CLOSE: | |
914 { | |
16892
3470c810527b
libvo input cleanup: remove the dependency on libinput,
albeu
parents:
16499
diff
changeset
|
915 mplayer_put_key(KEY_CLOSE_WIN); |
7537 | 916 return 0; |
917 } | |
918 case WM_WINDOWPOSCHANGED: | |
919 { | |
920 //printf("Windowposchange\n"); | |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
921 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
|
922 { |
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
|
923 Directx_ManageDisplay(); |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
924 } |
7537 | 925 break; |
926 } | |
927 case WM_SYSCOMMAND: | |
928 { | |
929 switch (wParam) | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
930 { //kill screensaver etc. |
7537 | 931 //note: works only when the window is active |
932 //you can workaround this by disabling the allow screensaver option in | |
933 //the link to the app | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
934 case SC_SCREENSAVE: |
7537 | 935 case SC_MONITORPOWER: |
936 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
|
937 return 0; |
16973
78ac0dd386c0
Intercept maximize event and go into fullscreen mode.
joey
parents:
16968
diff
changeset
|
938 case SC_MAXIMIZE: |
78ac0dd386c0
Intercept maximize event and go into fullscreen mode.
joey
parents:
16968
diff
changeset
|
939 if (!vo_fs) control(VOCTRL_FULLSCREEN, NULL); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
940 return 0; |
7537 | 941 } |
16499 | 942 break; |
7537 | 943 } |
944 case WM_KEYDOWN: | |
945 { | |
946 switch (wParam) | |
947 { | |
948 case VK_LEFT: | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
949 {mplayer_put_key(KEY_LEFT);break;} |
7537 | 950 case VK_UP: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
951 {mplayer_put_key(KEY_UP);break;} |
7537 | 952 case VK_RIGHT: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
953 {mplayer_put_key(KEY_RIGHT);break;} |
7537 | 954 case VK_DOWN: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
955 {mplayer_put_key(KEY_DOWN);break;} |
7537 | 956 case VK_TAB: |
957 {mplayer_put_key(KEY_TAB);break;} | |
11510 | 958 case VK_BACK: |
959 {mplayer_put_key(KEY_BS);break;} | |
7537 | 960 case VK_DELETE: |
961 {mplayer_put_key(KEY_DELETE);break;} | |
962 case VK_INSERT: | |
963 {mplayer_put_key(KEY_INSERT);break;} | |
964 case VK_HOME: | |
965 {mplayer_put_key(KEY_HOME);break;} | |
966 case VK_END: | |
9894
3933e0ef000c
10l noticed by Joey Parrish <joey at nicewarrior.org>
faust3
parents:
9728
diff
changeset
|
967 {mplayer_put_key(KEY_END);break;} |
7537 | 968 case VK_PRIOR: |
969 {mplayer_put_key(KEY_PAGE_UP);break;} | |
970 case VK_NEXT: | |
971 {mplayer_put_key(KEY_PAGE_DOWN);break;} | |
972 case VK_ESCAPE: | |
973 {mplayer_put_key(KEY_ESC);break;} | |
974 } | |
975 break; | |
976 } | |
977 case WM_CHAR: | |
978 { | |
979 mplayer_put_key(wParam); | |
980 break; | |
981 } | |
12020
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
982 case WM_LBUTTONDOWN: |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
983 { |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
984 if (!vo_nomouse_input) |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
985 mplayer_put_key(MOUSE_BTN0); |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
986 break; |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
987 } |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
988 case WM_MBUTTONDOWN: |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
989 { |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
990 if (!vo_nomouse_input) |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
991 mplayer_put_key(MOUSE_BTN1); |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
992 break; |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
993 } |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
994 case WM_RBUTTONDOWN: |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
995 { |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
996 if (!vo_nomouse_input) |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
997 mplayer_put_key(MOUSE_BTN2); |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
998 break; |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
999 } |
16975 | 1000 case WM_LBUTTONDBLCLK: |
1001 { | |
1002 if(!vo_nomouse_input) | |
1003 mplayer_put_key(MOUSE_BTN0_DBL); | |
1004 break; | |
1005 } | |
1006 case WM_MBUTTONDBLCLK: | |
1007 { | |
1008 if(!vo_nomouse_input) | |
1009 mplayer_put_key(MOUSE_BTN1_DBL); | |
1010 break; | |
1011 } | |
1012 case WM_RBUTTONDBLCLK: | |
1013 { | |
1014 if(!vo_nomouse_input) | |
1015 mplayer_put_key(MOUSE_BTN2_DBL); | |
1016 break; | |
1017 } | |
12020
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1018 case WM_MOUSEWHEEL: |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1019 { |
20394 | 1020 int x; |
12020
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1021 if (vo_nomouse_input) |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1022 break; |
20394 | 1023 x = GET_WHEEL_DELTA_WPARAM(wParam); |
12020
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1024 if (x > 0) |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1025 mplayer_put_key(MOUSE_BTN3); |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1026 else |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1027 mplayer_put_key(MOUSE_BTN4); |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1028 break; |
1604d07d3539
mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents:
12005
diff
changeset
|
1029 } |
13157 | 1030 case WM_XBUTTONDOWN: |
1031 { | |
1032 if (vo_nomouse_input) | |
1033 break; | |
1034 if (HIWORD(wParam) == 1) | |
1035 mplayer_put_key(MOUSE_BTN5); | |
1036 else | |
1037 mplayer_put_key(MOUSE_BTN6); | |
1038 break; | |
1039 } | |
16975 | 1040 case WM_XBUTTONDBLCLK: |
1041 { | |
1042 if (vo_nomouse_input) | |
1043 break; | |
1044 if (HIWORD(wParam) == 1) | |
1045 mplayer_put_key(MOUSE_BTN5_DBL); | |
1046 else | |
1047 mplayer_put_key(MOUSE_BTN6_DBL); | |
1048 break; | |
1049 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1050 |
7537 | 1051 } |
1052 return DefWindowProc(hWnd, message, wParam, lParam); | |
1053 } | |
1054 | |
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
|
1055 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15690
diff
changeset
|
1056 static int preinit(const char *arg) |
7537 | 1057 { |
1058 HINSTANCE hInstance = GetModuleHandle(NULL); | |
9943 | 1059 char exedir[MAX_PATH]; |
7537 | 1060 WNDCLASS wc; |
7682 | 1061 if(arg) |
1062 { | |
9488
abe81caa8cc1
fix fullscreenswitching patch by Joey Parrish <joey at nicewarrior.org>
faust3
parents:
9380
diff
changeset
|
1063 if(strstr(arg,"noaccel")) |
7682 | 1064 { |
1065 mp_msg(MSGT_VO,MSGL_V,"<vo_directx><INFO>disabled overlay\n"); | |
1066 nooverlay = 1; | |
1067 } | |
1068 } | |
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
|
1069 /*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
|
1070 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
|
1071 { |
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 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
|
1073 } |
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 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
|
1075 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
|
1076 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
|
1077 monitor_rect.bottom=GetSystemMetrics(SM_CYSCREEN); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1078 |
14205 | 1079 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
|
1080 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
|
1081 blackbrush = (HBRUSH)GetStockObject(BLACK_BRUSH); |
16975 | 1082 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
|
1083 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
|
1084 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
|
1085 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
|
1086 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
|
1087 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
|
1088 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
|
1089 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
|
1090 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
|
1091 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
|
1092 RegisterClass(&wc); |
14207 | 1093 if (WinID != -1) hWnd = WinID; |
1094 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
|
1095 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
|
1096 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
|
1097 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
|
1098 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
|
1099 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
|
1100 RegisterClass(&wc); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1101 |
7537 | 1102 if (Directx_InitDirectDraw()!= 0)return 1; //init DirectDraw |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1103 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1104 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
|
1105 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
|
1106 |
7537 | 1107 if (Directx_CheckPrimaryPixelformat()!=0)return 1; |
7682 | 1108 if (!nooverlay && Directx_CheckOverlayPixelformats() == 0) //check for supported hardware |
7537 | 1109 { |
1110 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>hardware supports overlay\n"); | |
1111 nooverlay = 0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1112 } |
7537 | 1113 else //if we can't have overlay we create a backpuffer with the same imageformat as the primary surface |
1114 { | |
1115 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>using backpuffer\n"); | |
1116 nooverlay = 1; | |
1117 } | |
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
|
1118 mp_msg(MSGT_VO, MSGL_DBG3 ,"<vo_directx><INFO>preinit succesfully finished\n"); |
7537 | 1119 return 0; |
1120 } | |
1121 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15690
diff
changeset
|
1122 static int draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y ) |
7537 | 1123 { |
1124 uint8_t *s; | |
1125 uint8_t *d; | |
24840 | 1126 uint32_t uvstride=dstride/2; |
7537 | 1127 // copy Y |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1128 d=image+dstride*y+x; |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1129 s=src[0]; |
19242
8298ac25902e
optimize and simplify memcpy usage, use mem2agpcpy_pic
reimar
parents:
18952
diff
changeset
|
1130 mem2agpcpy_pic(d,s,w,h,dstride,stride[0]); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1131 |
7537 | 1132 w/=2;h/=2;x/=2;y/=2; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1133 |
7537 | 1134 // copy U |
8490
ac40496c7d9e
1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents:
8148
diff
changeset
|
1135 d=image+dstride*image_height + uvstride*y+x; |
8667 | 1136 if(image_format == IMGFMT_YV12)s=src[2]; |
7537 | 1137 else s=src[1]; |
19242
8298ac25902e
optimize and simplify memcpy usage, use mem2agpcpy_pic
reimar
parents:
18952
diff
changeset
|
1138 mem2agpcpy_pic(d,s,w,h,uvstride,stride[1]); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1139 |
7537 | 1140 // copy V |
8490
ac40496c7d9e
1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents:
8148
diff
changeset
|
1141 d=image+dstride*image_height +uvstride*(image_height/2) + uvstride*y+x; |
8667 | 1142 if(image_format == IMGFMT_YV12)s=src[1]; |
7537 | 1143 else s=src[2]; |
19242
8298ac25902e
optimize and simplify memcpy usage, use mem2agpcpy_pic
reimar
parents:
18952
diff
changeset
|
1144 mem2agpcpy_pic(d,s,w,h,uvstride,stride[2]); |
7537 | 1145 return 0; |
1146 } | |
1147 | |
1148 static void flip_page(void) | |
1149 { | |
1150 HRESULT dxresult; | |
8519 | 1151 g_lpddsBack->lpVtbl->Unlock (g_lpddsBack,NULL); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1152 if (vo_doublebuffering) |
7537 | 1153 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1154 // flip to the next image in the sequence |
7537 | 1155 dxresult = g_lpddsOverlay->lpVtbl->Flip( g_lpddsOverlay,NULL, DDFLIP_WAIT); |
1156 if(dxresult == DDERR_SURFACELOST) | |
1157 { | |
1158 mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR><vo_directx><INFO>Restoring Surface\n"); | |
1159 g_lpddsBack->lpVtbl->Restore( g_lpddsBack ); | |
24833 | 1160 // restore overlay and primary before calling |
1161 // Directx_ManageDisplay() to avoid error messages | |
1162 g_lpddsOverlay->lpVtbl->Restore( g_lpddsOverlay ); | |
1163 g_lpddsPrimary->lpVtbl->Restore( g_lpddsPrimary ); | |
1164 // update overlay in case we return from screensaver | |
1165 Directx_ManageDisplay(); | |
7537 | 1166 dxresult = g_lpddsOverlay->lpVtbl->Flip( g_lpddsOverlay,NULL, DDFLIP_WAIT); |
1167 } | |
1168 if(dxresult != DD_OK)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't flip page\n"); | |
1169 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1170 if(nooverlay) |
7537 | 1171 { |
1172 DDBLTFX ddbltfx; | |
1173 // ask for the "NOTEARING" option | |
1174 memset( &ddbltfx, 0, sizeof(DDBLTFX) ); | |
1175 ddbltfx.dwSize = sizeof(DDBLTFX); | |
1176 ddbltfx.dwDDFX = DDBLTFX_NOTEARING; | |
1177 g_lpddsPrimary->lpVtbl->Blt(g_lpddsPrimary, &rd, g_lpddsBack, NULL, DDBLT_WAIT, &ddbltfx); | |
24833 | 1178 } |
1179 if (g_lpddsBack->lpVtbl->Lock(g_lpddsBack,NULL,&ddsdsf, DDLOCK_NOSYSLOCK | DDLOCK_WAIT , NULL) == DD_OK) { | |
24835 | 1180 if(vo_directrendering && (dstride != ddsdsf.lPitch)){ |
1181 mp_msg(MSGT_VO,MSGL_WARN,"<vo_directx><WARN>stride changed !!!! disabling direct rendering\n"); | |
1182 vo_directrendering=0; | |
1183 } | |
1184 if (tmp_image) | |
1185 free(tmp_image); | |
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 } |