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