Mercurial > mplayer.hg
annotate libvo/vo_cvidix.c @ 33218:f0c2a62e3e89
Position windows initially at coordinates given in skin file.
So far, the initial positions of the main and subwindow were not
the ones specified in the skin file, but fixed defaults.
author | ib |
---|---|
date | Sat, 23 Apr 2011 08:05:27 +0000 |
parents | 8fa2f43cb760 |
children | 899d817e56fc |
rev | line source |
---|---|
10979 | 1 /* |
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
2 * VIDIX-accelerated overlay on (black) background |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
3 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
4 * should work on any OS |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
5 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
6 * copyright (C) 2003 Sascha Sommer |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
7 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
8 * This file is part of MPlayer. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
9 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
10 * MPlayer is free software; you can redistribute it and/or modify |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
11 * it under the terms of the GNU General Public License as published by |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
12 * the Free Software Foundation; either version 2 of the License, or |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
13 * (at your option) any later version. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
14 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
15 * MPlayer is distributed in the hope that it will be useful, |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
18 * GNU General Public License for more details. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
19 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
20 * You should have received a copy of the GNU General Public License along |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
21 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27768
diff
changeset
|
23 */ |
10979 | 24 |
25 #include <stdio.h> | |
26 #include <stdlib.h> | |
27 #include <string.h> | |
28 #include <math.h> | |
29 #include <errno.h> | |
30 | |
31 #include "config.h" | |
32 #include "video_out.h" | |
33 #include "video_out_internal.h" | |
11232 | 34 #include "aspect.h" |
35 #include "geometry.h" | |
10979 | 36 |
37 #include "mp_msg.h" | |
38 | |
39 #include "vosub_vidix.h" | |
27079 | 40 #include "vidix/vidix.h" |
10979 | 41 |
42 | |
25216 | 43 static const vo_info_t info = { |
12783 | 44 "console VIDIX", |
11017 | 45 "cvidix", |
10979 | 46 "Sascha Sommer", |
47 "" | |
48 }; | |
49 | |
11017 | 50 LIBVO_EXTERN(cvidix) |
10979 | 51 |
52 /* VIDIX related */ | |
53 static char *vidix_name; | |
11232 | 54 static uint32_t swidth,sheight,sformat; |
13360 | 55 /// center video only when screenw & height are set |
56 static uint32_t center=0; | |
10979 | 57 static vidix_grkey_t gr_key; |
11232 | 58 |
59 | |
17566
f580a7755ac5
Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents:
16388
diff
changeset
|
60 static uint32_t setup_vidix(void){ |
11232 | 61 int x=vo_dx,y=vo_dy; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
62 aspect(&vo_dwidth,&vo_dheight,vo_fs ? A_ZOOM : A_NOZOOM); |
13360 | 63 if(vo_fs || center){ |
11232 | 64 if(vo_dwidth <= vo_screenwidth)x = (vo_screenwidth - vo_dwidth)/2; |
65 else x=0; | |
66 if(vo_dheight <= vo_screenheight)y = (vo_screenheight - vo_dheight)/2; | |
67 else y=0; | |
68 } | |
69 if(vo_config_count)vidix_stop(); | |
70 if(vidix_init(swidth, sheight, x, y, vo_dwidth, vo_dheight, sformat, 32, vo_screenwidth,vo_screenheight)){ | |
71 mp_msg(MSGT_VO, MSGL_FATAL, "Can't setup VIDIX driver: %s\n", strerror(errno)); | |
72 return 1; | |
73 } | |
10979 | 74 vidix_start(); |
75 if(vidix_grkey_support()){ | |
76 vidix_grkey_get(&gr_key); | |
77 gr_key.key_op = KEYS_PUT; | |
11232 | 78 if (!vo_fs && !(vo_colorkey & 0xff000000)){ |
79 gr_key.ckey.op = CKEY_TRUE; | |
80 gr_key.ckey.red = (vo_colorkey & 0x00FF0000) >> 16; | |
81 gr_key.ckey.green = (vo_colorkey & 0x0000FF00) >> 8; | |
82 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
|
83 } |
11232 | 84 else gr_key.ckey.op = CKEY_FALSE; |
10979 | 85 vidix_grkey_set(&gr_key); |
11232 | 86 } |
10979 | 87 return 0; |
88 } | |
89 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
90 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
|
91 vo_fs = flags & VOFLAG_FULLSCREEN; |
13360 | 92 if(!vo_config_count){ |
14041
928b03a98062
10l initial patch by Oded Shimon <ods15 at ods15.dyndns.org>
faust3
parents:
13787
diff
changeset
|
93 if(vo_screenwidth && vo_screenheight){ |
928b03a98062
10l initial patch by Oded Shimon <ods15 at ods15.dyndns.org>
faust3
parents:
13787
diff
changeset
|
94 if(!vo_geometry)center=1; |
928b03a98062
10l initial patch by Oded Shimon <ods15 at ods15.dyndns.org>
faust3
parents:
13787
diff
changeset
|
95 } |
13360 | 96 } |
27768
ffd1bd7043e6
Improve error message when screen width and height are not set.
diego
parents:
27079
diff
changeset
|
97 if(!vo_screenwidth){ |
ffd1bd7043e6
Improve error message when screen width and height are not set.
diego
parents:
27079
diff
changeset
|
98 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
|
99 vo_screenwidth = 640; |
ffd1bd7043e6
Improve error message when screen width and height are not set.
diego
parents:
27079
diff
changeset
|
100 } |
ffd1bd7043e6
Improve error message when screen width and height are not set.
diego
parents:
27079
diff
changeset
|
101 if(!vo_screenheight){ |
ffd1bd7043e6
Improve error message when screen width and height are not set.
diego
parents:
27079
diff
changeset
|
102 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
|
103 vo_screenheight = 480; |
ffd1bd7043e6
Improve error message when screen width and height are not set.
diego
parents:
27079
diff
changeset
|
104 } |
11232 | 105 swidth = width; |
106 sheight = height; | |
107 sformat = format; | |
108 vo_dwidth=d_width; | |
109 vo_dheight=d_height; | |
110 aspect_save_orig(width,height); | |
111 aspect_save_prescale(d_width,d_height); | |
112 aspect_save_screenres(vo_screenwidth,vo_screenheight); | |
113 if(!vo_geometry){ | |
114 vo_dx=0; | |
115 vo_dy=0; | |
116 } | |
117 else geometry(&vo_dx, &vo_dy, &vo_dwidth, &vo_dheight,vo_screenwidth,vo_screenheight); | |
118 return setup_vidix(); | |
119 } | |
120 | |
10979 | 121 static void check_events(void){ |
122 } | |
123 | |
124 /* draw_osd, flip_page, draw_slice, draw_frame should be | |
125 overwritten with vidix functions (vosub_vidix.c) */ | |
126 static void draw_osd(void){ | |
11019 | 127 mp_msg(MSGT_VO, MSGL_FATAL, "vo_cvidix: error: didn't use vidix draw_osd!\n"); |
10979 | 128 return; |
129 } | |
130 | |
131 static void flip_page(void){ | |
11019 | 132 mp_msg(MSGT_VO, MSGL_FATAL, "vo_cvidix: error: didn't use vidix flip_page!\n"); |
10979 | 133 return; |
134 } | |
135 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
136 static int draw_slice(uint8_t *src[], int stride[],int w, int h, int x, int y){ |
11019 | 137 mp_msg(MSGT_VO, MSGL_FATAL, "vo_cvidix: error: didn't use vidix draw_slice!\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 draw_frame(uint8_t *src[]){ |
11019 | 142 mp_msg(MSGT_VO, MSGL_FATAL, "vo_cvidix: error: didn't use vidix draw_frame!\n"); |
10979 | 143 return -1; |
144 } | |
145 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
146 static int query_format(uint32_t format){ |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25216
diff
changeset
|
147 return vidix_query_fourcc(format); |
10979 | 148 } |
149 | |
150 static void uninit(void){ | |
151 if(!vo_config_count) return; | |
152 vidix_term(); | |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
32336
diff
changeset
|
153 free(vidix_name); |
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
32336
diff
changeset
|
154 vidix_name = NULL; |
10979 | 155 } |
156 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
157 static int preinit(const char *arg){ |
10979 | 158 if(arg)vidix_name = strdup(arg); |
159 else { | |
11462 | 160 mp_msg(MSGT_VO, MSGL_INFO, "vo_cvidix: No vidix driver name provided, probing available ones (-v option for details)!\n"); |
10979 | 161 vidix_name = NULL; |
162 } | |
11019 | 163 if(vidix_preinit(vidix_name, &video_out_cvidix))return 1; |
10979 | 164 return 0; |
165 } | |
166 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
167 static int control(uint32_t request, void *data, ...){ |
10979 | 168 switch (request) { |
169 case VOCTRL_QUERY_FORMAT: | |
170 return query_format(*((uint32_t*)data)); | |
11232 | 171 case VOCTRL_FULLSCREEN: |
172 if(vo_fs)vo_fs=0; | |
173 else vo_fs=1; | |
174 setup_vidix(); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
175 return VO_TRUE; |
16388 | 176 case VOCTRL_SET_EQUALIZER: |
177 { | |
178 va_list ap; | |
179 int value; | |
180 va_start(ap, data); | |
181 value = va_arg(ap, int); | |
182 va_end(ap); | |
20110 | 183 return vidix_control(request, data, value); |
16388 | 184 } |
185 case VOCTRL_GET_EQUALIZER: | |
186 { | |
187 va_list ap; | |
188 int *value; | |
189 va_start(ap, data); | |
190 value = va_arg(ap, int *); | |
191 va_end(ap); | |
192 return vidix_control(request, data, value); | |
193 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
194 } |
10979 | 195 return vidix_control(request, data); |
196 } |