Mercurial > mplayer.hg
annotate libvo/vo_directx.c @ 33569:8e70a224c411
Change vo_directx to use w32_common.c
While I tested it quite thoroughly, with and without
-wid, -vm, -fs, ... it is _very_ likely to break
something, please report any regressions!
In the worst case it can still be reverted, however
since it has very little relevance nowadays it will
rot all the faster if not at least some code is shared.
author | reimar |
---|---|
date | Sun, 19 Jun 2011 12:51:36 +0000 |
parents | ddb45e9443ec |
children | deedeb235cac |
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" | |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32537
diff
changeset
|
32 #include "libmpcodecs/vf.h" |
7537 | 33 #include "fastmemcpy.h" |
13787
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13775
diff
changeset
|
34 #include "input/input.h" |
30653
3d23e24c5c60
Declare externally used variables from vd.c as extern in vd.h.
diego
parents:
30301
diff
changeset
|
35 #include "libmpcodecs/vd.h" |
13787
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13775
diff
changeset
|
36 #include "osdep/keycodes.h" |
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13775
diff
changeset
|
37 #include "input/mouse.h" |
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13775
diff
changeset
|
38 #include "mp_msg.h" |
8519 | 39 #include "aspect.h" |
10900 | 40 #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
|
41 #include "mp_fifo.h" |
32467 | 42 #include "sub/sub.h" |
33569 | 43 #include "w32_common.h" |
7537 | 44 |
27343 | 45 #ifdef CONFIG_GUI |
23077 | 46 #include "gui/interface.h" |
18913 | 47 #endif |
48 | |
13157 | 49 #ifndef WM_XBUTTONDOWN |
50 # define WM_XBUTTONDOWN 0x020B | |
51 # define WM_XBUTTONUP 0x020C | |
52 # define WM_XBUTTONDBLCLK 0x020D | |
53 #endif | |
54 | |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
55 #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
|
56 #define WNDCLASSNAME_FULLSCREEN "MPlayer - Fullscreen" |
16966 | 57 #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
|
58 |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
59 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
|
60 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
|
61 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
|
62 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
|
63 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
|
64 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
|
65 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
|
66 static HINSTANCE hddraw_dll; //handle to ddraw.dll |
7537 | 67 static RECT rd; //rect of our stretched image |
68 static RECT rs; //rect of our source image | |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
69 static HBRUSH colorbrush = NULL; // Handle to colorkey brush |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
70 static HBRUSH blackbrush = NULL; // Handle to black brush |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
71 static HICON mplayericon = NULL; // Handle to mplayer icon |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
72 static HCURSOR mplayercursor = NULL; // Handle to mplayer cursor |
7537 | 73 static uint32_t image_width, image_height; //image width and height |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
74 static uint32_t d_image_width, d_image_height; //image width and height zoomed |
7537 | 75 static uint8_t *image=NULL; //image data |
24833 | 76 static void* tmp_image = NULL; |
10640
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
77 static uint32_t image_format=0; //image format |
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
78 static uint32_t primary_image_format; |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
79 static uint32_t vm_height=0; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
80 static uint32_t vm_width=0; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
81 static uint32_t vm_bpp=0; |
7537 | 82 static uint32_t dstride; //surface stride |
7682 | 83 static uint32_t nooverlay = 0; //NonOverlay mode |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
84 static DWORD destcolorkey; //colorkey for our surface |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
85 static COLORREF windowcolor = RGB(0,0,16); //windowcolor == colorkey |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
86 static int adapter_count=0; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
87 static GUID selected_guid; |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
88 static GUID *selected_guid_ptr = NULL; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
89 static RECT monitor_rect; //monitor coordinates |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
90 static float window_aspect; |
14253 | 91 static BOOL (WINAPI* myGetMonitorInfo)(HMONITOR, LPMONITORINFO) = NULL; |
17853
33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
faust3
parents:
17534
diff
changeset
|
92 static RECT last_rect = {0xDEADC0DE, 0xDEADC0DE, 0xDEADC0DE, 0xDEADC0DE}; |
7537 | 93 |
94 /***************************************************************************** | |
95 * DirectDraw GUIDs. | |
96 * Defining them here allows us to get rid of the dxguid library during | |
97 * the linking stage. | |
98 *****************************************************************************/ | |
30301
a33cf9c69731
Change GUID declarations in vo_directx to be static.
reimar
parents:
29263
diff
changeset
|
99 #define IID_IDirectDraw7 MP_IID_IDirectDraw7 |
a33cf9c69731
Change GUID declarations in vo_directx to be static.
reimar
parents:
29263
diff
changeset
|
100 static const GUID MP_IID_IDirectDraw7 = |
8667 | 101 { |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
102 0x15e65ec0,0x3b9c,0x11d2,{0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b} |
8667 | 103 }; |
7537 | 104 |
30301
a33cf9c69731
Change GUID declarations in vo_directx to be static.
reimar
parents:
29263
diff
changeset
|
105 #define IID_IDirectDrawColorControl MP_IID_IDirectDrawColorControl |
a33cf9c69731
Change GUID declarations in vo_directx to be static.
reimar
parents:
29263
diff
changeset
|
106 static const GUID MP_IID_IDirectDrawColorControl = |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
107 { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
108 0x4b9f0ee0,0x0d7e,0x11d0,{0x9b,0x06,0x00,0xa0,0xc9,0x03,0xa3,0xb8} |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
109 }; |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
110 |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
111 |
7537 | 112 typedef struct directx_fourcc_caps |
113 { | |
114 char* img_format_name; //human readable name | |
115 uint32_t img_format; //as MPlayer image format | |
116 uint32_t drv_caps; //what hw supports with this format | |
117 DDPIXELFORMAT g_ddpfOverlay; //as Directx Sourface description | |
118 } directx_fourcc_caps; | |
119 | |
120 | |
121 static directx_fourcc_caps g_ddpf[] = | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
122 { |
7537 | 123 {"YV12 ",IMGFMT_YV12 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','V','1','2'),0,0,0,0,0}}, |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
124 {"I420 ",IMGFMT_I420 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('I','4','2','0'),0,0,0,0,0}}, //yv12 with swapped uv |
7537 | 125 {"IYUV ",IMGFMT_IYUV ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('I','Y','U','V'),0,0,0,0,0}}, //same as i420 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
126 {"YVU9 ",IMGFMT_YVU9 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','V','U','9'),0,0,0,0,0}}, |
7537 | 127 {"YUY2 ",IMGFMT_YUY2 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','U','Y','2'),0,0,0,0,0}}, |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
128 {"UYVY ",IMGFMT_UYVY ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('U','Y','V','Y'),0,0,0,0,0}}, |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
129 {"BGR8 ",IMGFMT_BGR8 ,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 8, 0x00000000, 0x00000000, 0x00000000, 0}}, |
7537 | 130 {"RGB15",IMGFMT_RGB15,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000001F, 0x000003E0, 0x00007C00, 0}}, //RGB 5:5:5 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
131 {"BGR15",IMGFMT_BGR15,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x00007C00, 0x000003E0, 0x0000001F, 0}}, |
10647 | 132 {"RGB16",IMGFMT_RGB16,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000001F, 0x000007E0, 0x0000F800, 0}}, //RGB 5:6:5 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
133 {"BGR16",IMGFMT_BGR16,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000F800, 0x000007E0, 0x0000001F, 0}}, |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
134 {"RGB24",IMGFMT_RGB24,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 24, 0x000000FF, 0x0000FF00, 0x00FF0000, 0}}, |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
135 {"BGR24",IMGFMT_BGR24,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 24, 0x00FF0000, 0x0000FF00, 0x000000FF, 0}}, |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
136 {"RGB32",IMGFMT_RGB32,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0}}, |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
137 {"BGR32",IMGFMT_BGR32,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x00FF0000, 0x0000FF00, 0x000000FF, 0}} |
7537 | 138 }; |
139 #define NUM_FORMATS (sizeof(g_ddpf) / sizeof(g_ddpf[0])) | |
140 | |
25216 | 141 static const vo_info_t info = |
7537 | 142 { |
143 "Directx DDraw YUV/RGB/BGR renderer", | |
144 "directx", | |
145 "Sascha Sommer <saschasommer@freenet.de>", | |
146 "" | |
147 }; | |
148 | |
25220
c9e9ac2008c2
Mark the vo_functions_t definitions as const where possible.
reimar
parents:
25216
diff
changeset
|
149 const LIBVO_EXTERN(directx) |
7537 | 150 |
151 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, | |
152 unsigned char *srca, int stride) | |
153 { | |
154 switch(image_format) { | |
155 case IMGFMT_YV12 : | |
156 case IMGFMT_I420 : | |
157 case IMGFMT_IYUV : | |
158 case IMGFMT_YVU9 : | |
8495 | 159 vo_draw_alpha_yv12(w,h,src,srca,stride,((uint8_t *) image) + dstride*y0 + x0,dstride); |
7537 | 160 break; |
161 case IMGFMT_YUY2 : | |
8495 | 162 vo_draw_alpha_yuy2(w,h,src,srca,stride,((uint8_t *) image)+ dstride*y0 + 2*x0 ,dstride); |
7537 | 163 break; |
164 case IMGFMT_UYVY : | |
8495 | 165 vo_draw_alpha_yuy2(w,h,src,srca,stride,((uint8_t *) image) + dstride*y0 + 2*x0 + 1,dstride); |
7537 | 166 break; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
167 case IMGFMT_RGB15: |
7537 | 168 case IMGFMT_BGR15: |
169 vo_draw_alpha_rgb15(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+2*x0,dstride); | |
170 break; | |
171 case IMGFMT_RGB16: | |
172 case IMGFMT_BGR16: | |
173 vo_draw_alpha_rgb16(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+2*x0,dstride); | |
174 break; | |
175 case IMGFMT_RGB24: | |
176 case IMGFMT_BGR24: | |
177 vo_draw_alpha_rgb24(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+4*x0,dstride); | |
178 break; | |
179 case IMGFMT_RGB32: | |
180 case IMGFMT_BGR32: | |
181 vo_draw_alpha_rgb32(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+4*x0,dstride); | |
182 break; | |
183 } | |
184 } | |
185 | |
186 static void draw_osd(void) | |
187 { | |
188 vo_draw_text(image_width,image_height,draw_alpha); | |
189 } | |
190 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15690
diff
changeset
|
191 static int |
7537 | 192 query_format(uint32_t format) |
193 { | |
194 uint32_t i=0; | |
195 while ( i < NUM_FORMATS ) | |
196 { | |
197 if (g_ddpf[i].img_format == format) | |
198 return g_ddpf[i].drv_caps; | |
199 i++; | |
200 } | |
201 return 0; | |
202 } | |
203 | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
204 static uint32_t Directx_CreatePrimarySurface(void) |
7537 | 205 { |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
206 DDSURFACEDESC2 ddsd; |
7537 | 207 //cleanup |
208 if(g_lpddsPrimary)g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary); | |
209 g_lpddsPrimary=NULL; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
210 |
12021
cd33d1e3b709
move refreshrate and adapter_num variables to video_out because they might be usefull for other drivers, too
faust3
parents:
12020
diff
changeset
|
211 if(vidmode)g_lpdd->lpVtbl->SetDisplayMode(g_lpdd,vm_width,vm_height,vm_bpp,vo_refresh_rate,0); |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
212 ZeroMemory(&ddsd, sizeof(ddsd)); |
7537 | 213 ddsd.dwSize = sizeof(ddsd); |
214 //set flags and create a primary surface. | |
215 ddsd.dwFlags = DDSD_CAPS; | |
216 ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; | |
217 if(g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsd, &g_lpddsPrimary, NULL )== DD_OK) | |
218 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>primary surface created\n"); | |
219 else | |
220 { | |
221 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>could not create primary surface\n"); | |
222 return 1; | |
223 } | |
224 return 0; | |
225 } | |
226 | |
227 static uint32_t Directx_CreateOverlay(uint32_t imgfmt) | |
228 { | |
229 HRESULT ddrval; | |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
230 DDSURFACEDESC2 ddsdOverlay; |
7537 | 231 uint32_t i=0; |
32481 | 232 while ( i < NUM_FORMATS && imgfmt != g_ddpf[i].img_format) |
7537 | 233 { |
234 i++; | |
235 } | |
32481 | 236 if (!g_lpdd || !g_lpddsPrimary || i == NUM_FORMATS) |
7537 | 237 return 1; |
238 //cleanup | |
239 if (g_lpddsOverlay)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay); | |
240 if (g_lpddsBack)g_lpddsBack->lpVtbl->Release(g_lpddsBack); | |
241 g_lpddsOverlay= NULL; | |
242 g_lpddsBack = NULL; | |
243 //create our overlay | |
244 ZeroMemory(&ddsdOverlay, sizeof(ddsdOverlay)); | |
245 ddsdOverlay.dwSize = sizeof(ddsdOverlay); | |
246 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_FLIP | DDSCAPS_COMPLEX | DDSCAPS_VIDEOMEMORY; | |
247 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_BACKBUFFERCOUNT| DDSD_PIXELFORMAT; | |
248 ddsdOverlay.dwWidth=image_width; | |
249 ddsdOverlay.dwHeight=image_height; | |
250 ddsdOverlay.dwBackBufferCount=2; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
251 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay; |
7537 | 252 if(vo_doublebuffering) //tribblebuffering |
253 { | |
254 if (g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL)== DD_OK) | |
255 { | |
256 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>overlay with format %s created\n",g_ddpf[i].img_format_name); | |
257 //get the surface directly attached to the primary (the back buffer) | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
258 ddsdOverlay.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; |
7537 | 259 if(g_lpddsOverlay->lpVtbl->GetAttachedSurface(g_lpddsOverlay,&ddsdOverlay.ddsCaps, &g_lpddsBack) != DD_OK) |
260 { | |
261 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't get attached surface\n"); | |
262 return 1; | |
263 } | |
264 return 0; | |
265 } | |
266 vo_doublebuffering=0; //disable tribblebuffering | |
267 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><WARN>cannot create tribblebuffer overlay with format %s\n",g_ddpf[i].img_format_name); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
268 } |
7537 | 269 //single buffer |
270 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>using singlebuffer overlay\n"); | |
271 ddsdOverlay.dwBackBufferCount=0; | |
272 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY; | |
273 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT; | |
274 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay; | |
275 // try to create the overlay surface | |
276 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL); | |
277 if(ddrval != DD_OK) | |
278 { | |
10640
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
279 if(ddrval == DDERR_INVALIDPIXELFORMAT)mp_msg(MSGT_VO,MSGL_V,"<vo_directx><ERROR> invalid pixelformat: %s\n",g_ddpf[i].img_format_name); |
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
280 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>"); |
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
281 switch(ddrval) |
7537 | 282 { |
283 case DDERR_INCOMPATIBLEPRIMARY: | |
284 {mp_msg(MSGT_VO, MSGL_ERR,"incompatible primary surface\n");break;} | |
285 case DDERR_INVALIDCAPS: | |
286 {mp_msg(MSGT_VO, MSGL_ERR,"invalid caps\n");break;} | |
287 case DDERR_INVALIDOBJECT: | |
288 {mp_msg(MSGT_VO, MSGL_ERR,"invalid object\n");break;} | |
289 case DDERR_INVALIDPARAMS: | |
290 {mp_msg(MSGT_VO, MSGL_ERR,"invalid parameters\n");break;} | |
291 case DDERR_NODIRECTDRAWHW: | |
292 {mp_msg(MSGT_VO, MSGL_ERR,"no directdraw hardware\n");break;} | |
293 case DDERR_NOEMULATION: | |
11000 | 294 {mp_msg(MSGT_VO, MSGL_ERR,"can't emulate\n");break;} |
7537 | 295 case DDERR_NOFLIPHW: |
296 {mp_msg(MSGT_VO, MSGL_ERR,"hardware can't do flip\n");break;} | |
297 case DDERR_NOOVERLAYHW: | |
298 {mp_msg(MSGT_VO, MSGL_ERR,"hardware can't do overlay\n");break;} | |
299 case DDERR_OUTOFMEMORY: | |
300 {mp_msg(MSGT_VO, MSGL_ERR,"not enough system memory\n");break;} | |
301 case DDERR_UNSUPPORTEDMODE: | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
302 {mp_msg(MSGT_VO, MSGL_ERR,"unsupported mode\n");break;} |
7537 | 303 case DDERR_OUTOFVIDEOMEMORY: |
304 {mp_msg(MSGT_VO, MSGL_ERR,"not enough video memory\n");break;} | |
12156
ff9f315741a7
print at least the error number when there is no text for it
faust3
parents:
12021
diff
changeset
|
305 default: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
306 mp_msg(MSGT_VO, MSGL_ERR,"create surface failed with 0x%x\n",ddrval); |
7537 | 307 } |
308 return 1; | |
309 } | |
310 g_lpddsBack = g_lpddsOverlay; | |
311 return 0; | |
312 } | |
313 | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
314 static uint32_t Directx_CreateBackpuffer(void) |
7537 | 315 { |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
316 DDSURFACEDESC2 ddsd; |
7537 | 317 //cleanup |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
318 if (g_lpddsBack)g_lpddsBack->lpVtbl->Release(g_lpddsBack); |
7537 | 319 g_lpddsBack=NULL; |
320 ZeroMemory(&ddsd, sizeof(ddsd)); | |
321 ddsd.dwSize = sizeof(ddsd); | |
322 ddsd.ddsCaps.dwCaps= DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; | |
323 ddsd.dwFlags= DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; | |
324 ddsd.dwWidth=image_width; | |
325 ddsd.dwHeight=image_height; | |
326 if(g_lpdd->lpVtbl->CreateSurface( g_lpdd, &ddsd, &g_lpddsBack, 0 ) != DD_OK ) | |
327 { | |
328 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't create backpuffer\n"); | |
329 return 1; | |
330 } | |
331 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>backbuffer created\n"); | |
332 return 0; | |
333 } | |
334 | |
335 static void uninit(void) | |
336 { | |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
337 if (g_cc != NULL) |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
338 { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
339 g_cc->lpVtbl->Release(g_cc); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
340 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
341 g_cc=NULL; |
7537 | 342 if (g_lpddclipper != NULL) g_lpddclipper->lpVtbl->Release(g_lpddclipper); |
9619 | 343 g_lpddclipper = NULL; |
7537 | 344 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>clipper released\n"); |
345 if (g_lpddsBack != NULL) g_lpddsBack->lpVtbl->Release(g_lpddsBack); | |
346 g_lpddsBack = NULL; | |
347 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>back surface released\n"); | |
10640
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
348 if(vo_doublebuffering && !nooverlay) |
7537 | 349 { |
350 if (g_lpddsOverlay != NULL)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay); | |
351 g_lpddsOverlay = NULL; | |
352 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>overlay surface released\n"); | |
353 } | |
354 if (g_lpddsPrimary != NULL) g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary); | |
7682 | 355 g_lpddsPrimary = NULL; |
356 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>primary released\n"); | |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
357 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
|
358 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
|
359 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
|
360 mplayericon = NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
361 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
|
362 mplayercursor = 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 (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
|
364 colorbrush = NULL; |
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
365 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
|
366 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
|
367 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
|
368 g_lpdd->lpVtbl->Release(g_lpdd); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
369 } |
7537 | 370 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
|
371 FreeLibrary( hddraw_dll); |
f804db78f704
10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents:
7713
diff
changeset
|
372 hddraw_dll= NULL; |
f804db78f704
10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents:
7713
diff
changeset
|
373 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
|
374 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>uninitialized\n"); |
33569 | 375 vo_w32_uninit(); |
7537 | 376 } |
377 | |
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
|
378 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
|
379 { |
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
|
380 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
|
381 |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
382 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
|
383 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
384 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
|
385 } |
a8adfcf47f4e
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 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
|
387 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
388 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
|
389 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
390 |
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
|
391 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
|
392 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
|
393 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
|
394 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
|
395 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
|
396 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
397 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
|
398 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
|
399 } |
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
|
400 mi.cbSize = sizeof(mi); |
14302
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
401 |
14253 | 402 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
|
403 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
|
404 } |
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
|
405 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
|
406 } |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
407 mp_msg(MSGT_VO, MSGL_INFO ,"\n"); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
408 |
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
|
409 adapter_count++; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
410 |
12005
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
411 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
|
412 } |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
413 |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
414 static uint32_t Directx_InitDirectDraw(void) |
7537 | 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 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
|
417 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
|
418 LPDIRECTDRAWENUMERATEEX OurDirectDrawEnumerateEx; |
14253 | 419 HINSTANCE user32dll=LoadLibrary("user32.dll"); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
420 |
17534
13cdba48ff98
reinitialize adapter_count to 0, EnumCallbackEx will not work otherwise
reimar
parents:
16975
diff
changeset
|
421 adapter_count = 0; |
14253 | 422 if(user32dll){ |
14302
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
423 myGetMonitorInfo=GetProcAddress(user32dll,"GetMonitorInfoA"); |
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
424 if(!myGetMonitorInfo && vo_adapter_num){ |
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
425 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
|
426 vo_adapter_num = 0; |
9929eafe6be5
win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents:
14253
diff
changeset
|
427 } |
14253 | 428 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
429 |
7537 | 430 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>Initing DirectDraw\n" ); |
431 | |
432 //load direct draw DLL: based on videolans code | |
433 hddraw_dll = LoadLibrary("DDRAW.DLL"); | |
434 if( hddraw_dll == NULL ) | |
435 { | |
436 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>failed loading ddraw.dll\n" ); | |
437 return 1; | |
438 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
439 |
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
|
440 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
|
441 |
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
|
442 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
|
443 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
|
444 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
|
445 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
|
446 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
|
447 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
|
448 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
|
449 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
|
450 } |
a8adfcf47f4e
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 |
a8adfcf47f4e
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 // 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
|
453 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
|
454 |
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
|
455 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
|
456 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
|
457 } |
14253 | 458 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
|
459 |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
460 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
|
461 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
|
462 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
463 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
|
464 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
|
465 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
|
466 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
|
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 |
a8adfcf47f4e
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 // 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
|
470 if (OurDirectDrawCreateEx(selected_guid_ptr, (VOID**)&g_lpdd, &IID_IDirectDraw7, NULL ) != DD_OK ) |
7537 | 471 { |
472 FreeLibrary( hddraw_dll ); | |
473 hddraw_dll = NULL; | |
474 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't initialize ddraw\n"); | |
475 return 1; | |
476 } | |
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
|
477 |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
478 //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
|
479 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
|
480 ddsd.dwFlags=DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
481 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
|
482 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
|
483 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
484 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
|
485 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
|
486 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
487 else |
7537 | 488 { |
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
|
489 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
|
490 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
|
491 } |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
492 |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
493 |
a8adfcf47f4e
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 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
|
495 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
|
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 if(vidmode){ |
33569 | 498 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, vo_w32_window, DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN) != DD_OK) |
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
|
499 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
500 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
|
501 return 1; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
502 } |
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
|
503 /*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
|
504 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
|
505 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
506 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't set 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
|
507 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
|
508 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
509 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
|
510 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
|
511 } |
33569 | 512 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, vo_w32_window, DDSCL_NORMAL) != DD_OK) // or DDSCL_SETFOCUSWINDOW |
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
|
513 { |
7537 | 514 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>could not set cooperativelevel for hardwarecheck\n"); |
515 return 1; | |
516 } | |
25962 | 517 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>DirectDraw Initialized\n"); |
7537 | 518 return 0; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
519 } |
7537 | 520 |
33569 | 521 static uint32_t Directx_ManageDisplay(void); |
522 | |
7537 | 523 static void check_events(void) |
524 { | |
33569 | 525 int evt = vo_w32_check_events(); |
526 if (evt & (VO_EVENT_RESIZE | VO_EVENT_MOVE)) | |
527 Directx_ManageDisplay(); | |
528 if (evt & (VO_EVENT_RESIZE | VO_EVENT_MOVE | VO_EVENT_EXPOSE)) { | |
529 HDC dc = vo_w32_get_dc(vo_w32_window); | |
530 RECT r; | |
531 GetClientRect(vo_w32_window, &r); | |
532 FillRect(dc, &r, vo_fs || vidmode ? blackbrush : colorbrush); | |
533 vo_w32_release_dc(vo_w32_window, dc); | |
7537 | 534 } |
535 } | |
536 | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
537 static uint32_t Directx_ManageDisplay(void) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
538 { |
7537 | 539 HRESULT ddrval; |
540 DDCAPS capsDrv; | |
541 DDOVERLAYFX ovfx; | |
8667 | 542 DWORD dwUpdateFlags=0; |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
543 int width,height; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
544 |
33569 | 545 rd.left = vo_dx - xinerama_x; |
546 rd.top = vo_dy - xinerama_y; | |
547 width = vo_dwidth; | |
548 height = vo_dheight; | |
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
|
549 |
33569 | 550 aspect(&width, &height, A_WINZOOM); |
551 panscan_calc_windowed(); | |
552 width += vo_panscan_x; | |
553 height += vo_panscan_y; | |
554 width = FFMIN(width, vo_screenwidth); | |
555 height = FFMIN(height, vo_screenheight); | |
556 rd.left += (vo_dwidth - width ) / 2; | |
557 rd.top += (vo_dheight - height) / 2; | |
558 | |
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
|
559 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
|
560 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
|
561 |
8667 | 562 /*ok, let's workaround some overlay limitations*/ |
563 if(!nooverlay) | |
564 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
565 uint32_t uStretchFactor1000; //minimum stretch |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
566 uint32_t xstretch1000,ystretch1000; |
8667 | 567 /*get driver capabilities*/ |
568 ZeroMemory(&capsDrv, sizeof(capsDrv)); | |
569 capsDrv.dwSize = sizeof(capsDrv); | |
570 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
|
571 /*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
|
572 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
|
573 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
|
574 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
|
575 /*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
|
576 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
|
577 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
|
578 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
|
579 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
|
580 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
|
581 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
|
582 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
|
583 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
|
584 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
|
585 if(rd.bottom > vo_screenheight)rs.bottom=((vo_screenheight-rd.top)*1000)/ystretch1000; |
8667 | 586 /*do not allow to zoom or shrink if hardware isn't able to do so*/ |
587 if((width < image_width)&& !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKX)) | |
588 { | |
589 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKXN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only shrinkN\n"); | |
590 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
|
591 rd.right=rd.left+image_width; |
8667 | 592 } |
593 else if((width > image_width)&& !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHX)) | |
594 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
595 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHXN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only stretchN\n"); |
8667 | 596 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
|
597 rd.right = rd.left+image_width; |
8667 | 598 } |
599 if((height < image_height) && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKY)) | |
600 { | |
601 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKYN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only shrinkN\n"); | |
602 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
|
603 rd.bottom = rd.top + image_height; |
8667 | 604 } |
605 else if((height > image_height ) && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHY)) | |
606 { | |
607 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHYN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only stretchN\n"); | |
608 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
|
609 rd.bottom = rd.top + image_height; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
610 } |
8667 | 611 /*the last thing to check are alignment restrictions |
612 these expressions (x & -y) just do alignment by dropping low order bits... | |
613 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
|
614 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
|
615 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
|
616 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
|
617 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
|
618 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
|
619 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
|
620 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
|
621 rd.right = rd.left + ((rd.right - rd.left) & -(signed) (capsDrv.dwAlignSizeDest)); |
8667 | 622 /*create an overlay FX structure to specify a destination color key*/ |
623 ZeroMemory(&ovfx, sizeof(ovfx)); | |
624 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
|
625 if(vo_fs||vidmode) |
8667 | 626 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
627 ovfx.dckDestColorkey.dwColorSpaceLowValue = 0; |
8667 | 628 ovfx.dckDestColorkey.dwColorSpaceHighValue = 0; |
629 } | |
630 else | |
631 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
632 ovfx.dckDestColorkey.dwColorSpaceLowValue = destcolorkey; |
8667 | 633 ovfx.dckDestColorkey.dwColorSpaceHighValue = destcolorkey; |
634 } | |
22289
780caed72ac7
cosmetics: typo fixes, usefuLL --> useful and aswell --> as well
diego
parents:
20394
diff
changeset
|
635 // set the flags we'll send to UpdateOverlay //DDOVER_AUTOFLIP|DDOVERFX_MIRRORLEFTRIGHT|DDOVERFX_MIRRORUPDOWN could be useful?; |
8667 | 636 dwUpdateFlags = DDOVER_SHOW | DDOVER_DDFX; |
637 /*if hardware can't do colorkeying set the window on top*/ | |
638 if(capsDrv.dwCKeyCaps & DDCKEYCAPS_DESTOVERLAY) dwUpdateFlags |= DDOVER_KEYDESTOVERRIDE; | |
24833 | 639 else if (!tmp_image) vo_ontop = 1; |
7537 | 640 } |
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
|
641 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
|
642 { |
33569 | 643 g_lpddclipper->lpVtbl->SetHWnd(g_lpddclipper, 0, vo_w32_window); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
644 } |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
645 |
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
|
646 /*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
|
647 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
|
648 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
|
649 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
|
650 if(rd.bottom>vo_screenheight)rd.bottom=vo_screenheight; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
651 |
14207 | 652 /*for nonoverlay mode we are finished, for overlay mode we have to display the overlay first*/ |
653 if(nooverlay)return 0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
654 |
12387
5c2e728f5a00
keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents:
12192
diff
changeset
|
655 // 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
|
656 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,&rs, g_lpddsPrimary, &rd, dwUpdateFlags, &ovfx); |
7537 | 657 if(FAILED(ddrval)) |
658 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
659 // one cause might be the driver lied about minimum stretch |
7537 | 660 // we should try upping the destination size a bit, or |
661 // perhaps shrinking the source size | |
662 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>UpdateOverlay failed\n" ); | |
663 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 ); | |
664 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>"); | |
665 switch (ddrval) | |
666 { | |
667 case DDERR_NOSTRETCHHW: | |
668 {mp_msg(MSGT_VO, MSGL_ERR ,"hardware can't stretch: try to size the window back\n");break;} | |
669 case DDERR_INVALIDRECT: | |
670 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid rectangle\n");break;} | |
671 case DDERR_INVALIDPARAMS: | |
672 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid parameters\n");break;} | |
673 case DDERR_HEIGHTALIGN: | |
674 {mp_msg(MSGT_VO, MSGL_ERR ,"height align\n");break;} | |
675 case DDERR_XALIGN: | |
676 {mp_msg(MSGT_VO, MSGL_ERR ,"x align\n");break;} | |
677 case DDERR_UNSUPPORTED: | |
678 {mp_msg(MSGT_VO, MSGL_ERR ,"unsupported\n");break;} | |
679 case DDERR_INVALIDSURFACETYPE: | |
680 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid surfacetype\n");break;} | |
681 case DDERR_INVALIDOBJECT: | |
682 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid object\n");break;} | |
683 case DDERR_SURFACELOST: | |
684 { | |
685 mp_msg(MSGT_VO, MSGL_ERR ,"surfaces lost\n"); | |
686 g_lpddsOverlay->lpVtbl->Restore( g_lpddsOverlay ); //restore and try again | |
687 g_lpddsPrimary->lpVtbl->Restore( g_lpddsPrimary ); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
688 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,&rs, g_lpddsPrimary, &rd, dwUpdateFlags, &ovfx); |
7537 | 689 if(ddrval !=DD_OK)mp_msg(MSGT_VO, MSGL_FATAL ,"<vo_directx><FATAL ERROR>UpdateOverlay failed again\n" ); |
690 break; | |
691 } | |
12156
ff9f315741a7
print at least the error number when there is no text for it
faust3
parents:
12021
diff
changeset
|
692 default: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
693 mp_msg(MSGT_VO, MSGL_ERR ," 0x%x\n",ddrval); |
7537 | 694 } |
8667 | 695 /*ok we can't do anything about it -> hide overlay*/ |
7537 | 696 if(ddrval != DD_OK) |
697 { | |
698 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,NULL, g_lpddsPrimary, NULL, DDOVER_HIDE, NULL); | |
699 return 1; | |
700 } | |
701 } | |
702 return 0; | |
703 } | |
704 | |
705 //find out supported overlay pixelformats | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
706 static uint32_t Directx_CheckOverlayPixelformats(void) |
7537 | 707 { |
708 DDCAPS capsDrv; | |
709 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
|
710 DDSURFACEDESC2 ddsdOverlay; |
7537 | 711 uint32_t i; |
712 uint32_t formatcount = 0; | |
713 //get driver caps to determine overlay support | |
714 ZeroMemory(&capsDrv, sizeof(capsDrv)); | |
715 capsDrv.dwSize = sizeof(capsDrv); | |
716 ddrval = g_lpdd->lpVtbl->GetCaps(g_lpdd,&capsDrv, NULL); | |
717 if (FAILED(ddrval)) | |
718 { | |
719 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>failed getting ddrawcaps\n"); | |
720 return 1; | |
721 } | |
722 if (!(capsDrv.dwCaps & DDCAPS_OVERLAY)) | |
723 { | |
724 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>Your card doesn't support overlay\n"); | |
725 return 1; | |
726 } | |
727 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>testing supported overlay pixelformats\n"); | |
728 //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
|
729 //overlay hardware: try out various formats till one works |
7537 | 730 ZeroMemory(&ddsdOverlay, sizeof(ddsdOverlay)); |
731 ddsdOverlay.dwSize = sizeof(ddsdOverlay); | |
732 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY; | |
733 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH| DDSD_PIXELFORMAT; | |
734 ddsdOverlay.dwWidth=300; | |
735 ddsdOverlay.dwHeight=280; | |
736 ddsdOverlay.dwBackBufferCount=0; | |
737 //try to create an overlay surface using one of the pixel formats in our global list | |
738 i=0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
739 do |
7537 | 740 { |
741 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay; | |
742 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL); | |
743 if (ddrval == DD_OK) | |
744 { | |
745 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><FORMAT OVERLAY>%i %s supported\n",i,g_ddpf[i].img_format_name); | |
746 g_ddpf[i].drv_caps = VFCAP_CSP_SUPPORTED |VFCAP_OSD |VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_HWSCALE_UP; | |
747 formatcount++;} | |
748 else mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><FORMAT OVERLAY>%i %s not supported\n",i,g_ddpf[i].img_format_name); | |
749 if (g_lpddsOverlay != NULL) {g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);g_lpddsOverlay = NULL;} | |
750 } while( ++i < NUM_FORMATS ); | |
751 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>Your card supports %i of %i overlayformats\n",formatcount, NUM_FORMATS); | |
752 if (formatcount == 0) | |
753 { | |
754 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><WARN>Your card supports overlay, but we couldn't create one\n"); | |
755 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>This can have the following reasons:\n"); | |
756 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>- you are already using an overlay with another app\n"); | |
757 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>- you don't have enough videomemory\n"); | |
758 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>- vo_directx doesn't support the cards overlay pixelformat\n"); | |
759 return 1; | |
760 } | |
761 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 | |
762 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
|
763 return 0; |
7537 | 764 } |
765 | |
766 //find out the Pixelformat of the Primary Surface | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28121
diff
changeset
|
767 static uint32_t Directx_CheckPrimaryPixelformat(void) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
768 { |
7537 | 769 uint32_t i=0; |
770 uint32_t formatcount = 0; | |
771 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
|
772 DDSURFACEDESC2 ddsd; |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
773 HDC hdc; |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
774 HRESULT hres; |
8667 | 775 COLORREF rgbT=RGB(0,0,0); |
7537 | 776 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>checking primary surface\n"); |
777 memset( &ddpf, 0, sizeof( DDPIXELFORMAT )); | |
778 ddpf.dwSize = sizeof( DDPIXELFORMAT ); | |
779 //we have to create a primary surface first | |
780 if(Directx_CreatePrimarySurface()!=0)return 1; | |
781 if(g_lpddsPrimary->lpVtbl->GetPixelFormat( g_lpddsPrimary, &ddpf ) != DD_OK ) | |
782 { | |
783 mp_msg(MSGT_VO, MSGL_FATAL ,"<vo_directx><FATAL ERROR>can't get pixelformat\n"); | |
784 return 1; | |
785 } | |
786 while ( i < NUM_FORMATS ) | |
787 { | |
788 if (g_ddpf[i].g_ddpfOverlay.dwRGBBitCount == ddpf.dwRGBBitCount) | |
789 { | |
790 if (g_ddpf[i].g_ddpfOverlay.dwRBitMask == ddpf.dwRBitMask) | |
791 { | |
792 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><FORMAT PRIMARY>%i %s supported\n",i,g_ddpf[i].img_format_name); | |
7713 | 793 g_ddpf[i].drv_caps = VFCAP_CSP_SUPPORTED |VFCAP_OSD; |
7537 | 794 formatcount++; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
795 primary_image_format=g_ddpf[i].img_format; |
7537 | 796 } |
797 } | |
798 i++; | |
799 } | |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
800 //get the colorkey for overlay mode |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
801 destcolorkey = CLR_INVALID; |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
802 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
|
803 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
804 rgbT = GetPixel(hdc, 0, 0); |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
805 SetPixel(hdc, 0, 0, windowcolor); |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
806 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary,hdc); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
807 } |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
808 // read back the converted color |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
809 ddsd.dwSize = sizeof(ddsd); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
810 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
|
811 ; |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
812 if (hres == DD_OK) |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
813 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
814 destcolorkey = *(DWORD *) ddsd.lpSurface; |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
815 if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
816 destcolorkey &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1; |
7624
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
817 g_lpddsPrimary->lpVtbl->Unlock(g_lpddsPrimary,NULL); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
818 } |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
819 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
|
820 { |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
821 SetPixel(hdc, 0, 0, rgbT); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
822 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary,hdc); |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
823 } |
b1a3b979c630
This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents:
7537
diff
changeset
|
824 //release primary |
7537 | 825 g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary); |
826 g_lpddsPrimary = NULL; | |
827 if(formatcount==0) | |
828 { | |
829 mp_msg(MSGT_VO, MSGL_FATAL ,"<vo_directx><FATAL ERROR>Unknown Pixelformat\n"); | |
830 return 1; | |
831 } | |
832 return 0; | |
833 } | |
834 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15690
diff
changeset
|
835 static int preinit(const char *arg) |
7537 | 836 { |
837 HINSTANCE hInstance = GetModuleHandle(NULL); | |
9943 | 838 char exedir[MAX_PATH]; |
7682 | 839 if(arg) |
840 { | |
9488
abe81caa8cc1
fix fullscreenswitching patch by Joey Parrish <joey at nicewarrior.org>
faust3
parents:
9380
diff
changeset
|
841 if(strstr(arg,"noaccel")) |
7682 | 842 { |
843 mp_msg(MSGT_VO,MSGL_V,"<vo_directx><INFO>disabled overlay\n"); | |
844 nooverlay = 1; | |
845 } | |
846 } | |
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
|
847 /*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
|
848 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
|
849 { |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
850 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
|
851 } |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
852 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
|
853 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
|
854 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
|
855 monitor_rect.bottom=GetSystemMetrics(SM_CYSCREEN); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
856 |
14205 | 857 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
|
858 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
|
859 blackbrush = (HBRUSH)GetStockObject(BLACK_BRUSH); |
33569 | 860 if (!vo_w32_init()) |
861 return 1; | |
862 if (!vo_w32_config(100, 100, VOFLAG_HIDDEN)) | |
863 return 1; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
864 |
7537 | 865 if (Directx_InitDirectDraw()!= 0)return 1; //init DirectDraw |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
866 |
7537 | 867 if (Directx_CheckPrimaryPixelformat()!=0)return 1; |
7682 | 868 if (!nooverlay && Directx_CheckOverlayPixelformats() == 0) //check for supported hardware |
7537 | 869 { |
870 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>hardware supports overlay\n"); | |
871 nooverlay = 0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
872 } |
7537 | 873 else //if we can't have overlay we create a backpuffer with the same imageformat as the primary surface |
874 { | |
875 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>using backpuffer\n"); | |
876 nooverlay = 1; | |
877 } | |
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
|
878 mp_msg(MSGT_VO, MSGL_DBG3 ,"<vo_directx><INFO>preinit succesfully finished\n"); |
7537 | 879 return 0; |
880 } | |
881 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15690
diff
changeset
|
882 static int draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y ) |
7537 | 883 { |
884 uint8_t *s; | |
885 uint8_t *d; | |
24840 | 886 uint32_t uvstride=dstride/2; |
7537 | 887 // copy Y |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
888 d=image+dstride*y+x; |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
889 s=src[0]; |
19242
8298ac25902e
optimize and simplify memcpy usage, use mem2agpcpy_pic
reimar
parents:
18952
diff
changeset
|
890 mem2agpcpy_pic(d,s,w,h,dstride,stride[0]); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
891 |
7537 | 892 w/=2;h/=2;x/=2;y/=2; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
893 |
7537 | 894 // copy U |
8490
ac40496c7d9e
1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents:
8148
diff
changeset
|
895 d=image+dstride*image_height + uvstride*y+x; |
8667 | 896 if(image_format == IMGFMT_YV12)s=src[2]; |
7537 | 897 else s=src[1]; |
19242
8298ac25902e
optimize and simplify memcpy usage, use mem2agpcpy_pic
reimar
parents:
18952
diff
changeset
|
898 mem2agpcpy_pic(d,s,w,h,uvstride,stride[1]); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
899 |
7537 | 900 // copy V |
8490
ac40496c7d9e
1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents:
8148
diff
changeset
|
901 d=image+dstride*image_height +uvstride*(image_height/2) + uvstride*y+x; |
8667 | 902 if(image_format == IMGFMT_YV12)s=src[1]; |
7537 | 903 else s=src[2]; |
19242
8298ac25902e
optimize and simplify memcpy usage, use mem2agpcpy_pic
reimar
parents:
18952
diff
changeset
|
904 mem2agpcpy_pic(d,s,w,h,uvstride,stride[2]); |
7537 | 905 return 0; |
906 } | |
907 | |
908 static void flip_page(void) | |
909 { | |
910 HRESULT dxresult; | |
8519 | 911 g_lpddsBack->lpVtbl->Unlock (g_lpddsBack,NULL); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
912 if (vo_doublebuffering) |
7537 | 913 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
914 // flip to the next image in the sequence |
7537 | 915 dxresult = g_lpddsOverlay->lpVtbl->Flip( g_lpddsOverlay,NULL, DDFLIP_WAIT); |
916 if(dxresult == DDERR_SURFACELOST) | |
917 { | |
918 mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR><vo_directx><INFO>Restoring Surface\n"); | |
919 g_lpddsBack->lpVtbl->Restore( g_lpddsBack ); | |
24833 | 920 // restore overlay and primary before calling |
921 // Directx_ManageDisplay() to avoid error messages | |
922 g_lpddsOverlay->lpVtbl->Restore( g_lpddsOverlay ); | |
923 g_lpddsPrimary->lpVtbl->Restore( g_lpddsPrimary ); | |
924 // update overlay in case we return from screensaver | |
925 Directx_ManageDisplay(); | |
7537 | 926 dxresult = g_lpddsOverlay->lpVtbl->Flip( g_lpddsOverlay,NULL, DDFLIP_WAIT); |
927 } | |
928 if(dxresult != DD_OK)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't flip page\n"); | |
929 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
930 if(nooverlay) |
7537 | 931 { |
932 DDBLTFX ddbltfx; | |
933 // ask for the "NOTEARING" option | |
934 memset( &ddbltfx, 0, sizeof(DDBLTFX) ); | |
935 ddbltfx.dwSize = sizeof(DDBLTFX); | |
936 ddbltfx.dwDDFX = DDBLTFX_NOTEARING; | |
937 g_lpddsPrimary->lpVtbl->Blt(g_lpddsPrimary, &rd, g_lpddsBack, NULL, DDBLT_WAIT, &ddbltfx); | |
24833 | 938 } |
939 if (g_lpddsBack->lpVtbl->Lock(g_lpddsBack,NULL,&ddsdsf, DDLOCK_NOSYSLOCK | DDLOCK_WAIT , NULL) == DD_OK) { | |
24835 | 940 if(vo_directrendering && (dstride != ddsdsf.lPitch)){ |
941 mp_msg(MSGT_VO,MSGL_WARN,"<vo_directx><WARN>stride changed !!!! disabling direct rendering\n"); | |
942 vo_directrendering=0; | |
943 } | |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
32481
diff
changeset
|
944 free(tmp_image); |
24835 | 945 tmp_image = NULL; |
946 dstride = ddsdsf.lPitch; | |
947 image = ddsdsf.lpSurface; | |
24833 | 948 } else if (!tmp_image) { |
949 mp_msg(MSGT_VO, MSGL_WARN, "<vo_directx><WARN>Locking the surface failed, rendering to a hidden surface!\n"); | |
950 tmp_image = image = calloc(1, image_height * dstride * 2); | |
951 } | |
7537 | 952 } |
953 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15690
diff
changeset
|
954 static int draw_frame(uint8_t *src[]) |
7537 | 955 { |
23457
a124f3abc1ec
Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents:
23077
diff
changeset
|
956 fast_memcpy( image, *src, dstride * image_height ); |
7537 | 957 return 0; |
958 } | |
959 | |
960 static uint32_t get_image(mp_image_t *mpi) | |
961 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
962 if(mpi->flags&MP_IMGFLAG_READABLE) {mp_msg(MSGT_VO, MSGL_V,"<vo_directx><ERROR>slow video ram\n");return VO_FALSE;} |
7537 | 963 if(mpi->type==MP_IMGTYPE_STATIC) {mp_msg(MSGT_VO, MSGL_V,"<vo_directx><ERROR>not static\n");return VO_FALSE;} |
964 if((mpi->width==dstride) || (mpi->flags&(MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_ACCEPT_WIDTH))) | |
965 { | |
8667 | 966 if(mpi->flags&MP_IMGFLAG_PLANAR) |
7537 | 967 { |
8667 | 968 if(image_format == IMGFMT_YV12) |
7537 | 969 { |
970 mpi->planes[2]= image + dstride*image_height; | |
971 mpi->planes[1]= image + dstride*image_height+ dstride*image_height/4; | |
8667 | 972 mpi->stride[1]=mpi->stride[2]=dstride/2; |
7537 | 973 } |
8667 | 974 else if(image_format == IMGFMT_IYUV || image_format == IMGFMT_I420) |
7537 | 975 { |
976 mpi->planes[1]= image + dstride*image_height; | |
977 mpi->planes[2]= image + dstride*image_height+ dstride*image_height/4; | |
8667 | 978 mpi->stride[1]=mpi->stride[2]=dstride/2; |
7537 | 979 } |
8667 | 980 else if(image_format == IMGFMT_YVU9) |
981 { | |
982 mpi->planes[2] = image + dstride*image_height; | |
983 mpi->planes[1] = image + dstride*image_height+ dstride*image_height/16; | |
984 mpi->stride[1]=mpi->stride[2]=dstride/4; | |
985 } | |
7537 | 986 } |
8667 | 987 mpi->planes[0]=image; |
988 mpi->stride[0]=dstride; | |
989 mpi->width=image_width; | |
990 mpi->height=image_height; | |
7537 | 991 mpi->flags|=MP_IMGFLAG_DIRECT; |
992 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>Direct Rendering ENABLED\n"); | |
993 return VO_TRUE; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
994 } |
7537 | 995 return VO_FALSE; |
996 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
997 |
7537 | 998 static uint32_t put_image(mp_image_t *mpi){ |
999 | |
1000 uint8_t *d; | |
1001 uint8_t *s; | |
1002 uint32_t x = mpi->x; | |
1003 uint32_t y = mpi->y; | |
1004 uint32_t w = mpi->w; | |
1005 uint32_t h = mpi->h; | |
14207 | 1006 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1007 if((mpi->flags&MP_IMGFLAG_DIRECT)||(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK)) |
7537 | 1008 { |
1009 mp_msg(MSGT_VO, MSGL_DBG3 ,"<vo_directx><INFO>put_image: nothing to do: drawslices\n"); | |
1010 return VO_TRUE; | |
1011 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1012 |
7537 | 1013 if (mpi->flags&MP_IMGFLAG_PLANAR) |
1014 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1015 |
8667 | 1016 if(image_format!=IMGFMT_YVU9)draw_slice(mpi->planes,mpi->stride,mpi->w,mpi->h,0,0); |
1017 else | |
7537 | 1018 { |
1019 // copy Y | |
1020 d=image+dstride*y+x; | |
1021 s=mpi->planes[0]; | |
19242
8298ac25902e
optimize and simplify memcpy usage, use mem2agpcpy_pic
reimar
parents:
18952
diff
changeset
|
1022 mem2agpcpy_pic(d,s,w,h,dstride,mpi->stride[0]); |
8519 | 1023 w/=4;h/=4;x/=4;y/=4; |
7537 | 1024 // copy V |
8519 | 1025 d=image+dstride*image_height + dstride*y/4+x; |
8667 | 1026 s=mpi->planes[2]; |
19242
8298ac25902e
optimize and simplify memcpy usage, use mem2agpcpy_pic
reimar
parents:
18952
diff
changeset
|
1027 mem2agpcpy_pic(d,s,w,h,dstride/4,mpi->stride[1]); |
7537 | 1028 // copy U |
8519 | 1029 d=image+dstride*image_height + dstride*image_height/16 + dstride/4*y+x; |
8667 | 1030 s=mpi->planes[1]; |
19242
8298ac25902e
optimize and simplify memcpy usage, use mem2agpcpy_pic
reimar
parents:
18952
diff
changeset
|
1031 mem2agpcpy_pic(d,s,w,h,dstride/4,mpi->stride[2]); |
7537 | 1032 } |
1033 } | |
1034 else //packed | |
1035 { | |
27738
c89a913b5d5e
Honour differences between src and dst stride for packed yuv
faust3
parents:
27343
diff
changeset
|
1036 mem2agpcpy_pic(image, mpi->planes[0], w * (mpi->bpp / 8), h, dstride, mpi->stride[0]); |
7537 | 1037 } |
1038 return VO_TRUE; | |
1039 } | |
1040 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15690
diff
changeset
|
1041 static int |
7537 | 1042 config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t options, char *title, uint32_t format) |
1043 { | |
1044 image_format = format; | |
1045 image_width = width; | |
1046 image_height = height; | |
8519 | 1047 d_image_width = d_width; |
1048 d_image_height = d_height; | |
13438 | 1049 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
|
1050 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
|
1051 |
27343 | 1052 #ifdef CONFIG_GUI |
18952 | 1053 if(use_gui){ |
18913 | 1054 guiGetEvent(guiSetShVideo, 0); |
1055 } | |
1056 #endif | |
15428
3d26652b8d29
multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents:
14692
diff
changeset
|
1057 /*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
|
1058 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
|
1059 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
|
1060 if(g_lpddclipper)g_lpddclipper->lpVtbl->Release(g_lpddclipper); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1061 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
|
1062 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
|
1063 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
|
1064 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
|
1065 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
|
1066 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
|
1067 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
|
1068 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
|
1069 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
|
1070 |
33569 | 1071 if (!vo_w32_config(d_width, d_height, options)) |
1072 return 1; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1073 |
14207 | 1074 if (WinID == -1) |
33569 | 1075 SetWindowText(vo_w32_window,title); |
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
|
1076 |
a8adfcf47f4e
adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents:
11542
diff
changeset
|
1077 |
8667 | 1078 /*create the surfaces*/ |
1079 if(Directx_CreatePrimarySurface())return 1; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1080 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1081 //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
|
1082 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
|
1083 LPDIRECTDRAWPALETTE ddpalette=NULL; |
50d99489dfe5
256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents:
14302
diff
changeset
|
1084 char* palette=malloc(4*256); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1085 int i; |
14400
50d99489dfe5
256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents:
14302
diff
changeset
|
1086 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
|
1087 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
|
1088 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
|
1089 palette[4*i+2] = ((i >> 0) & 0x03) * 255 / 3; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1090 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
|
1091 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1092 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
|
1093 g_lpddsPrimary->lpVtbl->SetPalette(g_lpddsPrimary,ddpalette); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1094 free(palette); |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1095 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
|
1096 } |
50d99489dfe5
256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents:
14302
diff
changeset
|
1097 |
8667 | 1098 if (!nooverlay && Directx_CreateOverlay(image_format)) |
7537 | 1099 { |
10640
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
1100 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
|
1101 else { |
01e0d93182f8
fix playback of rgb files when overlay is not disabled
faust3
parents:
9943
diff
changeset
|
1102 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
|
1103 return 1; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1104 } |
7537 | 1105 } |
8667 | 1106 if(nooverlay) |
1107 { | |
1108 if(Directx_CreateBackpuffer()) | |
1109 { | |
1110 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't get the driver to work on your system :(\n"); | |
1111 return 1; | |
1112 } | |
1113 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>back surface created\n"); | |
1114 vo_doublebuffering = 0; | |
1115 /*create clipper for nonoverlay mode*/ | |
1116 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;} | |
33569 | 1117 if(g_lpddclipper->lpVtbl->SetHWnd (g_lpddclipper, 0, vo_w32_window)!= DD_OK){mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't associate clipper with window\n");return 1;} |
8667 | 1118 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;} |
1119 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
|
1120 }else{ |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1121 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
|
1122 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><WARN>unable to get DirectDraw ColorControl interface\n"); |
8667 | 1123 } |
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
|
1124 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
|
1125 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
|
1126 ddsdsf.dwSize = sizeof (DDSURFACEDESC2); |
24833 | 1127 if (g_lpddsBack->lpVtbl->Lock(g_lpddsBack,NULL,&ddsdsf, DDLOCK_NOSYSLOCK | DDLOCK_WAIT, NULL) == DD_OK) { |
24835 | 1128 dstride = ddsdsf.lPitch; |
1129 image = ddsdsf.lpSurface; | |
1130 return 0; | |
24833 | 1131 } |
1132 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><ERROR>Initial Lock on the Surface failed.\n"); | |
1133 return 1; | |
7537 | 1134 } |
1135 | |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1136 //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
|
1137 // brightness [0, 10000] |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1138 // contrast [0, 20000] |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1139 // hue [-180, 180] |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1140 // saturation [0, 20000] |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1141 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
|
1142 { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1143 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
|
1144 DDCOLORCONTROL dcc; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1145 //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
|
1146 if (!g_cc) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1147 //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
|
1148 return VO_NOTIMPL; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1149 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1150 ZeroMemory(&dcc, sizeof(dcc)); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1151 dcc.dwSize = sizeof(dcc); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1152 |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1153 if (!strcmp(what, "brightness")) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1154 dcc.dwFlags = DDCOLOR_BRIGHTNESS; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1155 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
|
1156 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1157 } 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
|
1158 dcc.dwFlags = DDCOLOR_CONTRAST; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1159 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
|
1160 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1161 } 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
|
1162 dcc.dwFlags = DDCOLOR_HUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1163 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
|
1164 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1165 } 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
|
1166 dcc.dwFlags = DDCOLOR_SATURATION; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1167 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
|
1168 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1169 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1170 |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1171 if (r == VO_TRUE) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1172 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
|
1173 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1174 return r; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1175 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1176 |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1177 //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
|
1178 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
|
1179 { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1180 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
|
1181 DDCOLORCONTROL dcc; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1182 if (!g_cc) { |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1183 //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
|
1184 return VO_NOTIMPL; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1185 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1186 ZeroMemory(&dcc, sizeof(dcc)); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1187 dcc.dwSize = sizeof(dcc); |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1188 |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1189 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
|
1190 return r; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1191 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1192 |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1193 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
|
1194 *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
|
1195 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1196 } 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
|
1197 *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
|
1198 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1199 } 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
|
1200 *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
|
1201 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1202 } 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
|
1203 *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
|
1204 r = VO_TRUE; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1205 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1206 // printf("\n*** %s = %d\n", what, *value); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1207 |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1208 return r; |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1209 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1210 |
33305
ddb45e9443ec
Remove the variable arguments from the libvo control() functions.
iive
parents:
33301
diff
changeset
|
1211 static int control(uint32_t request, void *data) |
7537 | 1212 { |
1213 switch (request) { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
1214 |
7537 | 1215 case VOCTRL_GET_IMAGE: |
1216 return get_image(data); | |
1217 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
|
1218 last_rect.left = 0xDEADC0DE; // reset window position cache |
7537 | 1219 return query_format(*((uint32_t*)data)); |
1220 case VOCTRL_DRAW_IMAGE: | |
1221 return put_image(data); | |
16968
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1222 case VOCTRL_BORDER: |
33569 | 1223 vo_w32_border(); |
1224 Directx_ManageDisplay(); | |
16968
e9d849bf8050
add a switch, slave command, and vo control to toggle borderless window.
joey
parents:
16966
diff
changeset
|
1225 return VO_TRUE; |
11542 | 1226 case VOCTRL_ONTOP: |
33569 | 1227 vo_w32_ontop(); |
11542 | 1228 return VO_TRUE; |
13091 | 1229 case VOCTRL_ROOTWIN: |
14207 | 1230 if(WinID != -1) return VO_TRUE; |
13091 | 1231 if(vidmode) |
1232 { | |
1233 mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>rootwin has no meaning in exclusive mode\n"); | |
1234 } | |
1235 else | |
1236 { | |
1237 if(vo_rootwin) vo_rootwin = 0; | |
1238 else vo_rootwin = 1; | |
17870
d5971cc55b39
10l the cpu hog fix broke fullscreenswitching with -wid
faust3
parents:
17853
diff
changeset
|
1239 last_rect.left = 0xDEADC0DE; // reset window position cache |
13091 | 1240 Directx_ManageDisplay(); |
1241 } | |
1242 return VO_TRUE; | |
7537 | 1243 case VOCTRL_FULLSCREEN: |
1244 { | |
33569 | 1245 vo_w32_fullscreen(); |
1246 Directx_ManageDisplay(); | |
7537 | 1247 return VO_TRUE; |
1248 } | |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1249 case VOCTRL_SET_EQUALIZER: { |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32537
diff
changeset
|
1250 vf_equalizer_t *eq=data; |
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32537
diff
changeset
|
1251 return color_ctrl_set(eq->item, eq->value); |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1252 } |
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1253 case VOCTRL_GET_EQUALIZER: { |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32537
diff
changeset
|
1254 vf_equalizer_t *eq=data; |
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32537
diff
changeset
|
1255 return color_ctrl_get(eq->item, &eq->value); |
13736
e4281b5463a4
overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents:
13438
diff
changeset
|
1256 } |
22459
d870e862d272
Simplify config by using code available in video_out.c
reimar
parents:
22289
diff
changeset
|
1257 case VOCTRL_UPDATE_SCREENINFO: |
33569 | 1258 w32_update_xinerama_info(); |
22459
d870e862d272
Simplify config by using code available in video_out.c
reimar
parents:
22289
diff
changeset
|
1259 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
|
1260 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
|
1261 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
|
1262 // fall-through intended |
7537 | 1263 }; |
1264 return VO_NOTIMPL; | |
1265 } |