Mercurial > mplayer.hg
annotate libvo/video_out.c @ 7780:9806d65986e4
Mplayer can switch between subtitles of different languages during
playing by press 'j', based on a patch by <hephooey@fastmail.fm>.
author | kmkaplan |
---|---|
date | Thu, 17 Oct 2002 15:44:41 +0000 |
parents | 92188b57a062 |
children | 3dc0b71630ff |
rev | line source |
---|---|
7338
598c69a1480d
cosmetics - copyright msg removed, this file has nothing with mpeg2dec or
arpi
parents:
7326
diff
changeset
|
1 |
598c69a1480d
cosmetics - copyright msg removed, this file has nothing with mpeg2dec or
arpi
parents:
7326
diff
changeset
|
2 /* this file contains libvo's common functions, variables used by |
598c69a1480d
cosmetics - copyright msg removed, this file has nothing with mpeg2dec or
arpi
parents:
7326
diff
changeset
|
3 many/all drivers. */ |
1 | 4 |
5 #include <stdio.h> | |
6 #include <stdlib.h> | |
7 #include <string.h> | |
8 | |
9 #include <unistd.h> | |
5296 | 10 //#include <sys/mman.h> |
1 | 11 |
12 #include "config.h" | |
13 #include "video_out.h" | |
14 | |
7562
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
15 #include "mp_msg.h" |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
16 #include "help_mp.h" |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
17 |
1 | 18 #include "../linux/shmem.h" |
19 | |
5074 | 20 //int vo_flags=0; |
4736 | 21 |
388 | 22 // currect resolution/bpp on screen: (should be autodetected by vo_init()) |
23 int vo_depthonscreen=0; | |
24 int vo_screenwidth=0; | |
25 int vo_screenheight=0; | |
26 | |
5511 | 27 int vo_config_count=0; |
28 | |
388 | 29 // requested resolution/bpp: (-x -y -bpp options) |
4811
38a9cddd9e4d
added vo_dx,vo_dy (used currently only by X based outputs)
alex
parents:
4736
diff
changeset
|
30 int vo_dx=0; |
38a9cddd9e4d
added vo_dx,vo_dy (used currently only by X based outputs)
alex
parents:
4736
diff
changeset
|
31 int vo_dy=0; |
388 | 32 int vo_dwidth=0; |
33 int vo_dheight=0; | |
34 int vo_dbpp=0; | |
4981 | 35 |
7539
56ea9db91251
-nograbpointer, based on old patch by Christian Ohm <chr.ohm@gmx.net>
arpi
parents:
7536
diff
changeset
|
36 int vo_grabpointer = 1; |
1149
6a0f937b52e6
- new config option -lircconfig (config file for lirc)
acki2
parents:
1130
diff
changeset
|
37 int vo_doublebuffering = 0; |
4667 | 38 int vo_vsync = 0; |
4981 | 39 int vo_fs = 0; |
1269 | 40 int vo_fsmode = 0; |
6304
ee65527096c2
pan&scan support with -vo xv by ?? <mplayer@svennevid.net>
arpi
parents:
6069
diff
changeset
|
41 float vo_panscan = 0.0f; |
388 | 42 |
2707 | 43 int vo_pts=0; // for hw decoding |
3201 | 44 float vo_fps=0; // for mp1e rte |
2707 | 45 |
1184 | 46 char *vo_subdevice = NULL; |
5431
013458752947
disabling direct rendering by default (too buggy and conflicts with osd/sub)
arpi
parents:
5296
diff
changeset
|
47 int vo_directrendering=0; |
6781 | 48 |
1 | 49 // |
50 // Externally visible list of all vo drivers | |
51 // | |
52 extern vo_functions_t video_out_mga; | |
53 extern vo_functions_t video_out_xmga; | |
54 extern vo_functions_t video_out_x11; | |
55 extern vo_functions_t video_out_xv; | |
56 extern vo_functions_t video_out_gl; | |
2124 | 57 extern vo_functions_t video_out_gl2; |
12 | 58 extern vo_functions_t video_out_dga; |
38 | 59 extern vo_functions_t video_out_fsdga; |
1 | 60 extern vo_functions_t video_out_sdl; |
61 extern vo_functions_t video_out_3dfx; | |
1979
6278f566cd91
tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
1871
diff
changeset
|
62 extern vo_functions_t video_out_tdfxfb; |
1 | 63 extern vo_functions_t video_out_null; |
2528 | 64 //extern vo_functions_t video_out_odivx; |
4214
664984198aef
zr driver (tv-out for DC10/DC10+, iomega buz, LML33...) added - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4169
diff
changeset
|
65 extern vo_functions_t video_out_zr; |
7326
ec3e58120e2a
extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
7069
diff
changeset
|
66 extern vo_functions_t video_out_bl; |
1 | 67 extern vo_functions_t video_out_pgm; |
68 extern vo_functions_t video_out_md5; | |
69 extern vo_functions_t video_out_syncfb; | |
225 | 70 extern vo_functions_t video_out_fbdev; |
286 | 71 extern vo_functions_t video_out_svga; |
528 | 72 extern vo_functions_t video_out_png; |
1130 | 73 extern vo_functions_t video_out_ggi; |
1511 | 74 extern vo_functions_t video_out_aa; |
1871 | 75 extern vo_functions_t video_out_mpegpes; |
4599 | 76 extern vo_functions_t video_out_yuv4mpeg; |
7536
70c35cd5db1f
-vo directx driver by Sascha Sommer <saschasommer@freenet.de>
arpi
parents:
7435
diff
changeset
|
77 #ifdef HAVE_DIRECTX |
70c35cd5db1f
-vo directx driver by Sascha Sommer <saschasommer@freenet.de>
arpi
parents:
7435
diff
changeset
|
78 extern vo_functions_t video_out_directx; |
70c35cd5db1f
-vo directx driver by Sascha Sommer <saschasommer@freenet.de>
arpi
parents:
7435
diff
changeset
|
79 #endif |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
80 #ifdef HAVE_DXR2 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
81 extern vo_functions_t video_out_dxr2; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
82 #endif |
2645 | 83 extern vo_functions_t video_out_dxr3; |
5648 | 84 #ifdef HAVE_JPEG |
85 extern vo_functions_t video_out_jpeg; | |
86 #endif | |
6053 | 87 #ifdef HAVE_GIF |
88 extern vo_functions_t video_out_gif89a; | |
89 #endif | |
4561 | 90 #ifdef HAVE_VESA |
2244 | 91 extern vo_functions_t video_out_vesa; |
92 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
3201
diff
changeset
|
93 extern vo_functions_t video_out_directfb; |
4124 | 94 #ifdef CONFIG_VIDIX |
95 extern vo_functions_t video_out_xvidix; | |
96 #endif | |
97 | |
1 | 98 vo_functions_t* video_out_drivers[] = |
99 { | |
1179 | 100 #ifdef HAVE_XMGA |
1 | 101 &video_out_xmga, |
102 #endif | |
1179 | 103 #ifdef HAVE_MGA |
1 | 104 &video_out_mga, |
105 #endif | |
106 #ifdef HAVE_SYNCFB | |
107 &video_out_syncfb, | |
108 #endif | |
109 #ifdef HAVE_3DFX | |
110 &video_out_3dfx, | |
111 #endif | |
1979
6278f566cd91
tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
1871
diff
changeset
|
112 #ifdef HAVE_TDFXFB |
6278f566cd91
tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
1871
diff
changeset
|
113 &video_out_tdfxfb, |
6278f566cd91
tdfxfb yuv driver by Zeljko Stevanovic <zsteva@ptt.yu>
arpi
parents:
1871
diff
changeset
|
114 #endif |
1 | 115 #ifdef HAVE_XV |
116 &video_out_xv, | |
117 #endif | |
118 #ifdef HAVE_X11 | |
119 &video_out_x11, | |
120 #endif | |
121 #ifdef HAVE_GL | |
122 &video_out_gl, | |
2124 | 123 &video_out_gl2, |
1 | 124 #endif |
12 | 125 #ifdef HAVE_DGA |
126 &video_out_dga, | |
1235 | 127 // &video_out_fsdga, |
12 | 128 #endif |
1 | 129 #ifdef HAVE_SDL |
130 &video_out_sdl, | |
131 #endif | |
7536
70c35cd5db1f
-vo directx driver by Sascha Sommer <saschasommer@freenet.de>
arpi
parents:
7435
diff
changeset
|
132 #ifdef HAVE_DIRECTX |
70c35cd5db1f
-vo directx driver by Sascha Sommer <saschasommer@freenet.de>
arpi
parents:
7435
diff
changeset
|
133 &video_out_directx, |
70c35cd5db1f
-vo directx driver by Sascha Sommer <saschasommer@freenet.de>
arpi
parents:
7435
diff
changeset
|
134 #endif |
1235 | 135 #ifdef HAVE_GGI |
136 &video_out_ggi, | |
137 #endif | |
234 | 138 #ifdef HAVE_FBDEV |
139 &video_out_fbdev, | |
140 #endif | |
286 | 141 #ifdef HAVE_SVGALIB |
142 &video_out_svga, | |
143 #endif | |
1511 | 144 #ifdef HAVE_AA |
145 &video_out_aa, | |
146 #endif | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
147 #ifdef HAVE_DXR2 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
148 &video_out_dxr2, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
149 #endif |
2645 | 150 #ifdef HAVE_DXR3 |
151 &video_out_dxr3, | |
152 #endif | |
4214
664984198aef
zr driver (tv-out for DC10/DC10+, iomega buz, LML33...) added - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4169
diff
changeset
|
153 #ifdef HAVE_ZR |
664984198aef
zr driver (tv-out for DC10/DC10+, iomega buz, LML33...) added - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4169
diff
changeset
|
154 &video_out_zr, |
664984198aef
zr driver (tv-out for DC10/DC10+, iomega buz, LML33...) added - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4169
diff
changeset
|
155 #endif |
7326
ec3e58120e2a
extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
7069
diff
changeset
|
156 #ifdef HAVE_BL |
ec3e58120e2a
extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
7069
diff
changeset
|
157 &video_out_bl, |
ec3e58120e2a
extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
7069
diff
changeset
|
158 #endif |
1511 | 159 |
529 | 160 #ifdef HAVE_PNG |
161 &video_out_png, | |
162 #endif | |
5648 | 163 #ifdef HAVE_JPEG |
164 &video_out_jpeg, | |
165 #endif | |
6053 | 166 #ifdef HAVE_GIF |
167 &video_out_gif89a, | |
168 #endif | |
1 | 169 &video_out_null, |
2528 | 170 // &video_out_odivx, |
1 | 171 &video_out_pgm, |
172 &video_out_md5, | |
1871 | 173 &video_out_mpegpes, |
4599 | 174 &video_out_yuv4mpeg, |
4561 | 175 #ifdef HAVE_VESA |
2244 | 176 &video_out_vesa, |
177 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
3201
diff
changeset
|
178 #ifdef HAVE_DIRECTFB |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
3201
diff
changeset
|
179 &video_out_directfb, |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
3201
diff
changeset
|
180 #endif |
4169
91b50468a1a4
Fix xvidix for non-x11 systems (delayed due netloss)
atmos4
parents:
4124
diff
changeset
|
181 #if defined(CONFIG_VIDIX) && defined(HAVE_X11) |
4124 | 182 &video_out_xvidix, |
183 #endif | |
1 | 184 NULL |
185 }; | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
186 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
187 #ifdef HAVE_DXR2 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
188 extern void vo_dxr2_register_options(void*); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
189 #endif |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
190 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
191 void libvo_register_options(void* cfg) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
192 #ifdef HAVE_DXR2 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
193 vo_dxr2_register_options(cfg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
194 #endif |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
6053
diff
changeset
|
195 } |
7562
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
196 |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
197 void list_video_out(){ |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
198 int i=0; |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
199 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_AvailableVideoOutputDrivers); |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
200 while (video_out_drivers[i]) { |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
201 const vo_info_t *info = video_out_drivers[i++]->get_info (); |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
202 printf("\t%s\t%s\n", info->short_name, info->name); |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
203 } |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
204 printf("\n"); |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
205 } |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
206 |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
207 vo_functions_t* init_best_video_out(char** vo_list){ |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
208 int i; |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
209 // first try the preferred drivers, with their optional subdevice param: |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
210 if(vo_list && vo_list[0]) |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
211 while(vo_list[0][0]){ |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
212 char* vo=strdup(vo_list[0]); |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
213 vo_subdevice=strchr(vo,':'); |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
214 if(vo_subdevice){ |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
215 vo_subdevice[0]=0; |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
216 ++vo_subdevice; |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
217 } |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
218 for(i=0;video_out_drivers[i];i++){ |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
219 vo_functions_t* video_driver=video_out_drivers[i]; |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
220 const vo_info_t *info = video_driver->get_info(); |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
221 if(!strcmp(info->short_name,vo)){ |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
222 // name matches, try it |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
223 if(!video_driver->preinit(vo_subdevice)) |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
224 return video_driver; // success! |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
225 } |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
226 } |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
227 // continue... |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
228 ++vo_list; |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
229 if(!(vo_list[0])) return NULL; // do NOT fallback to others |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
230 } |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
231 // now try the rest... |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
232 vo_subdevice=NULL; |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
233 for(i=0;video_out_drivers[i];i++){ |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
234 vo_functions_t* video_driver=video_out_drivers[i]; |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
235 if(!video_driver->preinit(vo_subdevice)) |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
236 return video_driver; // success! |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
237 } |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
238 return NULL; |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
239 } |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
240 |
92188b57a062
video out driver list support (like -vc, example: -vo xmga,xv,x11,)
arpi
parents:
7539
diff
changeset
|
241 |
7069 | 242 #if defined(HAVE_FBDEV)||defined(HAVE_VESA) |
243 /* Borrowed from vo_fbdev.c | |
244 Monitor ranges related functions*/ | |
245 | |
246 char *monitor_hfreq_str = NULL; | |
247 char *monitor_vfreq_str = NULL; | |
248 char *monitor_dotclock_str = NULL; | |
249 | |
250 float range_max(range_t *r) | |
251 { | |
252 float max = 0; | |
253 | |
254 for (/* NOTHING */; (r->min != -1 && r->max != -1); r++) | |
255 if (max < r->max) max = r->max; | |
256 return max; | |
257 } | |
258 | |
259 | |
260 int in_range(range_t *r, float f) | |
261 { | |
262 for (/* NOTHING */; (r->min != -1 && r->max != -1); r++) | |
263 if (f >= r->min && f <= r->max) | |
264 return 1; | |
265 return 0; | |
266 } | |
267 | |
268 range_t *str2range(char *s) | |
269 { | |
270 float tmp_min, tmp_max; | |
271 char *endptr = s; // to start the loop | |
272 range_t *r = NULL; | |
273 int i; | |
274 | |
275 if (!s) | |
276 return NULL; | |
277 for (i = 0; *endptr; i++) { | |
278 if (*s == ',') | |
279 goto out_err; | |
280 if (!(r = (range_t *) realloc(r, sizeof(*r) * (i + 2)))) { | |
281 printf("can't realloc 'r'\n"); | |
282 return NULL; | |
283 } | |
284 tmp_min = strtod(s, &endptr); | |
285 if (*endptr == 'k' || *endptr == 'K') { | |
286 tmp_min *= 1000.0; | |
287 endptr++; | |
288 } else if (*endptr == 'm' || *endptr == 'M') { | |
289 tmp_min *= 1000000.0; | |
290 endptr++; | |
291 } | |
292 if (*endptr == '-') { | |
293 tmp_max = strtod(endptr + 1, &endptr); | |
294 if (*endptr == 'k' || *endptr == 'K') { | |
295 tmp_max *= 1000.0; | |
296 endptr++; | |
297 } else if (*endptr == 'm' || *endptr == 'M') { | |
298 tmp_max *= 1000000.0; | |
299 endptr++; | |
300 } | |
301 if (*endptr != ',' && *endptr) | |
302 goto out_err; | |
303 } else if (*endptr == ',' || !*endptr) { | |
304 tmp_max = tmp_min; | |
305 } else | |
306 goto out_err; | |
307 r[i].min = tmp_min; | |
308 r[i].max = tmp_max; | |
309 if (r[i].min < 0 || r[i].max < 0) | |
310 goto out_err; | |
311 s = endptr + 1; | |
312 } | |
313 r[i].min = r[i].max = -1; | |
314 return r; | |
315 out_err: | |
316 if (r) | |
317 free(r); | |
318 return NULL; | |
319 } | |
320 | |
321 /* Borrowed from vo_fbdev.c END */ | |
322 #endif | |
323 |