annotate libvo/vo_directx.c @ 11510:3638adcfdcbd

send quit command instead of key 'q'. catch backspace key instead of ctrl key. keycodes.h says CTRL and BS are the same. this is not true for windows keycodes.
author joey
date Sun, 23 Nov 2003 16:59:57 +0000
parents 3cf2c7f8d9a9
children 85e503ddf65f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1 /******************************************************************************
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
2 * vo_directx.c: Directx v2 or later DirectDraw interface for MPlayer
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
3 * Copyright (c) 2002 Sascha Sommer <saschasommer@freenet.de>.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
4 *
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
5 * This program is free software; you can redistribute it and/or modify
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
6 * 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
7 * the Free Software Foundation; either version 2 of the License, or
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
8 * (at your option) any later version.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
9 *
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
10 * This program is distributed in the hope that it will be useful,
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
13 * GNU General Public License for more details.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
14 *
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
16 * along with this program; if not, write to the Free Software
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
18 *
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
19 *****************************************************************************/
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
20
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
21 #include <windows.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
22 #include <windowsx.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
23 #include <ddraw.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
24 #include <stdlib.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
25 #include <errno.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
26 #include "config.h"
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
27 #include "video_out.h"
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
28 #include "video_out_internal.h"
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
29 #include "fastmemcpy.h"
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
30 #include "../input/input.h"
9380
edfe34c5405d linux->osdep
arpi
parents: 8668
diff changeset
31 #include "../osdep/keycodes.h"
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
32 #include "../mp_msg.h"
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
33 #include "aspect.h"
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
34 #include "geometry.h"
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
35
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
36 static LPDIRECTDRAW2 g_lpdd = NULL; //DirectDraw Object
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
37 static LPDIRECTDRAWSURFACE g_lpddsPrimary = NULL; //Primary Surface: viewport through the Desktop
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
38 static LPDIRECTDRAWSURFACE g_lpddsOverlay = NULL; //Overlay Surface
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
39 static LPDIRECTDRAWSURFACE g_lpddsBack = NULL; //Back surface
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
40 static LPDIRECTDRAWCLIPPER g_lpddclipper; //clipper object, can only be used without overlay
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
41 static DDSURFACEDESC ddsdsf; //surface descripiton needed for locking
7778
f804db78f704 10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents: 7713
diff changeset
42 static HINSTANCE hddraw_dll; //handle to ddraw.dll
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
43 static RECT rd; //rect of our stretched image
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
44 static RECT rs; //rect of our source image
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
45 static HWND hWnd=NULL; //handle to the window
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
46 static uint32_t ontop=0; //always in foreground
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
47 static uint32_t image_width, image_height; //image width and height
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
48 static uint32_t d_image_width, d_image_height; //image width and height zoomed
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
49 static uint8_t *image=NULL; //image data
10640
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
50 static uint32_t image_format=0; //image format
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
51 static uint32_t primary_image_format;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
52 static uint32_t vm = 0; //exclusive mode, allows resolution switching (not implemented yet)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
53 static uint32_t dstride; //surface stride
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
54 static uint32_t nooverlay = 0; //NonOverlay mode
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
55 static DWORD destcolorkey; //colorkey for our surface
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
56 static COLORREF windowcolor = RGB(0,0,16); //windowcolor == colorkey
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
57
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
58 extern void mplayer_put_key(int code); //let mplayer handel the keyevents
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
59 extern void vo_draw_text(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride));
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
60 extern int vo_doublebuffering; //tribblebuffering
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
61 extern int vo_fs;
11061
3cf2c7f8d9a9 yet another hack to prevent crashes with dr
faust3
parents: 11000
diff changeset
62 extern int vo_directrendering;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
63
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
64 /*****************************************************************************
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
65 * DirectDraw GUIDs.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
66 * 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
67 * the linking stage.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
68 *****************************************************************************/
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
69 static const GUID IID_IDirectDraw2 =
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
70 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
71 0xB3A6F3E0,0x2B43,0x11CF,{0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56}
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
72 };
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
73
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
74 typedef struct directx_fourcc_caps
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
75 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
76 char* img_format_name; //human readable name
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
77 uint32_t img_format; //as MPlayer image format
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
78 uint32_t drv_caps; //what hw supports with this format
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
79 DDPIXELFORMAT g_ddpfOverlay; //as Directx Sourface description
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
80 } directx_fourcc_caps;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
81
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
82
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
83 static directx_fourcc_caps g_ddpf[] =
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
84 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
85 {"YV12 ",IMGFMT_YV12 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','V','1','2'),0,0,0,0,0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
86 {"I420 ",IMGFMT_I420 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('I','4','2','0'),0,0,0,0,0}}, //yv12 with swapped uv
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
87 {"IYUV ",IMGFMT_IYUV ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('I','Y','U','V'),0,0,0,0,0}}, //same as i420
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
88 {"YVU9 ",IMGFMT_YVU9 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','V','U','9'),0,0,0,0,0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
89 {"YUY2 ",IMGFMT_YUY2 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','U','Y','2'),0,0,0,0,0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
90 // {"UYVY ",IMGFMT_UYVY ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('U','Y','V','Y'),0,0,0,0,0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
91 {"RGB15",IMGFMT_RGB15,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000001F, 0x000003E0, 0x00007C00, 0}}, //RGB 5:5:5
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
92 {"BGR15",IMGFMT_BGR15,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x00007C00, 0x000003E0, 0x0000001F, 0}},
10647
820ce9b724a3 fix RGB16 vs BGR16 mismatch
faust3
parents: 10640
diff changeset
93 {"RGB16",IMGFMT_RGB16,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000001F, 0x000007E0, 0x0000F800, 0}}, //RGB 5:6:5
820ce9b724a3 fix RGB16 vs BGR16 mismatch
faust3
parents: 10640
diff changeset
94 {"BGR16",IMGFMT_BGR16,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000F800, 0x000007E0, 0x0000001F, 0}},
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
95 {"RGB24",IMGFMT_RGB24,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 24, 0x000000FF, 0x0000FF00, 0x00FF0000, 0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
96 {"BGR24",IMGFMT_BGR24,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 24, 0x00FF0000, 0x0000FF00, 0x000000FF, 0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
97 {"RGB32",IMGFMT_RGB32,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
98 {"BGR32",IMGFMT_BGR32,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x00FF0000, 0x0000FF00, 0x000000FF, 0}}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
99 };
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
100 #define NUM_FORMATS (sizeof(g_ddpf) / sizeof(g_ddpf[0]))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
101
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7778
diff changeset
102 static vo_info_t info =
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 "Directx DDraw YUV/RGB/BGR renderer",
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
105 "directx",
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
106 "Sascha Sommer <saschasommer@freenet.de>",
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
107 ""
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
108 };
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
109
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7778
diff changeset
110 LIBVO_EXTERN(directx)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
111
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
112 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src,
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
113 unsigned char *srca, int stride)
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 switch(image_format) {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
116 case IMGFMT_YV12 :
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
117 case IMGFMT_I420 :
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
118 case IMGFMT_IYUV :
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
119 case IMGFMT_YVU9 :
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
120 vo_draw_alpha_yv12(w,h,src,srca,stride,((uint8_t *) image) + dstride*y0 + x0,dstride);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
121 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
122 case IMGFMT_YUY2 :
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
123 vo_draw_alpha_yuy2(w,h,src,srca,stride,((uint8_t *) image)+ dstride*y0 + 2*x0 ,dstride);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
124 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
125 case IMGFMT_UYVY :
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
126 vo_draw_alpha_yuy2(w,h,src,srca,stride,((uint8_t *) image) + dstride*y0 + 2*x0 + 1,dstride);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
127 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
128 case IMGFMT_RGB15:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
129 case IMGFMT_BGR15:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
130 vo_draw_alpha_rgb15(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+2*x0,dstride);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
131 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
132 case IMGFMT_RGB16:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
133 case IMGFMT_BGR16:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
134 vo_draw_alpha_rgb16(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+2*x0,dstride);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
135 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
136 case IMGFMT_RGB24:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
137 case IMGFMT_BGR24:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
138 vo_draw_alpha_rgb24(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+4*x0,dstride);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
139 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
140 case IMGFMT_RGB32:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
141 case IMGFMT_BGR32:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
142 vo_draw_alpha_rgb32(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+4*x0,dstride);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
143 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
144 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
145 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
146
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
147 static void draw_osd(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
148 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
149 vo_draw_text(image_width,image_height,draw_alpha);
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 static uint32_t
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
153 query_format(uint32_t format)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
154 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
155 uint32_t i=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
156 while ( i < NUM_FORMATS )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
157 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
158 if (g_ddpf[i].img_format == format)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
159 return g_ddpf[i].drv_caps;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
160 i++;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
161 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
162 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
163 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
164
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
165 static uint32_t Directx_CreatePrimarySurface()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
166 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
167 DDSURFACEDESC ddsd;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
168 //cleanup
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
169 if(g_lpddsPrimary)g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
170 g_lpddsPrimary=NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
171 ZeroMemory(&ddsd, sizeof(ddsd));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
172 ddsd.dwSize = sizeof(ddsd);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
173 //set flags and create a primary surface.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
174 ddsd.dwFlags = DDSD_CAPS;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
175 ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
176 if(g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsd, &g_lpddsPrimary, NULL )== DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
177 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>primary surface created\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
178 else
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
179 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
180 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>could not create primary surface\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
181 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
182 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
183 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
184 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
185
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
186 static uint32_t Directx_CreateOverlay(uint32_t imgfmt)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
187 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
188 HRESULT ddrval;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
189 DDSURFACEDESC ddsdOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
190 uint32_t i=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
191 while ( i < NUM_FORMATS +1 && imgfmt != g_ddpf[i].img_format)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
192 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
193 i++;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
194 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
195 if (!g_lpdd || !g_lpddsPrimary)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
196 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
197 //cleanup
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
198 if (g_lpddsOverlay)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
199 if (g_lpddsBack)g_lpddsBack->lpVtbl->Release(g_lpddsBack);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
200 g_lpddsOverlay= NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
201 g_lpddsBack = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
202 //create our overlay
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
203 ZeroMemory(&ddsdOverlay, sizeof(ddsdOverlay));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
204 ddsdOverlay.dwSize = sizeof(ddsdOverlay);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
205 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_FLIP | DDSCAPS_COMPLEX | DDSCAPS_VIDEOMEMORY;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
206 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_BACKBUFFERCOUNT| DDSD_PIXELFORMAT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
207 ddsdOverlay.dwWidth=image_width;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
208 ddsdOverlay.dwHeight=image_height;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
209 ddsdOverlay.dwBackBufferCount=2;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
210 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
211 if(vo_doublebuffering) //tribblebuffering
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
212 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
213 if (g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL)== DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
214 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
215 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>overlay with format %s created\n",g_ddpf[i].img_format_name);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
216 //get the surface directly attached to the primary (the back buffer)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
217 ddsdOverlay.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
218 if(g_lpddsOverlay->lpVtbl->GetAttachedSurface(g_lpddsOverlay,&ddsdOverlay.ddsCaps, &g_lpddsBack) != DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
219 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
220 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't get attached surface\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
221 return 1;
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 return 0;
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 vo_doublebuffering=0; //disable tribblebuffering
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
226 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><WARN>cannot create tribblebuffer overlay with format %s\n",g_ddpf[i].img_format_name);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
227 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
228 //single buffer
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
229 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>using singlebuffer overlay\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
230 ddsdOverlay.dwBackBufferCount=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
231 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
232 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
233 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
234 // try to create the overlay surface
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
235 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
236 if(ddrval != DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
237 {
10640
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
238 if(ddrval == DDERR_INVALIDPIXELFORMAT)mp_msg(MSGT_VO,MSGL_V,"<vo_directx><ERROR> invalid pixelformat: %s\n",g_ddpf[i].img_format_name);
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
239 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>");
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
240 switch(ddrval)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
241 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
242 case DDERR_INCOMPATIBLEPRIMARY:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
243 {mp_msg(MSGT_VO, MSGL_ERR,"incompatible primary surface\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
244 case DDERR_INVALIDCAPS:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
245 {mp_msg(MSGT_VO, MSGL_ERR,"invalid caps\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
246 case DDERR_INVALIDOBJECT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
247 {mp_msg(MSGT_VO, MSGL_ERR,"invalid object\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
248 case DDERR_INVALIDPARAMS:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
249 {mp_msg(MSGT_VO, MSGL_ERR,"invalid parameters\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
250 case DDERR_NODIRECTDRAWHW:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
251 {mp_msg(MSGT_VO, MSGL_ERR,"no directdraw hardware\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
252 case DDERR_NOEMULATION:
11000
6e35326c742f many small typo and grammar fixes
gabucino
parents: 10900
diff changeset
253 {mp_msg(MSGT_VO, MSGL_ERR,"can't emulate\n");break;}
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
254 case DDERR_NOFLIPHW:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
255 {mp_msg(MSGT_VO, MSGL_ERR,"hardware can't do flip\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
256 case DDERR_NOOVERLAYHW:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
257 {mp_msg(MSGT_VO, MSGL_ERR,"hardware can't do overlay\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
258 case DDERR_OUTOFMEMORY:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
259 {mp_msg(MSGT_VO, MSGL_ERR,"not enough system memory\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
260 case DDERR_UNSUPPORTEDMODE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
261 {mp_msg(MSGT_VO, MSGL_ERR,"unsupported mode\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
262 case DDERR_OUTOFVIDEOMEMORY:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
263 {mp_msg(MSGT_VO, MSGL_ERR,"not enough video memory\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
264 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
265 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
266 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
267 g_lpddsBack = g_lpddsOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
268 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
269 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
270
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
271 static uint32_t Directx_CreateBackpuffer()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
272 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
273 DDSURFACEDESC ddsd;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
274 //cleanup
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
275 if (g_lpddsBack)g_lpddsBack->lpVtbl->Release(g_lpddsBack);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
276 g_lpddsBack=NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
277 ZeroMemory(&ddsd, sizeof(ddsd));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
278 ddsd.dwSize = sizeof(ddsd);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
279 ddsd.ddsCaps.dwCaps= DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
280 ddsd.dwFlags= DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
281 ddsd.dwWidth=image_width;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
282 ddsd.dwHeight=image_height;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
283 if(g_lpdd->lpVtbl->CreateSurface( g_lpdd, &ddsd, &g_lpddsBack, 0 ) != DD_OK )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
284 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
285 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't create backpuffer\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
286 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
287 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
288 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>backbuffer created\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
289 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
290 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
291
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
292 static void uninit(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
293 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
294 if (g_lpddclipper != NULL) g_lpddclipper->lpVtbl->Release(g_lpddclipper);
9619
faust3
parents: 9488
diff changeset
295 g_lpddclipper = NULL;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
296 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>clipper released\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
297 if (g_lpddsBack != NULL) g_lpddsBack->lpVtbl->Release(g_lpddsBack);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
298 g_lpddsBack = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
299 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>back surface released\n");
10640
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
300 if(vo_doublebuffering && !nooverlay)
7537
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 if (g_lpddsOverlay != NULL)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
303 g_lpddsOverlay = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
304 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>overlay surface released\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
305 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
306 if (g_lpddsPrimary != NULL) g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
307 g_lpddsPrimary = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
308 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>primary released\n");
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
309 if(hWnd != NULL)DestroyWindow(hWnd);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
310 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>window destroyed\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
311 if (g_lpdd != NULL) g_lpdd->lpVtbl->Release(g_lpdd);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
312 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>directdrawobject released\n");
7778
f804db78f704 10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents: 7713
diff changeset
313 FreeLibrary( hddraw_dll);
f804db78f704 10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents: 7713
diff changeset
314 hddraw_dll= NULL;
f804db78f704 10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents: 7713
diff changeset
315 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>ddraw.dll freed\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
316 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>uninited\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
317 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
318
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
319 static uint32_t Directx_InitDirectDraw()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
320 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
321 HRESULT (WINAPI *OurDirectDrawCreate)(GUID *,LPDIRECTDRAW *,IUnknown *);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
322 LPDIRECTDRAW lpDDraw;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
323 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>Initing DirectDraw\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
324
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
325 //load direct draw DLL: based on videolans code
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
326 hddraw_dll = LoadLibrary("DDRAW.DLL");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
327 if( hddraw_dll == NULL )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
328 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
329 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>failed loading ddraw.dll\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
330 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
331 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
332 OurDirectDrawCreate = (void *)GetProcAddress(hddraw_dll, "DirectDrawCreate");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
333 if ( OurDirectDrawCreate == NULL )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
334 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
335 FreeLibrary( hddraw_dll );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
336 hddraw_dll = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
337 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>failed geting proc address\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
338 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
339 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
340 // initialize DirectDraw and create directx v1 object
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
341 if (OurDirectDrawCreate( NULL, &lpDDraw, NULL ) != DD_OK )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
342 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
343 lpDDraw = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
344 FreeLibrary( hddraw_dll );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
345 hddraw_dll = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
346 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't initialize ddraw\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
347 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
348 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
349 // ask IDirectDraw for IDirectDraw2
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
350 if (lpDDraw->lpVtbl->QueryInterface(lpDDraw, &IID_IDirectDraw2, (void **)&g_lpdd) != DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
351 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
352 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>no directx 2 installed\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
353 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
354 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
355 //release our old interface and free ddraw.dll
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
356 lpDDraw->lpVtbl->Release(lpDDraw);
7778
f804db78f704 10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents: 7713
diff changeset
357 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>lpDDraw released\n" );
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
358 //set cooperativelevel: for our tests, no handle to a window is needed
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
359 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, NULL, DDSCL_NORMAL) != DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
360 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
361 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>could not set cooperativelevel for hardwarecheck\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
362 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
363 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
364 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>DirectDraw Inited\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
365 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
366 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
367
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
368 static void check_events(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
369 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
370 MSG msg;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
371 while (PeekMessage(&msg, NULL, 0, 0,PM_REMOVE))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
372 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
373 TranslateMessage(&msg);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
374 DispatchMessage(&msg);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
375 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
376 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
377
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
378 static uint32_t Directx_ManageDisplay(uint32_t width,uint32_t height)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
379 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
380 RECT rd_window;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
381 HRESULT ddrval;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
382 DDCAPS capsDrv;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
383 DDOVERLAYFX ovfx;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
384 DWORD dwUpdateFlags=0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
385 HWND hWndafter;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
386 uint32_t xscreen = GetSystemMetrics(SM_CXSCREEN);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
387 uint32_t yscreen = GetSystemMetrics(SM_CYSCREEN);
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
388 POINT point_window;
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
389 if(vo_fs)
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
390 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
391 /*center and zoom image*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
392 rd_window.top = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
393 rd_window.left = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
394 rd_window.right = xscreen;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
395 rd_window.bottom = yscreen;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
396 aspect(&width,&height,A_ZOOM);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
397 rd.left = (xscreen-width)/2;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
398 rd.right = rd.left+width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
399 rd.top = (yscreen-height)/2;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
400 rd.bottom = rd.top + height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
401 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
402 else /*windowed*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
403 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
404 GetClientRect (hWnd, &rd_window);
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
405 if((rd_window.top == rd_window.bottom)&&!nooverlay)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
406 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
407 /*window is minimized let's hide our overlay*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
408 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,NULL, g_lpddsPrimary, NULL, DDOVER_HIDE, NULL); //hide the overlay
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
409 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
410 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
411 /*width and height are zero therefore we have to get them from the window size*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
412 if(!width)width = rd_window.right - rd_window.left;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
413 if(!height)height = rd_window.bottom - rd_window.top;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
414 point_window.x = 0; //overlayposition relative to the window
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
415 point_window.y = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
416 ClientToScreen(hWnd,&point_window);
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
417 rd.left = point_window.x;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
418 rd.top = point_window.y;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
419 rd.bottom = rd.top + height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
420 rd.right = rd.left + width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
421 rd_window = rd;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
422 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
423
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
424 /*ok, let's workaround some overlay limitations*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
425 if(!nooverlay)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
426 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
427 uint32_t uStretchFactor1000; //minimum stretch
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
428 uint32_t xstretch1000,ystretch1000;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
429 /*get driver capabilities*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
430 ZeroMemory(&capsDrv, sizeof(capsDrv));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
431 capsDrv.dwSize = sizeof(capsDrv);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
432 if(g_lpdd->lpVtbl->GetCaps(g_lpdd,&capsDrv, NULL) != DD_OK)return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
433 /*do not allow to zoom or shrink if hardware isn't able to do so*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
434 if((width < image_width)&& !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKX))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
435 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
436 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKXN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only shrinkN\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
437 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't shrink x\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
438 width=image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
439 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
440 else if((width > image_width)&& !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHX))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
441 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
442 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHXN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only stretchN\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
443 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't stretch x\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
444 width = image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
445 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
446 if((height < image_height) && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKY))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
447 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
448 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKYN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only shrinkN\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
449 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't shrink y\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
450 height = image_height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
451 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
452 else if((height > image_height ) && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHY))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
453 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
454 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHYN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only stretchN\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
455 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't stretch y\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
456 height = image_height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
457 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
458 /*get minimum stretch, depends on display adaptor and mode (refresh rate!) */
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
459 uStretchFactor1000 = capsDrv.dwMinOverlayStretch>1000 ? capsDrv.dwMinOverlayStretch : 1000;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
460 rd.right = ((width+rd.left)*uStretchFactor1000+999)/1000;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
461 rd.bottom = (height+rd.top)*uStretchFactor1000/1000;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
462 /*calculate xstretch1000 and ystretch1000*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
463 xstretch1000 = ((rd.right - rd.left)* 1000)/image_width ;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
464 ystretch1000 = ((rd.bottom - rd.top)* 1000)/image_height;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
465 /*handle move outside of window with cropping
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
466 not really needed with colorkey, but shouldn't hurt*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
467 rs.left=0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
468 rs.right=image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
469 rs.top=0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
470 rs.bottom=image_height;
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
471 if(!vo_fs)rd_window = rd; /*don't crop the window !!!*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
472 if(rd.left < 0) //move out left
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
473 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
474 rs.left=(-rd.left*1000)/xstretch1000;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
475 rd.left = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
476 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
477 else rs.left=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
478 if(rd.top < 0) //move out up
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
479 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
480 rs.top=(-rd.top*1000)/ystretch1000;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
481 rd.top = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
482 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
483 else rs.top = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
484 if(rd.right > xscreen) //move out right
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
485 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
486 rs.right=((xscreen-rd.left)*1000)/xstretch1000;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
487 rd.right= xscreen;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
488 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
489 else rs.right = image_width;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
490 if(rd.bottom > yscreen) //move out down
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
491 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
492 rs.bottom=((yscreen-rd.top)*1000)/ystretch1000;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
493 rd.bottom= yscreen;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
494 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
495 else rs.bottom= image_height;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
496 /*the last thing to check are alignment restrictions
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
497 these expressions (x & -y) just do alignment by dropping low order bits...
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
498 so to round up, we add first, then truncate*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
499 if ((capsDrv.dwCaps & DDCAPS_ALIGNBOUNDARYSRC) && capsDrv.dwAlignBoundarySrc)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
500 rs.left = (rs.left + capsDrv.dwAlignBoundarySrc / 2) & -(signed)(capsDrv.dwAlignBoundarySrc);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
501 if ((capsDrv.dwCaps & DDCAPS_ALIGNSIZESRC) && capsDrv.dwAlignSizeSrc)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
502 rs.right = rs.left + ((rs.right - rs.left + capsDrv.dwAlignSizeSrc / 2) & -(signed) (capsDrv.dwAlignSizeSrc));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
503 if ((capsDrv.dwCaps & DDCAPS_ALIGNBOUNDARYDEST) && capsDrv.dwAlignBoundaryDest)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
504 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
505 rd.left = (rd.left + capsDrv.dwAlignBoundaryDest / 2) & -(signed)(capsDrv.dwAlignBoundaryDest);
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
506 if(!vo_fs)rd_window.left = (rd_window.left + capsDrv.dwAlignBoundaryDest / 2) & -(signed)(capsDrv.dwAlignBoundaryDest); //don't forget the window
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
507 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
508 if ((capsDrv.dwCaps & DDCAPS_ALIGNSIZEDEST) && capsDrv.dwAlignSizeDest)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
509 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
510 rd.right = rd.left + ((rd.right - rd.left) & -(signed) (capsDrv.dwAlignSizeDest));
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
511 if(!vo_fs)rd_window.right = rd_window.left + ((rd_window.right - rd_window.left) & -(signed) (capsDrv.dwAlignSizeDest)); //don't forget the window
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
512 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
513 /*create an overlay FX structure to specify a destination color key*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
514 ZeroMemory(&ovfx, sizeof(ovfx));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
515 ovfx.dwSize = sizeof(ovfx);
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
516 if(vo_fs)
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
517 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
518 ovfx.dckDestColorkey.dwColorSpaceLowValue = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
519 ovfx.dckDestColorkey.dwColorSpaceHighValue = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
520 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
521 else
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
522 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
523 ovfx.dckDestColorkey.dwColorSpaceLowValue = destcolorkey;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
524 ovfx.dckDestColorkey.dwColorSpaceHighValue = destcolorkey;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
525 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
526 // set the flags we'll send to UpdateOverlay //DDOVER_AUTOFLIP|DDOVERFX_MIRRORLEFTRIGHT|DDOVERFX_MIRRORUPDOWN could be usefull?;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
527 dwUpdateFlags = DDOVER_SHOW | DDOVER_DDFX;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
528 /*if hardware can't do colorkeying set the window on top*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
529 if(capsDrv.dwCKeyCaps & DDCKEYCAPS_DESTOVERLAY) dwUpdateFlags |= DDOVER_KEYDESTOVERRIDE;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
530 else ontop = 1;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
531 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
532 /*calculate window rect with borders*/
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
533 if(!vo_fs)AdjustWindowRect(&rd_window,WS_OVERLAPPEDWINDOW|WS_SIZEBOX,0);
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
534
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
535 if((vo_fs) || (!vo_fs && ontop))hWndafter=HWND_TOPMOST;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
536 else hWndafter=HWND_NOTOPMOST;
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
537
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
538 /*display the window*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
539 SetWindowPos(hWnd,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
540 hWndafter,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
541 rd_window.left,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
542 rd_window.top,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
543 rd_window.right - rd_window.left,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
544 rd_window.bottom - rd_window.top,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
545 SWP_SHOWWINDOW|SWP_NOOWNERZORDER);
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
546 //printf("Window:x:%i,y:%i,w:%i,h:%i\n",rd_window.left,rd_window.top,rd_window.right - rd_window.left,rd_window.bottom - rd_window.top);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
547 //printf("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);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
548 //printf("Source:x1:%i,x2:%i,y1:%i,y2:%i\n",rs.left,rs.right,rs.top,rs.bottom);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
549 //printf("Image:x:%i->%i,y:%i->%i\n",image_width,d_image_width,image_height,d_image_height);
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
550
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
551
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
552 /*for nonoverlay mode we are finished, for overlay mode we have to display the overlay first*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
553 if(nooverlay)return 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
554
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
555 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,&rs, g_lpddsPrimary, &rd, dwUpdateFlags, &ovfx);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
556 if(FAILED(ddrval))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
557 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
558 // one cause might be the driver lied about minimum stretch
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
559 // we should try upping the destination size a bit, or
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
560 // perhaps shrinking the source size
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
561 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>UpdateOverlay failed\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
562 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 );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
563 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
564 switch (ddrval)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
565 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
566 case DDERR_NOSTRETCHHW:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
567 {mp_msg(MSGT_VO, MSGL_ERR ,"hardware can't stretch: try to size the window back\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
568 case DDERR_INVALIDRECT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
569 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid rectangle\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
570 case DDERR_INVALIDPARAMS:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
571 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid parameters\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
572 case DDERR_HEIGHTALIGN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
573 {mp_msg(MSGT_VO, MSGL_ERR ,"height align\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
574 case DDERR_XALIGN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
575 {mp_msg(MSGT_VO, MSGL_ERR ,"x align\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
576 case DDERR_UNSUPPORTED:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
577 {mp_msg(MSGT_VO, MSGL_ERR ,"unsupported\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
578 case DDERR_INVALIDSURFACETYPE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
579 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid surfacetype\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
580 case DDERR_INVALIDOBJECT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
581 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid object\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
582 case DDERR_SURFACELOST:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
583 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
584 mp_msg(MSGT_VO, MSGL_ERR ,"surfaces lost\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
585 g_lpddsOverlay->lpVtbl->Restore( g_lpddsOverlay ); //restore and try again
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
586 g_lpddsPrimary->lpVtbl->Restore( g_lpddsPrimary );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
587 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,&rs, g_lpddsPrimary, &rd, dwUpdateFlags, &ovfx);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
588 if(ddrval !=DD_OK)mp_msg(MSGT_VO, MSGL_FATAL ,"<vo_directx><FATAL ERROR>UpdateOverlay failed again\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
589 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
590 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
591 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
592 /*ok we can't do anything about it -> hide overlay*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
593 if(ddrval != DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
594 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
595 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,NULL, g_lpddsPrimary, NULL, DDOVER_HIDE, NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
596 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
597 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
598 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
599 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
600 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
601
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
602 //find out supported overlay pixelformats
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
603 static uint32_t Directx_CheckOverlayPixelformats()
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 DDCAPS capsDrv;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
606 HRESULT ddrval;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
607 DDSURFACEDESC ddsdOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
608 uint32_t i;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
609 uint32_t formatcount = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
610 //get driver caps to determine overlay support
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
611 ZeroMemory(&capsDrv, sizeof(capsDrv));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
612 capsDrv.dwSize = sizeof(capsDrv);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
613 ddrval = g_lpdd->lpVtbl->GetCaps(g_lpdd,&capsDrv, NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
614 if (FAILED(ddrval))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
615 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
616 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>failed getting ddrawcaps\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
617 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
618 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
619 if (!(capsDrv.dwCaps & DDCAPS_OVERLAY))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
620 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
621 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>Your card doesn't support overlay\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
622 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
623 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
624 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>testing supported overlay pixelformats\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
625 //it is not possible to query for pixel formats supported by the
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
626 //overlay hardware: try out various formats till one works
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
627 ZeroMemory(&ddsdOverlay, sizeof(ddsdOverlay));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
628 ddsdOverlay.dwSize = sizeof(ddsdOverlay);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
629 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
630 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH| DDSD_PIXELFORMAT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
631 ddsdOverlay.dwWidth=300;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
632 ddsdOverlay.dwHeight=280;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
633 ddsdOverlay.dwBackBufferCount=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
634 //try to create an overlay surface using one of the pixel formats in our global list
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
635 i=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
636 do
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
637 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
638 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
639 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
640 if (ddrval == DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
641 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
642 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><FORMAT OVERLAY>%i %s supported\n",i,g_ddpf[i].img_format_name);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
643 g_ddpf[i].drv_caps = VFCAP_CSP_SUPPORTED |VFCAP_OSD |VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_HWSCALE_UP;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
644 formatcount++;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
645 else mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><FORMAT OVERLAY>%i %s not supported\n",i,g_ddpf[i].img_format_name);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
646 if (g_lpddsOverlay != NULL) {g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);g_lpddsOverlay = NULL;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
647 } while( ++i < NUM_FORMATS );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
648 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>Your card supports %i of %i overlayformats\n",formatcount, NUM_FORMATS);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
649 if (formatcount == 0)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
650 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
651 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><WARN>Your card supports overlay, but we couldn't create one\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
652 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>This can have the following reasons:\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
653 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>- you are already using an overlay with another app\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
654 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>- you don't have enough videomemory\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
655 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>- vo_directx doesn't support the cards overlay pixelformat\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
656 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
657 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
658 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYMIRRORLEFTRIGHT)mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>can mirror left right\n"); //I don't have hardware which
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
659 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYMIRRORUPDOWN )mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>can mirror up down\n"); //supports those send me one and I'll implement ;)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
660 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
661 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
662
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
663 //find out the Pixelformat of the Primary Surface
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
664 static uint32_t Directx_CheckPrimaryPixelformat()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
665 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
666 uint32_t i=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
667 uint32_t formatcount = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
668 DDPIXELFORMAT ddpf;
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
669 DDSURFACEDESC ddsd;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
670 HDC hdc;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
671 HRESULT hres;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
672 COLORREF rgbT=RGB(0,0,0);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
673 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>checking primary surface\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
674 memset( &ddpf, 0, sizeof( DDPIXELFORMAT ));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
675 ddpf.dwSize = sizeof( DDPIXELFORMAT );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
676 //we have to create a primary surface first
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
677 if(Directx_CreatePrimarySurface()!=0)return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
678 if(g_lpddsPrimary->lpVtbl->GetPixelFormat( g_lpddsPrimary, &ddpf ) != DD_OK )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
679 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
680 mp_msg(MSGT_VO, MSGL_FATAL ,"<vo_directx><FATAL ERROR>can't get pixelformat\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
681 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
682 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
683 while ( i < NUM_FORMATS )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
684 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
685 if (g_ddpf[i].g_ddpfOverlay.dwRGBBitCount == ddpf.dwRGBBitCount)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
686 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
687 if (g_ddpf[i].g_ddpfOverlay.dwRBitMask == ddpf.dwRBitMask)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
688 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
689 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><FORMAT PRIMARY>%i %s supported\n",i,g_ddpf[i].img_format_name);
7713
32878695ca8b more correct flags
faust3
parents: 7682
diff changeset
690 g_ddpf[i].drv_caps = VFCAP_CSP_SUPPORTED |VFCAP_OSD;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
691 formatcount++;
10640
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
692 primary_image_format=g_ddpf[i].img_format;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
693 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
694 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
695 i++;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
696 }
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
697 //get the colorkey for overlay mode
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
698 destcolorkey = CLR_INVALID;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
699 if (windowcolor != CLR_INVALID && g_lpddsPrimary->lpVtbl->GetDC(g_lpddsPrimary,&hdc) == DD_OK)
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
700 {
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
701 rgbT = GetPixel(hdc, 0, 0);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
702 SetPixel(hdc, 0, 0, windowcolor);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
703 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary,hdc);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
704 }
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
705 // read back the converted color
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
706 ddsd.dwSize = sizeof(ddsd);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
707 while ((hres = g_lpddsPrimary->lpVtbl->Lock(g_lpddsPrimary,NULL, &ddsd, 0, NULL)) == DDERR_WASSTILLDRAWING)
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
708 ;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
709 if (hres == DD_OK)
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
710 {
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
711 destcolorkey = *(DWORD *) ddsd.lpSurface;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
712 if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32)
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
713 destcolorkey &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
714 g_lpddsPrimary->lpVtbl->Unlock(g_lpddsPrimary,NULL);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
715 }
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
716 if (windowcolor != CLR_INVALID && g_lpddsPrimary->lpVtbl->GetDC(g_lpddsPrimary,&hdc) == DD_OK)
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
717 {
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
718 SetPixel(hdc, 0, 0, rgbT);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
719 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary,hdc);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
720 }
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
721 //release primary
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
722 g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
723 g_lpddsPrimary = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
724 if(formatcount==0)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
725 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
726 mp_msg(MSGT_VO, MSGL_FATAL ,"<vo_directx><FATAL ERROR>Unknown Pixelformat\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
727 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
728 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
729 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
730 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
731
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
732 //function handles input
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
733 static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
734 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
735 switch (message)
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 case WM_DESTROY:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
738 {
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
739 PostQuitMessage(0);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
740 return 0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
741 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
742 case WM_CLOSE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
743 {
11510
3638adcfdcbd send quit command instead of key 'q'.
joey
parents: 11061
diff changeset
744 mp_input_queue_cmd(mp_input_parse_cmd("quit"));
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
745 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
746 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
747 case WM_WINDOWPOSCHANGED:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
748 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
749 //printf("Windowposchange\n");
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
750 if(g_lpddsBack != NULL) //or it will crash with -vm
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
751 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
752 Directx_ManageDisplay(0,0);
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
753 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
754 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
755 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
756 case WM_SYSCOMMAND:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
757 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
758 switch (wParam)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
759 { //kill screensaver etc.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
760 //note: works only when the window is active
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
761 //you can workaround this by disabling the allow screensaver option in
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
762 //the link to the app
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
763 case SC_SCREENSAVE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
764 case SC_MONITORPOWER:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
765 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>killing screensaver\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
766 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
767 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
768 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
769 case WM_KEYDOWN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
770 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
771 switch (wParam)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
772 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
773 case VK_LEFT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
774 {mplayer_put_key(KEY_LEFT);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
775 case VK_UP:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
776 {mplayer_put_key(KEY_UP);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
777 case VK_RIGHT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
778 {mplayer_put_key(KEY_RIGHT);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
779 case VK_DOWN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
780 {mplayer_put_key(KEY_DOWN);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
781 case VK_TAB:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
782 {mplayer_put_key(KEY_TAB);break;}
11510
3638adcfdcbd send quit command instead of key 'q'.
joey
parents: 11061
diff changeset
783 case VK_BACK:
3638adcfdcbd send quit command instead of key 'q'.
joey
parents: 11061
diff changeset
784 {mplayer_put_key(KEY_BS);break;}
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
785 case VK_DELETE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
786 {mplayer_put_key(KEY_DELETE);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
787 case VK_INSERT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
788 {mplayer_put_key(KEY_INSERT);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
789 case VK_HOME:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
790 {mplayer_put_key(KEY_HOME);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
791 case VK_END:
9894
3933e0ef000c 10l noticed by Joey Parrish <joey at nicewarrior.org>
faust3
parents: 9728
diff changeset
792 {mplayer_put_key(KEY_END);break;}
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
793 case VK_PRIOR:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
794 {mplayer_put_key(KEY_PAGE_UP);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
795 case VK_NEXT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
796 {mplayer_put_key(KEY_PAGE_DOWN);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
797 case VK_ESCAPE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
798 {mplayer_put_key(KEY_ESC);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
799 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
800 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
801 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
802 case WM_CHAR:
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 mplayer_put_key(wParam);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
805 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
806 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
807
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
808 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
809 return DefWindowProc(hWnd, message, wParam, lParam);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
810 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
811
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
812 static uint32_t preinit(const char *arg)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
813 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
814 HINSTANCE hInstance = GetModuleHandle(NULL);
9943
047436ae7143 load icon from executable
faust3
parents: 9894
diff changeset
815 HICON mplayericon=NULL;
047436ae7143 load icon from executable
faust3
parents: 9894
diff changeset
816 char exedir[MAX_PATH];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
817 WNDCLASS wc;
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
818 if(arg)
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
819 {
9488
abe81caa8cc1 fix fullscreenswitching patch by Joey Parrish <joey at nicewarrior.org>
faust3
parents: 9380
diff changeset
820 if(strstr(arg,"noaccel"))
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
821 {
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
822 mp_msg(MSGT_VO,MSGL_V,"<vo_directx><INFO>disabled overlay\n");
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
823 nooverlay = 1;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
824 }
9488
abe81caa8cc1 fix fullscreenswitching patch by Joey Parrish <joey at nicewarrior.org>
faust3
parents: 9380
diff changeset
825 if(strstr(arg,"ontop"))
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
826 {
9488
abe81caa8cc1 fix fullscreenswitching patch by Joey Parrish <joey at nicewarrior.org>
faust3
parents: 9380
diff changeset
827 mp_msg(MSGT_VO,MSGL_V,"<vo_directx><INFO>window ontop\n");
abe81caa8cc1 fix fullscreenswitching patch by Joey Parrish <joey at nicewarrior.org>
faust3
parents: 9380
diff changeset
828 ontop = 1;
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
829 }
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
830 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
831 if (Directx_InitDirectDraw()!= 0)return 1; //init DirectDraw
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
832 if (Directx_CheckPrimaryPixelformat()!=0)return 1;
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
833 if (!nooverlay && Directx_CheckOverlayPixelformats() == 0) //check for supported hardware
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
834 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
835 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>hardware supports overlay\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
836 nooverlay = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
837 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
838 else //if we can't have overlay we create a backpuffer with the same imageformat as the primary surface
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
839 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
840 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>using backpuffer\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
841 nooverlay = 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
842 }
9943
047436ae7143 load icon from executable
faust3
parents: 9894
diff changeset
843 /*load icon from the main app*/
047436ae7143 load icon from executable
faust3
parents: 9894
diff changeset
844 if(GetModuleFileName(NULL,exedir,MAX_PATH))
047436ae7143 load icon from executable
faust3
parents: 9894
diff changeset
845 {
047436ae7143 load icon from executable
faust3
parents: 9894
diff changeset
846 mplayericon = ExtractIcon( hInstance, exedir, 0 );
047436ae7143 load icon from executable
faust3
parents: 9894
diff changeset
847 }
047436ae7143 load icon from executable
faust3
parents: 9894
diff changeset
848 if(!mplayericon)mplayericon=LoadIcon(NULL,IDI_APPLICATION);
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
849 wc.style = CS_HREDRAW | CS_VREDRAW;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
850 wc.lpfnWndProc = WndProc;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
851 wc.cbClsExtra = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
852 wc.cbWndExtra = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
853 wc.hInstance = hInstance;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
854 wc.hCursor = LoadCursor(NULL,IDC_ARROW);
9943
047436ae7143 load icon from executable
faust3
parents: 9894
diff changeset
855 wc.hIcon = mplayericon;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
856 wc.hbrBackground = CreateSolidBrush(windowcolor);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
857 wc.lpszClassName = "Mplayer - Movieplayer for Linux";
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
858 wc.lpszMenuName = NULL;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
859 RegisterClass(&wc);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
860 hWnd = CreateWindow("MPlayer - Movieplayer for Linux",
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
861 "",
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
862 WS_OVERLAPPEDWINDOW| WS_SIZEBOX,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
863 CW_USEDEFAULT, //position x
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
864 CW_USEDEFAULT, //position y
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
865 100, //width
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
866 100, //height
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
867 NULL,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
868 NULL,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
869 hInstance,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
870 NULL);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
871 mp_msg(MSGT_VO, MSGL_DBG3 ,"<vo_directx><INFO>initial mplayer window created\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
872 mp_msg(MSGT_VO, MSGL_DBG3 ,"<vo_directx><INFO>preinit succesfully finished\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
873 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
874 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
875
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
876 static uint32_t draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
877 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
878 uint8_t *s;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
879 uint8_t *d;
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
880 uint32_t i=0, uvstride=dstride/2;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
881 // copy Y
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
882 d=image+dstride*y+x;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
883 s=src[0];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
884 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
885 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
886 s+=stride[0];
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
887 d+=dstride;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
888 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
889
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
890 w/=2;h/=2;x/=2;y/=2;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
891
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
892 // copy U
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
893 d=image+dstride*image_height + uvstride*y+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
894 if(image_format == IMGFMT_YV12)s=src[2];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
895 else s=src[1];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
896 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
897 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
898 s+=stride[1];
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
899 d+=uvstride;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
900 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
901
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
902 // copy V
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
903 d=image+dstride*image_height +uvstride*(image_height/2) + uvstride*y+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
904 if(image_format == IMGFMT_YV12)s=src[1];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
905 else s=src[2];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
906 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
907 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
908 s+=stride[2];
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
909 d+=uvstride;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
910 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
911 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
912 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
913
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
914 static void flip_page(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
915 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
916 HRESULT dxresult;
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
917 g_lpddsBack->lpVtbl->Unlock (g_lpddsBack,NULL);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
918 if (vo_doublebuffering)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
919 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
920 // flip to the next image in the sequence
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
921 dxresult = g_lpddsOverlay->lpVtbl->Flip( g_lpddsOverlay,NULL, DDFLIP_WAIT);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
922 if(dxresult == DDERR_SURFACELOST)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
923 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
924 mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR><vo_directx><INFO>Restoring Surface\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
925 g_lpddsBack->lpVtbl->Restore( g_lpddsBack );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
926 dxresult = g_lpddsOverlay->lpVtbl->Flip( g_lpddsOverlay,NULL, DDFLIP_WAIT);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
927 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
928 if(dxresult != DD_OK)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't flip page\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
929 }
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
930 if(nooverlay)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
931 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
932 DDBLTFX ddbltfx;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
933 // ask for the "NOTEARING" option
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
934 memset( &ddbltfx, 0, sizeof(DDBLTFX) );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
935 ddbltfx.dwSize = sizeof(DDBLTFX);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
936 ddbltfx.dwDDFX = DDBLTFX_NOTEARING;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
937 g_lpddsPrimary->lpVtbl->Blt(g_lpddsPrimary, &rd, g_lpddsBack, NULL, DDBLT_WAIT, &ddbltfx);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
938 }
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
939 g_lpddsBack->lpVtbl->Lock(g_lpddsBack,NULL,&ddsdsf, DDLOCK_NOSYSLOCK | DDLOCK_WAIT , NULL);
11061
3cf2c7f8d9a9 yet another hack to prevent crashes with dr
faust3
parents: 11000
diff changeset
940 if(vo_directrendering && (dstride != ddsdsf.lPitch)){
3cf2c7f8d9a9 yet another hack to prevent crashes with dr
faust3
parents: 11000
diff changeset
941 mp_msg(MSGT_VO,MSGL_WARN,"<vo_directx><WARN>stride changed !!!! disabling direct rendering\n");
3cf2c7f8d9a9 yet another hack to prevent crashes with dr
faust3
parents: 11000
diff changeset
942 vo_directrendering=0;
3cf2c7f8d9a9 yet another hack to prevent crashes with dr
faust3
parents: 11000
diff changeset
943 }
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
944 dstride = ddsdsf.lPitch;
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
945 image = ddsdsf.lpSurface;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
946 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
947
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
948 static uint32_t draw_frame(uint8_t *src[])
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
949 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
950 memcpy( image, *src, dstride * image_height );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
951 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
952 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
953
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
954 static uint32_t get_image(mp_image_t *mpi)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
955 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
956 if(mpi->flags&MP_IMGFLAG_READABLE) {mp_msg(MSGT_VO, MSGL_V,"<vo_directx><ERROR>slow video ram\n");return VO_FALSE;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
957 if(mpi->type==MP_IMGTYPE_STATIC) {mp_msg(MSGT_VO, MSGL_V,"<vo_directx><ERROR>not static\n");return VO_FALSE;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
958 if((mpi->width==dstride) || (mpi->flags&(MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_ACCEPT_WIDTH)))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
959 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
960 if(mpi->flags&MP_IMGFLAG_PLANAR)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
961 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
962 if(image_format == IMGFMT_YV12)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
963 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
964 mpi->planes[2]= image + dstride*image_height;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
965 mpi->planes[1]= image + dstride*image_height+ dstride*image_height/4;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
966 mpi->stride[1]=mpi->stride[2]=dstride/2;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
967 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
968 else if(image_format == IMGFMT_IYUV || image_format == IMGFMT_I420)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
969 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
970 mpi->planes[1]= image + dstride*image_height;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
971 mpi->planes[2]= image + dstride*image_height+ dstride*image_height/4;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
972 mpi->stride[1]=mpi->stride[2]=dstride/2;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
973 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
974 else if(image_format == IMGFMT_YVU9)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
975 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
976 mpi->planes[2] = image + dstride*image_height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
977 mpi->planes[1] = image + dstride*image_height+ dstride*image_height/16;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
978 mpi->stride[1]=mpi->stride[2]=dstride/4;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
979 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
980 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
981 mpi->planes[0]=image;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
982 mpi->stride[0]=dstride;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
983 mpi->width=image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
984 mpi->height=image_height;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
985 mpi->flags|=MP_IMGFLAG_DIRECT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
986 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
987 return VO_TRUE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
988 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
989 return VO_FALSE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
990 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
991
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
992 static uint32_t put_image(mp_image_t *mpi){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
993
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
994 uint32_t i = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
995 uint8_t *d;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
996 uint8_t *s;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
997 uint32_t x = mpi->x;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
998 uint32_t y = mpi->y;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
999 uint32_t w = mpi->w;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1000 uint32_t h = mpi->h;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1001
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1002 if((mpi->flags&MP_IMGFLAG_DIRECT)||(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK))
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1003 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1004 mp_msg(MSGT_VO, MSGL_DBG3 ,"<vo_directx><INFO>put_image: nothing to do: drawslices\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1005 return VO_TRUE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1006 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1007
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1008 if (mpi->flags&MP_IMGFLAG_PLANAR)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1009 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1010
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1011 if(image_format!=IMGFMT_YVU9)draw_slice(mpi->planes,mpi->stride,mpi->w,mpi->h,0,0);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1012 else
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1013 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1014 // copy Y
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1015 d=image+dstride*y+x;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1016 s=mpi->planes[0];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1017 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1018 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1019 s+=mpi->stride[0];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1020 d+=dstride;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1021 }
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1022 w/=4;h/=4;x/=4;y/=4;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1023 // copy V
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1024 d=image+dstride*image_height + dstride*y/4+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1025 s=mpi->planes[2];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1026 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1027 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1028 s+=mpi->stride[1];
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1029 d+=dstride/4;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1030 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1031 // copy U
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1032 d=image+dstride*image_height + dstride*image_height/16 + dstride/4*y+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1033 s=mpi->planes[1];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1034 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1035 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1036 s+=mpi->stride[2];
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1037 d+=dstride/4;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1038 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1039 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1040 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1041 else //packed
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1042 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1043 memcpy( image, mpi->planes[0], image_height * dstride);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1044 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1045 return VO_TRUE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1046 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1047
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1048 static uint32_t
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1049 config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t options, char *title, uint32_t format)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1050 {
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
1051 int wx=-1;
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
1052 int wy=-1;
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
1053 vo_fs = options & 0x01;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1054 vm = options & 0x02;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1055 image_format = format;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1056 image_width = width;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1057 image_height = height;
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1058 d_image_width = d_width;
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1059 d_image_height = d_height;
10640
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
1060 nooverlay = 0;
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1061 aspect_save_orig(image_width,image_height);
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1062 aspect_save_prescale(d_image_width,d_image_height);
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1063 aspect_save_screenres(GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
1064 geometry(&wx, &wy, &d_image_width, &d_image_height,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
1065 aspect(&d_image_width,&d_image_height,A_NOZOOM);
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
1066 if(wx !=-1)SetWindowPos(hWnd,NULL, wx, wy,d_image_width,d_image_height,SWP_SHOWWINDOW|SWP_NOOWNERZORDER);
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
1067 SetWindowText(hWnd,title);
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
1068
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1069 /*release all surfaces*/
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1070 if (g_lpddsBack != NULL) g_lpddsBack->lpVtbl->Release(g_lpddsBack);
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1071 g_lpddsBack = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1072 if(vo_doublebuffering)
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1073 {
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1074 if (g_lpddsOverlay != NULL)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1075 }
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1076 g_lpddsOverlay = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1077 if (g_lpddsPrimary != NULL) g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1078 g_lpddsPrimary = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1079 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>overlay surfaces released\n");
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1080 /*set cooperativelevel*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1081 if(vm) /*exclusive mode*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1082 {
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
1083 vo_fs=1;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1084 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, hWnd, DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN) != DD_OK)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1085 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1086 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't set cooperativelevel for exclusive mode");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1087 return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1088 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1089 SetWindowLong( hWnd, GWL_STYLE, 0 );
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1090 /*SetDisplayMode(ddobject,width,height,bpp,refreshrate,aditionalflags)*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1091 if(g_lpdd->lpVtbl->SetDisplayMode(g_lpdd,640, 480, 16,0,0) != DD_OK)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1092 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1093 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't set displaymode\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1094 return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1095 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1096 aspect_save_screenres(GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1097 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>using exclusive mode\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1098 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1099 else
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1100 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1101 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, hWnd, DDSCL_NORMAL) != DD_OK)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1102 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1103 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't set cooperativelevel for windowed mode");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1104 return 1;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1105 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1106 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>using normal cooperativelevel\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1107 }
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
1108 if(vo_fs)
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1109 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1110 /*remove the borders*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1111 SetWindowLong( hWnd, GWL_STYLE, 0 );
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1112 /*change backgroundcolor*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1113 SetClassLongA(hWnd,GCL_HBRBACKGROUND,(int)CreateSolidBrush(RGB(0,0,0)));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1114 /*repaint*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1115 RedrawWindow(hWnd,NULL,NULL,RDW_INVALIDATE|RDW_ERASE|RDW_INTERNALPAINT);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1116 /*hide mouse*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1117 ShowCursor(FALSE);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1118 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1119 /*create the surfaces*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1120 if(Directx_CreatePrimarySurface())return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1121 if (!nooverlay && Directx_CreateOverlay(image_format))
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1122 {
10640
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
1123 if(format == primary_image_format)nooverlay=1; /*overlay creation failed*/
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
1124 else {
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
1125 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't use overlay mode: please use -vo directx:noaccel\n");
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
1126 return 1;
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
1127 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1128 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1129 if(nooverlay)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1130 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1131 if(Directx_CreateBackpuffer())
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1132 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1133 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't get the driver to work on your system :(\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1134 return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1135 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1136 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>back surface created\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1137 vo_doublebuffering = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1138 /*create clipper for nonoverlay mode*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1139 if(g_lpddclipper)g_lpddclipper->lpVtbl->Release(g_lpddclipper);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1140 g_lpddclipper=NULL;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1141 if(g_lpdd->lpVtbl->CreateClipper(g_lpdd, 0, &g_lpddclipper,NULL)!= DD_OK){mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't create clipper\n");return 1;}
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1142 if(g_lpddclipper->lpVtbl->SetHWnd (g_lpddclipper, 0, hWnd)!= DD_OK){mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't associate clipper with window\n");return 1;}
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1143 if(g_lpddsPrimary->lpVtbl->SetClipper (g_lpddsPrimary,g_lpddclipper)!=DD_OK){mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't associate primary surface with clipper\n");return 1;}
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1144 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>clipper succesfully created\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1145 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1146 Directx_ManageDisplay(d_image_width,d_image_height);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1147 memset(&ddsdsf, 0,sizeof(DDSURFACEDESC));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1148 ddsdsf.dwSize = sizeof (DDSURFACEDESC);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1149 g_lpddsBack->lpVtbl->Lock(g_lpddsBack,NULL,&ddsdsf, DDLOCK_NOSYSLOCK | DDLOCK_WAIT, NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1150 dstride = ddsdsf.lPitch;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1151 image = ddsdsf.lpSurface;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1152 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1153 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1154
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1155 static uint32_t control(uint32_t request, void *data, ...)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1156 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1157 switch (request) {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1158
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1159 case VOCTRL_GET_IMAGE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1160 return get_image(data);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1161 case VOCTRL_QUERY_FORMAT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1162 return query_format(*((uint32_t*)data));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1163 case VOCTRL_DRAW_IMAGE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1164 return put_image(data);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1165 case VOCTRL_FULLSCREEN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1166 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1167 if(vm)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1168 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1169 mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>currently we do not allow to switch from exclusive to windowed mode\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1170 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1171 else
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1172 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1173 WINDOWPLACEMENT window_placement;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1174 uint32_t width = 0; /*default: restore to the size it had before maximizing*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1175 uint32_t height = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1176 window_placement.length = sizeof(WINDOWPLACEMENT);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1177 GetWindowPlacement(hWnd, &window_placement);
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
1178 if(vo_fs) /*go to windowed*/
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1179 {
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
1180 vo_fs = 0;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1181 /*prevent the screen being filled with garbage*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1182 window_placement.showCmd = SW_SHOWMINIMIZED;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1183 SetWindowPlacement(hWnd,&window_placement);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1184 /*change style and restore the window*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1185 SetWindowLong(hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW|WS_SIZEBOX);
9488
abe81caa8cc1 fix fullscreenswitching patch by Joey Parrish <joey at nicewarrior.org>
faust3
parents: 9380
diff changeset
1186 window_placement.showCmd = SW_RESTORE;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1187 SetWindowPlacement(hWnd,&window_placement );
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1188 /*restore backgroundcolor*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1189 SetClassLongA(hWnd,GCL_HBRBACKGROUND,(int)CreateSolidBrush(windowcolor));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1190 /*never ever make a big window*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1191 if(((window_placement.rcNormalPosition.bottom - window_placement.rcNormalPosition.top)==GetSystemMetrics(SM_CYSCREEN))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1192 &&((window_placement.rcNormalPosition.right - window_placement.rcNormalPosition.left)==GetSystemMetrics(SM_CXSCREEN)))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1193 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1194 width = d_image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1195 height = d_image_height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1196 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1197 /*show cursor again*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1198 ShowCursor(TRUE);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1199 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1200 else /*go to fullscreen*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1201 {
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
1202 vo_fs = 1;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1203 /*remove decoration and maximize*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1204 SetWindowLong(hWnd,GWL_STYLE,0);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1205 window_placement.showCmd = SW_SHOWMAXIMIZED;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1206 SetWindowPlacement(hWnd,&window_placement);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1207 /*make the window really black*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1208 SetClassLongA(hWnd,GCL_HBRBACKGROUND,(int)CreateSolidBrush(RGB(0,0,0)));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1209 /*hide mouse cursor in fullscreen mode*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1210 if(ShowCursor(FALSE)<0);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1211 else while(ShowCursor(FALSE)>=0)mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx>ShowCursor(FALSE)>=0\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1212 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1213 RedrawWindow(hWnd,NULL,NULL,RDW_INVALIDATE|RDW_ERASE|RDW_INTERNALPAINT);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1214 Directx_ManageDisplay(width,height);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1215 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1216 return VO_TRUE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1217 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1218 };
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1219 return VO_NOTIMPL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1220 }