annotate libvo/vo_matrixview.c @ 35418:cedb0ba2b5c6

Move the code to set guiInfo's Track, Chapter and Angle start values. Set them before checking whether there is any media opened, because with no media opened we clear the counters.
author ib
date Thu, 29 Nov 2012 14:11:03 +0000
parents ddb45e9443ec
children 389d43c448b3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
1 /*
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
2 * MatrixView video output driver for MPlayer
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
3 *
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
4 * by Pigeon <pigeon at pigeond.net>
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
5 *
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
6 * Based on MatrixView the screensaver from http://rss-glx.sf.net/
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
7 *
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
8 * This file is part of MPlayer.
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
9 *
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
10 * MPlayer is free software; you can redistribute it and/or modify
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
13 * (at your option) any later version.
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
14 *
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
15 * MPlayer is distributed in the hope that it will be useful,
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
18 * GNU General Public License for more details.
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
19 *
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License along
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
21 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
23 */
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
24
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
25 #include "config.h"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
26
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
27 #include <stdint.h>
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
28
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
29 #include "mp_msg.h"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
30 #include "subopt-helper.h"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
31 #include "video_out.h"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
32 #include "video_out_internal.h"
33301
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 30925
diff changeset
33 #include "libmpcodecs/vf.h"
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
34 #include "gl_common.h"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
35 #include "libswscale/swscale.h"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
36 #include "libmpcodecs/vf_scale.h"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
37 #include "osdep/timer.h"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
38
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
39 #include "matrixview.h"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
40
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
41 static const vo_info_t info = {
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
42 "MatrixView (OpenGL)",
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
43 "matrixview",
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
44 "Pigeon <pigeon@pigeond.net>",
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
45 "Based on MatrixView from rss-glx.sf.net"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
46 };
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
47
30925
f8939d5b14b5 Mark some more LIBVO_EXTERN declarations as const where possible.
reimar
parents: 30633
diff changeset
48 const LIBVO_EXTERN(matrixview)
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
49
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
50 static MPGLContext glctx;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
51
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
52 #ifdef CONFIG_GL_X11
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
53 static int wsGLXAttrib[] = {
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
54 GLX_RGBA,
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
55 GLX_RED_SIZE,1,
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
56 GLX_GREEN_SIZE,1,
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
57 GLX_BLUE_SIZE,1,
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
58 GLX_DEPTH_SIZE,1,
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
59 GLX_DOUBLEBUFFER,
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
60 None
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
61 };
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
62 #endif
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
63
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
64 static int int_pause;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
65 static int eq_contrast;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
66 static int eq_brightness;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
67 static uint32_t image_width;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
68 static uint32_t image_height;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
69 static uint32_t image_format;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
70 static struct SwsContext *sws;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
71
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
72 static uint8_t *map_image[MP_MAX_PLANES];
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
73 static int map_stride[MP_MAX_PLANES];
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
74
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
75 #define DEFAULT_MATRIX_ROWS 96
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
76 #define DEFAULT_MATRIX_COLS 128
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
77 static int matrix_rows;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
78 static int matrix_cols;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
79
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
80 #define DEFAULT_CONTRAST 0.90f
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
81 #define CONTRAST_MULTIPLIER 0.02f
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
82
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
83 #define DEFAULT_BRIGHTNESS 1.0f
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
84 #define BRIGHTNESS_MULTIPLIER 0.02f
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
85
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
86
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
87 static void contrast_set(int value)
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
88 {
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
89 float contrast = value * CONTRAST_MULTIPLIER + DEFAULT_CONTRAST;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
90 eq_contrast = value;
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
91 if (contrast < 0)
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
92 contrast = 0;
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
93 matrixview_contrast_set(contrast);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
94 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
95
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
96
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
97 static void brightness_set(int value)
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
98 {
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
99 float brightness = value * BRIGHTNESS_MULTIPLIER + DEFAULT_BRIGHTNESS;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
100 eq_brightness = value;
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
101 if (brightness < 0)
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
102 brightness = 0;
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
103 matrixview_brightness_set(brightness);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
104 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
105
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
106
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
107 static int config(uint32_t width, uint32_t height,
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
108 uint32_t d_width, uint32_t d_height,
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
109 uint32_t flags, char *title, uint32_t format)
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
110 {
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
111 image_height = height;
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
112 image_width = width;
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
113 image_format = format;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
114
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
115 int_pause = 0;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
116
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
117 #ifdef CONFIG_GL_WIN32
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
118 if (glctx.type == GLTYPE_W32 && !vo_w32_config(d_width, d_height, flags))
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
119 return -1;
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
120 #endif
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
121 #ifdef CONFIG_GL_X11
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
122 if (glctx.type == GLTYPE_X11) {
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
123 XVisualInfo *vinfo=glXChooseVisual( mDisplay,mScreen,wsGLXAttrib );
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
124 if (vinfo == NULL) {
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
125 mp_msg(MSGT_VO, MSGL_ERR, "[matrixview] no GLX support present\n");
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
126 return -1;
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
127 }
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
128 mp_msg(MSGT_VO, MSGL_V, "[matrixview] GLX chose visual with ID 0x%x\n",
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
129 (int)vinfo->visualid);
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
130
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
131 vo_x11_create_vo_window(vinfo, vo_dx, vo_dy, d_width, d_height, flags,
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
132 XCreateColormap(mDisplay, mRootWin,
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
133 vinfo->visual, AllocNone),
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
134 "matrixview", title);
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
135 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
136 #endif /* CONFIG_GL_WIN32 */
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
137 if (glctx.setGlWindow(&glctx) == SET_WINDOW_FAILED)
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
138 return -1;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
139
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
140 if (sws)
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
141 sws_freeContext(sws);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
142
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
143 sws = sws_getContextFromCmdLine(image_width, image_height, image_format,
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
144 matrix_cols, matrix_rows, IMGFMT_Y8);
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
145 if (!sws) {
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
146 mp_msg(MSGT_VO, MSGL_ERR, "[matrixview] Cannot create SwsContext context\n");
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
147 return -1;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
148 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
149
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
150 if (!map_image[0])
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
151 map_image[0] = calloc(matrix_cols, matrix_rows);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
152
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
153 map_stride[0] = matrix_cols;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
154
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
155 matrixview_init(vo_dwidth, vo_dheight);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
156 matrixview_matrix_resize(matrix_cols, matrix_rows);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
157
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
158 contrast_set(eq_contrast);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
159 brightness_set(eq_brightness);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
160 matrixview_reshape(vo_dwidth, vo_dheight);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
161 return 0;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
162 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
163
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
164
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
165 static void check_events(void)
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
166 {
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
167 int e = glctx.check_events();
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
168 if (e & VO_EVENT_RESIZE) {
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
169 matrixview_reshape(vo_dwidth, vo_dheight);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
170 }
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
171 if (e & VO_EVENT_EXPOSE && int_pause)
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
172 flip_page();
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
173 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
174
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
175
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
176 static void draw_osd(void)
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
177 {
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
178 return;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
179 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
180
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
181
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
182 static void flip_page(void)
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
183 {
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
184 matrixview_draw(vo_dwidth, vo_dheight, GetTimer(), 0.0, map_image[0]);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
185 glctx.swapGlBuffers(&glctx);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
186 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
187
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
188
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
189
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
190 static int draw_slice(uint8_t *src[], int stride[], int w, int h, int x, int y)
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
191 {
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
192 sws_scale(sws, src, stride, y, h, map_image, map_stride);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
193 return 0;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
194 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
195
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
196
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
197 static int draw_frame(uint8_t *src[])
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
198 {
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
199 return 0;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
200 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
201
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
202
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
203 static int query_format(uint32_t format)
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
204 {
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
205 int caps = VFCAP_CSP_SUPPORTED | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_ACCEPT_STRIDE;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
206
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
207 switch (format) {
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
208 case IMGFMT_YV12:
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
209 case IMGFMT_BGR32:
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
210 case IMGFMT_BGR24:
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
211 case IMGFMT_BGR16:
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
212 case IMGFMT_BGR15:
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
213 case IMGFMT_RGB32:
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
214 case IMGFMT_RGB24:
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
215 return caps;
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
216 default:
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
217 break;
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
218 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
219
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
220 return 0;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
221 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
222
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
223
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
224 static void uninit(void)
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
225 {
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
226 if (!vo_config_count)
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
227 return;
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
228 uninit_mpglcontext(&glctx);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
229 free(map_image[0]);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
230 map_image[0] = NULL;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
231 sws_freeContext(sws);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
232 sws = NULL;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
233 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
234
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
235
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
236 static const opt_t subopts[] =
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
237 {
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
238 { "rows", OPT_ARG_INT, &matrix_rows, int_pos },
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
239 { "cols", OPT_ARG_INT, &matrix_cols, int_pos },
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
240 { NULL }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
241 };
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
242
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
243
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
244 static int preinit(const char *arg)
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
245 {
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
246 enum MPGLType gltype = GLTYPE_X11;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
247 #ifdef CONFIG_GL_WIN32
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
248 gltype = GLTYPE_W32;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
249 #endif
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
250 if (!init_mpglcontext(&glctx, gltype))
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
251 return -1;
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
252
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
253 matrix_rows = DEFAULT_MATRIX_ROWS;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
254 matrix_cols = DEFAULT_MATRIX_COLS;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
255
30153
4e0755091f55 prettyprinting cosmetics
diego
parents: 30140
diff changeset
256 if (subopt_parse(arg, subopts) != 0) {
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
257 mp_msg(MSGT_VO, MSGL_FATAL,
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
258 "\n-vo matrixview command line help:\n"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
259 "Example: mplayer -vo matrixview:cols=320:rows=240\n"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
260 "\n"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
261 "Options:\n"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
262 "\n"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
263 " cols=<12-320>\n"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
264 " Specify the number of columns of the matrix view, default %d\n"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
265 "\n"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
266 " rows=<12-240>\n"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
267 " Specify the number of rows of the matrix view, default %d\n"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
268 "\n"
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
269 ,
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
270 DEFAULT_MATRIX_COLS, DEFAULT_MATRIX_ROWS
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
271 );
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
272 return -1;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
273 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
274
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
275 return 0;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
276 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
277
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
278
33305
ddb45e9443ec Remove the variable arguments from the libvo control() functions.
iive
parents: 33301
diff changeset
279 static int control(uint32_t request, void *data)
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
280 {
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
281 switch (request) {
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
282 case VOCTRL_PAUSE:
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
283 case VOCTRL_RESUME:
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
284 int_pause = (request == VOCTRL_PAUSE);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
285 return VO_TRUE;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
286 case VOCTRL_QUERY_FORMAT:
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
287 return query_format(*(uint32_t*)data);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
288 case VOCTRL_ONTOP:
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
289 glctx.ontop();
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
290 return VO_TRUE;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
291 case VOCTRL_FULLSCREEN:
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
292 glctx.fullscreen();
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
293 matrixview_reshape(vo_dwidth, vo_dheight);
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
294 return VO_TRUE;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
295 case VOCTRL_BORDER:
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
296 glctx.border();
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
297 return VO_TRUE;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
298 case VOCTRL_GET_EQUALIZER:
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
299 {
33301
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 30925
diff changeset
300 vf_equalizer_t *eq=data;
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 30925
diff changeset
301
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 30925
diff changeset
302 if (strcasecmp(eq->item, "contrast") == 0) {
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 30925
diff changeset
303 eq->value = eq_contrast;
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 30925
diff changeset
304 } else if (strcasecmp(eq->item, "brightness") == 0) {
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 30925
diff changeset
305 eq->value = eq_brightness;
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
306 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
307 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
308 return VO_TRUE;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
309 case VOCTRL_SET_EQUALIZER:
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
310 {
33301
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 30925
diff changeset
311 vf_equalizer_t *eq=data;
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 30925
diff changeset
312 if (strcasecmp(eq->item, "contrast") == 0) {
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 30925
diff changeset
313 contrast_set(eq->value);
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 30925
diff changeset
314 } else if (strcasecmp(eq->item, "brightness") == 0) {
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 30925
diff changeset
315 brightness_set(eq->value);
30140
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
316 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
317 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
318 return VO_TRUE;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
319 case VOCTRL_UPDATE_SCREENINFO:
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
320 glctx.update_xinerama_info();
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
321 return VO_TRUE;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
322 }
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
323 return VO_NOTIMPL;
12a49e9ca30e Finally add matrixview vo.
reimar
parents:
diff changeset
324 }