Mercurial > mplayer.hg
annotate libvo/vo_gl2.c @ 24787:02535b3216c5
Avoid text deformation and subtitles moving outside the screen in pan-and-scan
mode.
For this, crop amounts are passed from vo_gl as negative margins sizes. They
are used to calculate aspect ratio. They are ignored when calculating subtitle
positions, so subtitles will stay on screen most of the time.
Based on a patch by Jindrich Makovicka [makovick gmail com].
author | eugeni |
---|---|
date | Fri, 19 Oct 2007 18:16:23 +0000 |
parents | 12f2487fb845 |
children | 3aee342be929 |
rev | line source |
---|---|
23651 | 1 /* |
2124 | 2 * video_out_gl.c, X11/OpenGL interface |
3 * based on video_out_x11 by Aaron Holtzman, | |
4 * and WS opengl window manager by Pontscho/Fresh! | |
5 */ | |
6 | |
7 #include <stdio.h> | |
8 #include <stdlib.h> | |
9 #include <string.h> | |
10 | |
11 #include "config.h" | |
11087 | 12 #include "mp_msg.h" |
16475 | 13 #include "subopt-helper.h" |
2124 | 14 #include "video_out.h" |
15 #include "video_out_internal.h" | |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
7964
diff
changeset
|
16 #include "sub.h" |
2124 | 17 |
18742 | 18 #include "gl_common.h" |
19 #include "aspect.h" | |
12382 | 20 #ifdef HAVE_NEW_GUI |
23077 | 21 #include "gui/interface.h" |
12382 | 22 #endif |
23 | |
12750
38c660174053
removed XFlush() before XSync(), made config_glx return-type signed, force 32bit on Darwin, idea from a patch by Marc Hoffman (mmh <at> pleasantst.com).
reimar
parents:
12709
diff
changeset
|
24 #undef TEXTUREFORMAT_ALWAYS |
38c660174053
removed XFlush() before XSync(), made config_glx return-type signed, force 32bit on Darwin, idea from a patch by Marc Hoffman (mmh <at> pleasantst.com).
reimar
parents:
12709
diff
changeset
|
25 #ifdef SYS_DARWIN |
12842 | 26 #define TEXTUREFORMAT_ALWAYS GL_RGBA8 |
12750
38c660174053
removed XFlush() before XSync(), made config_glx return-type signed, force 32bit on Darwin, idea from a patch by Marc Hoffman (mmh <at> pleasantst.com).
reimar
parents:
12709
diff
changeset
|
27 #endif |
10143
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
28 |
16594
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
29 //! force texture height, useful for debugging |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
30 #define TEXTURE_HEIGHT 128 |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
31 #undef TEXTURE_HEIGHT |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
32 //! force texture width, useful for debugging |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
33 #define TEXTURE_WIDTH 128 |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
34 #undef TEXTURE_WIDTH |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
35 |
23651 | 36 static vo_info_t info = |
2124 | 37 { |
23651 | 38 "X11 (OpenGL) - multiple textures version", |
39 "gl2", | |
40 "Arpad Gereoffy & Sven Goethel", | |
41 "" | |
2124 | 42 }; |
43 | |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8123
diff
changeset
|
44 LIBVO_EXTERN(gl2) |
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8123
diff
changeset
|
45 |
2124 | 46 /* local data */ |
47 static unsigned char *ImageData=NULL; | |
48 | |
14142
f0c1ee83b216
Improving gl2 under windows, moving some functionality to gl_common
reimar
parents:
14090
diff
changeset
|
49 #ifdef GL_WIN32 |
f0c1ee83b216
Improving gl2 under windows, moving some functionality to gl_common
reimar
parents:
14090
diff
changeset
|
50 static int gl_vinfo = 0; |
f0c1ee83b216
Improving gl2 under windows, moving some functionality to gl_common
reimar
parents:
14090
diff
changeset
|
51 static HGLRC gl_context = 0; |
21631 | 52 #define update_xinerama_info w32_update_xinerama_info |
53 #define vo_init vo_w32_init | |
54 #define vo_window vo_w32_window | |
14142
f0c1ee83b216
Improving gl2 under windows, moving some functionality to gl_common
reimar
parents:
14090
diff
changeset
|
55 #else |
13871 | 56 static XVisualInfo *gl_vinfo = NULL; |
57 static GLXContext gl_context = 0; | |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
58 #endif |
2124 | 59 |
60 static uint32_t image_width; | |
61 static uint32_t image_height; | |
62 static uint32_t image_format; | |
63 static uint32_t image_bpp; | |
64 static uint32_t image_bytes; | |
65 | |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
66 static int int_pause; |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
67 |
2124 | 68 static uint32_t texture_width; |
69 static uint32_t texture_height; | |
12448 | 70 static int texnumx, texnumy, raw_line_len; |
23649
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
71 static int texdirty; |
13540 | 72 static struct TexSquare * texgrid = NULL; |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
73 static GLuint fragprog; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
74 static GLuint lookupTex; |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
75 static GLint gl_internal_format; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
76 static int rgb_sz, r_sz, g_sz, b_sz, a_sz; |
16303
a87c6cf3fe52
Fix texture format variable types. Internal format is GLint, others are GLenum
reimar
parents:
16282
diff
changeset
|
77 static GLenum gl_bitmap_format; |
a87c6cf3fe52
Fix texture format variable types. Internal format is GLint, others are GLenum
reimar
parents:
16282
diff
changeset
|
78 static GLenum gl_bitmap_type; |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
79 static int isGL12 = GL_FALSE; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
80 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
81 static int gl_bilinear=1; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
82 static int gl_antialias=0; |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
83 static int use_yuv; |
16475 | 84 static int use_glFinish; |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
85 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
86 static void (*draw_alpha_fnc) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
87 (int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride); |
2124 | 88 |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
89 |
2124 | 90 /* The squares that are tiled to make up the game screen polygon */ |
91 | |
92 struct TexSquare | |
93 { | |
94 GLubyte *texture; | |
95 GLuint texobj; | |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
96 GLuint uvtexobjs[2]; |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
97 GLfloat fx, fy, fw, fh; |
2124 | 98 }; |
99 | |
17566
f580a7755ac5
Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents:
17220
diff
changeset
|
100 static GLint getInternalFormat(void) |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
101 { |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
102 #ifdef GL_WIN32 |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
103 PIXELFORMATDESCRIPTOR pfd; |
24315
12f2487fb845
Fix compilation after patch to remove global vo_hdc
reimar
parents:
23655
diff
changeset
|
104 HDC vo_hdc = GetDC(vo_window); |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
105 int pf = GetPixelFormat(vo_hdc); |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
106 if (!DescribePixelFormat(vo_hdc, pf, sizeof pfd, &pfd)) { |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
107 r_sz = g_sz = b_sz = a_sz = 0; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
108 } else { |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
109 r_sz = pfd.cRedBits; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
110 g_sz = pfd.cGreenBits; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
111 b_sz = pfd.cBlueBits; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
112 a_sz = pfd.cAlphaBits; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
113 } |
24315
12f2487fb845
Fix compilation after patch to remove global vo_hdc
reimar
parents:
23655
diff
changeset
|
114 ReleaseDC(vo_window, vo_hdc); |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
115 #else |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
116 if (glXGetConfig(mDisplay, gl_vinfo, GLX_RED_SIZE, &r_sz) != 0) r_sz = 0; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
117 if (glXGetConfig(mDisplay, gl_vinfo, GLX_GREEN_SIZE, &g_sz) != 0) g_sz = 0; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
118 if (glXGetConfig(mDisplay, gl_vinfo, GLX_BLUE_SIZE, &b_sz) != 0) b_sz = 0; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
119 if (glXGetConfig(mDisplay, gl_vinfo, GLX_ALPHA_SIZE, &a_sz) != 0) a_sz = 0; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
120 #endif |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
121 |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
122 rgb_sz=r_sz+g_sz+b_sz; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
123 if(rgb_sz<=0) rgb_sz=24; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
124 |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
125 #ifdef TEXTUREFORMAT_ALWAYS |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
126 return TEXTUREFORMAT_ALWAYS; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
127 #else |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
128 if(r_sz==3 && g_sz==3 && b_sz==2 && a_sz==0) |
23651 | 129 return GL_R3_G3_B2; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
130 if(r_sz==4 && g_sz==4 && b_sz==4 && a_sz==0) |
23651 | 131 return GL_RGB4; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
132 if(r_sz==5 && g_sz==5 && b_sz==5 && a_sz==0) |
23651 | 133 return GL_RGB5; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
134 if(r_sz==8 && g_sz==8 && b_sz==8 && a_sz==0) |
23651 | 135 return GL_RGB8; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
136 if(r_sz==10 && g_sz==10 && b_sz==10 && a_sz==0) |
23651 | 137 return GL_RGB10; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
138 if(r_sz==2 && g_sz==2 && b_sz==2 && a_sz==2) |
23651 | 139 return GL_RGBA2; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
140 if(r_sz==4 && g_sz==4 && b_sz==4 && a_sz==4) |
23651 | 141 return GL_RGBA4; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
142 if(r_sz==5 && g_sz==5 && b_sz==5 && a_sz==1) |
23651 | 143 return GL_RGB5_A1; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
144 if(r_sz==8 && g_sz==8 && b_sz==8 && a_sz==8) |
23651 | 145 return GL_RGBA8; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
146 if(r_sz==10 && g_sz==10 && b_sz==10 && a_sz==2) |
23651 | 147 return GL_RGB10_A2; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
148 #endif |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
149 return GL_RGB; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
150 } |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
151 |
17566
f580a7755ac5
Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents:
17220
diff
changeset
|
152 static int initTextures(void) |
2124 | 153 { |
154 struct TexSquare *tsq=0; | |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
155 GLfloat texpercx, texpercy; |
16221 | 156 int s; |
2124 | 157 int x=0, y=0; |
158 GLint format=0; | |
159 | |
16222 | 160 // textures smaller than 64x64 might not be supported |
161 s=64; | |
16220
1effc23b2cb8
10l, texture_width/height initialization was removed, so use
reimar
parents:
16214
diff
changeset
|
162 while (s<image_width) |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
163 s*=2; |
2124 | 164 texture_width=s; |
165 | |
16222 | 166 s=64; |
16220
1effc23b2cb8
10l, texture_width/height initialization was removed, so use
reimar
parents:
16214
diff
changeset
|
167 while (s<image_height) |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
168 s*=2; |
2124 | 169 texture_height=s; |
170 | |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
171 if (image_format != IMGFMT_YV12) |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
172 gl_internal_format = getInternalFormat(); |
2124 | 173 |
174 /* Test the max texture size */ | |
23651 | 175 do { |
2124 | 176 glTexImage2D (GL_PROXY_TEXTURE_2D, 0, |
23651 | 177 gl_internal_format, |
178 texture_width, texture_height, | |
179 0, gl_bitmap_format, gl_bitmap_type, NULL); | |
2124 | 180 |
181 glGetTexLevelParameteriv | |
182 (GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &format); | |
183 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
184 if (format != gl_internal_format) |
2124 | 185 { |
11988 | 186 mp_msg (MSGT_VO, MSGL_V, "[gl2] Needed texture [%dx%d] too big, trying ", |
23651 | 187 texture_height, texture_width); |
2124 | 188 |
189 if (texture_width > texture_height) | |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
190 texture_width /= 2; |
2124 | 191 else |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
192 texture_height /= 2; |
2124 | 193 |
11988 | 194 mp_msg (MSGT_VO, MSGL_V, "[%dx%d] !\n", texture_height, texture_width); |
2124 | 195 |
23651 | 196 if(texture_width < 64 || texture_height < 64) { |
197 mp_msg (MSGT_VO, MSGL_FATAL, "[gl2] Give up .. usable texture size not avaiable, or texture config error !\n"); | |
198 return -1; | |
2124 | 199 } |
200 } | |
201 } | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
202 while (format != gl_internal_format && texture_width > 1 && texture_height > 1); |
16594
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
203 #ifdef TEXTURE_WIDTH |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
204 texture_width = TEXTURE_WIDTH; |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
205 #endif |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
206 #ifdef TEXTURE_HEIGHT |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
207 texture_height = TEXTURE_HEIGHT; |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
208 #endif |
2124 | 209 |
210 texnumx = image_width / texture_width; | |
211 if ((image_width % texture_width) > 0) | |
212 texnumx++; | |
213 | |
214 texnumy = image_height / texture_height; | |
215 if ((image_height % texture_height) > 0) | |
216 texnumy++; | |
217 | |
11988 | 218 mp_msg(MSGT_VO, MSGL_V, "[gl2] Creating %dx%d textures of size %dx%d ...\n", |
23651 | 219 texnumx, texnumy, texture_width,texture_height); |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
220 |
2124 | 221 /* Allocate the texture memory */ |
222 | |
223 texpercx = (GLfloat) texture_width / (GLfloat) image_width; | |
224 texpercy = (GLfloat) texture_height / (GLfloat) image_height; | |
225 | |
13540 | 226 if (texgrid) |
227 free(texgrid); | |
23647 | 228 texgrid = calloc (texnumx * texnumy, sizeof (struct TexSquare)); |
2124 | 229 |
12448 | 230 raw_line_len = image_width * image_bytes; |
2124 | 231 |
11988 | 232 mp_msg (MSGT_VO, MSGL_DBG2, "[gl2] texture-usage %d*width=%d, %d*height=%d\n", |
23651 | 233 (int) texnumx, (int) texture_width, (int) texnumy, |
234 (int) texture_height); | |
2124 | 235 |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
236 tsq = texgrid; |
23651 | 237 for (y = 0; y < texnumy; y++) { |
238 for (x = 0; x < texnumx; x++) { | |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
239 tsq->fx = x * texpercx; |
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
240 tsq->fy = y * texpercy; |
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
241 tsq->fw = texpercx; |
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
242 tsq->fh = texpercy; |
2124 | 243 |
244 tsq->texobj=0; | |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
245 tsq->uvtexobjs[0] = tsq->uvtexobjs[1] = 0; |
2124 | 246 |
247 glGenTextures (1, &(tsq->texobj)); | |
248 | |
249 glBindTexture (GL_TEXTURE_2D, tsq->texobj); | |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
250 if (image_format == IMGFMT_YV12) { |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
251 glGenTextures(2, tsq->uvtexobjs); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
252 ActiveTexture(GL_TEXTURE1); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
253 glBindTexture (GL_TEXTURE_2D, tsq->uvtexobjs[0]); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
254 ActiveTexture(GL_TEXTURE2); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
255 glBindTexture (GL_TEXTURE_2D, tsq->uvtexobjs[1]); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
256 ActiveTexture(GL_TEXTURE0); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
257 } |
2124 | 258 |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
259 glCreateClearTex(GL_TEXTURE_2D, gl_internal_format, GL_LINEAR, |
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
260 texture_width, texture_height, 0); |
2124 | 261 |
262 glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); | |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
263 if (image_format == IMGFMT_YV12) { |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
264 ActiveTexture(GL_TEXTURE1); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
265 glCreateClearTex(GL_TEXTURE_2D, gl_internal_format, GL_LINEAR, |
16583
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
266 texture_width / 2, texture_height / 2, 128); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
267 ActiveTexture(GL_TEXTURE2); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
268 glCreateClearTex(GL_TEXTURE_2D, gl_internal_format, GL_LINEAR, |
16583
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
269 texture_width / 2, texture_height / 2, 128); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
270 ActiveTexture(GL_TEXTURE0); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
271 } |
2124 | 272 |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
273 tsq++; |
23651 | 274 } /* for all texnumx */ |
2124 | 275 } /* for all texnumy */ |
23651 | 276 |
10604 | 277 return 0; |
2124 | 278 } |
279 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
280 static void resetTexturePointers(unsigned char *imageSource) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
281 { |
12448 | 282 unsigned char *texdata_start, *line_start; |
283 struct TexSquare *tsq = texgrid; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
284 int x=0, y=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
285 |
12448 | 286 line_start = (unsigned char *) imageSource; |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
287 |
23651 | 288 for (y = 0; y < texnumy; y++) { |
12448 | 289 texdata_start = line_start; |
23651 | 290 for (x = 0; x < texnumx; x++) { |
12448 | 291 tsq->texture = texdata_start; |
292 texdata_start += texture_width * image_bytes; | |
293 tsq++; | |
23651 | 294 } /* for all texnumx */ |
12448 | 295 line_start += texture_height * raw_line_len; |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
296 } /* for all texnumy */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
297 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
298 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
299 static void gl_set_bilinear (int val) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
300 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
301 int x, y; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
302 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
303 if(val>=0) |
23651 | 304 gl_bilinear = val; |
305 else | |
306 gl_bilinear++; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
307 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
308 gl_bilinear=gl_bilinear%2; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
309 /* no mipmap yet .. */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
310 |
23651 | 311 for (y = 0; y < texnumy; y++) { |
312 for (x = 0; x < texnumx; x++) { | |
313 glBindTexture (GL_TEXTURE_2D, texgrid[y * texnumx + x].texobj); | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
314 |
23651 | 315 switch (gl_bilinear) { |
316 case 0: | |
317 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); | |
318 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | |
319 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear off\n"); | |
320 break; | |
321 case 1: | |
322 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | |
323 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | |
324 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear linear\n"); | |
325 break; | |
326 case 2: | |
327 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); | |
328 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_NEAREST); | |
329 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear mipmap nearest\n"); | |
330 break; | |
331 case 3: | |
332 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); | |
333 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR); | |
334 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear mipmap linear\n"); | |
335 break; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
336 } |
23651 | 337 } |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
338 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
339 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
340 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
341 static void gl_set_antialias (int val) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
342 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
343 gl_antialias=val; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
344 |
23651 | 345 if (gl_antialias) { |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
346 glShadeModel (GL_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
347 glEnable (GL_POLYGON_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
348 glEnable (GL_LINE_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
349 glEnable (GL_POINT_SMOOTH); |
11988 | 350 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] antialiasing on\n"); |
23651 | 351 } else { |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
352 glShadeModel (GL_FLAT); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
353 glDisable (GL_POLYGON_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
354 glDisable (GL_LINE_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
355 glDisable (GL_POINT_SMOOTH); |
11988 | 356 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] antialiasing off\n"); |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
357 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
358 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
359 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
360 |
17566
f580a7755ac5
Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents:
17220
diff
changeset
|
361 static void drawTextureDisplay (void) |
2124 | 362 { |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
363 struct TexSquare *square = texgrid; |
23645
6f2f38eb4e0a
Remove some unused code and useless error checking that only clutters the code
reimar
parents:
23077
diff
changeset
|
364 int x, y; |
2124 | 365 |
366 glColor3f(1.0,1.0,1.0); | |
367 | |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
368 if (image_format == IMGFMT_YV12) |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
369 glEnableYUVConversion(GL_TEXTURE_2D, use_yuv); |
23651 | 370 for (y = 0; y < texnumy; y++) { |
23649
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
371 int thish = texture_height; |
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
372 if (y == texnumy - 1 && image_height % texture_height) |
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
373 thish = image_height % texture_height; |
23651 | 374 for (x = 0; x < texnumx; x++) { |
23649
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
375 int thisw = texture_width; |
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
376 if (x == texnumx - 1 && image_width % texture_width) |
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
377 thisw = image_width % texture_width; |
2124 | 378 glBindTexture (GL_TEXTURE_2D, square->texobj); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
379 if (image_format == IMGFMT_YV12) { |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
380 ActiveTexture(GL_TEXTURE1); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
381 glBindTexture (GL_TEXTURE_2D, square->uvtexobjs[0]); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
382 ActiveTexture(GL_TEXTURE2); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
383 glBindTexture (GL_TEXTURE_2D, square->uvtexobjs[1]); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
384 ActiveTexture(GL_TEXTURE0); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
385 } |
2124 | 386 |
23649
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
387 if (texdirty) { |
23651 | 388 glUploadTex(GL_TEXTURE_2D, gl_bitmap_format, gl_bitmap_type, |
389 square->texture, image_width * image_bytes, | |
390 0, 0, thisw, thish, 0); | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
391 } |
2124 | 392 |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
393 glDrawTex(square->fx, square->fy, square->fw, square->fh, |
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
394 0, 0, texture_width, texture_height, |
17220 | 395 texture_width, texture_height, |
396 0, image_format == IMGFMT_YV12, 0); | |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
397 square++; |
2124 | 398 } /* for all texnumx */ |
399 } /* for all texnumy */ | |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
400 if (image_format == IMGFMT_YV12) |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
401 glDisableYUVConversion(GL_TEXTURE_2D, use_yuv); |
23649
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
402 texdirty = 0; |
2124 | 403 } |
404 | |
405 | |
11087 | 406 static void resize(int *x,int *y){ |
407 mp_msg(MSGT_VO,MSGL_V,"[gl2] Resize: %dx%d\n",*x,*y); | |
23651 | 408 if( vo_fs ) { |
409 glClear(GL_COLOR_BUFFER_BIT); | |
410 aspect(x, y, A_ZOOM); | |
411 panscan_calc(); | |
412 *x += vo_panscan_x; | |
413 *y += vo_panscan_y; | |
414 glViewport( (vo_screenwidth-*x)/2, (vo_screenheight-*y)/2, *x, *y); | |
415 } else { | |
416 //aspect(x, y, A_NOZOOM); | |
417 if (WinID >= 0) { | |
418 int top = 0, left = 0, w = *x, h = *y; | |
419 geometry(&top, &left, &w, &h, vo_screenwidth, vo_screenheight); | |
420 glViewport(top, left, w, h); | |
421 } else | |
422 glViewport( 0, 0, *x, *y ); | |
10905 | 423 } |
2124 | 424 |
425 glMatrixMode(GL_PROJECTION); | |
426 glLoadIdentity(); | |
427 glOrtho (0, 1, 1, 0, -1.0, 1.0); | |
428 | |
429 glMatrixMode(GL_MODELVIEW); | |
430 glLoadIdentity(); | |
431 } | |
432 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
433 static void draw_alpha_32(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
434 vo_draw_alpha_rgb32(w,h,src,srca,stride,ImageData+4*(y0*image_width+x0),4*image_width); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
435 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
436 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
437 static void draw_alpha_24(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
438 vo_draw_alpha_rgb24(w,h,src,srca,stride,ImageData+3*(y0*image_width+x0),3*image_width); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
439 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
440 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
441 static void draw_alpha_16(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
442 vo_draw_alpha_rgb16(w,h,src,srca,stride,ImageData+2*(y0*image_width+x0),2*image_width); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
443 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
444 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
445 static void draw_alpha_15(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
446 vo_draw_alpha_rgb15(w,h,src,srca,stride,ImageData+2*(y0*image_width+x0),2*image_width); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
447 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
448 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
449 static void draw_alpha_null(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
450 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
451 |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
452 #ifdef GL_WIN32 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
453 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
454 static int config_w32(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format) { |
23651 | 455 if (!vo_w32_config(d_width, d_height, flags)) |
456 return -1; | |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
457 |
23651 | 458 if (vo_fs) |
459 aspect(&d_width, &d_height, A_ZOOM); | |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
460 |
23651 | 461 return 0; |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
462 } |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
463 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
464 #else |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
465 |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
466 static int choose_glx_visual(Display *dpy, int scr, XVisualInfo *res_vi) |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
467 { |
23651 | 468 XVisualInfo template, *vi_list; |
469 int vi_num, i, best_i, best_weight; | |
12709 | 470 |
23651 | 471 template.screen = scr; |
472 vi_list = XGetVisualInfo(dpy, VisualScreenMask, &template, &vi_num); | |
473 if (!vi_list) return -1; | |
474 best_weight = 1000000; best_i=0; | |
475 for (i = 0; i < vi_num; i++) { | |
476 int val, res, w = 0; | |
477 /* of course, the visual must support OpenGL rendering... */ | |
478 res = glXGetConfig(dpy, vi_list + i, GLX_USE_GL, &val); | |
479 if (res || val == False) continue; | |
480 /* also it must be doublebuffered ... */ | |
481 res = glXGetConfig(dpy, vi_list + i, GLX_DOUBLEBUFFER, &val); | |
482 if (res || val == False) continue; | |
483 /* furthermore it must be RGBA (not color indexed) ... */ | |
484 res = glXGetConfig(dpy, vi_list + i, GLX_RGBA, &val); | |
485 if (res || val == False) continue; | |
486 /* prefer less depth buffer size, */ | |
487 res = glXGetConfig(dpy, vi_list + i, GLX_DEPTH_SIZE, &val); | |
488 if (res) continue; | |
489 w += val*2; | |
490 /* stencil buffer size */ | |
491 res = glXGetConfig(dpy, vi_list + i, GLX_STENCIL_SIZE, &val); | |
492 if (res) continue; | |
493 w += val*2; | |
494 /* and colorbuffer alpha size */ | |
495 res = glXGetConfig(dpy, vi_list + i, GLX_ALPHA_SIZE, &val); | |
496 if (res) continue; | |
497 w += val; | |
498 /* and finally, prefer DirectColor-ed visuals to allow color corrections */ | |
499 if (vi_list[i].class != DirectColor) w += 100; | |
12709 | 500 |
23651 | 501 // avoid bad-looking visual with less that 8bit per color |
502 res = glXGetConfig(dpy, vi_list + i, GLX_RED_SIZE, &val); | |
503 if (res) continue; | |
504 if (val < 8) w += 50; | |
505 res = glXGetConfig(dpy, vi_list + i, GLX_GREEN_SIZE, &val); | |
506 if (res) continue; | |
507 if (val < 8) w += 70; | |
508 res = glXGetConfig(dpy, vi_list + i, GLX_BLUE_SIZE, &val); | |
509 if (res) continue; | |
510 if (val < 8) w += 50; | |
511 | |
512 if (w < best_weight) { | |
513 best_weight = w; | |
514 best_i = i; | |
515 } | |
516 } | |
517 if (best_weight < 1000000) *res_vi = vi_list[best_i]; | |
518 XFree(vi_list); | |
519 return (best_weight < 1000000) ? 0 : -1; | |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
520 } |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
521 |
12750
38c660174053
removed XFlush() before XSync(), made config_glx return-type signed, force 32bit on Darwin, idea from a patch by Marc Hoffman (mmh <at> pleasantst.com).
reimar
parents:
12709
diff
changeset
|
522 static int config_glx(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format) { |
23655
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23651
diff
changeset
|
523 XVisualInfo *vinfo, vinfo_buf; |
15748 | 524 if (WinID >= 0) { |
525 vo_window = WinID ? (Window)WinID : mRootWin; | |
16239 | 526 vo_x11_selectinput_witherr(mDisplay, vo_window, |
527 StructureNotifyMask | KeyPressMask | PointerMotionMask | | |
528 ButtonPressMask | ButtonReleaseMask | ExposureMask); | |
15748 | 529 return 0; |
530 } | |
23651 | 531 vinfo = choose_glx_visual(mDisplay,mScreen,&vinfo_buf) < 0 ? NULL : &vinfo_buf; |
532 if (vinfo == NULL) { | |
533 mp_msg(MSGT_VO, MSGL_FATAL, "[gl2] no GLX support present\n"); | |
534 return -1; | |
535 } | |
2124 | 536 |
23655
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23651
diff
changeset
|
537 vo_x11_create_vo_window(vinfo, vo_dx, vo_dy, d_width, d_height, |
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23651
diff
changeset
|
538 flags, vo_x11_create_colormap(vinfo), "gl2", title); |
2124 | 539 |
23651 | 540 return 0; |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
541 } |
18949 | 542 #endif |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
543 |
12382 | 544 #ifdef HAVE_NEW_GUI |
12750
38c660174053
removed XFlush() before XSync(), made config_glx return-type signed, force 32bit on Darwin, idea from a patch by Marc Hoffman (mmh <at> pleasantst.com).
reimar
parents:
12709
diff
changeset
|
545 static int config_glx_gui(uint32_t d_width, uint32_t d_height) { |
12382 | 546 guiGetEvent( guiSetShVideo,0 ); // the GUI will set up / resize the window |
547 return 0; | |
548 } | |
549 #endif | |
550 | |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
551 static int initGl(uint32_t d_width, uint32_t d_height) |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
552 { |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
553 fragprog = lookupTex = 0; |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
554 if (initTextures() < 0) |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
555 return -1; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
556 |
23651 | 557 glDisable(GL_BLEND); |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
558 glDisable(GL_DEPTH_TEST); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
559 glDepthMask(GL_FALSE); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
560 glDisable(GL_CULL_FACE); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
561 glEnable (GL_TEXTURE_2D); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
562 if (image_format == IMGFMT_YV12) { |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
563 switch (use_yuv) { |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
564 case YUV_CONVERSION_FRAGMENT_LOOKUP: |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
565 glGenTextures(1, &lookupTex); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
566 ActiveTexture(GL_TEXTURE3); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
567 glBindTexture(GL_TEXTURE_2D, lookupTex); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
568 ActiveTexture(GL_TEXTURE0); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
569 glBindTexture(GL_TEXTURE_2D, 0); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
570 case YUV_CONVERSION_FRAGMENT_POW: |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
571 case YUV_CONVERSION_FRAGMENT: |
18584
212999db0203
Avoid crash with e.g. -vo gl2:yuv=2 when no fragment program functions are available
reimar
parents:
18116
diff
changeset
|
572 if (!GenPrograms || !BindProgram) { |
212999db0203
Avoid crash with e.g. -vo gl2:yuv=2 when no fragment program functions are available
reimar
parents:
18116
diff
changeset
|
573 mp_msg(MSGT_VO, MSGL_ERR, "[gl] fragment program functions missing!\n"); |
212999db0203
Avoid crash with e.g. -vo gl2:yuv=2 when no fragment program functions are available
reimar
parents:
18116
diff
changeset
|
574 break; |
212999db0203
Avoid crash with e.g. -vo gl2:yuv=2 when no fragment program functions are available
reimar
parents:
18116
diff
changeset
|
575 } |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
576 GenPrograms(1, &fragprog); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
577 BindProgram(GL_FRAGMENT_PROGRAM, fragprog); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
578 break; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
579 } |
18619
106a0c366002
Reworked YUV2RGB fragment program setup in preparation for upcoming patches
reimar
parents:
18584
diff
changeset
|
580 glSetupYUVConversion(GL_TEXTURE_2D, use_yuv, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, |
106a0c366002
Reworked YUV2RGB fragment program setup in preparation for upcoming patches
reimar
parents:
18584
diff
changeset
|
581 texture_width, texture_height); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
582 } |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
583 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
584 gl_set_antialias(0); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
585 gl_set_bilinear(1); |
23651 | 586 |
14078
c4033dcb986f
More similar code from gl and gl2 moved to gl_common
reimar
parents:
13926
diff
changeset
|
587 mp_msg(MSGT_VO, MSGL_V, "[gl2] Using image_bpp=%d, image_bytes=%d, \n\tgl_bitmap_format=%s, gl_bitmap_type=%s, \n\trgb_size=%d (%d,%d,%d), a_sz=%d, \n\tgl_internal_format=%s\n", |
23651 | 588 image_bpp, image_bytes, |
14078
c4033dcb986f
More similar code from gl and gl2 moved to gl_common
reimar
parents:
13926
diff
changeset
|
589 glValName(gl_bitmap_format), glValName(gl_bitmap_type), |
c4033dcb986f
More similar code from gl and gl2 moved to gl_common
reimar
parents:
13926
diff
changeset
|
590 rgb_sz, r_sz, g_sz, b_sz, a_sz, glValName(gl_internal_format)); |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
591 |
11087 | 592 resize(&d_width, &d_height); |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
593 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
594 glClearColor( 0.0f,0.0f,0.0f,0.0f ); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
595 glClear( GL_COLOR_BUFFER_BIT ); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
596 |
13926
b7ba9bcd1916
Avoid drawing before transformation matrices are set up.
reimar
parents:
13877
diff
changeset
|
597 drawTextureDisplay (); |
b7ba9bcd1916
Avoid drawing before transformation matrices are set up.
reimar
parents:
13877
diff
changeset
|
598 |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
599 return 0; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
600 } |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
601 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
602 /* connect to server, create and map window, |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
603 * allocate colors and (shared) memory |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
604 */ |
23651 | 605 static int |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
606 config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format) |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
607 { |
23651 | 608 const unsigned char * glVersion; |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
609 |
23651 | 610 image_height = height; |
611 image_width = width; | |
612 image_format = format; | |
613 | |
614 int_pause = 0; | |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
615 |
18949 | 616 #ifdef HAVE_NEW_GUI |
23651 | 617 if (use_gui) { |
618 if (config_glx_gui(d_width, d_height) == -1) | |
619 return -1; | |
620 } | |
621 #ifndef GL_WIN32 | |
622 else | |
18949 | 623 #endif |
12382 | 624 #endif |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
625 #ifdef GL_WIN32 |
23651 | 626 if (config_w32(width, height, d_width, d_height, flags, title, format) == -1) |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
627 #else |
23651 | 628 if (config_glx(width, height, d_width, d_height, flags, title, format) == -1) |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
629 #endif |
23651 | 630 return -1; |
631 | |
14142
f0c1ee83b216
Improving gl2 under windows, moving some functionality to gl_common
reimar
parents:
14090
diff
changeset
|
632 setGlWindow(&gl_vinfo, &gl_context, vo_window); |
f0c1ee83b216
Improving gl2 under windows, moving some functionality to gl_common
reimar
parents:
14090
diff
changeset
|
633 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
634 glVersion = glGetString(GL_VERSION); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
635 |
11988 | 636 mp_msg(MSGT_VO, MSGL_V, "[gl2] OpenGL Driver Information:\n"); |
23651 | 637 mp_msg(MSGT_VO, MSGL_V, "\tvendor: %s,\n\trenderer %s,\n\tversion %s\n", |
638 glGetString(GL_VENDOR), glGetString(GL_RENDERER), glVersion); | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
639 |
23651 | 640 if(glVersion[0]>'1' || (glVersion[0]=='1' && glVersion[2]>='2') ) |
641 isGL12 = GL_TRUE; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
642 else |
23651 | 643 isGL12 = GL_FALSE; |
2124 | 644 |
23651 | 645 if(isGL12) { |
646 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] You have OpenGL >= 1.2 capable drivers, GOOD (16bpp and BGR is ok!)\n"); | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
647 } else { |
23651 | 648 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] You have OpenGL < 1.2 drivers, BAD (16bpp and BGR may be damaged!)\n"); |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
649 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
650 |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
651 glFindFormat(format, &image_bpp, &gl_internal_format, &gl_bitmap_format, &gl_bitmap_type); |
2124 | 652 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
653 image_bytes=(image_bpp+7)/8; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
654 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
655 draw_alpha_fnc=draw_alpha_null; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
656 |
23651 | 657 switch(image_bpp) { |
658 case 15: | |
659 draw_alpha_fnc=draw_alpha_15; break; | |
660 case 16: | |
661 draw_alpha_fnc=draw_alpha_16; break; | |
662 case 24: | |
663 draw_alpha_fnc=draw_alpha_24; break; | |
664 case 32: | |
665 draw_alpha_fnc=draw_alpha_32; break; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
666 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
667 |
15748 | 668 if (initGl(vo_dwidth, vo_dheight) == -1) |
23651 | 669 return -1; |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
670 #ifndef GL_WIN32 |
23651 | 671 if (vo_ontop) vo_x11_setlayer(mDisplay,vo_window, vo_ontop); |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
672 #endif |
2124 | 673 |
23651 | 674 return 0; |
2124 | 675 } |
676 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
677 static int gl_handlekey(int key) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
678 { |
23651 | 679 if(key=='a'||key=='A') { |
680 gl_set_antialias(!gl_antialias); | |
681 return 0; | |
682 } else if(key=='b'||key=='B') { | |
683 gl_set_bilinear(-1); | |
684 return 0; | |
685 } | |
686 return 1; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
687 } |
2124 | 688 |
689 static void check_events(void) | |
690 { | |
23651 | 691 int e; |
17116 | 692 #ifndef GL_WIN32 |
23651 | 693 XEvent Event; |
694 char buf[100]; | |
695 KeySym keySym; | |
696 int key; | |
697 static XComposeStatus stat; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
698 |
23651 | 699 while ( XPending( mDisplay ) ) { |
700 XNextEvent( mDisplay,&Event ); | |
701 if( Event.type == KeyPress ) { | |
702 XLookupString( &Event.xkey,buf,sizeof(buf),&keySym,&stat ); | |
703 key = (keySym&0xff00) != 0 ? (keySym&0x00ff) + 256 : keySym; | |
704 if(gl_handlekey(key)) | |
705 XPutBackEvent(mDisplay, &Event); | |
706 break; | |
707 } else { | |
708 XPutBackEvent(mDisplay, &Event); | |
709 break; | |
710 } | |
711 } | |
17116 | 712 #endif |
23651 | 713 e=vo_check_events(); |
714 if(e&VO_EVENT_RESIZE) resize(&vo_dwidth, &vo_dheight); | |
715 if(e&VO_EVENT_EXPOSE && int_pause) flip_page(); | |
2124 | 716 } |
717 | |
718 static void draw_osd(void) | |
12446
59cd81e2e1ef
fixed memory leak and removed unnecessary static variable
reimar
parents:
12394
diff
changeset
|
719 { |
59cd81e2e1ef
fixed memory leak and removed unnecessary static variable
reimar
parents:
12394
diff
changeset
|
720 if (ImageData) |
59cd81e2e1ef
fixed memory leak and removed unnecessary static variable
reimar
parents:
12394
diff
changeset
|
721 vo_draw_text(image_width,image_height,draw_alpha_fnc); |
59cd81e2e1ef
fixed memory leak and removed unnecessary static variable
reimar
parents:
12394
diff
changeset
|
722 } |
2124 | 723 |
724 static void | |
725 flip_page(void) | |
726 { | |
727 drawTextureDisplay(); | |
728 | |
729 // glFlush(); | |
16475 | 730 if (use_glFinish) |
2124 | 731 glFinish(); |
17116 | 732 swapGlBuffers(); |
12394
b3ff1a576b8c
clear buffer after (glX)SwapBuffers in fullscreen to avoid flickering borders
reimar
parents:
12382
diff
changeset
|
733 |
b3ff1a576b8c
clear buffer after (glX)SwapBuffers in fullscreen to avoid flickering borders
reimar
parents:
12382
diff
changeset
|
734 if (vo_fs) // Avoid flickering borders in fullscreen mode |
b3ff1a576b8c
clear buffer after (glX)SwapBuffers in fullscreen to avoid flickering borders
reimar
parents:
12382
diff
changeset
|
735 glClear (GL_COLOR_BUFFER_BIT); |
2124 | 736 } |
737 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15748
diff
changeset
|
738 static int draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y) |
2124 | 739 { |
16583
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
740 uint8_t *yptr = src[0], *uptr = src[1], *vptr = src[2]; |
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
741 int ystride = stride[0], ustride = stride[1], vstride = stride[2]; |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
742 int rem_h = h; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
743 struct TexSquare *texline = &texgrid[y / texture_height * texnumx]; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
744 int subtex_y = y % texture_width; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
745 while (rem_h > 0) { |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
746 int rem_w = w; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
747 struct TexSquare *tsq = &texline[x / texture_width]; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
748 int subtex_x = x % texture_height; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
749 int subtex_h = rem_h; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
750 if (subtex_y + subtex_h > texture_height) |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
751 subtex_h = texture_height - subtex_y; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
752 while (rem_w > 0) { |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
753 int subtex_w = rem_w; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
754 if (subtex_x + subtex_w > texture_width) |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
755 subtex_w = texture_width - subtex_x; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
756 ActiveTexture(GL_TEXTURE0); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
757 glBindTexture(GL_TEXTURE_2D, tsq->texobj); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
758 glUploadTex(GL_TEXTURE_2D, gl_bitmap_format, gl_bitmap_type, |
16583
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
759 yptr, ystride, subtex_x, subtex_y, |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
760 subtex_w, subtex_h, 0); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
761 ActiveTexture(GL_TEXTURE1); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
762 glBindTexture(GL_TEXTURE_2D, tsq->uvtexobjs[0]); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
763 glUploadTex(GL_TEXTURE_2D, gl_bitmap_format, gl_bitmap_type, |
16583
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
764 uptr, ustride, subtex_x / 2, subtex_y / 2, |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
765 subtex_w / 2, subtex_h / 2, 0); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
766 ActiveTexture(GL_TEXTURE2); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
767 glBindTexture(GL_TEXTURE_2D, tsq->uvtexobjs[1]); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
768 glUploadTex(GL_TEXTURE_2D, gl_bitmap_format, gl_bitmap_type, |
16583
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
769 vptr, vstride, subtex_x / 2, subtex_y / 2, |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
770 subtex_w / 2, subtex_h / 2, 0); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
771 subtex_x = 0; |
16583
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
772 yptr += subtex_w; |
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
773 uptr += subtex_w / 2; |
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
774 vptr += subtex_w / 2; |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
775 tsq++; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
776 rem_w -= subtex_w; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
777 } |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
778 subtex_y = 0; |
16583
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
779 yptr += subtex_h * ystride - w; |
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
780 uptr += subtex_h / 2 * ustride - w / 2; |
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
781 vptr += subtex_h / 2 * vstride - w / 2; |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
782 texline += texnumx; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
783 rem_h -= subtex_h; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
784 } |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
785 ActiveTexture(GL_TEXTURE0); |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
786 return 0; |
2124 | 787 } |
788 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15748
diff
changeset
|
789 static int |
2124 | 790 draw_frame(uint8_t *src[]) |
791 { | |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
792 if (image_format == IMGFMT_YV12) { |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
793 mp_msg(MSGT_VO, MSGL_ERR, "[gl2] error: draw_frame called for YV12!\n"); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
794 return 0; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
795 } |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
796 ImageData=(unsigned char *)src[0]; |
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
797 resetTexturePointers(ImageData); |
23649
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
798 texdirty = 1; |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
799 return 0; |
2124 | 800 } |
801 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15748
diff
changeset
|
802 static int |
2124 | 803 query_format(uint32_t format) |
804 { | |
23651 | 805 switch(format) { |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
806 case IMGFMT_YV12: |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
807 if (use_yuv) |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
808 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD | |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
809 VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_ACCEPT_STRIDE; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
810 break; |
12750
38c660174053
removed XFlush() before XSync(), made config_glx return-type signed, force 32bit on Darwin, idea from a patch by Marc Hoffman (mmh <at> pleasantst.com).
reimar
parents:
12709
diff
changeset
|
811 #ifdef SYS_DARWIN |
38c660174053
removed XFlush() before XSync(), made config_glx return-type signed, force 32bit on Darwin, idea from a patch by Marc Hoffman (mmh <at> pleasantst.com).
reimar
parents:
12709
diff
changeset
|
812 case IMGFMT_RGB32: |
38c660174053
removed XFlush() before XSync(), made config_glx return-type signed, force 32bit on Darwin, idea from a patch by Marc Hoffman (mmh <at> pleasantst.com).
reimar
parents:
12709
diff
changeset
|
813 #else |
10143
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
814 case IMGFMT_RGB24: |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
815 case IMGFMT_BGR24: |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
816 // case IMGFMT_RGB32: |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
817 // case IMGFMT_BGR32: |
12750
38c660174053
removed XFlush() before XSync(), made config_glx return-type signed, force 32bit on Darwin, idea from a patch by Marc Hoffman (mmh <at> pleasantst.com).
reimar
parents:
12709
diff
changeset
|
818 #endif |
6212 | 819 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD; |
23651 | 820 } |
821 return 0; | |
2124 | 822 } |
823 | |
824 | |
825 static void | |
826 uninit(void) | |
827 { | |
6095 | 828 if ( !vo_config_count ) return; |
13871 | 829 releaseGlContext(&gl_vinfo, &gl_context); |
13540 | 830 if (texgrid) { |
831 free(texgrid); | |
832 texgrid = NULL; | |
833 } | |
17116 | 834 vo_uninit(); |
2124 | 835 } |
4352 | 836 |
16475 | 837 static opt_t subopts[] = { |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
838 {"yuv", OPT_ARG_INT, &use_yuv, (opt_test_f)int_non_neg}, |
16475 | 839 {"glfinish", OPT_ARG_BOOL, &use_glFinish, NULL}, |
840 {NULL} | |
841 }; | |
842 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15748
diff
changeset
|
843 static int preinit(const char *arg) |
4352 | 844 { |
16475 | 845 // set defaults |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
846 use_yuv = 0; |
16475 | 847 use_glFinish = 1; |
848 if (subopt_parse(arg, subopts) != 0) { | |
849 mp_msg(MSGT_VO, MSGL_FATAL, | |
850 "\n-vo gl2 command line help:\n" | |
851 "Example: mplayer -vo gl2:noglfinish\n" | |
852 "\nOptions:\n" | |
853 " noglfinish\n" | |
854 " Do not call glFinish() before swapping buffers\n" | |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
855 " yuv=<n>\n" |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
856 " 0: use software YUV to RGB conversion.\n" |
16626 | 857 " 1: use register combiners (nVidia only, for older cards).\n" |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
858 " 2: use fragment program.\n" |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
859 " 3: use fragment program with gamma correction.\n" |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
860 " 4: use fragment program with gamma correction via lookup.\n" |
16626 | 861 " 5: use ATI-specific method (for older cards).\n" |
16475 | 862 "\n" ); |
863 return -1; | |
864 } | |
7931 | 865 if( !vo_init() ) return -1; // Can't open X11 |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4658
diff
changeset
|
866 return 0; |
4352 | 867 } |
868 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15748
diff
changeset
|
869 static int control(uint32_t request, void *data, ...) |
4352 | 870 { |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4440
diff
changeset
|
871 switch (request) { |
23651 | 872 case VOCTRL_PAUSE: return (int_pause=1); |
873 case VOCTRL_RESUME: return (int_pause=0); | |
874 case VOCTRL_QUERY_FORMAT: | |
875 return query_format(*((uint32_t*)data)); | |
876 case VOCTRL_GUISUPPORT: | |
877 return VO_TRUE; | |
878 case VOCTRL_ONTOP: | |
879 vo_ontop(); | |
880 return VO_TRUE; | |
881 case VOCTRL_FULLSCREEN: | |
882 vo_fullscreen(); | |
883 if (setGlWindow(&gl_vinfo, &gl_context, vo_window) == SET_WINDOW_REINIT) | |
884 initGl(vo_dwidth, vo_dheight); | |
885 resize(&vo_dwidth, &vo_dheight); | |
886 return VO_TRUE; | |
17006
852499addaa8
Enable border toggling for gl and gl2 under windows.
reimar
parents:
16626
diff
changeset
|
887 #ifdef GL_WIN32 |
23651 | 888 case VOCTRL_BORDER: |
889 vo_w32_border(); | |
890 return VO_TRUE; | |
17006
852499addaa8
Enable border toggling for gl and gl2 under windows.
reimar
parents:
16626
diff
changeset
|
891 #endif |
23651 | 892 case VOCTRL_GET_PANSCAN: |
893 return VO_TRUE; | |
894 case VOCTRL_SET_PANSCAN: | |
895 resize (&vo_dwidth, &vo_dheight); | |
896 return VO_TRUE; | |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
897 #ifndef GL_WIN32 |
23651 | 898 case VOCTRL_SET_EQUALIZER: |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
899 { |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
900 va_list ap; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
901 int value; |
23651 | 902 |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
903 va_start(ap, data); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
904 value = va_arg(ap, int); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
905 va_end(ap); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
906 return vo_x11_set_equalizer(data, value); |
23651 | 907 } |
908 case VOCTRL_GET_EQUALIZER: | |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
909 { |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
910 va_list ap; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
911 int *value; |
23651 | 912 |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
913 va_start(ap, data); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
914 value = va_arg(ap, int *); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
915 va_end(ap); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
916 return vo_x11_get_equalizer(data, value); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
917 } |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
918 #endif |
23651 | 919 case VOCTRL_UPDATE_SCREENINFO: |
920 update_xinerama_info(); | |
921 return VO_TRUE; | |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4440
diff
changeset
|
922 } |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4440
diff
changeset
|
923 return VO_NOTIMPL; |
4352 | 924 } |