annotate libvo/vo_directx.c @ 15344:6a7adf41e4fe

Support for new vssh dll, patch by adland Use new dll only for new files, it can't decode old files (patch by me)
author rtognimp
date Wed, 04 May 2005 20:35:21 +0000
parents f9b417d4a18a
children 3d26652b8d29
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
14400
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
3 * Copyright (c) 2002 - 2005 Sascha Sommer <saschasommer@freenet.de>.
7537
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>
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
24 #include <stdio.h>
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
25 #include <stdlib.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
26 #include <errno.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
27 #include "config.h"
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
28 #include "video_out.h"
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
29 #include "video_out_internal.h"
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
30 #include "fastmemcpy.h"
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 13775
diff changeset
31 #include "input/input.h"
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 13775
diff changeset
32 #include "osdep/keycodes.h"
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 13775
diff changeset
33 #include "input/mouse.h"
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 13775
diff changeset
34 #include "mp_msg.h"
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
35 #include "aspect.h"
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
36 #include "geometry.h"
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
37
13157
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
38 #ifndef WM_XBUTTONDOWN
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
39 # define WM_XBUTTONDOWN 0x020B
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
40 # define WM_XBUTTONUP 0x020C
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
41 # define WM_XBUTTONDBLCLK 0x020D
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
42 #endif
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
43
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
44 static LPDIRECTDRAWCOLORCONTROL g_cc = NULL; //color control interface
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
45 static LPDIRECTDRAW7 g_lpdd = NULL; //DirectDraw Object
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
46 static LPDIRECTDRAWSURFACE7 g_lpddsPrimary = NULL; //Primary Surface: viewport through the Desktop
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
47 static LPDIRECTDRAWSURFACE7 g_lpddsOverlay = NULL; //Overlay Surface
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
48 static LPDIRECTDRAWSURFACE7 g_lpddsBack = NULL; //Back surface
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
49 static LPDIRECTDRAWCLIPPER g_lpddclipper; //clipper object, can only be used without overlay
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
50 static DDSURFACEDESC2 ddsdsf; //surface descripiton needed for locking
7778
f804db78f704 10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents: 7713
diff changeset
51 static HINSTANCE hddraw_dll; //handle to ddraw.dll
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
52 static RECT rd; //rect of our stretched image
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
53 static RECT rs; //rect of our source image
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
54 static HWND hWnd=NULL; //handle to the window
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
55 static HWND hWndFS=NULL; //fullscreen window
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
56 static uint32_t image_width, image_height; //image width and height
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
57 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
58 static uint8_t *image=NULL; //image data
10640
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
59 static uint32_t image_format=0; //image format
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
60 static uint32_t primary_image_format;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
61 static uint32_t vm_height=0;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
62 static uint32_t vm_width=0;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
63 static uint32_t vm_bpp=0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
64 static uint32_t dstride; //surface stride
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
65 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
66 static DWORD destcolorkey; //colorkey for our surface
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
67 static COLORREF windowcolor = RGB(0,0,16); //windowcolor == colorkey
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
68 static int adapter_count=0;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
69 static GUID selected_guid;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
70 static GUID *selected_guid_ptr = NULL;
13775
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
71 static RECT monitor_rect; //monitor coordinates
12387
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
72 static float window_aspect;
14253
6c9f27a5ea02 win95 does not support GetMonitorInfo
faust3
parents: 14223
diff changeset
73 static BOOL (WINAPI* myGetMonitorInfo)(HMONITOR, LPMONITORINFO) = NULL;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
74
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
75 extern void mplayer_put_key(int code); //let mplayer handel the keyevents
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
76 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
77 extern int vo_doublebuffering; //tribblebuffering
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
78 extern int vo_fs;
11061
3cf2c7f8d9a9 yet another hack to prevent crashes with dr
faust3
parents: 11000
diff changeset
79 extern int vo_directrendering;
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11510
diff changeset
80 extern int vo_ontop;
13090
0c37bcfc5ef0 added -rootwin support to vo_directx
joey
parents: 12861
diff changeset
81 extern int vo_rootwin;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
82 extern int vidmode;
14205
87148f636da2 added colorkey support for vo_directx.
joey
parents: 13787
diff changeset
83 extern int vo_colorkey;
14207
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
84 extern int WinID;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
85
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
86 /*****************************************************************************
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
87 * DirectDraw GUIDs.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
88 * 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
89 * the linking stage.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
90 *****************************************************************************/
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
91 static const GUID IID_IDirectDraw7 =
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
92 {
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
93 0x15e65ec0,0x3b9c,0x11d2,{0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b}
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
94 };
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
95
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
96 static const GUID IID_IDirectDrawColorControl =
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
97 {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
98 0x4b9f0ee0,0x0d7e,0x11d0,{0x9b,0x06,0x00,0xa0,0xc9,0x03,0xa3,0xb8}
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
99 };
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
100
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
101
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
102 typedef struct directx_fourcc_caps
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 char* img_format_name; //human readable name
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
105 uint32_t img_format; //as MPlayer image format
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
106 uint32_t drv_caps; //what hw supports with this format
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
107 DDPIXELFORMAT g_ddpfOverlay; //as Directx Sourface description
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
108 } directx_fourcc_caps;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
109
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
110
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
111 static directx_fourcc_caps g_ddpf[] =
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
112 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
113 {"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
114 {"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
115 {"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
116 {"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
117 {"YUY2 ",IMGFMT_YUY2 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','U','Y','2'),0,0,0,0,0}},
12387
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
118 {"UYVY ",IMGFMT_UYVY ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('U','Y','V','Y'),0,0,0,0,0}},
14400
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
119 {"BGR8 ",IMGFMT_BGR8 ,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 8, 0x00000000, 0x00000000, 0x00000000, 0}},
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
120 {"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
121 {"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
122 {"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
123 {"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
124 {"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
125 {"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
126 {"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
127 {"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
128 };
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
129 #define NUM_FORMATS (sizeof(g_ddpf) / sizeof(g_ddpf[0]))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
130
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7778
diff changeset
131 static vo_info_t info =
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
132 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
133 "Directx DDraw YUV/RGB/BGR renderer",
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
134 "directx",
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
135 "Sascha Sommer <saschasommer@freenet.de>",
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
136 ""
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
137 };
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
138
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7778
diff changeset
139 LIBVO_EXTERN(directx)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
140
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
141 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
142 unsigned char *srca, int stride)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
143 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
144 switch(image_format) {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
145 case IMGFMT_YV12 :
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
146 case IMGFMT_I420 :
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
147 case IMGFMT_IYUV :
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
148 case IMGFMT_YVU9 :
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
149 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
150 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
151 case IMGFMT_YUY2 :
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
152 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
153 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
154 case IMGFMT_UYVY :
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
155 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
156 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
157 case IMGFMT_RGB15:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
158 case IMGFMT_BGR15:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
159 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
160 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
161 case IMGFMT_RGB16:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
162 case IMGFMT_BGR16:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
163 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
164 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
165 case IMGFMT_RGB24:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
166 case IMGFMT_BGR24:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
167 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
168 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
169 case IMGFMT_RGB32:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
170 case IMGFMT_BGR32:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
171 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
172 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
173 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
174 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
175
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
176 static void draw_osd(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
177 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
178 vo_draw_text(image_width,image_height,draw_alpha);
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
181 static uint32_t
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
182 query_format(uint32_t format)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
183 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
184 uint32_t i=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
185 while ( i < NUM_FORMATS )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
186 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
187 if (g_ddpf[i].img_format == format)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
188 return g_ddpf[i].drv_caps;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
189 i++;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
190 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
191 return 0;
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
194 static uint32_t Directx_CreatePrimarySurface()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
195 {
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
196 DDSURFACEDESC2 ddsd;
7537
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_lpddsPrimary)g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
199 g_lpddsPrimary=NULL;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
200
12021
cd33d1e3b709 move refreshrate and adapter_num variables to video_out because they might be usefull for other drivers, too
faust3
parents: 12020
diff changeset
201 if(vidmode)g_lpdd->lpVtbl->SetDisplayMode(g_lpdd,vm_width,vm_height,vm_bpp,vo_refresh_rate,0);
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
202 ZeroMemory(&ddsd, sizeof(ddsd));
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
203 ddsd.dwSize = sizeof(ddsd);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
204 //set flags and create a primary surface.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
205 ddsd.dwFlags = DDSD_CAPS;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
206 ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
207 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
208 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
209 else
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
210 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
211 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
212 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
213 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
214 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
215 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
216
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
217 static uint32_t Directx_CreateOverlay(uint32_t imgfmt)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
218 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
219 HRESULT ddrval;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
220 DDSURFACEDESC2 ddsdOverlay;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
221 uint32_t i=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
222 while ( i < NUM_FORMATS +1 && imgfmt != g_ddpf[i].img_format)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
223 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
224 i++;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
225 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
226 if (!g_lpdd || !g_lpddsPrimary)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
227 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
228 //cleanup
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
229 if (g_lpddsOverlay)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
230 if (g_lpddsBack)g_lpddsBack->lpVtbl->Release(g_lpddsBack);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
231 g_lpddsOverlay= NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
232 g_lpddsBack = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
233 //create our overlay
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
234 ZeroMemory(&ddsdOverlay, sizeof(ddsdOverlay));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
235 ddsdOverlay.dwSize = sizeof(ddsdOverlay);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
236 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_FLIP | DDSCAPS_COMPLEX | DDSCAPS_VIDEOMEMORY;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
237 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_BACKBUFFERCOUNT| DDSD_PIXELFORMAT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
238 ddsdOverlay.dwWidth=image_width;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
239 ddsdOverlay.dwHeight=image_height;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
240 ddsdOverlay.dwBackBufferCount=2;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
241 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
242 if(vo_doublebuffering) //tribblebuffering
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
243 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
244 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
245 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
246 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
247 //get the surface directly attached to the primary (the back buffer)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
248 ddsdOverlay.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
249 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
250 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
251 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
252 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
253 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
254 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
255 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
256 vo_doublebuffering=0; //disable tribblebuffering
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
257 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
258 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
259 //single buffer
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
260 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
261 ddsdOverlay.dwBackBufferCount=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
262 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
263 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
264 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
265 // try to create the overlay surface
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
266 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
267 if(ddrval != DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
268 {
10640
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
269 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
270 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
271 switch(ddrval)
7537
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 case DDERR_INCOMPATIBLEPRIMARY:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
274 {mp_msg(MSGT_VO, MSGL_ERR,"incompatible primary surface\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
275 case DDERR_INVALIDCAPS:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
276 {mp_msg(MSGT_VO, MSGL_ERR,"invalid caps\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
277 case DDERR_INVALIDOBJECT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
278 {mp_msg(MSGT_VO, MSGL_ERR,"invalid object\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
279 case DDERR_INVALIDPARAMS:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
280 {mp_msg(MSGT_VO, MSGL_ERR,"invalid parameters\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
281 case DDERR_NODIRECTDRAWHW:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
282 {mp_msg(MSGT_VO, MSGL_ERR,"no directdraw hardware\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
283 case DDERR_NOEMULATION:
11000
6e35326c742f many small typo and grammar fixes
gabucino
parents: 10900
diff changeset
284 {mp_msg(MSGT_VO, MSGL_ERR,"can't emulate\n");break;}
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
285 case DDERR_NOFLIPHW:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
286 {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
287 case DDERR_NOOVERLAYHW:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
288 {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
289 case DDERR_OUTOFMEMORY:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
290 {mp_msg(MSGT_VO, MSGL_ERR,"not enough system memory\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
291 case DDERR_UNSUPPORTEDMODE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
292 {mp_msg(MSGT_VO, MSGL_ERR,"unsupported mode\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
293 case DDERR_OUTOFVIDEOMEMORY:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
294 {mp_msg(MSGT_VO, MSGL_ERR,"not enough video memory\n");break;}
12156
ff9f315741a7 print at least the error number when there is no text for it
faust3
parents: 12021
diff changeset
295 default:
ff9f315741a7 print at least the error number when there is no text for it
faust3
parents: 12021
diff changeset
296 mp_msg(MSGT_VO, MSGL_ERR,"create surface failed with 0x%x\n",ddrval);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
297 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
298 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
299 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
300 g_lpddsBack = g_lpddsOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
301 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
302 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
303
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
304 static uint32_t Directx_CreateBackpuffer()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
305 {
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
306 DDSURFACEDESC2 ddsd;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
307 //cleanup
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
308 if (g_lpddsBack)g_lpddsBack->lpVtbl->Release(g_lpddsBack);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
309 g_lpddsBack=NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
310 ZeroMemory(&ddsd, sizeof(ddsd));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
311 ddsd.dwSize = sizeof(ddsd);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
312 ddsd.ddsCaps.dwCaps= DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
313 ddsd.dwFlags= DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
314 ddsd.dwWidth=image_width;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
315 ddsd.dwHeight=image_height;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
316 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
317 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
318 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
319 return 1;
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 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>backbuffer created\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
322 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
323 }
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 static void uninit(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
326 {
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
327 if (g_cc != NULL)
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
328 {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
329 g_cc->lpVtbl->Release(g_cc);
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
330 }
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
331 g_cc=NULL;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
332 if (g_lpddclipper != NULL) g_lpddclipper->lpVtbl->Release(g_lpddclipper);
9619
faust3
parents: 9488
diff changeset
333 g_lpddclipper = NULL;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
334 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>clipper released\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
335 if (g_lpddsBack != NULL) g_lpddsBack->lpVtbl->Release(g_lpddsBack);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
336 g_lpddsBack = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
337 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
338 if(vo_doublebuffering && !nooverlay)
7537
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 if (g_lpddsOverlay != NULL)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
341 g_lpddsOverlay = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
342 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
343 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
344 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
345 g_lpddsPrimary = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
346 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>primary released\n");
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
347 if(hWndFS)DestroyWindow(hWndFS);
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
348 if(hWnd != NULL)DestroyWindow(hWnd);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
349 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>window destroyed\n");
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
350 if (g_lpdd != NULL){
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
351 if(vidmode)g_lpdd->lpVtbl->RestoreDisplayMode(g_lpdd);
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
352 g_lpdd->lpVtbl->Release(g_lpdd);
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
353 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
354 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
355 FreeLibrary( hddraw_dll);
f804db78f704 10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents: 7713
diff changeset
356 hddraw_dll= NULL;
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>ddraw.dll freed\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
358 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>uninited\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
359 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
360
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
361 static BOOL WINAPI EnumCallbackEx(GUID FAR *lpGUID, LPSTR lpDriverDescription, LPSTR lpDriverName, LPVOID lpContext, HMONITOR hm)
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
362 {
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
363 mp_msg(MSGT_VO, MSGL_INFO ,"<vo_directx> adapter %d: ", adapter_count);
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
364
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
365 if (!lpGUID)
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
366 {
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
367 mp_msg(MSGT_VO, MSGL_INFO ,"%s", "Primary Display Adapter");
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
368 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
369 else
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
370 {
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
371 mp_msg(MSGT_VO, MSGL_INFO ,"%s", lpDriverDescription);
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
372 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
373
12021
cd33d1e3b709 move refreshrate and adapter_num variables to video_out because they might be usefull for other drivers, too
faust3
parents: 12020
diff changeset
374 if(adapter_count == vo_adapter_num){
13775
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
375 MONITORINFO mi;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
376 if (!lpGUID)
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
377 selected_guid_ptr = NULL;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
378 else
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
379 {
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
380 selected_guid = *lpGUID;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
381 selected_guid_ptr = &selected_guid;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
382 }
13775
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
383 mi.cbSize = sizeof(mi);
14302
9929eafe6be5 win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents: 14253
diff changeset
384
14253
6c9f27a5ea02 win95 does not support GetMonitorInfo
faust3
parents: 14223
diff changeset
385 if (myGetMonitorInfo(hm, &mi)) {
13775
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
386 monitor_rect = mi.rcMonitor;
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
387 }
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
388 mp_msg(MSGT_VO, MSGL_INFO ,"\t\t<--");
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
389 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
390 mp_msg(MSGT_VO, MSGL_INFO ,"\n");
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
391
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
392 adapter_count++;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
393
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
394 return 1; // list all adapters
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
395 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
396
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
397 static uint32_t Directx_InitDirectDraw()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
398 {
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
399 HRESULT (WINAPI *OurDirectDrawCreateEx)(GUID *,LPVOID *, REFIID,IUnknown FAR *);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
400 LPDIRECTDRAW lpDDraw;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
401 DDSURFACEDESC2 ddsd;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
402 LPDIRECTDRAWENUMERATEEX OurDirectDrawEnumerateEx;
14253
6c9f27a5ea02 win95 does not support GetMonitorInfo
faust3
parents: 14223
diff changeset
403 HINSTANCE user32dll=LoadLibrary("user32.dll");
6c9f27a5ea02 win95 does not support GetMonitorInfo
faust3
parents: 14223
diff changeset
404
6c9f27a5ea02 win95 does not support GetMonitorInfo
faust3
parents: 14223
diff changeset
405 if(user32dll){
14302
9929eafe6be5 win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents: 14253
diff changeset
406 myGetMonitorInfo=GetProcAddress(user32dll,"GetMonitorInfoA");
9929eafe6be5 win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents: 14253
diff changeset
407 if(!myGetMonitorInfo && vo_adapter_num){
9929eafe6be5 win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents: 14253
diff changeset
408 mp_msg(MSGT_VO, MSGL_ERR, "<vo_directx> -adapter is not supported on Win95\n");
9929eafe6be5 win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents: 14253
diff changeset
409 vo_adapter_num = 0;
9929eafe6be5 win95 fix fix by Rune Petersen <rune.mail-list at mail.tele.dk>
faust3
parents: 14253
diff changeset
410 }
14253
6c9f27a5ea02 win95 does not support GetMonitorInfo
faust3
parents: 14223
diff changeset
411 }
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
412
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
413 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>Initing DirectDraw\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
414
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
415 //load direct draw DLL: based on videolans code
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
416 hddraw_dll = LoadLibrary("DDRAW.DLL");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
417 if( hddraw_dll == NULL )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
418 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
419 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
420 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
421 }
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
422
12021
cd33d1e3b709 move refreshrate and adapter_num variables to video_out because they might be usefull for other drivers, too
faust3
parents: 12020
diff changeset
423 if(vo_adapter_num){ //display other than default
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
424 OurDirectDrawEnumerateEx = (LPDIRECTDRAWENUMERATEEX) GetProcAddress(hddraw_dll,"DirectDrawEnumerateExA");
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
425 if (!OurDirectDrawEnumerateEx){
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
426 FreeLibrary( hddraw_dll );
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
427 hddraw_dll = NULL;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
428 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>failed geting proc address: DirectDrawEnumerateEx\n");
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
429 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>no directx 7 or higher installed\n");
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
430 return 1;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
431 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
432
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
433 // enumerate all display devices attached to the desktop
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
434 OurDirectDrawEnumerateEx(EnumCallbackEx, NULL, DDENUM_ATTACHEDSECONDARYDEVICES );
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
435
12021
cd33d1e3b709 move refreshrate and adapter_num variables to video_out because they might be usefull for other drivers, too
faust3
parents: 12020
diff changeset
436 if(vo_adapter_num >= adapter_count)
cd33d1e3b709 move refreshrate and adapter_num variables to video_out because they might be usefull for other drivers, too
faust3
parents: 12020
diff changeset
437 mp_msg(MSGT_VO, MSGL_ERR,"Selected adapter (%d) doesn't exist: Default Display Adapter selected\n",vo_adapter_num);
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
438 }
14253
6c9f27a5ea02 win95 does not support GetMonitorInfo
faust3
parents: 14223
diff changeset
439 FreeLibrary(user32dll);
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
440
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
441 OurDirectDrawCreateEx = (void *)GetProcAddress(hddraw_dll, "DirectDrawCreateEx");
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
442 if ( OurDirectDrawCreateEx == NULL )
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
443 {
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
444 FreeLibrary( hddraw_dll );
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
445 hddraw_dll = NULL;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
446 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>failed geting proc address: DirectDrawCreateEx\n");
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
447 return 1;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
448 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
449
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
450 // initialize DirectDraw and create directx v7 object
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
451 if (OurDirectDrawCreateEx(selected_guid_ptr, (VOID**)&g_lpdd, &IID_IDirectDraw7, NULL ) != DD_OK )
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
452 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
453 FreeLibrary( hddraw_dll );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
454 hddraw_dll = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
455 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
456 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
457 }
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
458
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
459 //get current screen siz for selected monitor ...
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
460 ddsd.dwSize=sizeof(ddsd);
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
461 ddsd.dwFlags=DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
462 g_lpdd->lpVtbl->GetDisplayMode(g_lpdd, &ddsd);
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
463 if(vo_screenwidth && vo_screenheight)
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
464 {
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
465 vm_height=vo_screenheight;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
466 vm_width=vo_screenwidth;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
467 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
468 else
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
469 {
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
470 vm_height=ddsd.dwHeight;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
471 vm_width=ddsd.dwWidth;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
472 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
473
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
474
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
475 if(vo_dbpp)vm_bpp=vo_dbpp;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
476 else vm_bpp=ddsd.ddpfPixelFormat.dwRGBBitCount;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
477
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
478 if(vidmode){
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
479 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, hWnd, DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN) != DD_OK)
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
480 {
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
481 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't set cooperativelevel for exclusive mode\n");
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
482 return 1;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
483 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
484 /*SetDisplayMode(ddobject,width,height,bpp,refreshrate,aditionalflags)*/
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
485 if(g_lpdd->lpVtbl->SetDisplayMode(g_lpdd,vm_width, vm_height, vm_bpp,0,0) != DD_OK)
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
486 {
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
487 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't set displaymode\n");
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
488 return 1;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
489 }
12021
cd33d1e3b709 move refreshrate and adapter_num variables to video_out because they might be usefull for other drivers, too
faust3
parents: 12020
diff changeset
490 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>Inited adapter %i for %i x %i @ %i \n",vo_adapter_num,vm_width,vm_height,vm_bpp);
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
491 return 0;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
492 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
493 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, hWnd, DDSCL_NORMAL) != DD_OK) // or DDSCL_SETFOCUSWINDOW
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
494 {
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
495 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
496 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
497 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
498 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>DirectDraw Inited\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
499 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
500 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
501
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
502 static void check_events(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
503 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
504 MSG msg;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
505 while (PeekMessage(&msg, NULL, 0, 0,PM_REMOVE))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
506 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
507 TranslateMessage(&msg);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
508 DispatchMessage(&msg);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
509 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
510 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
511
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
512 static uint32_t Directx_ManageDisplay()
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
513 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
514 HRESULT ddrval;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
515 DDCAPS capsDrv;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
516 DDOVERLAYFX ovfx;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
517 DWORD dwUpdateFlags=0;
12387
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
518 int width,height;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
519
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
520 if(vo_fs || vidmode){
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
521 aspect(&width,&height,A_ZOOM);
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
522 rd.left=(vo_screenwidth-width)/2;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
523 rd.top=(vo_screenheight-height)/2;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
524 if(ShowCursor(FALSE)>=0)while(ShowCursor(FALSE)>=0){}
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
525 }
14207
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
526 else if (WinID != -1 && vo_geometry) {
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
527 POINT pt;
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
528 pt.x = vo_dx;
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
529 pt.y = vo_dy;
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
530 ClientToScreen(hWnd,&pt);
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
531 width=d_image_width;
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
532 height=d_image_height;
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
533 rd.left = pt.x;
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
534 rd.top = pt.y;
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
535 while(ShowCursor(TRUE)<=0){}
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
536 }
12387
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
537 else {
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
538 POINT pt;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
539 pt.x = 0; //overlayposition relative to the window
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
540 pt.y = 0;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
541 ClientToScreen(hWnd,&pt);
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
542 GetClientRect(hWnd, &rd);
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
543 width=rd.right - rd.left;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
544 height=rd.bottom - rd.top;
13775
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
545 pt.x -= monitor_rect.left; /* move coordinates from global to local monitor space */
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
546 pt.y -= monitor_rect.top;
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
547 rd.right -= monitor_rect.left;
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
548 rd.bottom -= monitor_rect.top;
12387
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
549 rd.left = pt.x;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
550 rd.top = pt.y;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
551 if(!nooverlay && (!width || !height)){
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
552 /*window is minimized*/
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
553 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,NULL, g_lpddsPrimary, NULL, DDOVER_HIDE, NULL);
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
554 return 0;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
555 }
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
556 if(vo_keepaspect){
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
557 int tmpheight=((float)width/window_aspect);
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
558 tmpheight+=tmpheight%2;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
559 if(tmpheight > height){
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
560 width=((float)height*window_aspect);
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
561 width+=width%2;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
562 }
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
563 else height=tmpheight;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
564 }
12485
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
565 while(ShowCursor(TRUE)<=0){}
12387
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
566 }
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
567 rd.right=rd.left+width;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
568 rd.bottom=rd.top+height;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
569
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
570 /*ok, let's workaround some overlay limitations*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
571 if(!nooverlay)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
572 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
573 uint32_t uStretchFactor1000; //minimum stretch
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
574 uint32_t xstretch1000,ystretch1000;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
575 /*get driver capabilities*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
576 ZeroMemory(&capsDrv, sizeof(capsDrv));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
577 capsDrv.dwSize = sizeof(capsDrv);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
578 if(g_lpdd->lpVtbl->GetCaps(g_lpdd,&capsDrv, NULL) != DD_OK)return 1;
12485
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
579 /*get minimum stretch, depends on display adaptor and mode (refresh rate!) */
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
580 uStretchFactor1000 = capsDrv.dwMinOverlayStretch>1000 ? capsDrv.dwMinOverlayStretch : 1000;
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
581 rd.right = ((width+rd.left)*uStretchFactor1000+999)/1000;
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
582 rd.bottom = (height+rd.top)*uStretchFactor1000/1000;
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
583 /*calculate xstretch1000 and ystretch1000*/
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
584 xstretch1000 = ((rd.right - rd.left)* 1000)/image_width ;
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
585 ystretch1000 = ((rd.bottom - rd.top)* 1000)/image_height;
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
586 rs.left=0;
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
587 rs.right=image_width;
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
588 rs.top=0;
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
589 rs.bottom=image_height;
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
590 if(rd.left < 0)rs.left=(-rd.left*1000)/xstretch1000;
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
591 if(rd.top < 0)rs.top=(-rd.top*1000)/ystretch1000;
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
592 if(rd.right > vo_screenwidth)rs.right=((vo_screenwidth-rd.left)*1000)/xstretch1000;
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
593 if(rd.bottom > vo_screenheight)rs.bottom=((vo_screenheight-rd.top)*1000)/ystretch1000;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
594 /*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
595 if((width < image_width)&& !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKX))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
596 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
597 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
598 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't shrink x\n");
12387
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
599 rd.right=rd.left+image_width;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
600 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
601 else if((width > image_width)&& !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHX))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
602 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
603 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
604 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't stretch x\n");
12387
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
605 rd.right = rd.left+image_width;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
606 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
607 if((height < image_height) && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKY))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
608 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
609 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
610 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't shrink y\n");
12387
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
611 rd.bottom = rd.top + image_height;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
612 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
613 else if((height > image_height ) && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHY))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
614 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
615 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
616 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't stretch y\n");
12387
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
617 rd.bottom = rd.top + image_height;
12485
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
618 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
619 /*the last thing to check are alignment restrictions
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
620 these expressions (x & -y) just do alignment by dropping low order bits...
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
621 so to round up, we add first, then truncate*/
12387
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
622 if((capsDrv.dwCaps & DDCAPS_ALIGNBOUNDARYSRC) && capsDrv.dwAlignBoundarySrc)
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
623 rs.left = (rs.left + capsDrv.dwAlignBoundarySrc / 2) & -(signed)(capsDrv.dwAlignBoundarySrc);
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
624 if((capsDrv.dwCaps & DDCAPS_ALIGNSIZESRC) && capsDrv.dwAlignSizeSrc)
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
625 rs.right = rs.left + ((rs.right - rs.left + capsDrv.dwAlignSizeSrc / 2) & -(signed) (capsDrv.dwAlignSizeSrc));
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
626 if((capsDrv.dwCaps & DDCAPS_ALIGNBOUNDARYDEST) && capsDrv.dwAlignBoundaryDest)
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
627 rd.left = (rd.left + capsDrv.dwAlignBoundaryDest / 2) & -(signed)(capsDrv.dwAlignBoundaryDest);
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
628 if((capsDrv.dwCaps & DDCAPS_ALIGNSIZEDEST) && capsDrv.dwAlignSizeDest)
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
629 rd.right = rd.left + ((rd.right - rd.left) & -(signed) (capsDrv.dwAlignSizeDest));
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
630 /*create an overlay FX structure to specify a destination color key*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
631 ZeroMemory(&ovfx, sizeof(ovfx));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
632 ovfx.dwSize = sizeof(ovfx);
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
633 if(vo_fs||vidmode)
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
634 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
635 ovfx.dckDestColorkey.dwColorSpaceLowValue = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
636 ovfx.dckDestColorkey.dwColorSpaceHighValue = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
637 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
638 else
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
639 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
640 ovfx.dckDestColorkey.dwColorSpaceLowValue = destcolorkey;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
641 ovfx.dckDestColorkey.dwColorSpaceHighValue = destcolorkey;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
642 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
643 // 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
644 dwUpdateFlags = DDOVER_SHOW | DDOVER_DDFX;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
645 /*if hardware can't do colorkeying set the window on top*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
646 if(capsDrv.dwCKeyCaps & DDCKEYCAPS_DESTOVERLAY) dwUpdateFlags |= DDOVER_KEYDESTOVERRIDE;
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11510
diff changeset
647 else vo_ontop = 1;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
648 }
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
649 else
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
650 {
13110
19a1253b2ff1 vm window handling fixes
faust3
parents: 13091
diff changeset
651 g_lpddclipper->lpVtbl->SetHWnd(g_lpddclipper, 0,(vo_fs && !vidmode)?hWndFS: hWnd);
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
652 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
653
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
654 if(!vidmode && !vo_fs){
14207
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
655 if(WinID == -1) {
12387
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
656 RECT rdw=rd;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
657 AdjustWindowRect(&rdw,WS_OVERLAPPEDWINDOW|WS_SIZEBOX,FALSE);
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
658 // printf("window: %i %i %ix%i\n",rdw.left,rdw.top,rdw.right - rdw.left,rdw.bottom - rdw.top);
13775
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
659 rdw.left += monitor_rect.left; /* move to global coordinate space */
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
660 rdw.top += monitor_rect.top;
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
661 rdw.right += monitor_rect.left;
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
662 rdw.bottom += monitor_rect.top;
13090
0c37bcfc5ef0 added -rootwin support to vo_directx
joey
parents: 12861
diff changeset
663 SetWindowPos(hWnd,(vo_ontop)?HWND_TOPMOST:(vo_rootwin?HWND_BOTTOM:HWND_NOTOPMOST),rdw.left,rdw.top,rdw.right-rdw.left,rdw.bottom-rdw.top,SWP_NOOWNERZORDER);
14207
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
664 }
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
665 }
13110
19a1253b2ff1 vm window handling fixes
faust3
parents: 13091
diff changeset
666 else SetWindowPos(vidmode?hWnd:hWndFS,vo_rootwin?HWND_BOTTOM:HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOOWNERZORDER);
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
667
12387
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
668 /*make sure the overlay is inside the screen*/
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
669 if(rd.left<0)rd.left=0;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
670 if(rd.right>vo_screenwidth)rd.right=vo_screenwidth;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
671 if(rd.top<0)rd.top=0;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
672 if(rd.bottom>vo_screenheight)rd.bottom=vo_screenheight;
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
673
14207
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
674 /*for nonoverlay mode we are finished, for overlay mode we have to display the overlay first*/
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
675 if(nooverlay)return 0;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
676
12387
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
677 // printf("overlay: %i %i %ix%i\n",rd.left,rd.top,rd.right - rd.left,rd.bottom - rd.top);
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
678 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
679 if(FAILED(ddrval))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
680 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
681 // one cause might be the driver lied about minimum stretch
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
682 // we should try upping the destination size a bit, or
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
683 // perhaps shrinking the source size
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
684 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>UpdateOverlay failed\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
685 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
686 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
687 switch (ddrval)
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 case DDERR_NOSTRETCHHW:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
690 {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
691 case DDERR_INVALIDRECT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
692 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid rectangle\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
693 case DDERR_INVALIDPARAMS:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
694 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid parameters\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
695 case DDERR_HEIGHTALIGN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
696 {mp_msg(MSGT_VO, MSGL_ERR ,"height align\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
697 case DDERR_XALIGN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
698 {mp_msg(MSGT_VO, MSGL_ERR ,"x align\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
699 case DDERR_UNSUPPORTED:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
700 {mp_msg(MSGT_VO, MSGL_ERR ,"unsupported\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
701 case DDERR_INVALIDSURFACETYPE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
702 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid surfacetype\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
703 case DDERR_INVALIDOBJECT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
704 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid object\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
705 case DDERR_SURFACELOST:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
706 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
707 mp_msg(MSGT_VO, MSGL_ERR ,"surfaces lost\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
708 g_lpddsOverlay->lpVtbl->Restore( g_lpddsOverlay ); //restore and try again
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
709 g_lpddsPrimary->lpVtbl->Restore( g_lpddsPrimary );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
710 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
711 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
712 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
713 }
12156
ff9f315741a7 print at least the error number when there is no text for it
faust3
parents: 12021
diff changeset
714 default:
ff9f315741a7 print at least the error number when there is no text for it
faust3
parents: 12021
diff changeset
715 mp_msg(MSGT_VO, MSGL_ERR ," 0x%x\n",ddrval);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
716 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
717 /*ok we can't do anything about it -> hide overlay*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
718 if(ddrval != DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
719 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
720 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
721 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
722 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
723 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
724 return 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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
727 //find out supported overlay pixelformats
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
728 static uint32_t Directx_CheckOverlayPixelformats()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
729 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
730 DDCAPS capsDrv;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
731 HRESULT ddrval;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
732 DDSURFACEDESC2 ddsdOverlay;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
733 uint32_t i;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
734 uint32_t formatcount = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
735 //get driver caps to determine overlay support
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
736 ZeroMemory(&capsDrv, sizeof(capsDrv));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
737 capsDrv.dwSize = sizeof(capsDrv);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
738 ddrval = g_lpdd->lpVtbl->GetCaps(g_lpdd,&capsDrv, NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
739 if (FAILED(ddrval))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
740 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
741 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
742 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
743 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
744 if (!(capsDrv.dwCaps & DDCAPS_OVERLAY))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
745 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
746 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
747 return 1;
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 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
750 //it is not possible to query for pixel formats supported by the
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
751 //overlay hardware: try out various formats till one works
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
752 ZeroMemory(&ddsdOverlay, sizeof(ddsdOverlay));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
753 ddsdOverlay.dwSize = sizeof(ddsdOverlay);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
754 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
755 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH| DDSD_PIXELFORMAT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
756 ddsdOverlay.dwWidth=300;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
757 ddsdOverlay.dwHeight=280;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
758 ddsdOverlay.dwBackBufferCount=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
759 //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
760 i=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
761 do
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
762 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
763 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
764 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
765 if (ddrval == DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
766 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
767 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
768 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
769 formatcount++;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
770 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
771 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
772 } while( ++i < NUM_FORMATS );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
773 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
774 if (formatcount == 0)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
775 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
776 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
777 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
778 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
779 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
780 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
781 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
782 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
783 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
784 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
785 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
786 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
787
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
788 //find out the Pixelformat of the Primary Surface
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
789 static uint32_t Directx_CheckPrimaryPixelformat()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
790 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
791 uint32_t i=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
792 uint32_t formatcount = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
793 DDPIXELFORMAT ddpf;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
794 DDSURFACEDESC2 ddsd;
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
795 HDC hdc;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
796 HRESULT hres;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
797 COLORREF rgbT=RGB(0,0,0);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
798 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
799 memset( &ddpf, 0, sizeof( DDPIXELFORMAT ));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
800 ddpf.dwSize = sizeof( DDPIXELFORMAT );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
801 //we have to create a primary surface first
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
802 if(Directx_CreatePrimarySurface()!=0)return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
803 if(g_lpddsPrimary->lpVtbl->GetPixelFormat( g_lpddsPrimary, &ddpf ) != DD_OK )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
804 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
805 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
806 return 1;
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 while ( i < NUM_FORMATS )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
809 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
810 if (g_ddpf[i].g_ddpfOverlay.dwRGBBitCount == ddpf.dwRGBBitCount)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
811 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
812 if (g_ddpf[i].g_ddpfOverlay.dwRBitMask == ddpf.dwRBitMask)
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 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
815 g_ddpf[i].drv_caps = VFCAP_CSP_SUPPORTED |VFCAP_OSD;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
816 formatcount++;
10640
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
817 primary_image_format=g_ddpf[i].img_format;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
818 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
819 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
820 i++;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
821 }
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
822 //get the colorkey for overlay mode
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
823 destcolorkey = CLR_INVALID;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
824 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
825 {
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
826 rgbT = GetPixel(hdc, 0, 0);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
827 SetPixel(hdc, 0, 0, windowcolor);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
828 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary,hdc);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
829 }
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
830 // read back the converted color
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
831 ddsd.dwSize = sizeof(ddsd);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
832 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
833 ;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
834 if (hres == DD_OK)
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
835 {
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
836 destcolorkey = *(DWORD *) ddsd.lpSurface;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
837 if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32)
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
838 destcolorkey &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
839 g_lpddsPrimary->lpVtbl->Unlock(g_lpddsPrimary,NULL);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
840 }
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
841 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
842 {
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
843 SetPixel(hdc, 0, 0, rgbT);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
844 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary,hdc);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
845 }
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
846 //release primary
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
847 g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
848 g_lpddsPrimary = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
849 if(formatcount==0)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
850 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
851 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
852 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
853 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
854 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
855 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
856
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
857 //function handles input
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
858 static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
859 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
860 switch (message)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
861 {
12192
d16b2d48edd0 ignore mouseclicks when activating the window
faust3
parents: 12156
diff changeset
862 case WM_MOUSEACTIVATE:
d16b2d48edd0 ignore mouseclicks when activating the window
faust3
parents: 12156
diff changeset
863 return MA_ACTIVATEANDEAT;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
864 case WM_NCACTIVATE:
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
865 {
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
866 if(vidmode && adapter_count > 2) //only disable if more than one adapter.
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
867 return 0;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
868 break;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
869 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
870 case WM_DESTROY:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
871 {
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
872 PostQuitMessage(0);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
873 return 0;
7537
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 case WM_CLOSE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
876 {
11510
3638adcfdcbd send quit command instead of key 'q'.
joey
parents: 11061
diff changeset
877 mp_input_queue_cmd(mp_input_parse_cmd("quit"));
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
878 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
879 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
880 case WM_WINDOWPOSCHANGED:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
881 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
882 //printf("Windowposchange\n");
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
883 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
884 {
13775
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
885 Directx_ManageDisplay();
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
886 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
887 break;
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 case WM_SYSCOMMAND:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
890 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
891 switch (wParam)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
892 { //kill screensaver etc.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
893 //note: works only when the window is active
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
894 //you can workaround this by disabling the allow screensaver option in
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
895 //the link to the app
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
896 case SC_SCREENSAVE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
897 case SC_MONITORPOWER:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
898 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>killing screensaver\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
899 return 0;
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 case WM_KEYDOWN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
903 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
904 switch (wParam)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
905 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
906 case VK_LEFT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
907 {mplayer_put_key(KEY_LEFT);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
908 case VK_UP:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
909 {mplayer_put_key(KEY_UP);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
910 case VK_RIGHT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
911 {mplayer_put_key(KEY_RIGHT);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
912 case VK_DOWN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
913 {mplayer_put_key(KEY_DOWN);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
914 case VK_TAB:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
915 {mplayer_put_key(KEY_TAB);break;}
11510
3638adcfdcbd send quit command instead of key 'q'.
joey
parents: 11061
diff changeset
916 case VK_BACK:
3638adcfdcbd send quit command instead of key 'q'.
joey
parents: 11061
diff changeset
917 {mplayer_put_key(KEY_BS);break;}
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
918 case VK_DELETE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
919 {mplayer_put_key(KEY_DELETE);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
920 case VK_INSERT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
921 {mplayer_put_key(KEY_INSERT);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
922 case VK_HOME:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
923 {mplayer_put_key(KEY_HOME);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
924 case VK_END:
9894
3933e0ef000c 10l noticed by Joey Parrish <joey at nicewarrior.org>
faust3
parents: 9728
diff changeset
925 {mplayer_put_key(KEY_END);break;}
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
926 case VK_PRIOR:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
927 {mplayer_put_key(KEY_PAGE_UP);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
928 case VK_NEXT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
929 {mplayer_put_key(KEY_PAGE_DOWN);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
930 case VK_ESCAPE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
931 {mplayer_put_key(KEY_ESC);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
932 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
933 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
934 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
935 case WM_CHAR:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
936 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
937 mplayer_put_key(wParam);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
938 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
939 }
12020
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
940 case WM_LBUTTONDOWN:
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
941 {
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
942 if (!vo_nomouse_input)
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
943 mplayer_put_key(MOUSE_BTN0);
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
944 break;
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
945 }
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
946 case WM_MBUTTONDOWN:
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
947 {
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
948 if (!vo_nomouse_input)
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
949 mplayer_put_key(MOUSE_BTN1);
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
950 break;
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
951 }
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
952 case WM_RBUTTONDOWN:
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
953 {
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
954 if (!vo_nomouse_input)
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
955 mplayer_put_key(MOUSE_BTN2);
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
956 break;
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
957 }
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
958 case WM_MOUSEWHEEL:
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
959 {
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
960 if (vo_nomouse_input)
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
961 break;
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
962 int x = GET_WHEEL_DELTA_WPARAM(wParam);
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
963 if (x > 0)
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
964 mplayer_put_key(MOUSE_BTN3);
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
965 else
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
966 mplayer_put_key(MOUSE_BTN4);
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
967 break;
1604d07d3539 mouse support by Nehal Mistry <nehalmistry at gmx.net>
faust3
parents: 12005
diff changeset
968 }
13157
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
969 case WM_XBUTTONDOWN:
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
970 {
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
971 if (vo_nomouse_input)
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
972 break;
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
973 if (HIWORD(wParam) == 1)
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
974 mplayer_put_key(MOUSE_BTN5);
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
975 else
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
976 mplayer_put_key(MOUSE_BTN6);
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
977 break;
0d44af5bec83 added "xbutton" support for 4-5 button mice
joey
parents: 13110
diff changeset
978 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
979
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
980 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
981 return DefWindowProc(hWnd, message, wParam, lParam);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
982 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
983
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
984
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
985 static uint32_t preinit(const char *arg)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
986 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
987 HINSTANCE hInstance = GetModuleHandle(NULL);
9943
047436ae7143 load icon from executable
faust3
parents: 9894
diff changeset
988 HICON mplayericon=NULL;
047436ae7143 load icon from executable
faust3
parents: 9894
diff changeset
989 char exedir[MAX_PATH];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
990 WNDCLASS wc;
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
991 if(arg)
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
992 {
9488
abe81caa8cc1 fix fullscreenswitching patch by Joey Parrish <joey at nicewarrior.org>
faust3
parents: 9380
diff changeset
993 if(strstr(arg,"noaccel"))
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
994 {
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
995 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
996 nooverlay = 1;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
997 }
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
998 }
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
999 /*load icon from the main app*/
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1000 if(GetModuleFileName(NULL,exedir,MAX_PATH))
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1001 {
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1002 mplayericon = ExtractIcon( hInstance, exedir, 0 );
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1003 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1004 if(!mplayericon)mplayericon=LoadIcon(NULL,IDI_APPLICATION);
13775
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
1005 monitor_rect.right=GetSystemMetrics(SM_CXSCREEN);
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
1006 monitor_rect.bottom=GetSystemMetrics(SM_CYSCREEN);
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
1007
14205
87148f636da2 added colorkey support for vo_directx.
joey
parents: 13787
diff changeset
1008 windowcolor = vo_colorkey;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1009 wc.style = CS_HREDRAW | CS_VREDRAW;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1010 wc.lpfnWndProc = WndProc;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1011 wc.cbClsExtra = 0;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1012 wc.cbWndExtra = 0;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1013 wc.hInstance = hInstance;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1014 wc.hCursor = LoadCursor(NULL,IDC_ARROW);
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1015 wc.hIcon = mplayericon;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1016 wc.hbrBackground = CreateSolidBrush(vidmode?RGB(0,0,0):windowcolor);
12858
cbcc205a740e embarassing typo and new name
diego
parents: 12485
diff changeset
1017 wc.lpszClassName = "MPlayer - The Movie Player";
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1018 wc.lpszMenuName = NULL;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1019 RegisterClass(&wc);
14207
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
1020 if (WinID != -1) hWnd = WinID;
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
1021 else
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1022 hWnd = CreateWindowEx(vidmode?WS_EX_TOPMOST:0,
12861
88aba9a06162 name change
diego
parents: 12858
diff changeset
1023 "MPlayer - The Movie Player","",(vidmode)?WS_POPUP:WS_OVERLAPPEDWINDOW| WS_SIZEBOX,
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1024 CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,NULL,NULL,hInstance,NULL);
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1025 wc.hbrBackground = CreateSolidBrush(RGB(0,0,0));
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1026 wc.lpszClassName = "MPlayer - Fullscreen";
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1027 RegisterClass(&wc);
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1028
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1029 if (Directx_InitDirectDraw()!= 0)return 1; //init DirectDraw
13775
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
1030
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
1031 if(!vidmode)hWndFS = CreateWindow("MPlayer - Fullscreen","MPlayer Fullscreen",WS_POPUP,monitor_rect.left,monitor_rect.top,monitor_rect.right-monitor_rect.left,monitor_rect.bottom-monitor_rect.top,hWnd,NULL,hInstance,NULL);
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
1032 mp_msg(MSGT_VO, MSGL_DBG3 ,"<vo_directx><INFO>initial mplayer windows created\n");
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
1033
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1034 if (Directx_CheckPrimaryPixelformat()!=0)return 1;
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1035 if (!nooverlay && Directx_CheckOverlayPixelformats() == 0) //check for supported hardware
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1036 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1037 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
1038 nooverlay = 0;
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 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
1041 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1042 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>using backpuffer\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1043 nooverlay = 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1044 }
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1045 mp_msg(MSGT_VO, MSGL_DBG3 ,"<vo_directx><INFO>preinit succesfully finished\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1046 return 0;
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1049 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
1050 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1051 uint8_t *s;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1052 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
1053 uint32_t i=0, uvstride=dstride/2;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1054 // copy Y
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1055 d=image+dstride*y+x;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1056 s=src[0];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1057 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1058 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1059 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
1060 d+=dstride;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1061 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1062
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1063 w/=2;h/=2;x/=2;y/=2;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1064
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1065 // copy U
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
1066 d=image+dstride*image_height + uvstride*y+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1067 if(image_format == IMGFMT_YV12)s=src[2];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1068 else s=src[1];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1069 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1070 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1071 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
1072 d+=uvstride;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1073 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1074
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1075 // copy V
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
1076 d=image+dstride*image_height +uvstride*(image_height/2) + uvstride*y+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1077 if(image_format == IMGFMT_YV12)s=src[1];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1078 else s=src[2];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1079 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1080 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1081 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
1082 d+=uvstride;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1083 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1084 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1085 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1086
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1087 static void flip_page(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1088 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1089 HRESULT dxresult;
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1090 g_lpddsBack->lpVtbl->Unlock (g_lpddsBack,NULL);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1091 if (vo_doublebuffering)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1092 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1093 // flip to the next image in the sequence
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1094 dxresult = g_lpddsOverlay->lpVtbl->Flip( g_lpddsOverlay,NULL, DDFLIP_WAIT);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1095 if(dxresult == DDERR_SURFACELOST)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1096 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1097 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
1098 g_lpddsBack->lpVtbl->Restore( g_lpddsBack );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1099 dxresult = g_lpddsOverlay->lpVtbl->Flip( g_lpddsOverlay,NULL, DDFLIP_WAIT);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1100 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1101 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
1102 }
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
1103 if(nooverlay)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1104 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1105 DDBLTFX ddbltfx;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1106 // ask for the "NOTEARING" option
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1107 memset( &ddbltfx, 0, sizeof(DDBLTFX) );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1108 ddbltfx.dwSize = sizeof(DDBLTFX);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1109 ddbltfx.dwDDFX = DDBLTFX_NOTEARING;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1110 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
1111 }
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
1112 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
1113 if(vo_directrendering && (dstride != ddsdsf.lPitch)){
3cf2c7f8d9a9 yet another hack to prevent crashes with dr
faust3
parents: 11000
diff changeset
1114 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
1115 vo_directrendering=0;
3cf2c7f8d9a9 yet another hack to prevent crashes with dr
faust3
parents: 11000
diff changeset
1116 }
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
1117 dstride = ddsdsf.lPitch;
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
1118 image = ddsdsf.lpSurface;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1119 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1120
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1121 static uint32_t draw_frame(uint8_t *src[])
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1122 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1123 memcpy( image, *src, dstride * image_height );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1124 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1125 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1126
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1127 static uint32_t get_image(mp_image_t *mpi)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1128 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1129 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
1130 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
1131 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
1132 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1133 if(mpi->flags&MP_IMGFLAG_PLANAR)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1134 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1135 if(image_format == IMGFMT_YV12)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1136 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1137 mpi->planes[2]= image + dstride*image_height;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1138 mpi->planes[1]= image + dstride*image_height+ dstride*image_height/4;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1139 mpi->stride[1]=mpi->stride[2]=dstride/2;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1140 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1141 else if(image_format == IMGFMT_IYUV || image_format == IMGFMT_I420)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1142 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1143 mpi->planes[1]= image + dstride*image_height;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1144 mpi->planes[2]= image + dstride*image_height+ dstride*image_height/4;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1145 mpi->stride[1]=mpi->stride[2]=dstride/2;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1146 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1147 else if(image_format == IMGFMT_YVU9)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1148 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1149 mpi->planes[2] = image + dstride*image_height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1150 mpi->planes[1] = image + dstride*image_height+ dstride*image_height/16;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1151 mpi->stride[1]=mpi->stride[2]=dstride/4;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1152 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1153 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1154 mpi->planes[0]=image;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1155 mpi->stride[0]=dstride;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1156 mpi->width=image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1157 mpi->height=image_height;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1158 mpi->flags|=MP_IMGFLAG_DIRECT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1159 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
1160 return VO_TRUE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1161 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1162 return VO_FALSE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1163 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1164
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1165 static uint32_t put_image(mp_image_t *mpi){
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 uint32_t i = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1168 uint8_t *d;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1169 uint8_t *s;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1170 uint32_t x = mpi->x;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1171 uint32_t y = mpi->y;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1172 uint32_t w = mpi->w;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1173 uint32_t h = mpi->h;
14207
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
1174
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
1175 if (WinID != -1) Directx_ManageDisplay();
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1176
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1177 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
1178 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1179 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
1180 return VO_TRUE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1181 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1182
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1183 if (mpi->flags&MP_IMGFLAG_PLANAR)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1184 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1185
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1186 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
1187 else
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1188 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1189 // copy Y
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1190 d=image+dstride*y+x;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1191 s=mpi->planes[0];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1192 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1193 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1194 s+=mpi->stride[0];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1195 d+=dstride;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1196 }
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1197 w/=4;h/=4;x/=4;y/=4;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1198 // copy V
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1199 d=image+dstride*image_height + dstride*y/4+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1200 s=mpi->planes[2];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1201 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1202 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1203 s+=mpi->stride[1];
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1204 d+=dstride/4;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1205 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1206 // copy U
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1207 d=image+dstride*image_height + dstride*image_height/16 + dstride/4*y+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1208 s=mpi->planes[1];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1209 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1210 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1211 s+=mpi->stride[2];
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1212 d+=dstride/4;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1213 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1214 }
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 else //packed
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 memcpy( image, mpi->planes[0], image_height * dstride);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1219 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1220 return VO_TRUE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1221 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1222
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1223 static uint32_t
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1224 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
1225 {
13438
faust3
parents: 13157
diff changeset
1226 RECT rd;
13775
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
1227 vo_screenwidth = monitor_rect.right - monitor_rect.left;
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
1228 vo_screenheight = monitor_rect.bottom - monitor_rect.top;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1229 vo_fs = options & 0x01;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1230 image_format = format;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1231 image_width = width;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1232 image_height = height;
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1233 d_image_width = d_width;
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1234 d_image_height = d_height;
13438
faust3
parents: 13157
diff changeset
1235 if(format != primary_image_format)nooverlay = 0;
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1236 aspect_save_orig(image_width,image_height);
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1237 aspect_save_prescale(d_image_width,d_image_height);
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1238 if(vidmode){
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1239 vo_screenwidth=vm_width;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1240 vo_screenheight=vm_height;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1241 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1242 aspect_save_screenres(vo_screenwidth,vo_screenheight);
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1243 aspect(&d_image_width, &d_image_height, A_NOZOOM);
12387
5c2e728f5a00 keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
faust3
parents: 12192
diff changeset
1244 window_aspect= (float)d_image_width / (float)d_image_height;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1245 vo_dx = 0;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1246 vo_dy = 0;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1247 if(!vidmode){
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1248 if(vo_geometry){
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1249 vo_dx= ( vo_screenwidth - d_image_width ) / 2; vo_dy=( vo_screenheight - d_image_height ) / 2;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1250 geometry(&vo_dx, &vo_dy, &d_image_width, &d_image_height, vo_screenwidth, vo_screenheight);
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1251 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1252 else {
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1253 GetWindowRect(hWnd,&rd);
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1254 vo_dx=rd.left;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1255 vo_dy=rd.top;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1256 }
13775
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
1257 vo_dx += monitor_rect.left; /* move position to global window space */
f4cbdc7d5c49 make it possible to select the monitor even when in nonexclusive mode, based on patch by Anton Ragarsson <anton at infeline.org>
faust3
parents: 13736
diff changeset
1258 vo_dy += monitor_rect.top;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1259 rd.left = vo_dx;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1260 rd.top = vo_dy;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1261 rd.right = rd.left + d_image_width;
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1262 rd.bottom = rd.top + d_image_height;
14207
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
1263 if (WinID == -1) {
12485
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
1264 AdjustWindowRect(&rd,WS_OVERLAPPEDWINDOW|WS_SIZEBOX,FALSE);
d6885dbe1017 more sane order for overlay workarounds, fixed a bug where the mouse would stay hidden on win98
faust3
parents: 12387
diff changeset
1265 SetWindowPos(hWnd,NULL, vo_dx, vo_dy,rd.right-rd.left,rd.bottom-rd.top,SWP_SHOWWINDOW|SWP_NOOWNERZORDER);
14207
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
1266 }
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1267 }
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1268 else ShowWindow(hWnd,SW_SHOW);
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1269
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1270 if(vo_fs && !vidmode)ShowWindow(hWndFS,SW_SHOW);
14207
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
1271 if (WinID == -1)
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1272 SetWindowText(hWnd,title);
10900
1af259afe553 use vo_fs + geometry support
faust3
parents: 10647
diff changeset
1273
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1274
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1275 if(vidmode)vo_fs=0;
14401
ddf3ac9a7539 fixed-vo/libmpeg2 aspect change fix
faust3
parents: 14400
diff changeset
1276 if (g_cc != NULL)g_cc->lpVtbl->Release(g_cc);
ddf3ac9a7539 fixed-vo/libmpeg2 aspect change fix
faust3
parents: 14400
diff changeset
1277 g_cc=NULL;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1278 /*release all surfaces*/
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1279 if (g_lpddsBack != NULL) g_lpddsBack->lpVtbl->Release(g_lpddsBack);
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1280 g_lpddsBack = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1281 if(vo_doublebuffering)
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1282 {
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1283 if (g_lpddsOverlay != NULL)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1284 }
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1285 g_lpddsOverlay = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1286 if (g_lpddsPrimary != NULL) g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1287 g_lpddsPrimary = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1288 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>overlay surfaces released\n");
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1289
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1290
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1291 /*create the surfaces*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1292 if(Directx_CreatePrimarySurface())return 1;
14400
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1293
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1294 //create palette for 256 color mode
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1295 if(image_format==IMGFMT_BGR8){
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1296 LPDIRECTDRAWPALETTE ddpalette=NULL;
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1297 char* palette=malloc(4*256);
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1298 int i;
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1299 for(i=0; i<256; i++){
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1300 palette[4*i+0] = ((i >> 5) & 0x07) * 255 / 7;
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1301 palette[4*i+1] = ((i >> 2) & 0x07) * 255 / 7;
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1302 palette[4*i+2] = ((i >> 0) & 0x03) * 255 / 3;
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1303 palette[4*i+3] = PC_NOCOLLAPSE;
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1304 }
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1305 g_lpdd->lpVtbl->CreatePalette(g_lpdd,DDPCAPS_8BIT|DDPCAPS_INITIALIZE,palette,&ddpalette,NULL);
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1306 g_lpddsPrimary->lpVtbl->SetPalette(g_lpddsPrimary,ddpalette);
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1307 free(palette);
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1308 ddpalette->lpVtbl->Release(ddpalette);
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1309 }
50d99489dfe5 256 color mode support, use -vm to get better output when overlay is not supported
faust3
parents: 14302
diff changeset
1310
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1311 if (!nooverlay && Directx_CreateOverlay(image_format))
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1312 {
10640
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
1313 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
1314 else {
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
1315 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
1316 return 1;
01e0d93182f8 fix playback of rgb files when overlay is not disabled
faust3
parents: 9943
diff changeset
1317 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1318 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1319 if(nooverlay)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1320 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1321 if(Directx_CreateBackpuffer())
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1322 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1323 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
1324 return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1325 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1326 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>back surface created\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1327 vo_doublebuffering = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1328 /*create clipper for nonoverlay mode*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1329 if(g_lpddclipper)g_lpddclipper->lpVtbl->Release(g_lpddclipper);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1330 g_lpddclipper=NULL;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1331 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
1332 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
1333 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
1334 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>clipper succesfully created\n");
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1335 }else{
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1336 if(DD_OK != g_lpddsOverlay->lpVtbl->QueryInterface(g_lpddsOverlay,&IID_IDirectDrawColorControl,(void**)&g_cc))
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1337 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><WARN>unable to get DirectDraw ColorControl interface\n");
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1338 }
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1339 Directx_ManageDisplay();
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1340 memset(&ddsdsf, 0,sizeof(DDSURFACEDESC2));
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1341 ddsdsf.dwSize = sizeof (DDSURFACEDESC2);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1342 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
1343 dstride = ddsdsf.lPitch;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1344 image = ddsdsf.lpSurface;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1345 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1346 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1347
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1348 //function to set color controls
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1349 // brightness [0, 10000]
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1350 // contrast [0, 20000]
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1351 // hue [-180, 180]
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1352 // saturation [0, 20000]
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1353 static uint32_t color_ctrl_set(char *what, int value)
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1354 {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1355 uint32_t r = VO_NOTIMPL;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1356 DDCOLORCONTROL dcc;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1357 //printf("\n*** %s = %d\n", what, value);
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1358 if (!g_cc) {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1359 //printf("\n *** could not get color control interface!!!\n");
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1360 return VO_NOTIMPL;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1361 }
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1362 ZeroMemory(&dcc, sizeof(dcc));
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1363 dcc.dwSize = sizeof(dcc);
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1364
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1365 if (!strcmp(what, "brightness")) {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1366 dcc.dwFlags = DDCOLOR_BRIGHTNESS;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1367 dcc.lBrightness = (value + 100) * 10000 / 200;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1368 r = VO_TRUE;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1369 } else if (!strcmp(what, "contrast")) {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1370 dcc.dwFlags = DDCOLOR_CONTRAST;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1371 dcc.lContrast = (value + 100) * 20000 / 200;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1372 r = VO_TRUE;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1373 } else if (!strcmp(what, "hue")) {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1374 dcc.dwFlags = DDCOLOR_HUE;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1375 dcc.lHue = value * 180 / 100;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1376 r = VO_TRUE;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1377 } else if (!strcmp(what, "saturation")) {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1378 dcc.dwFlags = DDCOLOR_SATURATION;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1379 dcc.lSaturation = (value + 100) * 20000 / 200;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1380 r = VO_TRUE;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1381 }
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1382
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1383 if (r == VO_TRUE) {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1384 g_cc->lpVtbl->SetColorControls(g_cc, &dcc);
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1385 }
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1386 return r;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1387 }
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1388
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1389 //analoguous to color_ctrl_set
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1390 static uint32_t color_ctrl_get(char *what, int *value)
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1391 {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1392 uint32_t r = VO_NOTIMPL;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1393 DDCOLORCONTROL dcc;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1394 if (!g_cc) {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1395 //printf("\n *** could not get color control interface!!!\n");
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1396 return VO_NOTIMPL;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1397 }
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1398 ZeroMemory(&dcc, sizeof(dcc));
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1399 dcc.dwSize = sizeof(dcc);
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1400
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1401 if (g_cc->lpVtbl->GetColorControls(g_cc, &dcc) != DD_OK) {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1402 return r;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1403 }
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1404
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1405 if (!strcmp(what, "brightness") && (dcc.dwFlags & DDCOLOR_BRIGHTNESS)) {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1406 *value = dcc.lBrightness * 200 / 10000 - 100;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1407 r = VO_TRUE;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1408 } else if (!strcmp(what, "contrast") && (dcc.dwFlags & DDCOLOR_CONTRAST)) {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1409 *value = dcc.lContrast * 200 / 20000 - 100;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1410 r = VO_TRUE;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1411 } else if (!strcmp(what, "hue") && (dcc.dwFlags & DDCOLOR_HUE)) {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1412 *value = dcc.lHue * 100 / 180;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1413 r = VO_TRUE;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1414 } else if (!strcmp(what, "saturation") && (dcc.dwFlags & DDCOLOR_SATURATION)) {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1415 *value = dcc.lSaturation * 200 / 20000 - 100;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1416 r = VO_TRUE;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1417 }
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1418 // printf("\n*** %s = %d\n", what, *value);
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1419
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1420 return r;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1421 }
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1422
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1423 static uint32_t control(uint32_t request, void *data, ...)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1424 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1425 switch (request) {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1426
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1427 case VOCTRL_GET_IMAGE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1428 return get_image(data);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1429 case VOCTRL_QUERY_FORMAT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1430 return query_format(*((uint32_t*)data));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1431 case VOCTRL_DRAW_IMAGE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1432 return put_image(data);
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11510
diff changeset
1433 case VOCTRL_ONTOP:
14207
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
1434 if(WinID != -1) return VO_TRUE;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1435 if(vidmode)
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11510
diff changeset
1436 {
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11510
diff changeset
1437 mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>ontop has no meaning in exclusive mode\n");
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11510
diff changeset
1438 }
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11510
diff changeset
1439 else
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11510
diff changeset
1440 {
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11510
diff changeset
1441 if(vo_ontop) vo_ontop = 0;
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11510
diff changeset
1442 else vo_ontop = 1;
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1443 Directx_ManageDisplay();
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11510
diff changeset
1444 }
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11510
diff changeset
1445 return VO_TRUE;
13091
25f51c72eb06 added runtime toggle of root window playback
joey
parents: 13090
diff changeset
1446 case VOCTRL_ROOTWIN:
14207
f8670fdf6ab1 added -wid support for vo_directx.
joey
parents: 14206
diff changeset
1447 if(WinID != -1) return VO_TRUE;
13091
25f51c72eb06 added runtime toggle of root window playback
joey
parents: 13090
diff changeset
1448 if(vidmode)
25f51c72eb06 added runtime toggle of root window playback
joey
parents: 13090
diff changeset
1449 {
25f51c72eb06 added runtime toggle of root window playback
joey
parents: 13090
diff changeset
1450 mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>rootwin has no meaning in exclusive mode\n");
25f51c72eb06 added runtime toggle of root window playback
joey
parents: 13090
diff changeset
1451 }
25f51c72eb06 added runtime toggle of root window playback
joey
parents: 13090
diff changeset
1452 else
25f51c72eb06 added runtime toggle of root window playback
joey
parents: 13090
diff changeset
1453 {
25f51c72eb06 added runtime toggle of root window playback
joey
parents: 13090
diff changeset
1454 if(vo_rootwin) vo_rootwin = 0;
25f51c72eb06 added runtime toggle of root window playback
joey
parents: 13090
diff changeset
1455 else vo_rootwin = 1;
25f51c72eb06 added runtime toggle of root window playback
joey
parents: 13090
diff changeset
1456 Directx_ManageDisplay();
25f51c72eb06 added runtime toggle of root window playback
joey
parents: 13090
diff changeset
1457 }
25f51c72eb06 added runtime toggle of root window playback
joey
parents: 13090
diff changeset
1458 return VO_TRUE;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1459 case VOCTRL_FULLSCREEN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1460 {
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1461 if(vidmode)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1462 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1463 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
1464 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1465 else
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1466 {
13090
0c37bcfc5ef0 added -rootwin support to vo_directx
joey
parents: 12861
diff changeset
1467 if(!vo_fs)
0c37bcfc5ef0 added -rootwin support to vo_directx
joey
parents: 12861
diff changeset
1468 {
0c37bcfc5ef0 added -rootwin support to vo_directx
joey
parents: 12861
diff changeset
1469 vo_fs=1;
0c37bcfc5ef0 added -rootwin support to vo_directx
joey
parents: 12861
diff changeset
1470 ShowWindow(hWndFS,SW_SHOW);
0c37bcfc5ef0 added -rootwin support to vo_directx
joey
parents: 12861
diff changeset
1471 ShowWindow(hWnd,SW_HIDE);
14692
f9b417d4a18a always take the focus in fullscreen mode patch by Gianluigi Tiesi <mplayer at netfarm.it>
faust3
parents: 14401
diff changeset
1472 SetForegroundWindow(hWndFS);
13090
0c37bcfc5ef0 added -rootwin support to vo_directx
joey
parents: 12861
diff changeset
1473 }
0c37bcfc5ef0 added -rootwin support to vo_directx
joey
parents: 12861
diff changeset
1474 else
0c37bcfc5ef0 added -rootwin support to vo_directx
joey
parents: 12861
diff changeset
1475 {
0c37bcfc5ef0 added -rootwin support to vo_directx
joey
parents: 12861
diff changeset
1476 vo_fs=0;
0c37bcfc5ef0 added -rootwin support to vo_directx
joey
parents: 12861
diff changeset
1477 ShowWindow(hWndFS,SW_HIDE);
0c37bcfc5ef0 added -rootwin support to vo_directx
joey
parents: 12861
diff changeset
1478 ShowWindow(hWnd,SW_SHOW);
0c37bcfc5ef0 added -rootwin support to vo_directx
joey
parents: 12861
diff changeset
1479 }
12005
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1480 Directx_ManageDisplay();
a8adfcf47f4e adapter selection patch by Rune <runner at mail.tele.dk> +first attempt to implement 2 window fullscreenswitching by me
faust3
parents: 11542
diff changeset
1481 break;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1482 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1483 return VO_TRUE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1484 }
13736
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1485 case VOCTRL_SET_EQUALIZER: {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1486 va_list ap;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1487 int value;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1488
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1489 va_start(ap, data);
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1490 value = va_arg(ap, int);
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1491 va_end(ap);
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1492 return color_ctrl_set(data, value);
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1493 }
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1494 case VOCTRL_GET_EQUALIZER: {
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1495 va_list ap;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1496 int *value;
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1497
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1498 va_start(ap, data);
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1499 value = va_arg(ap, int*);
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1500 va_end(ap);
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1501 return color_ctrl_get(data, value);
e4281b5463a4 overlay color control support based on patch by Vitos Laszlo <laca <at> evol.ro>
faust3
parents: 13438
diff changeset
1502 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1503 };
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1504 return VO_NOTIMPL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1505 }