annotate libvo/vo_directx.c @ 33949:ee2bcd643829

Resize video window after switching from fullscreen to normal size. The _NETWM_STATE_FULLSCREEN EWMH restores the original geometry which differs from the original size of the video if fullscreen has already been active at playback time.
author ib
date Thu, 01 Sep 2011 17:53:33 +0000
parents 240ab28c7628
children 954f6d044371
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
11 * (at your option) any later version.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
16 * GNU General Public License for more details.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
22
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
23 #include <windows.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
24 #include <windowsx.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
27 #include <stdlib.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
28 #include <errno.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
29 #include "config.h"
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
30 #include "video_out.h"
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
33 #include "fastmemcpy.h"
30653
3d23e24c5c60 Declare externally used variables from vd.c as extern in vd.h.
diego
parents: 30301
diff changeset
34 #include "libmpcodecs/vd.h"
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 13775
diff changeset
35 #include "mp_msg.h"
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
36 #include "aspect.h"
32467
fbe5c829c69b Move libvo/sub.[ch] from libvo to sub.
cigaes
parents: 30653
diff changeset
37 #include "sub/sub.h"
33569
8e70a224c411 Change vo_directx to use w32_common.c
reimar
parents: 33305
diff changeset
38 #include "w32_common.h"
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
39
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
40 static LPDIRECTDRAWCOLORCONTROL g_cc = NULL; //color control interface
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
41 static LPDIRECTDRAW7 g_lpdd = NULL; //DirectDraw Object
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
42 static LPDIRECTDRAWSURFACE7 g_lpddsPrimary = NULL; //Primary Surface: viewport through the Desktop
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
43 static LPDIRECTDRAWSURFACE7 g_lpddsOverlay = NULL; //Overlay Surface
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
44 static LPDIRECTDRAWSURFACE7 g_lpddsBack = NULL; //Back surface
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
45 static LPDIRECTDRAWCLIPPER g_lpddclipper; //clipper object, can only be used without overlay
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
46 static DDSURFACEDESC2 ddsdsf; //surface descripiton needed for locking
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
47 static HINSTANCE hddraw_dll; //handle to ddraw.dll
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
48 static RECT rd; //rect of our stretched image
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
49 static RECT rs; //rect of our source image
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
50 static HBRUSH colorbrush = NULL; // Handle to colorkey brush
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
51 static HBRUSH blackbrush = NULL; // Handle to black brush
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
52 static uint32_t image_width, image_height; //image width and height
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
53 static uint8_t *image = NULL; //image data
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
54 static void *tmp_image = NULL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
55 static uint32_t image_format = 0; //image format
10640
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
56 static uint32_t primary_image_format;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
57 static uint32_t vm_height = 0;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
58 static uint32_t vm_width = 0;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
59 static uint32_t vm_bpp = 0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
60 static uint32_t dstride; //surface stride
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
61 static uint32_t nooverlay = 0; //NonOverlay mode
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
62 static DWORD destcolorkey; //colorkey for our surface
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
63 static COLORREF windowcolor = RGB(0, 0, 16); //windowcolor == colorkey
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
64 static int adapter_count = 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
65 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
66 static GUID *selected_guid_ptr = NULL;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
67
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
68 /*****************************************************************************
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
69 * DirectDraw GUIDs.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
70 * Defining them here allows us to get rid of the dxguid library during
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
71 * the linking stage.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
72 *****************************************************************************/
30301
a33cf9c69731 Change GUID declarations in vo_directx to be static.
reimar
parents: 29263
diff changeset
73 #define IID_IDirectDraw7 MP_IID_IDirectDraw7
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
74 static const GUID MP_IID_IDirectDraw7 = {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
75 0x15e65ec0, 0x3b9c, 0x11d2, { 0xb9, 0x2f, 0x00, 0x60, 0x97, 0x97, 0xea, 0x5b }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
76 };
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
77
30301
a33cf9c69731 Change GUID declarations in vo_directx to be static.
reimar
parents: 29263
diff changeset
78 #define IID_IDirectDrawColorControl MP_IID_IDirectDrawColorControl
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
79 static const GUID MP_IID_IDirectDrawColorControl = {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
80 0x4b9f0ee0, 0x0d7e, 0x11d0, { 0x9b, 0x06, 0x00, 0xa0, 0xc9, 0x03, 0xa3, 0xb8 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
81 };
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
82
33819
6451d20ff7c1 Avoid typedef.
reimar
parents: 33818
diff changeset
83 struct directx_fourcc_caps {
33816
65c7223dd37a Store fixed-length string directly in struct, avoid pointer indirection.
reimar
parents: 33815
diff changeset
84 char img_format_name[6]; //human readable name
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
85 uint32_t img_format; //as MPlayer image format
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
86 DDPIXELFORMAT g_ddpfOverlay; //as Directx Sourface description
33819
6451d20ff7c1 Avoid typedef.
reimar
parents: 33818
diff changeset
87 } static const g_ddpf[] = {
33815
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
88 { "YV12 ", IMGFMT_YV12, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('Y', 'V', '1', '2'), 0, 0, 0, 0, 0 } },
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
89 { "I420 ", IMGFMT_I420, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('I', '4', '2', '0'), 0, 0, 0, 0, 0 } }, //yv12 with swapped uv
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
90 { "IYUV ", IMGFMT_IYUV, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('I', 'Y', 'U', 'V'), 0, 0, 0, 0, 0 } }, //same as i420
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
91 { "YVU9 ", IMGFMT_YVU9, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('Y', 'V', 'U', '9'), 0, 0, 0, 0, 0 } },
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
92 { "YUY2 ", IMGFMT_YUY2, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('Y', 'U', 'Y', '2'), 0, 0, 0, 0, 0 } },
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
93 { "UYVY ", IMGFMT_UYVY, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('U', 'Y', 'V', 'Y'), 0, 0, 0, 0, 0 } },
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
94 { "BGR8 ", IMGFMT_BGR8, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 8, 0x00000000, 0x00000000, 0x00000000, 0 } },
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
95 { "RGB15", IMGFMT_RGB15, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000001F, 0x000003E0, 0x00007C00, 0 } }, //RGB 5:5:5
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
96 { "BGR15", IMGFMT_BGR15, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x00007C00, 0x000003E0, 0x0000001F, 0 } },
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
97 { "RGB16", IMGFMT_RGB16, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000001F, 0x000007E0, 0x0000F800, 0 } }, //RGB 5:6:5
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
98 { "BGR16", IMGFMT_BGR16, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000F800, 0x000007E0, 0x0000001F, 0 } },
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
99 { "RGB24", IMGFMT_RGB24, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 24, 0x000000FF, 0x0000FF00, 0x00FF0000, 0 } },
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
100 { "BGR24", IMGFMT_BGR24, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 24, 0x00FF0000, 0x0000FF00, 0x000000FF, 0 } },
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
101 { "RGB32", IMGFMT_RGB32, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0 } },
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
102 { "BGR32", IMGFMT_BGR32, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x00FF0000, 0x0000FF00, 0x000000FF, 0 } }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
103 };
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
104 #define NUM_FORMATS (sizeof(g_ddpf) / sizeof(g_ddpf[0]))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
105
33815
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
106 // what hw supports with corresponding format in g_ddpf
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
107 static uint32_t drv_caps[NUM_FORMATS];
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
108
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
109 static const vo_info_t info = {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
110 "Directx DDraw YUV/RGB/BGR renderer",
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
111 "directx",
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
112 "Sascha Sommer <saschasommer@freenet.de>",
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
113 ""
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
114 };
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
115
25220
c9e9ac2008c2 Mark the vo_functions_t definitions as const where possible.
reimar
parents: 25216
diff changeset
116 const LIBVO_EXTERN(directx)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
117
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
118 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src,
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
119 unsigned char *srca, int stride)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
120 {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
121 switch (image_format) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
122 case IMGFMT_YV12:
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
123 case IMGFMT_I420:
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
124 case IMGFMT_IYUV:
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
125 case IMGFMT_YVU9:
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
126 vo_draw_alpha_yv12(w, h, src, srca, stride, ((uint8_t *)image) + dstride * y0 + x0, dstride);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
127 break;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
128 case IMGFMT_YUY2:
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
129 vo_draw_alpha_yuy2(w, h, src, srca, stride, ((uint8_t *)image) + dstride * y0 + 2 * x0, dstride);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
130 break;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
131 case IMGFMT_UYVY:
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
132 vo_draw_alpha_yuy2(w, h, src, srca, stride, ((uint8_t *)image) + dstride * y0 + 2 * x0 + 1, dstride);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
133 break;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
134 case IMGFMT_RGB15:
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
135 case IMGFMT_BGR15:
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
136 vo_draw_alpha_rgb15(w, h, src, srca, stride, ((uint8_t *)image) + dstride * y0 + 2 * x0, dstride);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
137 break;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
138 case IMGFMT_RGB16:
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
139 case IMGFMT_BGR16:
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
140 vo_draw_alpha_rgb16(w, h, src, srca, stride, ((uint8_t *)image) + dstride * y0 + 2 * x0, dstride);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
141 break;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
142 case IMGFMT_RGB24:
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
143 case IMGFMT_BGR24:
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
144 vo_draw_alpha_rgb24(w, h, src, srca, stride, ((uint8_t *)image) + dstride * y0 + 4 * x0, dstride);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
145 break;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
146 case IMGFMT_RGB32:
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
147 case IMGFMT_BGR32:
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
148 vo_draw_alpha_rgb32(w, h, src, srca, stride, ((uint8_t *)image) + dstride * y0 + 4 * x0, dstride);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
149 break;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
150 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
151 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
152
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
153 static void draw_osd(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
154 {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
155 vo_draw_text(image_width, image_height, draw_alpha);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
156 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
157
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
158 static int query_format(uint32_t format)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
159 {
33817
a3d73bc21e55 Replace some inappropriate while() loops with for()
reimar
parents: 33816
diff changeset
160 int i;
a3d73bc21e55 Replace some inappropriate while() loops with for()
reimar
parents: 33816
diff changeset
161 for (i = 0; i < NUM_FORMATS; i++)
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
162 if (g_ddpf[i].img_format == format)
33815
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
163 return drv_caps[i];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
164 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
165 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
166
33821
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
167 struct errmap {
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
168 HRESULT err;
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
169 const char *errstr;
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
170 } static const dd_errmap[] = {
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
171 {DDERR_INCOMPATIBLEPRIMARY, "incompatible primary surface"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
172 {DDERR_INVALIDCAPS, "invalid caps"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
173 {DDERR_INVALIDOBJECT, "invalid object"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
174 {DDERR_INVALIDPARAMS, "invalid parameters"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
175 {DDERR_INVALIDRECT, "invalid rectangle"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
176 {DDERR_INVALIDSURFACETYPE, "invalid surfacetype"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
177 {DDERR_NODIRECTDRAWHW, "no directdraw hardware"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
178 {DDERR_NOEMULATION, "can't emulate"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
179 {DDERR_NOFLIPHW, "hardware can't do flip"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
180 {DDERR_NOOVERLAYHW, "hardware can't do overlay"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
181 {DDERR_NOSTRETCHHW, "hardware can't stretch: try to size the window back"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
182 {DDERR_OUTOFMEMORY, "not enough system memory"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
183 {DDERR_OUTOFVIDEOMEMORY, "not enough video memory"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
184 {DDERR_UNSUPPORTED, "unsupported"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
185 {DDERR_UNSUPPORTEDMODE, "unsupported mode"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
186 {DDERR_HEIGHTALIGN, "height align"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
187 {DDERR_XALIGN, "x align"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
188 {DDERR_SURFACELOST, "surfaces lost"},
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
189 {0, NULL}
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
190 };
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
191
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
192 static const char *dd_errstr(HRESULT res)
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
193 {
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
194 int i;
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
195 for (i = 0; dd_errmap[i].errstr; i++)
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
196 if (dd_errmap[i].err == res)
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
197 return dd_errmap[i].errstr;
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
198 return "unknown error";
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
199 }
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
200
29212
eda346733b8c Add missing 'void' to parameterless function declarations.
diego
parents: 28121
diff changeset
201 static uint32_t Directx_CreatePrimarySurface(void)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
202 {
33814
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
203 DDSURFACEDESC2 ddsd = { .dwSize = sizeof(ddsd) };
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
204 //cleanup
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
205 if (g_lpddsPrimary)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
206 g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
207 g_lpddsPrimary = NULL;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
208
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
209 if (vidmode)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
210 g_lpdd->lpVtbl->SetDisplayMode(g_lpdd, vm_width, vm_height, vm_bpp, vo_refresh_rate, 0);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
211 //set flags and create a primary surface.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
212 ddsd.dwFlags = DDSD_CAPS;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
213 ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
214 if (g_lpdd->lpVtbl->CreateSurface(g_lpdd, &ddsd, &g_lpddsPrimary, NULL) == DD_OK)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
215 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>primary surface created\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
216 else {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
217 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>could not create primary surface\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
218 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
219 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
220 return 0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
221 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
222
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
223 static uint32_t Directx_CreateOverlay(uint32_t imgfmt)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
224 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
225 HRESULT ddrval;
33814
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
226 DDSURFACEDESC2 ddsdOverlay = {
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
227 .dwSize = sizeof(ddsdOverlay),
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
228 .ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_FLIP | DDSCAPS_COMPLEX | DDSCAPS_VIDEOMEMORY,
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
229 .dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_BACKBUFFERCOUNT | DDSD_PIXELFORMAT,
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
230 .dwWidth = image_width,
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
231 .dwHeight = image_height,
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
232 .dwBackBufferCount = 2,
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
233 };
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
234 uint32_t i = 0;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
235 while (i < NUM_FORMATS && imgfmt != g_ddpf[i].img_format)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
236 i++;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
237 if (!g_lpdd || !g_lpddsPrimary || i == NUM_FORMATS)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
238 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
239 //cleanup
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
240 if (g_lpddsOverlay)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
241 g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
242 if (g_lpddsBack)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
243 g_lpddsBack->lpVtbl->Release(g_lpddsBack);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
244 g_lpddsOverlay = NULL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
245 g_lpddsBack = NULL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
246 //create our overlay
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
247 ddsdOverlay.ddpfPixelFormat = g_ddpf[i].g_ddpfOverlay;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
248 if (vo_doublebuffering) { //tribblebuffering
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
249 if (g_lpdd->lpVtbl->CreateSurface(g_lpdd, &ddsdOverlay, &g_lpddsOverlay, NULL) == DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
250 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><INFO>overlay with format %s created\n", g_ddpf[i].img_format_name);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
251 //get the surface directly attached to the primary (the back buffer)
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
252 ddsdOverlay.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
253 if (g_lpddsOverlay->lpVtbl->GetAttachedSurface(g_lpddsOverlay, &ddsdOverlay.ddsCaps, &g_lpddsBack) != DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
254 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>can't get attached surface\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
255 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
256 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
257 return 0;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
258 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
259 vo_doublebuffering = 0; //disable tribblebuffering
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
260 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><WARN>cannot create tribblebuffer overlay with format %s\n", g_ddpf[i].img_format_name);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
261 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
262 //single buffer
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
263 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><INFO>using singlebuffer overlay\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
264 ddsdOverlay.dwBackBufferCount = 0;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
265 ddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
266 ddsdOverlay.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
267 ddsdOverlay.ddpfPixelFormat = g_ddpf[i].g_ddpfOverlay;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
268 // try to create the overlay surface
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
269 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd, &ddsdOverlay, &g_lpddsOverlay, NULL);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
270 if (ddrval != DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
271 if (ddrval == DDERR_INVALIDPIXELFORMAT)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
272 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><ERROR> invalid pixelformat: %s\n", g_ddpf[i].img_format_name);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
273 else
33821
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
274 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR>create surface failed: %s (0x%x)\n", dd_errstr(ddrval), ddrval);
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
275 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
276 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
277 g_lpddsBack = g_lpddsOverlay;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
278 return 0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
279 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
280
29212
eda346733b8c Add missing 'void' to parameterless function declarations.
diego
parents: 28121
diff changeset
281 static uint32_t Directx_CreateBackpuffer(void)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
282 {
33814
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
283 DDSURFACEDESC2 ddsd = {
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
284 .dwSize = sizeof(ddsd),
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
285 .ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
286 .dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT,
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
287 .dwWidth = image_width,
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
288 .dwHeight = image_height,
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
289 };
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
290 //cleanup
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
291 if (g_lpddsBack)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
292 g_lpddsBack->lpVtbl->Release(g_lpddsBack);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
293 g_lpddsBack = NULL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
294 if (g_lpdd->lpVtbl->CreateSurface(g_lpdd, &ddsd, &g_lpddsBack, 0) != DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
295 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>can't create backpuffer\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
296 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
297 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
298 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>backbuffer created\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
299 return 0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
300 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
301
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
302 static void uninit(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
303 {
33811
c1299d6cbc4e Make NULL checks simpler/more consistent.
reimar
parents: 33810
diff changeset
304 if (g_cc)
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
305 g_cc->lpVtbl->Release(g_cc);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
306 g_cc = NULL;
33811
c1299d6cbc4e Make NULL checks simpler/more consistent.
reimar
parents: 33810
diff changeset
307 if (g_lpddclipper)
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
308 g_lpddclipper->lpVtbl->Release(g_lpddclipper);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
309 g_lpddclipper = NULL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
310 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>clipper released\n");
33811
c1299d6cbc4e Make NULL checks simpler/more consistent.
reimar
parents: 33810
diff changeset
311 if (g_lpddsBack)
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
312 g_lpddsBack->lpVtbl->Release(g_lpddsBack);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
313 g_lpddsBack = NULL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
314 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>back surface released\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
315 if (vo_doublebuffering && !nooverlay) {
33811
c1299d6cbc4e Make NULL checks simpler/more consistent.
reimar
parents: 33810
diff changeset
316 if (g_lpddsOverlay)
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
317 g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
318 g_lpddsOverlay = NULL;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
319 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>overlay surface released\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
320 }
33811
c1299d6cbc4e Make NULL checks simpler/more consistent.
reimar
parents: 33810
diff changeset
321 if (g_lpddsPrimary)
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
322 g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
323 g_lpddsPrimary = NULL;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
324 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>primary released\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
325 if (colorbrush)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
326 DeleteObject(colorbrush);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
327 colorbrush = NULL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
328 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>GDI resources deleted\n");
33811
c1299d6cbc4e Make NULL checks simpler/more consistent.
reimar
parents: 33810
diff changeset
329 if (g_lpdd) {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
330 if (vidmode)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
331 g_lpdd->lpVtbl->RestoreDisplayMode(g_lpdd);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
332 g_lpdd->lpVtbl->Release(g_lpdd);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
333 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
334 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>directdrawobject released\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
335 FreeLibrary(hddraw_dll);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
336 hddraw_dll = NULL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
337 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>ddraw.dll freed\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
338 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>uninitialized\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
339 vo_w32_uninit();
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
340 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
341
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
342 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
343 {
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
344 if (!lpGUID)
33584
deedeb235cac Simplify code for printing display adapter list.
reimar
parents: 33569
diff changeset
345 lpDriverDescription = "Primary Display Adapter";
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
346 mp_msg(MSGT_VO, MSGL_INFO, "<vo_directx> adapter %d: %s", adapter_count, lpDriverDescription);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
347
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
348 if (adapter_count == 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
349 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
350 selected_guid_ptr = NULL;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
351 else {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
352 selected_guid = *lpGUID;
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
353 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
354 }
14302
9929eafe6be5 win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents: 14253
diff changeset
355
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
356 mp_msg(MSGT_VO, MSGL_INFO, "\t\t<--");
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
357 }
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
358 mp_msg(MSGT_VO, MSGL_INFO, "\n");
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
359
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
360 adapter_count++;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
361
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
362 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
363 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
364
29212
eda346733b8c Add missing 'void' to parameterless function declarations.
diego
parents: 28121
diff changeset
365 static uint32_t Directx_InitDirectDraw(void)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
366 {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
367 HRESULT (WINAPI *OurDirectDrawCreateEx)(GUID *, LPVOID *, REFIID, IUnknown FAR *);
33820
4c888b1d8cac Use struct initializer in one more case.
reimar
parents: 33819
diff changeset
368 DDSURFACEDESC2 ddsd = {
4c888b1d8cac Use struct initializer in one more case.
reimar
parents: 33819
diff changeset
369 .dwSize = sizeof(ddsd),
4c888b1d8cac Use struct initializer in one more case.
reimar
parents: 33819
diff changeset
370 .dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT,
4c888b1d8cac Use struct initializer in one more case.
reimar
parents: 33819
diff changeset
371 };
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
372 LPDIRECTDRAWENUMERATEEX OurDirectDrawEnumerateEx;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
373
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
374 adapter_count = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
375
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
376 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>Initing DirectDraw\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
377
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
378 //load direct draw DLL: based on videolans code
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
379 hddraw_dll = LoadLibrary("DDRAW.DLL");
33811
c1299d6cbc4e Make NULL checks simpler/more consistent.
reimar
parents: 33810
diff changeset
380 if (!hddraw_dll) {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
381 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>failed loading ddraw.dll\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
382 return 1;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
383 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
384
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
385 if (vo_adapter_num) { //display other than default
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
386 OurDirectDrawEnumerateEx = (LPDIRECTDRAWENUMERATEEX)GetProcAddress(hddraw_dll, "DirectDrawEnumerateExA");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
387 if (!OurDirectDrawEnumerateEx) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
388 FreeLibrary(hddraw_dll);
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
389 hddraw_dll = NULL;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
390 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>failed geting proc address: DirectDrawEnumerateEx\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
391 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>no directx 7 or higher installed\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
392 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
393 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
394
a8adfcf47f4e 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 // enumerate all display devices attached to the desktop
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
396 OurDirectDrawEnumerateEx(EnumCallbackEx, NULL, DDENUM_ATTACHEDSECONDARYDEVICES);
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
397
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
398 if (vo_adapter_num >= adapter_count)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
399 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
400 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
401
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
402 OurDirectDrawCreateEx = (void *)GetProcAddress(hddraw_dll, "DirectDrawCreateEx");
33811
c1299d6cbc4e Make NULL checks simpler/more consistent.
reimar
parents: 33810
diff changeset
403 if (!OurDirectDrawCreateEx) {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
404 FreeLibrary(hddraw_dll);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
405 hddraw_dll = NULL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
406 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>failed geting proc address: DirectDrawCreateEx\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
407 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
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
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
410 // initialize DirectDraw and create directx v7 object
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
411 if (OurDirectDrawCreateEx(selected_guid_ptr, (VOID **)&g_lpdd, &IID_IDirectDraw7, NULL) != DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
412 FreeLibrary(hddraw_dll);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
413 hddraw_dll = NULL;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
414 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>can't initialize ddraw\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
415 return 1;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
416 }
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
417
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
418 //get current screen siz for selected monitor ...
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
419 g_lpdd->lpVtbl->GetDisplayMode(g_lpdd, &ddsd);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
420 if (vo_screenwidth && vo_screenheight) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
421 vm_height = vo_screenheight;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
422 vm_width = vo_screenwidth;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
423 } else {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
424 vm_height = ddsd.dwHeight;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
425 vm_width = ddsd.dwWidth;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
426 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
427
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
428 if (vo_dbpp)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
429 vm_bpp = vo_dbpp;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
430 else
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
431 vm_bpp = ddsd.ddpfPixelFormat.dwRGBBitCount;
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
432
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
433 if (vidmode) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
434 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, vo_w32_window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN) != DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
435 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>can't set cooperativelevel for exclusive mode\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
436 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
437 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
438 /*SetDisplayMode(ddobject,width,height,bpp,refreshrate,aditionalflags)*/
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
439 if (g_lpdd->lpVtbl->SetDisplayMode(g_lpdd, vm_width, vm_height, vm_bpp, 0, 0) != DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
440 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>can't set displaymode\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
441 return 1;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
442 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
443 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);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
444 return 0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
445 }
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
446 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, vo_w32_window, DDSCL_NORMAL) != DD_OK) { // or DDSCL_SETFOCUSWINDOW
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
447 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>could not set cooperativelevel for hardwarecheck\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
448 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
449 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
450 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>DirectDraw Initialized\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
451 return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
452 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
453
29212
eda346733b8c Add missing 'void' to parameterless function declarations.
diego
parents: 28121
diff changeset
454 static uint32_t Directx_ManageDisplay(void)
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
455 {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
456 HRESULT ddrval;
33814
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
457 DDCAPS capsDrv = { .dwSize = sizeof(capsDrv) };
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
458 DDOVERLAYFX ovfx = { .dwSize = sizeof(ovfx) };
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
459 DWORD dwUpdateFlags = 0;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
460 int width, height;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
461
33569
8e70a224c411 Change vo_directx to use w32_common.c
reimar
parents: 33305
diff changeset
462 rd.left = vo_dx - xinerama_x;
8e70a224c411 Change vo_directx to use w32_common.c
reimar
parents: 33305
diff changeset
463 rd.top = vo_dy - xinerama_y;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
464 width = vo_dwidth;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
465 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
466
33569
8e70a224c411 Change vo_directx to use w32_common.c
reimar
parents: 33305
diff changeset
467 aspect(&width, &height, A_WINZOOM);
8e70a224c411 Change vo_directx to use w32_common.c
reimar
parents: 33305
diff changeset
468 panscan_calc_windowed();
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
469 width += vo_panscan_x;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
470 height += vo_panscan_y;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
471 width = FFMIN(width, vo_screenwidth);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
472 height = FFMIN(height, vo_screenheight);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
473 rd.left += (vo_dwidth - width) / 2;
33569
8e70a224c411 Change vo_directx to use w32_common.c
reimar
parents: 33305
diff changeset
474 rd.top += (vo_dheight - height) / 2;
8e70a224c411 Change vo_directx to use w32_common.c
reimar
parents: 33305
diff changeset
475
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
476 rd.right = rd.left + width;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
477 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
478
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
479 /*ok, let's workaround some overlay limitations*/
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
480 if (!nooverlay) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
481 uint32_t uStretchFactor1000; //minimum stretch
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
482 uint32_t xstretch1000, ystretch1000;
33807
fb9eaa0ab770 Simplify code handling minimized state.
reimar
parents: 33806
diff changeset
483
fb9eaa0ab770 Simplify code handling minimized state.
reimar
parents: 33806
diff changeset
484 if (!width || !height) {
fb9eaa0ab770 Simplify code handling minimized state.
reimar
parents: 33806
diff changeset
485 // window is minimized, so we should hide the overlay in case
fb9eaa0ab770 Simplify code handling minimized state.
reimar
parents: 33806
diff changeset
486 // colorkeying is not used or working.
fb9eaa0ab770 Simplify code handling minimized state.
reimar
parents: 33806
diff changeset
487 // In addition trying to set width/height to 0 would crash
fb9eaa0ab770 Simplify code handling minimized state.
reimar
parents: 33806
diff changeset
488 g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay, NULL, g_lpddsPrimary, NULL, DDOVER_HIDE, NULL);
fb9eaa0ab770 Simplify code handling minimized state.
reimar
parents: 33806
diff changeset
489 return 0;
fb9eaa0ab770 Simplify code handling minimized state.
reimar
parents: 33806
diff changeset
490 }
fb9eaa0ab770 Simplify code handling minimized state.
reimar
parents: 33806
diff changeset
491
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
492 /*get driver capabilities*/
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
493 if (g_lpdd->lpVtbl->GetCaps(g_lpdd, &capsDrv, NULL) != DD_OK)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
494 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
495 /*get minimum stretch, depends on display adaptor and mode (refresh rate!) */
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
496 uStretchFactor1000 = capsDrv.dwMinOverlayStretch > 1000 ? capsDrv.dwMinOverlayStretch : 1000;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
497 rd.right = ((width + rd.left) * uStretchFactor1000 + 999) / 1000;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
498 rd.bottom = (height + rd.top) * uStretchFactor1000 / 1000;
12485
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
499 /*calculate xstretch1000 and ystretch1000*/
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
500 xstretch1000 = ((rd.right - rd.left) * 1000) / image_width;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
501 ystretch1000 = ((rd.bottom - rd.top) * 1000) / image_height;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
502 rs.left = 0;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
503 rs.right = image_width;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
504 rs.top = 0;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
505 rs.bottom = image_height;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
506 if (rd.left < 0)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
507 rs.left = (-rd.left * 1000) / xstretch1000;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
508 if (rd.top < 0)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
509 rs.top = (-rd.top * 1000) / ystretch1000;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
510 if (rd.right > vo_screenwidth)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
511 rs.right = ((vo_screenwidth - rd.left) * 1000) / xstretch1000;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
512 if (rd.bottom > vo_screenheight)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
513 rs.bottom = ((vo_screenheight - rd.top) * 1000) / ystretch1000;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
514 /*do not allow to zoom or shrink if hardware isn't able to do so*/
33810
9d6f166e7070 Remove pointless () and {}.
reimar
parents: 33809
diff changeset
515 if (width < image_width && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKX)) {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
516 if (capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKXN)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
517 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR>can only shrinkN\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
518 else
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
519 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR>can't shrink x\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
520 rd.right = rd.left + image_width;
33810
9d6f166e7070 Remove pointless () and {}.
reimar
parents: 33809
diff changeset
521 } else if (width > image_width && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHX)) {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
522 if (capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHXN)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
523 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR>can only stretchN\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
524 else
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
525 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR>can't stretch x\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
526 rd.right = rd.left + image_width;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
527 }
33810
9d6f166e7070 Remove pointless () and {}.
reimar
parents: 33809
diff changeset
528 if (height < image_height && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKY)) {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
529 if (capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKYN)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
530 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR>can only shrinkN\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
531 else
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
532 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR>can't shrink y\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
533 rd.bottom = rd.top + image_height;
33810
9d6f166e7070 Remove pointless () and {}.
reimar
parents: 33809
diff changeset
534 } else if (height > image_height && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHY)) {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
535 if (capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHYN)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
536 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR>can only stretchN\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
537 else
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
538 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR>can't stretch y\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
539 rd.bottom = rd.top + image_height;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
540 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
541 /*the last thing to check are alignment restrictions
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
542 * these expressions (x & -y) just do alignment by dropping low order bits...
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
543 * so to round up, we add first, then truncate*/
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
544 if ((capsDrv.dwCaps & DDCAPS_ALIGNBOUNDARYSRC) && capsDrv.dwAlignBoundarySrc)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
545 rs.left = (rs.left + capsDrv.dwAlignBoundarySrc / 2) & - (signed)(capsDrv.dwAlignBoundarySrc);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
546 if ((capsDrv.dwCaps & DDCAPS_ALIGNSIZESRC) && capsDrv.dwAlignSizeSrc)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
547 rs.right = rs.left + ((rs.right - rs.left + capsDrv.dwAlignSizeSrc / 2) & - (signed)(capsDrv.dwAlignSizeSrc));
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
548 if ((capsDrv.dwCaps & DDCAPS_ALIGNBOUNDARYDEST) && capsDrv.dwAlignBoundaryDest)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
549 rd.left = (rd.left + capsDrv.dwAlignBoundaryDest / 2) & - (signed)(capsDrv.dwAlignBoundaryDest);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
550 if ((capsDrv.dwCaps & DDCAPS_ALIGNSIZEDEST) && capsDrv.dwAlignSizeDest)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
551 rd.right = rd.left + ((rd.right - rd.left) & - (signed)(capsDrv.dwAlignSizeDest));
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
552 /*create an overlay FX structure to specify a destination color key*/
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
553 if (vo_fs || vidmode) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
554 ovfx.dckDestColorkey.dwColorSpaceLowValue = 0;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
555 ovfx.dckDestColorkey.dwColorSpaceHighValue = 0;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
556 } else {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
557 ovfx.dckDestColorkey.dwColorSpaceLowValue = destcolorkey;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
558 ovfx.dckDestColorkey.dwColorSpaceHighValue = destcolorkey;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
559 }
22289
780caed72ac7 cosmetics: typo fixes, usefuLL --> useful and aswell --> as well
diego
parents: 20394
diff changeset
560 // set the flags we'll send to UpdateOverlay //DDOVER_AUTOFLIP|DDOVERFX_MIRRORLEFTRIGHT|DDOVERFX_MIRRORUPDOWN could be useful?;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
561 dwUpdateFlags = DDOVER_SHOW | DDOVER_DDFX;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
562 /*if hardware can't do colorkeying set the window on top*/
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
563 if (capsDrv.dwCKeyCaps & DDCKEYCAPS_DESTOVERLAY)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
564 dwUpdateFlags |= DDOVER_KEYDESTOVERRIDE;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
565 else if (!tmp_image)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
566 vo_ontop = 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
567 } else {
33569
8e70a224c411 Change vo_directx to use w32_common.c
reimar
parents: 33305
diff changeset
568 g_lpddclipper->lpVtbl->SetHWnd(g_lpddclipper, 0, vo_w32_window);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
569 }
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
570
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
571 /*make sure the overlay is inside the screen*/
33813
a214da7104e2 Use FFMIN/FFMAX.
reimar
parents: 33811
diff changeset
572 rd.top = FFMAX(rd.top, 0);
a214da7104e2 Use FFMIN/FFMAX.
reimar
parents: 33811
diff changeset
573 rd.left = FFMAX(rd.left, 0);
a214da7104e2 Use FFMIN/FFMAX.
reimar
parents: 33811
diff changeset
574 rd.bottom = FFMIN(rd.bottom, vo_screenheight);
a214da7104e2 Use FFMIN/FFMAX.
reimar
parents: 33811
diff changeset
575 rd.right = FFMIN(rd.right, vo_screenwidth);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
576
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
577 /*for nonoverlay mode we are finished, for overlay mode we have to display the overlay first*/
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
578 if (nooverlay)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
579 return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
580
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
581 // printf("overlay: %i %i %ix%i\n",rd.left,rd.top,rd.right - rd.left,rd.bottom - rd.top);
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
582 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay, &rs, g_lpddsPrimary, &rd, dwUpdateFlags, &ovfx);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
583 if (FAILED(ddrval)) {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
584 // one cause might be the driver lied about minimum stretch
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
585 // we should try upping the destination size a bit, or
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
586 // perhaps shrinking the source size
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
587 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR>UpdateOverlay failed\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
588 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);
33821
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
589 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR>%s (0x%x)\n", dd_errstr(ddrval), ddrval);
240ab28c7628 Simplify printing of error strings.
reimar
parents: 33820
diff changeset
590 if (ddrval == DDERR_SURFACELOST) {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
591 g_lpddsOverlay->lpVtbl->Restore(g_lpddsOverlay); //restore and try again
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
592 g_lpddsPrimary->lpVtbl->Restore(g_lpddsPrimary);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
593 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay, &rs, g_lpddsPrimary, &rd, dwUpdateFlags, &ovfx);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
594 if (ddrval != DD_OK)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
595 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>UpdateOverlay failed again\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
596 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
597 /*ok we can't do anything about it -> hide overlay*/
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
598 if (ddrval != DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
599 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay, NULL, g_lpddsPrimary, NULL, DDOVER_HIDE, NULL);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
600 return 1;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
601 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
602 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
603 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
604 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
605
33590
b213f28fc17a Move check_events function to avoid forward declaration.
reimar
parents: 33589
diff changeset
606 static void check_events(void)
b213f28fc17a Move check_events function to avoid forward declaration.
reimar
parents: 33589
diff changeset
607 {
b213f28fc17a Move check_events function to avoid forward declaration.
reimar
parents: 33589
diff changeset
608 int evt = vo_w32_check_events();
b213f28fc17a Move check_events function to avoid forward declaration.
reimar
parents: 33589
diff changeset
609 if (evt & (VO_EVENT_RESIZE | VO_EVENT_MOVE))
b213f28fc17a Move check_events function to avoid forward declaration.
reimar
parents: 33589
diff changeset
610 Directx_ManageDisplay();
b213f28fc17a Move check_events function to avoid forward declaration.
reimar
parents: 33589
diff changeset
611 if (evt & (VO_EVENT_RESIZE | VO_EVENT_MOVE | VO_EVENT_EXPOSE)) {
b213f28fc17a Move check_events function to avoid forward declaration.
reimar
parents: 33589
diff changeset
612 HDC dc = vo_w32_get_dc(vo_w32_window);
b213f28fc17a Move check_events function to avoid forward declaration.
reimar
parents: 33589
diff changeset
613 RECT r;
b213f28fc17a Move check_events function to avoid forward declaration.
reimar
parents: 33589
diff changeset
614 GetClientRect(vo_w32_window, &r);
b213f28fc17a Move check_events function to avoid forward declaration.
reimar
parents: 33589
diff changeset
615 FillRect(dc, &r, vo_fs || vidmode ? blackbrush : colorbrush);
b213f28fc17a Move check_events function to avoid forward declaration.
reimar
parents: 33589
diff changeset
616 vo_w32_release_dc(vo_w32_window, dc);
b213f28fc17a Move check_events function to avoid forward declaration.
reimar
parents: 33589
diff changeset
617 }
b213f28fc17a Move check_events function to avoid forward declaration.
reimar
parents: 33589
diff changeset
618 }
b213f28fc17a Move check_events function to avoid forward declaration.
reimar
parents: 33589
diff changeset
619
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
620 //find out supported overlay pixelformats
29212
eda346733b8c Add missing 'void' to parameterless function declarations.
diego
parents: 28121
diff changeset
621 static uint32_t Directx_CheckOverlayPixelformats(void)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
622 {
33814
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
623 DDCAPS capsDrv = { .dwSize = sizeof(capsDrv) };
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
624 HRESULT ddrval;
33814
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
625 DDSURFACEDESC2 ddsdOverlay = {
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
626 .dwSize = sizeof(ddsdOverlay),
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
627 .ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY,
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
628 .dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT,
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
629 .dwWidth = 300,
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
630 .dwHeight = 280,
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
631 .dwBackBufferCount = 0,
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
632 };
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
633 uint32_t i;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
634 uint32_t formatcount = 0;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
635 //get driver caps to determine overlay support
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
636 ddrval = g_lpdd->lpVtbl->GetCaps(g_lpdd, &capsDrv, NULL);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
637 if (FAILED(ddrval)) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
638 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR>failed getting ddrawcaps\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
639 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
640 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
641 if (!(capsDrv.dwCaps & DDCAPS_OVERLAY)) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
642 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR>Your card doesn't support overlay\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
643 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
644 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
645 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><INFO>testing supported overlay pixelformats\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
646 //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
647 //overlay hardware: try out various formats till one works
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
648 //try to create an overlay surface using one of the pixel formats in our global list
33817
a3d73bc21e55 Replace some inappropriate while() loops with for()
reimar
parents: 33816
diff changeset
649 for (i = 0; i < NUM_FORMATS; i++) {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
650 ddsdOverlay.ddpfPixelFormat = g_ddpf[i].g_ddpfOverlay;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
651 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd, &ddsdOverlay, &g_lpddsOverlay, NULL);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
652 if (ddrval == DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
653 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><FORMAT OVERLAY>%i %s supported\n", i, g_ddpf[i].img_format_name);
33815
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
654 drv_caps[i] = VFCAP_CSP_SUPPORTED | VFCAP_OSD | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_HWSCALE_UP;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
655 formatcount++;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
656 } else
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
657 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><FORMAT OVERLAY>%i %s not supported\n", i, g_ddpf[i].img_format_name);
33811
c1299d6cbc4e Make NULL checks simpler/more consistent.
reimar
parents: 33810
diff changeset
658 if (g_lpddsOverlay) {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
659 g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
660 g_lpddsOverlay = NULL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
661 }
33817
a3d73bc21e55 Replace some inappropriate while() loops with for()
reimar
parents: 33816
diff changeset
662 }
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
663 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><INFO>Your card supports %i of %i overlayformats\n", formatcount, NUM_FORMATS);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
664 if (formatcount == 0) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
665 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><WARN>Your card supports overlay, but we couldn't create one\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
666 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><INFO>This can have the following reasons:\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
667 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><INFO>- you are already using an overlay with another app\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
668 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><INFO>- you don't have enough videomemory\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
669 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><INFO>- vo_directx doesn't support the cards overlay pixelformat\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
670 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
671 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
672 if (capsDrv.dwFXCaps & DDFXCAPS_OVERLAYMIRRORLEFTRIGHT)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
673 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><INFO>can mirror left right\n"); //I don't have hardware which
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
674 if (capsDrv.dwFXCaps & DDFXCAPS_OVERLAYMIRRORUPDOWN)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
675 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><INFO>can mirror up down\n"); //supports those send me one and I'll implement ;)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
676 return 0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
677 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
678
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
679 //find out the Pixelformat of the Primary Surface
29212
eda346733b8c Add missing 'void' to parameterless function declarations.
diego
parents: 28121
diff changeset
680 static uint32_t Directx_CheckPrimaryPixelformat(void)
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
681 {
33817
a3d73bc21e55 Replace some inappropriate while() loops with for()
reimar
parents: 33816
diff changeset
682 int i;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
683 uint32_t formatcount = 0;
33818
fc9fbb0b31fa Simplify some more struct initializations.
reimar
parents: 33817
diff changeset
684 DDPIXELFORMAT ddpf = { .dwSize = sizeof(ddpf) };
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
685 DDSURFACEDESC2 ddsd;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
686 HDC hdc;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
687 HRESULT hres;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
688 COLORREF rgbT = RGB(0, 0, 0);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
689 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><INFO>checking primary surface\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
690 //we have to create a primary surface first
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
691 if (Directx_CreatePrimarySurface() != 0)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
692 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
693 if (g_lpddsPrimary->lpVtbl->GetPixelFormat(g_lpddsPrimary, &ddpf) != DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
694 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>can't get pixelformat\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
695 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
696 }
33817
a3d73bc21e55 Replace some inappropriate while() loops with for()
reimar
parents: 33816
diff changeset
697 for (i = 0; i < NUM_FORMATS; i++) {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
698 if (g_ddpf[i].g_ddpfOverlay.dwRGBBitCount == ddpf.dwRGBBitCount) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
699 if (g_ddpf[i].g_ddpfOverlay.dwRBitMask == ddpf.dwRBitMask) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
700 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><FORMAT PRIMARY>%i %s supported\n", i, g_ddpf[i].img_format_name);
33815
4d75b3bf9561 Split out read/write part from data struct and make read-only
reimar
parents: 33814
diff changeset
701 drv_caps[i] = VFCAP_CSP_SUPPORTED | VFCAP_OSD;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
702 formatcount++;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
703 primary_image_format = g_ddpf[i].img_format;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
704 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
705 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
706 }
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
707 //get the colorkey for overlay mode
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
708 destcolorkey = CLR_INVALID;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
709 if (windowcolor != CLR_INVALID && g_lpddsPrimary->lpVtbl->GetDC(g_lpddsPrimary, &hdc) == DD_OK) {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
710 rgbT = GetPixel(hdc, 0, 0);
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
711 SetPixel(hdc, 0, 0, windowcolor);
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
712 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary, hdc);
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
713 }
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
714 // read back the converted color
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
715 ddsd.dwSize = sizeof(ddsd);
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
716 while ((hres = g_lpddsPrimary->lpVtbl->Lock(g_lpddsPrimary, NULL, &ddsd, 0, NULL)) == DDERR_WASSTILLDRAWING)
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
717 ;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
718 if (hres == DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
719 destcolorkey = *(DWORD *)ddsd.lpSurface;
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
720 if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32)
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
721 destcolorkey &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
722 g_lpddsPrimary->lpVtbl->Unlock(g_lpddsPrimary, NULL);
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
723 }
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
724 if (windowcolor != CLR_INVALID && g_lpddsPrimary->lpVtbl->GetDC(g_lpddsPrimary, &hdc) == DD_OK) {
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
725 SetPixel(hdc, 0, 0, rgbT);
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
726 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary, hdc);
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
727 }
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
728 //release primary
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
729 g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
730 g_lpddsPrimary = NULL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
731 if (formatcount == 0) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
732 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>Unknown Pixelformat\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
733 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
734 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
735 return 0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
736 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
737
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15690
diff changeset
738 static int preinit(const char *arg)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
739 {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
740 if (arg) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
741 if (strstr(arg, "noaccel")) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
742 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><INFO>disabled overlay\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
743 nooverlay = 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
744 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
745 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
746
14205
87148f636da2 added colorkey support for vo_directx.
joey
parents: 13787
diff changeset
747 windowcolor = vo_colorkey;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
748 colorbrush = CreateSolidBrush(windowcolor);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
749 blackbrush = (HBRUSH)GetStockObject(BLACK_BRUSH);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
750 if (!vo_w32_init())
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
751 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
752 if (!vo_w32_config(100, 100, VOFLAG_HIDDEN))
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
753 return 1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
754
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
755 if (Directx_InitDirectDraw() != 0)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
756 return 1; //init DirectDraw
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
757
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
758 if (Directx_CheckPrimaryPixelformat() != 0)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
759 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
760 if (!nooverlay && Directx_CheckOverlayPixelformats() == 0) { //check for supported hardware
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
761 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><INFO>hardware supports overlay\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
762 nooverlay = 0;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
763 } else { //if we can't have overlay we create a backpuffer with the same imageformat as the primary surface
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
764 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><INFO>using backpuffer\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
765 nooverlay = 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
766 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
767 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>preinit succesfully finished\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
768 return 0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
769 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
770
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
771 static int draw_slice(uint8_t *src[], int stride[], int w, int h, int x, int y)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
772 {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
773 uint8_t *s;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
774 uint8_t *d;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
775 uint32_t uvstride = dstride / 2;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
776 // copy Y
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
777 d = image + dstride * y + x;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
778 s = src[0];
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
779 mem2agpcpy_pic(d, s, w, h, dstride, stride[0]);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
780
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
781 w /= 2;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
782 h /= 2;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
783 x /= 2;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
784 y /= 2;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
785
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
786 // copy U
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
787 d = image + dstride * image_height + uvstride * y + x;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
788 if (image_format == IMGFMT_YV12)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
789 s = src[2];
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
790 else
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
791 s = src[1];
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
792 mem2agpcpy_pic(d, s, w, h, uvstride, stride[1]);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
793
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
794 // copy V
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
795 d = image + dstride * image_height + uvstride * (image_height / 2) + uvstride * y + x;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
796 if (image_format == IMGFMT_YV12)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
797 s = src[1];
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
798 else
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
799 s = src[2];
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
800 mem2agpcpy_pic(d, s, w, h, uvstride, stride[2]);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
801 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
802 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
803
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
804 static void flip_page(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
805 {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
806 HRESULT dxresult;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
807 g_lpddsBack->lpVtbl->Unlock(g_lpddsBack, NULL);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
808 if (vo_doublebuffering) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
809 // flip to the next image in the sequence
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
810 dxresult = g_lpddsOverlay->lpVtbl->Flip(g_lpddsOverlay, NULL, DDFLIP_WAIT);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
811 if (dxresult == DDERR_SURFACELOST) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
812 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR><vo_directx><INFO>Restoring Surface\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
813 g_lpddsBack->lpVtbl->Restore(g_lpddsBack);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
814 // restore overlay and primary before calling
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
815 // Directx_ManageDisplay() to avoid error messages
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
816 g_lpddsOverlay->lpVtbl->Restore(g_lpddsOverlay);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
817 g_lpddsPrimary->lpVtbl->Restore(g_lpddsPrimary);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
818 // update overlay in case we return from screensaver
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
819 Directx_ManageDisplay();
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
820 dxresult = g_lpddsOverlay->lpVtbl->Flip(g_lpddsOverlay, NULL, DDFLIP_WAIT);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
821 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
822 if (dxresult != DD_OK)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
823 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR>can't flip page\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
824 }
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
825 if (nooverlay) {
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
826 // ask for the "NOTEARING" option
33818
fc9fbb0b31fa Simplify some more struct initializations.
reimar
parents: 33817
diff changeset
827 DDBLTFX ddbltfx = {
fc9fbb0b31fa Simplify some more struct initializations.
reimar
parents: 33817
diff changeset
828 .dwSize = sizeof(ddbltfx),
fc9fbb0b31fa Simplify some more struct initializations.
reimar
parents: 33817
diff changeset
829 .dwDDFX = DDBLTFX_NOTEARING,
fc9fbb0b31fa Simplify some more struct initializations.
reimar
parents: 33817
diff changeset
830 };
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
831 g_lpddsPrimary->lpVtbl->Blt(g_lpddsPrimary, &rd, g_lpddsBack, NULL, DDBLT_WAIT, &ddbltfx);
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
832 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
833 if (g_lpddsBack->lpVtbl->Lock(g_lpddsBack, NULL, &ddsdsf, DDLOCK_NOSYSLOCK | DDLOCK_WAIT, NULL) == DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
834 if (vo_directrendering && (dstride != ddsdsf.lPitch)) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
835 mp_msg(MSGT_VO, MSGL_WARN, "<vo_directx><WARN>stride changed !!!! disabling direct rendering\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
836 vo_directrendering = 0;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
837 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
838 free(tmp_image);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
839 tmp_image = NULL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
840 dstride = ddsdsf.lPitch;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
841 image = ddsdsf.lpSurface;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
842 } else if (!tmp_image) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
843 mp_msg(MSGT_VO, MSGL_WARN, "<vo_directx><WARN>Locking the surface failed, rendering to a hidden surface!\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
844 tmp_image = image = calloc(1, image_height * dstride * 2);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
845 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
846 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
847
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15690
diff changeset
848 static int draw_frame(uint8_t *src[])
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
849 {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
850 fast_memcpy(image, *src, dstride * image_height);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
851 return 0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
852 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
853
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
854 static uint32_t get_image(mp_image_t *mpi)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
855 {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
856 if (mpi->flags & MP_IMGFLAG_READABLE) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
857 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><ERROR>slow video ram\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
858 return VO_FALSE;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
859 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
860 if (mpi->type == MP_IMGTYPE_STATIC) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
861 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><ERROR>not static\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
862 return VO_FALSE;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
863 }
33810
9d6f166e7070 Remove pointless () and {}.
reimar
parents: 33809
diff changeset
864 if (mpi->width == dstride || (mpi->flags & (MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_ACCEPT_WIDTH))) {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
865 if (mpi->flags & MP_IMGFLAG_PLANAR) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
866 if (image_format == IMGFMT_YV12) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
867 mpi->planes[2] = image + dstride * image_height;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
868 mpi->planes[1] = image + dstride * image_height + dstride * image_height / 4;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
869 mpi->stride[1] = mpi->stride[2] = dstride / 2;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
870 } else if (image_format == IMGFMT_IYUV || image_format == IMGFMT_I420) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
871 mpi->planes[1] = image + dstride * image_height;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
872 mpi->planes[2] = image + dstride * image_height + dstride * image_height / 4;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
873 mpi->stride[1] = mpi->stride[2] = dstride / 2;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
874 } else if (image_format == IMGFMT_YVU9) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
875 mpi->planes[2] = image + dstride * image_height;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
876 mpi->planes[1] = image + dstride * image_height + dstride * image_height / 16;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
877 mpi->stride[1] = mpi->stride[2] = dstride / 4;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
878 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
879 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
880 mpi->planes[0] = image;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
881 mpi->stride[0] = dstride;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
882 mpi->width = image_width;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
883 mpi->height = image_height;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
884 mpi->flags |= MP_IMGFLAG_DIRECT;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
885 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>Direct Rendering ENABLED\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
886 return VO_TRUE;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
887 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
888 return VO_FALSE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
889 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
890
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
891 static uint32_t put_image(mp_image_t *mpi)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
892 {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
893 uint8_t *d;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
894 uint8_t *s;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
895 uint32_t x = mpi->x;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
896 uint32_t y = mpi->y;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
897 uint32_t w = mpi->w;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
898 uint32_t h = mpi->h;
14207
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
899
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
900 if ((mpi->flags & MP_IMGFLAG_DIRECT) || (mpi->flags & MP_IMGFLAG_DRAW_CALLBACK)) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
901 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>put_image: nothing to do: drawslices\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
902 return VO_TRUE;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
903 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
904
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
905 if (mpi->flags & MP_IMGFLAG_PLANAR) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
906 if (image_format != IMGFMT_YVU9)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
907 draw_slice(mpi->planes, mpi->stride, mpi->w, mpi->h, 0, 0);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
908 else {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
909 // copy Y
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
910 d = image + dstride * y + x;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
911 s = mpi->planes[0];
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
912 mem2agpcpy_pic(d, s, w, h, dstride, mpi->stride[0]);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
913 w /= 4;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
914 h /= 4;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
915 x /= 4;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
916 y /= 4;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
917 // copy V
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
918 d = image + dstride * image_height + dstride * y / 4 + x;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
919 s = mpi->planes[2];
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
920 mem2agpcpy_pic(d, s, w, h, dstride / 4, mpi->stride[1]);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
921 // copy U
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
922 d = image + dstride * image_height + dstride * image_height / 16 + dstride / 4 * y + x;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
923 s = mpi->planes[1];
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
924 mem2agpcpy_pic(d, s, w, h, dstride / 4, mpi->stride[2]);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
925 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
926 } else { //packed
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
927 mem2agpcpy_pic(image, mpi->planes[0], w * (mpi->bpp / 8), h, dstride, mpi->stride[0]);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
928 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
929 return VO_TRUE;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
930 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
931
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
932 static int config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t options, char *title, uint32_t format)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
933 {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
934 image_format = format;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
935 image_width = width;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
936 image_height = height;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
937 if (format != primary_image_format)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
938 nooverlay = 0;
15428
3d26652b8d29 multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents: 14692
diff changeset
939
3d26652b8d29 multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents: 14692
diff changeset
940 /*release all directx objects*/
33811
c1299d6cbc4e Make NULL checks simpler/more consistent.
reimar
parents: 33810
diff changeset
941 if (g_cc)
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
942 g_cc->lpVtbl->Release(g_cc);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
943 g_cc = NULL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
944 if (g_lpddclipper)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
945 g_lpddclipper->lpVtbl->Release(g_lpddclipper);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
946 g_lpddclipper = NULL;
33811
c1299d6cbc4e Make NULL checks simpler/more consistent.
reimar
parents: 33810
diff changeset
947 if (g_lpddsBack)
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
948 g_lpddsBack->lpVtbl->Release(g_lpddsBack);
15428
3d26652b8d29 multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents: 14692
diff changeset
949 g_lpddsBack = NULL;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
950 if (vo_doublebuffering)
33811
c1299d6cbc4e Make NULL checks simpler/more consistent.
reimar
parents: 33810
diff changeset
951 if (g_lpddsOverlay)
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
952 g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
15428
3d26652b8d29 multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents: 14692
diff changeset
953 g_lpddsOverlay = NULL;
33811
c1299d6cbc4e Make NULL checks simpler/more consistent.
reimar
parents: 33810
diff changeset
954 if (g_lpddsPrimary)
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
955 g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
15428
3d26652b8d29 multifile leak fixes by Timothy Lee <timothy.lee at siriushk.com> +some more -fixed-vo fixes
faust3
parents: 14692
diff changeset
956 g_lpddsPrimary = NULL;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
957 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>overlay surfaces 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
958
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
959 if (!vo_w32_config(d_width, d_height, options))
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
960 return 1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
961
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
962 if (WinID == -1)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
963 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
964
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
965 /*create the surfaces*/
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
966 if (Directx_CreatePrimarySurface())
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
967 return 1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
968
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
969 //create palette for 256 color mode
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
970 if (image_format == IMGFMT_BGR8) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
971 LPDIRECTDRAWPALETTE ddpalette = NULL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
972 LPPALETTEENTRY palette = calloc(256, sizeof(*palette));
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
973 int i;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
974 for (i = 0; i < 256; i++) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
975 palette[i].peRed = ((i >> 5) & 0x07) * 255 / 7;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
976 palette[i].peGreen = ((i >> 2) & 0x07) * 255 / 7;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
977 palette[i].peBlue = ((i >> 0) & 0x03) * 255 / 3;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
978 palette[i].peFlags = PC_NOCOLLAPSE;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
979 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
980 g_lpdd->lpVtbl->CreatePalette(g_lpdd, DDPCAPS_8BIT | DDPCAPS_INITIALIZE, palette, &ddpalette, NULL);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
981 g_lpddsPrimary->lpVtbl->SetPalette(g_lpddsPrimary, ddpalette);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
982 free(palette);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
983 ddpalette->lpVtbl->Release(ddpalette);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
984 }
14400
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
985
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
986 if (!nooverlay && Directx_CreateOverlay(image_format)) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
987 if (format == primary_image_format)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
988 nooverlay = 1; /*overlay creation failed*/
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
989 else {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
990 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>can't use overlay mode: please use -vo directx:noaccel\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
991 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
992 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
993 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
994 if (nooverlay) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
995 if (Directx_CreateBackpuffer()) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
996 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>can't get the driver to work on your system :(\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
997 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
998 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
999 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><INFO>back surface created\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1000 vo_doublebuffering = 0;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1001 /*create clipper for nonoverlay mode*/
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1002 if (g_lpdd->lpVtbl->CreateClipper(g_lpdd, 0, &g_lpddclipper, NULL) != DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1003 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>can't create clipper\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1004 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1005 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1006 if (g_lpddclipper->lpVtbl->SetHWnd(g_lpddclipper, 0, vo_w32_window) != DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1007 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>can't associate clipper with window\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1008 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1009 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1010 if (g_lpddsPrimary->lpVtbl->SetClipper(g_lpddsPrimary, g_lpddclipper) != DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1011 mp_msg(MSGT_VO, MSGL_FATAL, "<vo_directx><FATAL ERROR>can't associate primary surface with clipper\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1012 return 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1013 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1014 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>clipper succesfully created\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1015 } else {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1016 if (DD_OK != g_lpddsOverlay->lpVtbl->QueryInterface(g_lpddsOverlay, &IID_IDirectDrawColorControl, (void **)&g_cc))
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1017 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><WARN>unable to get DirectDraw ColorControl interface\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1018 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1019 Directx_ManageDisplay();
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1020 memset(&ddsdsf, 0, sizeof(DDSURFACEDESC2));
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1021 ddsdsf.dwSize = sizeof(DDSURFACEDESC2);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1022 if (g_lpddsBack->lpVtbl->Lock(g_lpddsBack, NULL, &ddsdsf, DDLOCK_NOSYSLOCK | DDLOCK_WAIT, NULL) == DD_OK) {
24835
b6d6af21c2ee Cosmetic fix for r24861
zuxy
parents: 24833
diff changeset
1023 dstride = ddsdsf.lPitch;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1024 image = ddsdsf.lpSurface;
24835
b6d6af21c2ee Cosmetic fix for r24861
zuxy
parents: 24833
diff changeset
1025 return 0;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1026 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1027 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><ERROR>Initial Lock on the Surface failed.\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1028 return 1;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1029 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1030
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1031 //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
1032 // brightness [0, 10000]
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1033 // contrast [0, 20000]
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1034 // hue [-180, 180]
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1035 // saturation [0, 20000]
33592
0d3ac97aed92 Add const to avoid compiler warning.
reimar
parents: 33591
diff changeset
1036 static uint32_t color_ctrl_set(const char *what, int value)
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1037 {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1038 uint32_t r = VO_NOTIMPL;
33814
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
1039 DDCOLORCONTROL dcc = { .dwSize = sizeof(dcc) };
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1040 //printf("\n*** %s = %d\n", what, value);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1041 if (!g_cc) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1042 //printf("\n *** could not get color control interface!!!\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1043 return VO_NOTIMPL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1044 }
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1045
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1046 if (!strcmp(what, "brightness")) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1047 dcc.dwFlags = DDCOLOR_BRIGHTNESS;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1048 dcc.lBrightness = (value + 100) * 10000 / 200;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1049 r = VO_TRUE;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1050 } else if (!strcmp(what, "contrast")) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1051 dcc.dwFlags = DDCOLOR_CONTRAST;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1052 dcc.lContrast = (value + 100) * 20000 / 200;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1053 r = VO_TRUE;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1054 } else if (!strcmp(what, "hue")) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1055 dcc.dwFlags = DDCOLOR_HUE;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1056 dcc.lHue = value * 180 / 100;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1057 r = VO_TRUE;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1058 } else if (!strcmp(what, "saturation")) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1059 dcc.dwFlags = DDCOLOR_SATURATION;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1060 dcc.lSaturation = (value + 100) * 20000 / 200;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1061 r = VO_TRUE;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1062 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
1063
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1064 if (r == VO_TRUE) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1065 g_cc->lpVtbl->SetColorControls(g_cc, &dcc);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1066 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1067 return r;
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1068 }
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1069
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1070 //analoguous to color_ctrl_set
33592
0d3ac97aed92 Add const to avoid compiler warning.
reimar
parents: 33591
diff changeset
1071 static uint32_t color_ctrl_get(const char *what, int *value)
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1072 {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1073 uint32_t r = VO_NOTIMPL;
33814
ccbef55f408c Simplify struct initialization.
reimar
parents: 33813
diff changeset
1074 DDCOLORCONTROL dcc = { .dwSize = sizeof(dcc) };
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1075 if (!g_cc) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1076 //printf("\n *** could not get color control interface!!!\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1077 return VO_NOTIMPL;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1078 }
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1079
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1080 if (g_cc->lpVtbl->GetColorControls(g_cc, &dcc) != DD_OK) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1081 return r;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1082 }
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1083
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1084 if (!strcmp(what, "brightness") && (dcc.dwFlags & DDCOLOR_BRIGHTNESS)) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1085 *value = dcc.lBrightness * 200 / 10000 - 100;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1086 r = VO_TRUE;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1087 } else if (!strcmp(what, "contrast") && (dcc.dwFlags & DDCOLOR_CONTRAST)) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1088 *value = dcc.lContrast * 200 / 20000 - 100;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1089 r = VO_TRUE;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1090 } else if (!strcmp(what, "hue") && (dcc.dwFlags & DDCOLOR_HUE)) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1091 *value = dcc.lHue * 100 / 180;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1092 r = VO_TRUE;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1093 } else if (!strcmp(what, "saturation") && (dcc.dwFlags & DDCOLOR_SATURATION)) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1094 *value = dcc.lSaturation * 200 / 20000 - 100;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1095 r = VO_TRUE;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1096 }
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1097 // printf("\n*** %s = %d\n", what, *value);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29212
diff changeset
1098
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1099 return r;
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1100 }
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1101
33305
ddb45e9443ec Remove the variable arguments from the libvo control() functions.
iive
parents: 33301
diff changeset
1102 static int control(uint32_t request, void *data)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1103 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1104 switch (request) {
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1105 case VOCTRL_GET_IMAGE:
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1106 return get_image(data);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1107 case VOCTRL_QUERY_FORMAT:
33810
9d6f166e7070 Remove pointless () and {}.
reimar
parents: 33809
diff changeset
1108 return query_format(*(uint32_t *)data);
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1109 case VOCTRL_DRAW_IMAGE:
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1110 return put_image(data);
16968
e9d849bf8050 add a switch, slave command, and vo control to toggle borderless window.
joey
parents: 16966
diff changeset
1111 case VOCTRL_BORDER:
33569
8e70a224c411 Change vo_directx to use w32_common.c
reimar
parents: 33305
diff changeset
1112 vo_w32_border();
8e70a224c411 Change vo_directx to use w32_common.c
reimar
parents: 33305
diff changeset
1113 Directx_ManageDisplay();
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1114 return VO_TRUE;
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11510
diff changeset
1115 case VOCTRL_ONTOP:
33569
8e70a224c411 Change vo_directx to use w32_common.c
reimar
parents: 33305
diff changeset
1116 vo_w32_ontop();
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1117 return VO_TRUE;
13091
25f51c72eb06 added runtime toggle of root window playback
joey
parents: 13090
diff changeset
1118 case VOCTRL_ROOTWIN:
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1119 if (WinID != -1)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1120 return VO_TRUE;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1121 if (vidmode) {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1122 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx><ERROR>rootwin has no meaning in exclusive mode\n");
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1123 } else {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1124 if (vo_rootwin)
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1125 vo_rootwin = 0;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1126 else
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1127 vo_rootwin = 1;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1128 Directx_ManageDisplay();
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1129 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1130 return VO_TRUE;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1131 case VOCTRL_FULLSCREEN:
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1132 vo_w32_fullscreen();
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1133 Directx_ManageDisplay();
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1134 return VO_TRUE;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1135 case VOCTRL_SET_EQUALIZER: {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1136 vf_equalizer_t *eq = data;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1137 return color_ctrl_set(eq->item, eq->value);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1138 }
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1139 case VOCTRL_GET_EQUALIZER: {
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1140 vf_equalizer_t *eq = data;
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1141 return color_ctrl_get(eq->item, &eq->value);
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1142 }
22459
d870e862d272 Simplify config by using code available in video_out.c
reimar
parents: 22289
diff changeset
1143 case VOCTRL_UPDATE_SCREENINFO:
33569
8e70a224c411 Change vo_directx to use w32_common.c
reimar
parents: 33305
diff changeset
1144 w32_update_xinerama_info();
22459
d870e862d272 Simplify config by using code available in video_out.c
reimar
parents: 22289
diff changeset
1145 return VO_TRUE;
33808
b69bf18ef92c Apply uncrustify to vo_directx.c.
reimar
parents: 33807
diff changeset
1146 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1147 return VO_NOTIMPL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1148 }