annotate libvo/vo_gl.c @ 12274:6fbd0aa81550

Suggest -playlist if asf_stream_start fails Patch by adland
author rtognimp
date Sun, 25 Apr 2004 12:46:37 +0000
parents 2e8b305586a0
children d97398ed403e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1 #define TEXTUREFORMAT_32BPP
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
3 #include <stdio.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
4 #include <stdlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
5 #include <string.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
6 #include <math.h>
4737
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4658
diff changeset
7 #include <errno.h>
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
8
11988
ccb15c72f331 printf -> mp_msg
attila
parents: 11542
diff changeset
9 #include "mp_msg.h"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10 #include "config.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11 #include "video_out.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
12 #include "video_out_internal.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
13
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
14 #include <X11/Xlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15 #include <X11/Xutil.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
16 //#include <X11/keysym.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
17 #include <GL/glx.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
18 #include <errno.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
20 #include <GL/gl.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
21
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
22 #include "x11_common.h"
2057
378aed6b232d Use aspect()
atmos4
parents: 2041
diff changeset
23 #include "aspect.h"
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
24
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7931
diff changeset
25 static vo_info_t info =
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
26 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
27 "X11 (OpenGL)",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
28 "gl",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
29 "Arpad Gereoffy <arpi@esp-team.scene.hu>",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
30 ""
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
31 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
32
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7931
diff changeset
33 LIBVO_EXTERN(gl)
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7931
diff changeset
34
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
35 /* local data */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
36 static unsigned char *ImageData=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
37
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
38 static GLXContext wsGLXContext;
2041
ba8a225d1a18 now using x11_common stuff for X11 opening and w/h/bpp query
arpi
parents: 2040
diff changeset
39 static int wsGLXAttrib[] = { GLX_RGBA,
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
40 GLX_RED_SIZE,1,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
41 GLX_GREEN_SIZE,1,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
42 GLX_BLUE_SIZE,1,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
43 GLX_DOUBLEBUFFER,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
44 None };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
45
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
46
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47 static uint32_t image_width;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48 static uint32_t image_height;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
49 static uint32_t image_bytes;
12159
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
50 static int many_fmts;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
51 static GLenum gl_format;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
52 static GLenum gl_type;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
53
10757
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10138
diff changeset
54 static int int_pause;
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10138
diff changeset
55
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56 static uint32_t texture_width;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
57 static uint32_t texture_height;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
58
8654
2c4cebb8637d - optional slice height for -vo gl (example: -vo gl:32)
arpi
parents: 8148
diff changeset
59 static int slice_height=1;
2c4cebb8637d - optional slice height for -vo gl (example: -vo gl:32)
arpi
parents: 8148
diff changeset
60
612
77e0094f0cce some warnings killed
szabii
parents: 384
diff changeset
61 static void resize(int x,int y){
11988
ccb15c72f331 printf -> mp_msg
attila
parents: 11542
diff changeset
62 mp_msg(MSGT_VO, MSGL_V, "[gl] Resize: %dx%d\n",x,y);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63 glViewport( 0, 0, x, y );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
64
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
65 glMatrixMode(GL_PROJECTION);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
66 glLoadIdentity();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67 glOrtho(0, image_width, image_height, 0, -1,1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
68
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69 glMatrixMode(GL_MODELVIEW);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
70 glLoadIdentity();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
72
12159
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
73 static int find_gl_format (uint32_t format)
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
74 {
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
75 switch (format) {
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
76 case IMGFMT_RGB24:
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
77 gl_format = GL_RGB;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
78 gl_type = GL_UNSIGNED_BYTE;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
79 break;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
80 case IMGFMT_RGB32:
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
81 gl_format = GL_RGBA;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
82 gl_type = GL_UNSIGNED_BYTE;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
83 break;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
84 case IMGFMT_Y800:
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
85 case IMGFMT_Y8:
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
86 gl_format = GL_LUMINANCE;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
87 gl_type = GL_UNSIGNED_BYTE;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
88 break;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
89 #ifdef GL_VERSION_1_2
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
90 case IMGFMT_RGB8:
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
91 gl_format = GL_RGB;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
92 gl_type = GL_UNSIGNED_BYTE_3_3_2;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
93 break;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
94 case IMGFMT_RGB15:
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
95 gl_format = GL_RGBA;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
96 gl_type = GL_UNSIGNED_SHORT_5_5_5_1;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
97 break;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
98 case IMGFMT_RGB16:
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
99 gl_format = GL_RGB;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
100 gl_type = GL_UNSIGNED_SHORT_5_6_5;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
101 break;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
102 case IMGFMT_BGR8:
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
103 // special case as red and blue have a differen number of bits.
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
104 // GL_BGR and GL_UNSIGNED_BYTE_3_3_2 isn't supported at least
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
105 // by nVidia drivers, and in addition would give more bits to
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
106 // blue than to red, which isn't wanted
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
107 gl_format = GL_RGB;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
108 gl_type = GL_UNSIGNED_BYTE_2_3_3_REV;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
109 break;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
110 case IMGFMT_BGR15:
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
111 gl_format = GL_BGRA;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
112 gl_type = GL_UNSIGNED_SHORT_5_5_5_1;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
113 break;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
114 case IMGFMT_BGR16:
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
115 gl_format = GL_RGB;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
116 gl_type = GL_UNSIGNED_SHORT_5_6_5_REV;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
117 break;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
118 case IMGFMT_BGR24:
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
119 gl_format = GL_BGR;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
120 gl_type = GL_UNSIGNED_BYTE;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
121 break;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
122 case IMGFMT_BGR32:
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
123 gl_format = GL_BGRA;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
124 gl_type = GL_UNSIGNED_BYTE;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
125 break;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
126 #endif
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
127 default:
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
128 gl_format = GL_RGBA;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
129 gl_type = GL_UNSIGNED_BYTE;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
130 return 0;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
131 }
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
132 return 1;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
133 }
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
134
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
135 /* connect to server, create and map window,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
136 * allocate colors and (shared) memory
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
137 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
138 static uint32_t
7124
eca7dbad0166 finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents: 7111
diff changeset
139 config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
140 {
2041
ba8a225d1a18 now using x11_common stuff for X11 opening and w/h/bpp query
arpi
parents: 2040
diff changeset
141 // int screen;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
142 unsigned int fg, bg;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143 XSizeHints hint;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
144 XVisualInfo *vinfo;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
145 XEvent xev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
146
1109
a013b2124f05 -Wall like fixes
al3x
parents: 614
diff changeset
147 // XGCValues xgcv;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
148
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
149 image_height = height;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
150 image_width = width;
12159
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
151 find_gl_format (format);
10919
dbb3f474c9de fix fullscreen switching in vo gl and vo gl2
faust3
parents: 10757
diff changeset
152 vo_dwidth = d_width;
dbb3f474c9de fix fullscreen switching in vo gl and vo gl2
faust3
parents: 10757
diff changeset
153 vo_dheight = d_height;
10757
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10138
diff changeset
154
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10138
diff changeset
155 int_pause = 0;
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10138
diff changeset
156
2249
48f0ac1e9d13 Update to new (cleaner, more bugfree, better) aspect api. vo_gl vo_gl2 and vo_xmga are untested!
atmos4
parents: 2057
diff changeset
157 aspect_save_orig(width,height);
48f0ac1e9d13 Update to new (cleaner, more bugfree, better) aspect api. vo_gl vo_gl2 and vo_xmga are untested!
atmos4
parents: 2057
diff changeset
158 aspect_save_prescale(d_width,d_height);
48f0ac1e9d13 Update to new (cleaner, more bugfree, better) aspect api. vo_gl vo_gl2 and vo_xmga are untested!
atmos4
parents: 2057
diff changeset
159 aspect_save_screenres(vo_screenwidth,vo_screenheight);
48f0ac1e9d13 Update to new (cleaner, more bugfree, better) aspect api. vo_gl vo_gl2 and vo_xmga are untested!
atmos4
parents: 2057
diff changeset
160
48f0ac1e9d13 Update to new (cleaner, more bugfree, better) aspect api. vo_gl vo_gl2 and vo_xmga are untested!
atmos4
parents: 2057
diff changeset
161 aspect(&d_width,&d_height,A_NOZOOM);
2040
bf7764f429c9 -fs fix
atmos4
parents: 1501
diff changeset
162 #ifdef X11_FULLSCREEN
6095
891cff8aba60 some cleanup, gl/gl2 updated to use vo_window
arpi
parents: 5651
diff changeset
163 // if( flags&0x01 ){ // (-fs)
891cff8aba60 some cleanup, gl/gl2 updated to use vo_window
arpi
parents: 5651
diff changeset
164 // aspect(&d_width,&d_height,A_ZOOM);
891cff8aba60 some cleanup, gl/gl2 updated to use vo_window
arpi
parents: 5651
diff changeset
165 // }
2040
bf7764f429c9 -fs fix
atmos4
parents: 1501
diff changeset
166 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
167 hint.x = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
168 hint.y = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
169 hint.width = d_width;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
170 hint.height = d_height;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
171 hint.flags = PPosition | PSize;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
172
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
173 /* Get some colors */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
174
2041
ba8a225d1a18 now using x11_common stuff for X11 opening and w/h/bpp query
arpi
parents: 2040
diff changeset
175 bg = WhitePixel(mDisplay, mScreen);
ba8a225d1a18 now using x11_common stuff for X11 opening and w/h/bpp query
arpi
parents: 2040
diff changeset
176 fg = BlackPixel(mDisplay, mScreen);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
177
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
178 /* Make the window */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
179
2041
ba8a225d1a18 now using x11_common stuff for X11 opening and w/h/bpp query
arpi
parents: 2040
diff changeset
180 vinfo=glXChooseVisual( mDisplay,mScreen,wsGLXAttrib );
1290
af0b764f34c5 no segfault if no glx present
alex
parents: 1137
diff changeset
181 if (vinfo == NULL)
af0b764f34c5 no segfault if no glx present
alex
parents: 1137
diff changeset
182 {
11988
ccb15c72f331 printf -> mp_msg
attila
parents: 11542
diff changeset
183 mp_msg(MSGT_VO, MSGL_ERR, "[gl] no GLX support present\n");
1290
af0b764f34c5 no segfault if no glx present
alex
parents: 1137
diff changeset
184 return -1;
af0b764f34c5 no segfault if no glx present
alex
parents: 1137
diff changeset
185 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
186
10757
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10138
diff changeset
187
1137
4c7b219e126c patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents: 1109
diff changeset
188
7777
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
189 if ( vo_window == None )
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
190 {
10757
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10138
diff changeset
191 vo_window = vo_x11_create_smooth_window(mDisplay, mRootWin, vinfo->visual, hint.x, hint.y, hint.width, hint.height,
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10138
diff changeset
192 vinfo->depth, XCreateColormap(mDisplay, mRootWin, vinfo->visual, AllocNone));
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
193
7777
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
194 vo_x11_classhint( mDisplay,vo_window,"gl" );
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
195 vo_hidecursor(mDisplay,vo_window);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
196
7777
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
197 // if ( flags&0x01 ) vo_x11_decoration( mDisplay,vo_window,0 );
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
198 XSelectInput(mDisplay, vo_window, StructureNotifyMask);
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
199 /* Tell other applications about this window */
10138
5e286cc6ad21 Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
alex
parents: 8654
diff changeset
200 XSetStandardProperties(mDisplay, vo_window, title, title, None, NULL, 0, &hint);
7777
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
201 /* Map window. */
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
202 XMapWindow(mDisplay, vo_window);
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
203 if ( flags&1 ) vo_x11_fullscreen();
4017
21a75ab24703 Xinerama patch number two by attila.
atmos4
parents: 2732
diff changeset
204 #ifdef HAVE_XINERAMA
7777
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
205 vo_x11_xinerama_move(mDisplay,vo_window);
4017
21a75ab24703 Xinerama patch number two by attila.
atmos4
parents: 2732
diff changeset
206 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
207
7777
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
208 /* Wait for map. */
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
209 do
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
210 {
2041
ba8a225d1a18 now using x11_common stuff for X11 opening and w/h/bpp query
arpi
parents: 2040
diff changeset
211 XNextEvent(mDisplay, &xev);
7777
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
212 }
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
213 while (xev.type != MapNotify || xev.xmap.event != vo_window);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
214
7777
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
215 XSelectInput(mDisplay, vo_window, NoEventMask);
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
216 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
217
7777
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
218 if ( vo_config_count ) glXDestroyContext( mDisplay,wsGLXContext );
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
219 wsGLXContext=glXCreateContext( mDisplay,vinfo,NULL,True );
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
220 glXMakeCurrent( mDisplay,vo_window,wsGLXContext );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
221
2041
ba8a225d1a18 now using x11_common stuff for X11 opening and w/h/bpp query
arpi
parents: 2040
diff changeset
222 XFlush(mDisplay);
ba8a225d1a18 now using x11_common stuff for X11 opening and w/h/bpp query
arpi
parents: 2040
diff changeset
223 XSync(mDisplay, False);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
224
6953
ce67cc1f0beb ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents: 6212
diff changeset
225 vo_x11_selectinput_witherr(mDisplay, vo_window, StructureNotifyMask | KeyPressMask | PointerMotionMask
10757
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10138
diff changeset
226 | ButtonPressMask | ButtonReleaseMask | ExposureMask
4658
93d562ad1c22 Added new input mouse support in x11 vo
albeu
parents: 4596
diff changeset
227 );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
228
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
229 texture_width=32;
10138
5e286cc6ad21 Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
alex
parents: 8654
diff changeset
230 while(texture_width<image_width || texture_width<image_height) texture_width*=2;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
231 texture_height=texture_width;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
232
10138
5e286cc6ad21 Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
alex
parents: 8654
diff changeset
233 image_bytes=(IMGFMT_RGB_DEPTH(format)+7)/8;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
234
7777
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
235 if ( ImageData ) free( ImageData );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
236 ImageData=malloc(texture_width*texture_height*image_bytes);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
237 memset(ImageData,128,texture_width*texture_height*image_bytes);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
238
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
239 glDisable(GL_BLEND);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
240 glDisable(GL_DEPTH_TEST);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
241 glDepthMask(GL_FALSE);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
242 glDisable(GL_CULL_FACE);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
243
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
244 glEnable(GL_TEXTURE_2D);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
245
11988
ccb15c72f331 printf -> mp_msg
attila
parents: 11542
diff changeset
246 mp_msg(MSGT_VO, MSGL_V, "[gl] Creating %dx%d texture...\n",texture_width,texture_height);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
247
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
248 #if 1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
249 // glBindTexture(GL_TEXTURE_2D, texture_id);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
250 glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
251 glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
10138
5e286cc6ad21 Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
alex
parents: 8654
diff changeset
252 /* Old OpenGL 1.0 used the third parameter (known as internalFormat) as an
5e286cc6ad21 Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
alex
parents: 8654
diff changeset
253 integer, which indicated the bytes per pixel (bpp). Later in OpenGL 1.1
5e286cc6ad21 Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
alex
parents: 8654
diff changeset
254 they switched to constants, like GL_RGB8. GL_RGB8 means 8 bits for each
5e286cc6ad21 Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
alex
parents: 8654
diff changeset
255 channel (R,G,B), so it's equal to RGB24. It should be safe to pass the
5e286cc6ad21 Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
alex
parents: 8654
diff changeset
256 image_bytes to internalFormat with newer OpenGL versions.
5e286cc6ad21 Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
alex
parents: 8654
diff changeset
257 Anyway, I'm leaving this so as it was, it doesn't hurt, as OpenGL 1.1 is
5e286cc6ad21 Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
alex
parents: 8654
diff changeset
258 about 10 years old too. -- alex
5e286cc6ad21 Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
alex
parents: 8654
diff changeset
259 */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
260 #ifdef TEXTUREFORMAT_32BPP
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
261 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, texture_width, texture_height, 0,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
262 #else
10138
5e286cc6ad21 Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
alex
parents: 8654
diff changeset
263 glTexImage2D(GL_TEXTURE_2D, 0, image_bytes, texture_width, texture_height, 0,
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
264 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
265 (image_bytes==4)?GL_RGBA:GL_BGR, GL_UNSIGNED_BYTE, ImageData);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
266 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
267
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
268 resize(d_width,d_height);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
269
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
270 glClearColor( 1.0f,0.0f,1.0f,0.0f );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
271 glClear( GL_COLOR_BUFFER_BIT );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
272
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
273 // printf("OpenGL setup OK!\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
274
2041
ba8a225d1a18 now using x11_common stuff for X11 opening and w/h/bpp query
arpi
parents: 2040
diff changeset
275 saver_off(mDisplay); // turning off screen saver
ba8a225d1a18 now using x11_common stuff for X11 opening and w/h/bpp query
arpi
parents: 2040
diff changeset
276
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10919
diff changeset
277 if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10919
diff changeset
278
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
279 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
280 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
281
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
282 static void check_events(void)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
283 {
2041
ba8a225d1a18 now using x11_common stuff for X11 opening and w/h/bpp query
arpi
parents: 2040
diff changeset
284 int e=vo_x11_check_events(mDisplay);
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
285 if(e&VO_EVENT_RESIZE) resize(vo_dwidth,vo_dheight);
10757
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10138
diff changeset
286 if(e&VO_EVENT_EXPOSE && int_pause) flip_page();
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
287 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
288
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1302
diff changeset
289 static void draw_osd(void)
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1302
diff changeset
290 {
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1302
diff changeset
291 }
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
292
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
293 static void
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
294 flip_page(void)
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
295 {
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
296
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
297 // glEnable(GL_TEXTURE_2D);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
298 // glBindTexture(GL_TEXTURE_2D, texture_id);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
299
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
300 glColor3f(1,1,1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
301 glBegin(GL_QUADS);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
302 glTexCoord2f(0,0);glVertex2i(0,0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
303 glTexCoord2f(0,1);glVertex2i(0,texture_height);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
304 glTexCoord2f(1,1);glVertex2i(texture_width,texture_height);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
305 glTexCoord2f(1,0);glVertex2i(texture_width,0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
306 glEnd();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
307
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
308 // glFlush();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
309 glFinish();
6095
891cff8aba60 some cleanup, gl/gl2 updated to use vo_window
arpi
parents: 5651
diff changeset
310 glXSwapBuffers( mDisplay,vo_window );
891cff8aba60 some cleanup, gl/gl2 updated to use vo_window
arpi
parents: 5651
diff changeset
311
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
312 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
313
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
314 //static inline uint32_t draw_slice_x11(uint8_t *src[], uint32_t slice_num)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
315 static uint32_t draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
316 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
317 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
318 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
319
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
320
10138
5e286cc6ad21 Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
alex
parents: 8654
diff changeset
321 static uint32_t
5e286cc6ad21 Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
alex
parents: 8654
diff changeset
322 draw_frame(uint8_t *src[])
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
323 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
324 int i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
325 uint8_t *ImageData=src[0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
326
12212
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
327 if (slice_height == 0)
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
328 glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, image_width, image_height,
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
329 gl_format, gl_type, ImageData);
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
330 else
8654
2c4cebb8637d - optional slice height for -vo gl (example: -vo gl:32)
arpi
parents: 8148
diff changeset
331 for(i=0;i<image_height;i+=slice_height){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
332 glTexSubImage2D( GL_TEXTURE_2D, // target
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
333 0, // level
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
334 0, // x offset
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
335 // image_height-1-i, // y offset
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
336 i, // y offset
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
337 image_width, // width
8654
2c4cebb8637d - optional slice height for -vo gl (example: -vo gl:32)
arpi
parents: 8148
diff changeset
338 (i+slice_height<=image_height)?slice_height:image_height-i, // height
12159
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
339 gl_format,
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
340 gl_type,
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
341 ImageData+i*image_bytes*image_width ); // *pixels
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
342 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
343
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
344 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
345 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
346
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
347 static uint32_t
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
348 query_format(uint32_t format)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
349 {
10138
5e286cc6ad21 Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
alex
parents: 8654
diff changeset
350 if ((format == IMGFMT_RGB24) || (format == IMGFMT_RGB32))
6212
2001affedb75 query_format revised
alex
parents: 6095
diff changeset
351 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW;
12159
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
352 if (many_fmts && find_gl_format(format))
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
353 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
354 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
355 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
356
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
357
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
358 static void
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
359 uninit(void)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
360 {
6095
891cff8aba60 some cleanup, gl/gl2 updated to use vo_window
arpi
parents: 5651
diff changeset
361 if ( !vo_config_count ) return;
2041
ba8a225d1a18 now using x11_common stuff for X11 opening and w/h/bpp query
arpi
parents: 2040
diff changeset
362 saver_on(mDisplay); // screen saver back on
6095
891cff8aba60 some cleanup, gl/gl2 updated to use vo_window
arpi
parents: 5651
diff changeset
363 vo_x11_uninit();
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
364 }
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
365
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
366 static uint32_t preinit(const char *arg)
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
367 {
12212
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
368 int parse_err = 0;
12159
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
369 many_fmts = 0;
9d96071652c4 vo_gl supporting more color formats for testing
reimar
parents: 11988
diff changeset
370 slice_height = 4;
4737
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4658
diff changeset
371 if(arg)
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4658
diff changeset
372 {
12212
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
373 char *parse_pos = &arg[0];
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
374 while (parse_pos[0] && !parse_err) {
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
375 if (strncmp (parse_pos, "manyfmts", 8) == 0) {
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
376 parse_pos = &parse_pos[8];
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
377 many_fmts = 1;
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
378 } else if (strncmp (parse_pos, "slice-height=", 13) == 0) {
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
379 parse_pos = &parse_pos[13];
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
380 slice_height = strtol(parse_pos, &parse_pos, 0);
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
381 if (slice_height < 0) parse_err = 1;
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
382 }
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
383 if (parse_pos[0] == ':') parse_pos = &parse_pos[1];
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
384 else if (parse_pos[0]) parse_err = 1;
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
385 }
8654
2c4cebb8637d - optional slice height for -vo gl (example: -vo gl:32)
arpi
parents: 8148
diff changeset
386 }
12212
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
387 if (parse_err) {
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
388 mp_msg(MSGT_VO, MSGL_ERR,
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
389 "\n-vo gl command line help:\n"
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
390 "Example: mplayer -vo gl:slice-height=4\n"
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
391 "\nOptions:\n"
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
392 " manyfmts\n"
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
393 " Enable extended color formats for OpenGL 1.2 and later\n"
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
394 " slice-height=<0-...>\n"
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
395 " Slice size for texture transfer, 0 for whole image\n"
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
396 "\n" );
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
397 return -1;
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
398 }
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
399 if (many_fmts)
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
400 mp_msg (MSGT_VO, MSGL_WARN, "[gl] using extended formats.\n"
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
401 "Make sure you have OpenGL >= 1.2 and used corresponding "
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
402 "headers for compiling!\n");
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
403 mp_msg (MSGT_VO, MSGL_INFO, "[gl] Using %d as slice height "
2e8b305586a0 fixed suboption parsing, added help for suboptions
reimar
parents: 12159
diff changeset
404 "(0 means image height).\n", slice_height);
7931
48c71b6c7389 vo_init() moved to/fixed in preinit()
arpi
parents: 7777
diff changeset
405 if( !vo_init() ) return -1; // Can't open X11
7777
ed7b05575aab -fixed-vo support
pontscho
parents: 7124
diff changeset
406
4737
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4658
diff changeset
407 return 0;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
408 }
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
409
4596
c35d7ce151b3 10000hl to Holm... control MUST BE static...
arpi
parents: 4592
diff changeset
410 static uint32_t control(uint32_t request, void *data, ...)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
411 {
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4448
diff changeset
412 switch (request) {
10757
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10138
diff changeset
413 case VOCTRL_PAUSE: return (int_pause=1);
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10138
diff changeset
414 case VOCTRL_RESUME: return (int_pause=0);
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4448
diff changeset
415 case VOCTRL_QUERY_FORMAT:
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4448
diff changeset
416 return query_format(*((uint32_t*)data));
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10919
diff changeset
417 case VOCTRL_ONTOP:
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10919
diff changeset
418 vo_x11_ontop();
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10919
diff changeset
419 return VO_TRUE;
6095
891cff8aba60 some cleanup, gl/gl2 updated to use vo_window
arpi
parents: 5651
diff changeset
420 case VOCTRL_FULLSCREEN:
891cff8aba60 some cleanup, gl/gl2 updated to use vo_window
arpi
parents: 5651
diff changeset
421 vo_x11_fullscreen();
891cff8aba60 some cleanup, gl/gl2 updated to use vo_window
arpi
parents: 5651
diff changeset
422 return VO_TRUE;
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4448
diff changeset
423 }
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4448
diff changeset
424 return VO_NOTIMPL;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
425 }