Mercurial > mplayer.hg
annotate libvo/vo_cvidix.c @ 28063:a318969a4f45
Set the base size window manager hint, otherwise some subtract the minimum
size of 4x4 from the numbers displayed to the user which might be confusing.
Based on patch by Bert Wesarg [bert wesarg googlemail com].
author | reimar |
---|---|
date | Fri, 05 Dec 2008 19:01:49 +0000 |
parents | ffd1bd7043e6 |
children | 7681eab10aea |
rev | line source |
---|---|
10979 | 1 /* |
11232 | 2 VIDIX accelerated overlay on (black) background |
3 | |
10979 | 4 should work on any OS |
5 | |
6 (C) Sascha Sommer | |
7 | |
8 | |
9 */ | |
10 | |
11 #include <stdio.h> | |
12 #include <stdlib.h> | |
13 #include <string.h> | |
14 #include <math.h> | |
15 #include <errno.h> | |
16 | |
17 #include "config.h" | |
18 #include "video_out.h" | |
19 #include "video_out_internal.h" | |
11232 | 20 #include "aspect.h" |
21 #include "geometry.h" | |
10979 | 22 |
23 #include "mp_msg.h" | |
24 | |
25 #include "vosub_vidix.h" | |
27079 | 26 #include "vidix/vidix.h" |
10979 | 27 |
28 | |
25216 | 29 static const vo_info_t info = { |
12783 | 30 "console VIDIX", |
11017 | 31 "cvidix", |
10979 | 32 "Sascha Sommer", |
33 "" | |
34 }; | |
35 | |
11017 | 36 LIBVO_EXTERN(cvidix) |
10979 | 37 |
38 #define UNUSED(x) ((void)(x)) /* Removes warning about unused arguments */ | |
39 | |
40 /* VIDIX related */ | |
41 static char *vidix_name; | |
11232 | 42 static uint32_t swidth,sheight,sformat; |
13360 | 43 /// center video only when screenw & height are set |
44 static uint32_t center=0; | |
10979 | 45 static vidix_grkey_t gr_key; |
11232 | 46 |
47 | |
17566
f580a7755ac5
Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents:
16388
diff
changeset
|
48 static uint32_t setup_vidix(void){ |
11232 | 49 int x=vo_dx,y=vo_dy; |
50 aspect(&vo_dwidth,&vo_dheight,vo_fs ? A_ZOOM : A_NOZOOM); | |
13360 | 51 if(vo_fs || center){ |
11232 | 52 if(vo_dwidth <= vo_screenwidth)x = (vo_screenwidth - vo_dwidth)/2; |
53 else x=0; | |
54 if(vo_dheight <= vo_screenheight)y = (vo_screenheight - vo_dheight)/2; | |
55 else y=0; | |
56 } | |
57 if(vo_config_count)vidix_stop(); | |
58 if(vidix_init(swidth, sheight, x, y, vo_dwidth, vo_dheight, sformat, 32, vo_screenwidth,vo_screenheight)){ | |
59 mp_msg(MSGT_VO, MSGL_FATAL, "Can't setup VIDIX driver: %s\n", strerror(errno)); | |
60 return 1; | |
61 } | |
10979 | 62 vidix_start(); |
63 if(vidix_grkey_support()){ | |
64 vidix_grkey_get(&gr_key); | |
65 gr_key.key_op = KEYS_PUT; | |
11232 | 66 if (!vo_fs && !(vo_colorkey & 0xff000000)){ |
67 gr_key.ckey.op = CKEY_TRUE; | |
68 gr_key.ckey.red = (vo_colorkey & 0x00FF0000) >> 16; | |
69 gr_key.ckey.green = (vo_colorkey & 0x0000FF00) >> 8; | |
70 gr_key.ckey.blue = vo_colorkey & 0x000000FF; | |
11158
85f4534d1edb
Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents:
11019
diff
changeset
|
71 } |
11232 | 72 else gr_key.ckey.op = CKEY_FALSE; |
10979 | 73 vidix_grkey_set(&gr_key); |
11232 | 74 } |
10979 | 75 return 0; |
76 } | |
77 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
78 static int config(uint32_t width, uint32_t height, uint32_t d_width,uint32_t d_height, uint32_t flags, char *title, uint32_t format){ |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14041
diff
changeset
|
79 vo_fs = flags & VOFLAG_FULLSCREEN; |
13360 | 80 if(!vo_config_count){ |
14041
928b03a98062
10l initial patch by Oded Shimon <ods15 at ods15.dyndns.org>
faust3
parents:
13787
diff
changeset
|
81 if(vo_screenwidth && vo_screenheight){ |
928b03a98062
10l initial patch by Oded Shimon <ods15 at ods15.dyndns.org>
faust3
parents:
13787
diff
changeset
|
82 if(!vo_geometry)center=1; |
928b03a98062
10l initial patch by Oded Shimon <ods15 at ods15.dyndns.org>
faust3
parents:
13787
diff
changeset
|
83 } |
13360 | 84 } |
27768
ffd1bd7043e6
Improve error message when screen width and height are not set.
diego
parents:
27079
diff
changeset
|
85 if(!vo_screenwidth){ |
ffd1bd7043e6
Improve error message when screen width and height are not set.
diego
parents:
27079
diff
changeset
|
86 mp_msg(MSGT_VO, MSGL_WARN, "vo_cvidix: Screen width not set (see -screenw), assuming 640 pixels.\n"); |
ffd1bd7043e6
Improve error message when screen width and height are not set.
diego
parents:
27079
diff
changeset
|
87 vo_screenwidth = 640; |
ffd1bd7043e6
Improve error message when screen width and height are not set.
diego
parents:
27079
diff
changeset
|
88 } |
ffd1bd7043e6
Improve error message when screen width and height are not set.
diego
parents:
27079
diff
changeset
|
89 if(!vo_screenheight){ |
ffd1bd7043e6
Improve error message when screen width and height are not set.
diego
parents:
27079
diff
changeset
|
90 mp_msg(MSGT_VO, MSGL_WARN, "vo_cvidix: Screen height not set (see -screenh), assuming 480 pixels.\n"); |
ffd1bd7043e6
Improve error message when screen width and height are not set.
diego
parents:
27079
diff
changeset
|
91 vo_screenheight = 480; |
ffd1bd7043e6
Improve error message when screen width and height are not set.
diego
parents:
27079
diff
changeset
|
92 } |
11232 | 93 swidth = width; |
94 sheight = height; | |
95 sformat = format; | |
96 vo_dwidth=d_width; | |
97 vo_dheight=d_height; | |
98 aspect_save_orig(width,height); | |
99 aspect_save_prescale(d_width,d_height); | |
100 aspect_save_screenres(vo_screenwidth,vo_screenheight); | |
101 if(!vo_geometry){ | |
102 vo_dx=0; | |
103 vo_dy=0; | |
104 } | |
105 else geometry(&vo_dx, &vo_dy, &vo_dwidth, &vo_dheight,vo_screenwidth,vo_screenheight); | |
106 return setup_vidix(); | |
107 } | |
108 | |
10979 | 109 static void check_events(void){ |
110 } | |
111 | |
112 /* draw_osd, flip_page, draw_slice, draw_frame should be | |
113 overwritten with vidix functions (vosub_vidix.c) */ | |
114 static void draw_osd(void){ | |
11019 | 115 mp_msg(MSGT_VO, MSGL_FATAL, "vo_cvidix: error: didn't use vidix draw_osd!\n"); |
10979 | 116 return; |
117 } | |
118 | |
119 static void flip_page(void){ | |
11019 | 120 mp_msg(MSGT_VO, MSGL_FATAL, "vo_cvidix: error: didn't use vidix flip_page!\n"); |
10979 | 121 return; |
122 } | |
123 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
124 static int draw_slice(uint8_t *src[], int stride[],int w, int h, int x, int y){ |
10979 | 125 UNUSED(src); |
126 UNUSED(stride); | |
127 UNUSED(w); | |
128 UNUSED(h); | |
129 UNUSED(x); | |
130 UNUSED(y); | |
11019 | 131 mp_msg(MSGT_VO, MSGL_FATAL, "vo_cvidix: error: didn't use vidix draw_slice!\n"); |
10979 | 132 return -1; |
133 } | |
134 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
135 static int draw_frame(uint8_t *src[]){ |
10979 | 136 UNUSED(src); |
11019 | 137 mp_msg(MSGT_VO, MSGL_FATAL, "vo_cvidix: error: didn't use vidix draw_frame!\n"); |
10979 | 138 return -1; |
139 } | |
140 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
141 static int query_format(uint32_t format){ |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25216
diff
changeset
|
142 return vidix_query_fourcc(format); |
10979 | 143 } |
144 | |
145 static void uninit(void){ | |
146 if(!vo_config_count) return; | |
147 vidix_term(); | |
148 if(vidix_name){ | |
149 free(vidix_name); | |
150 vidix_name = NULL; | |
151 } | |
152 } | |
153 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
154 static int preinit(const char *arg){ |
10979 | 155 if(arg)vidix_name = strdup(arg); |
156 else { | |
11462 | 157 mp_msg(MSGT_VO, MSGL_INFO, "vo_cvidix: No vidix driver name provided, probing available ones (-v option for details)!\n"); |
10979 | 158 vidix_name = NULL; |
159 } | |
11019 | 160 if(vidix_preinit(vidix_name, &video_out_cvidix))return 1; |
10979 | 161 return 0; |
162 } | |
163 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
164 static int control(uint32_t request, void *data, ...){ |
10979 | 165 switch (request) { |
166 case VOCTRL_QUERY_FORMAT: | |
167 return query_format(*((uint32_t*)data)); | |
11232 | 168 case VOCTRL_FULLSCREEN: |
169 if(vo_fs)vo_fs=0; | |
170 else vo_fs=1; | |
171 setup_vidix(); | |
172 return VO_TRUE; | |
16388 | 173 case VOCTRL_SET_EQUALIZER: |
174 { | |
175 va_list ap; | |
176 int value; | |
177 va_start(ap, data); | |
178 value = va_arg(ap, int); | |
179 va_end(ap); | |
20110 | 180 return vidix_control(request, data, value); |
16388 | 181 } |
182 case VOCTRL_GET_EQUALIZER: | |
183 { | |
184 va_list ap; | |
185 int *value; | |
186 va_start(ap, data); | |
187 value = va_arg(ap, int *); | |
188 va_end(ap); | |
189 return vidix_control(request, data, value); | |
190 } | |
11232 | 191 } |
10979 | 192 return vidix_control(request, data); |
193 } |