Mercurial > libavcodec.hg
annotate opt.c @ 4157:bb0431100529 libavcodec
Simplify
author | lu_zero |
---|---|
date | Tue, 07 Nov 2006 12:45:29 +0000 |
parents | 573f56f4f846 |
children | e10acab2322a |
rev | line source |
---|---|
2862 | 1 /* |
2 * AVOptions | |
3 * Copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at> | |
4 * | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3788
diff
changeset
|
5 * This file is part of FFmpeg. |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3788
diff
changeset
|
6 * |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3788
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
2862 | 8 * modify it under the terms of the GNU Lesser General Public |
9 * License as published by the Free Software Foundation; either | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3788
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
2862 | 11 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3788
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
2862 | 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Lesser General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Lesser General Public | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3788
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
3036
0b546eab515d
Update licensing information: The FSF changed postal address.
diego
parents:
2967
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
2862 | 20 * |
21 */ | |
2967 | 22 |
2862 | 23 /** |
24 * @file opt.c | |
25 * AVOptions | |
26 * @author Michael Niedermayer <michaelni@gmx.at> | |
27 */ | |
2967 | 28 |
2862 | 29 #include "avcodec.h" |
2880 | 30 #include "opt.h" |
3786
616a81d04758
Pull out the ff_eval* from the mpegvideo header, as it doesn't belong there and
takis
parents:
3778
diff
changeset
|
31 #include "eval.h" |
2862 | 32 |
33 //FIXME order them and do a bin search | |
2877 | 34 static AVOption *find_opt(void *v, const char *name, const char *unit){ |
2862 | 35 AVClass *c= *(AVClass**)v; //FIXME silly way of storing AVClass |
36 AVOption *o= c->option; | |
2967 | 37 |
2862 | 38 for(;o && o->name; o++){ |
2877 | 39 if(!strcmp(o->name, name) && (!unit || !strcmp(o->unit, unit)) ) |
2862 | 40 return o; |
41 } | |
42 return NULL; | |
43 } | |
44 | |
2865
3b999ce45b37
AVOption enumeration support and some flags to classify AVOptions
michael
parents:
2862
diff
changeset
|
45 AVOption *av_next_option(void *obj, AVOption *last){ |
3b999ce45b37
AVOption enumeration support and some flags to classify AVOptions
michael
parents:
2862
diff
changeset
|
46 if(last && last[1].name) return ++last; |
3b999ce45b37
AVOption enumeration support and some flags to classify AVOptions
michael
parents:
2862
diff
changeset
|
47 else if(last) return NULL; |
3b999ce45b37
AVOption enumeration support and some flags to classify AVOptions
michael
parents:
2862
diff
changeset
|
48 else return (*(AVClass**)obj)->option; |
3b999ce45b37
AVOption enumeration support and some flags to classify AVOptions
michael
parents:
2862
diff
changeset
|
49 } |
3b999ce45b37
AVOption enumeration support and some flags to classify AVOptions
michael
parents:
2862
diff
changeset
|
50 |
2873 | 51 static AVOption *av_set_number(void *obj, const char *name, double num, int den, int64_t intnum){ |
2877 | 52 AVOption *o= find_opt(obj, name, NULL); |
2862 | 53 void *dst; |
2967 | 54 if(!o || o->offset<=0) |
2873 | 55 return NULL; |
2967 | 56 |
3735
6c407dc6ab4a
Inform the user that a certain AVOption is out of range.
takis
parents:
3731
diff
changeset
|
57 if(o->max*den < num*intnum || o->min*den > num*intnum) { |
6c407dc6ab4a
Inform the user that a certain AVOption is out of range.
takis
parents:
3731
diff
changeset
|
58 av_log(NULL, AV_LOG_ERROR, "Value %lf for parameter '%s' out of range.\n", num, name); |
2873 | 59 return NULL; |
3735
6c407dc6ab4a
Inform the user that a certain AVOption is out of range.
takis
parents:
3731
diff
changeset
|
60 } |
2967 | 61 |
2862 | 62 dst= ((uint8_t*)obj) + o->offset; |
63 | |
64 switch(o->type){ | |
2967 | 65 case FF_OPT_TYPE_FLAGS: |
2873 | 66 case FF_OPT_TYPE_INT: *(int *)dst= lrintf(num/den)*intnum; break; |
67 case FF_OPT_TYPE_INT64: *(int64_t *)dst= lrintf(num/den)*intnum; break; | |
68 case FF_OPT_TYPE_FLOAT: *(float *)dst= num*intnum/den; break; | |
69 case FF_OPT_TYPE_DOUBLE:*(double *)dst= num*intnum/den; break; | |
2862 | 70 case FF_OPT_TYPE_RATIONAL: |
2873 | 71 if((int)num == num) *(AVRational*)dst= (AVRational){num*intnum, den}; |
72 else *(AVRational*)dst= av_d2q(num*intnum/den, 1<<24); | |
2862 | 73 default: |
2873 | 74 return NULL; |
2862 | 75 } |
2873 | 76 return o; |
2862 | 77 } |
78 | |
2877 | 79 static AVOption *set_all_opt(void *v, const char *unit, double d){ |
80 AVClass *c= *(AVClass**)v; //FIXME silly way of storing AVClass | |
81 AVOption *o= c->option; | |
82 AVOption *ret=NULL; | |
2967 | 83 |
2877 | 84 for(;o && o->name; o++){ |
85 if(o->type != FF_OPT_TYPE_CONST && o->unit && !strcmp(o->unit, unit)){ | |
86 double tmp= d; | |
87 if(o->type == FF_OPT_TYPE_FLAGS) | |
88 tmp= av_get_int(v, o->name, NULL) | (int64_t)d; | |
89 | |
90 av_set_number(v, o->name, tmp, 1, 1); | |
91 ret= o; | |
92 } | |
93 } | |
94 return ret; | |
95 } | |
96 | |
3778 | 97 static double const_values[]={ |
98 M_PI, | |
99 M_E, | |
100 FF_QP2LAMBDA, | |
101 0 | |
102 }; | |
103 | |
104 static const char *const_names[]={ | |
105 "PI", | |
106 "E", | |
107 "QP2LAMBDA", | |
108 0 | |
109 }; | |
110 | |
2873 | 111 AVOption *av_set_string(void *obj, const char *name, const char *val){ |
2877 | 112 AVOption *o= find_opt(obj, name, NULL); |
113 if(o && o->offset==0 && o->type == FF_OPT_TYPE_CONST && o->unit){ | |
114 return set_all_opt(obj, o->unit, o->default_val); | |
115 } | |
2967 | 116 if(!o || !val || o->offset<=0) |
2873 | 117 return NULL; |
2862 | 118 if(o->type != FF_OPT_TYPE_STRING){ |
119 for(;;){ | |
120 int i; | |
3778 | 121 char buf[256]; |
2874
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
122 int cmd=0; |
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
123 double d; |
3778 | 124 char *error = NULL; |
2862 | 125 |
2874
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
126 if(*val == '+' || *val == '-') |
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
127 cmd= *(val++); |
2967 | 128 |
2874
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
129 for(i=0; i<sizeof(buf)-1 && val[i] && val[i]!='+' && val[i]!='-'; i++) |
2862 | 130 buf[i]= val[i]; |
131 buf[i]=0; | |
132 val+= i; | |
2967 | 133 |
3778 | 134 d = ff_eval2(buf, const_values, const_names, NULL, NULL, NULL, NULL, NULL, &error); |
135 if(isnan(d)) { | |
2877 | 136 AVOption *o_named= find_opt(obj, buf, o->unit); |
2967 | 137 if(o_named && o_named->type == FF_OPT_TYPE_CONST) |
2874
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
138 d= o_named->default_val; |
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
139 else if(!strcmp(buf, "default")) d= o->default_val; |
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
140 else if(!strcmp(buf, "max" )) d= o->max; |
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
141 else if(!strcmp(buf, "min" )) d= o->min; |
3778 | 142 else { |
143 if (!error) | |
144 av_log(NULL, AV_LOG_ERROR, "Unable to parse option value \"%s\": %s\n", val, error); | |
145 return NULL; | |
146 } | |
2862 | 147 } |
2874
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
148 if(o->type == FF_OPT_TYPE_FLAGS){ |
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
149 if (cmd=='+') d= av_get_int(obj, name, NULL) | (int64_t)d; |
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
150 else if(cmd=='-') d= av_get_int(obj, name, NULL) &~(int64_t)d; |
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
151 }else if(cmd=='-') |
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
152 d= -d; |
2862 | 153 |
2874
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
154 av_set_number(obj, name, d, 1, 1); |
2862 | 155 if(!*val) |
2874
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
156 return o; |
2862 | 157 } |
2873 | 158 return NULL; |
2862 | 159 } |
2967 | 160 |
2862 | 161 memcpy(((uint8_t*)obj) + o->offset, val, sizeof(val)); |
2873 | 162 return o; |
2862 | 163 } |
164 | |
2873 | 165 AVOption *av_set_double(void *obj, const char *name, double n){ |
2862 | 166 return av_set_number(obj, name, n, 1, 1); |
167 } | |
168 | |
2873 | 169 AVOption *av_set_q(void *obj, const char *name, AVRational n){ |
2862 | 170 return av_set_number(obj, name, n.num, n.den, 1); |
171 } | |
172 | |
2873 | 173 AVOption *av_set_int(void *obj, const char *name, int64_t n){ |
2862 | 174 return av_set_number(obj, name, 1, 1, n); |
175 } | |
176 | |
2873 | 177 /** |
2967 | 178 * |
2873 | 179 * @param buf a buffer which is used for returning non string values as strings, can be NULL |
180 * @param buf_len allocated length in bytes of buf | |
181 */ | |
182 const char *av_get_string(void *obj, const char *name, AVOption **o_out, char *buf, int buf_len){ | |
2877 | 183 AVOption *o= find_opt(obj, name, NULL); |
2873 | 184 void *dst; |
2862 | 185 if(!o || o->offset<=0) |
186 return NULL; | |
2873 | 187 if(o->type != FF_OPT_TYPE_STRING && (!buf || !buf_len)) |
2862 | 188 return NULL; |
189 | |
2873 | 190 dst= ((uint8_t*)obj) + o->offset; |
191 if(o_out) *o_out= o; | |
2967 | 192 |
2873 | 193 if(o->type == FF_OPT_TYPE_STRING) |
194 return dst; | |
2967 | 195 |
2873 | 196 switch(o->type){ |
2874
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
197 case FF_OPT_TYPE_FLAGS: snprintf(buf, buf_len, "0x%08X",*(int *)dst);break; |
2873 | 198 case FF_OPT_TYPE_INT: snprintf(buf, buf_len, "%d" , *(int *)dst);break; |
2962 | 199 case FF_OPT_TYPE_INT64: snprintf(buf, buf_len, "%"PRId64, *(int64_t*)dst);break; |
2873 | 200 case FF_OPT_TYPE_FLOAT: snprintf(buf, buf_len, "%f" , *(float *)dst);break; |
201 case FF_OPT_TYPE_DOUBLE: snprintf(buf, buf_len, "%f" , *(double *)dst);break; | |
202 case FF_OPT_TYPE_RATIONAL: snprintf(buf, buf_len, "%d/%d", ((AVRational*)dst)->num, ((AVRational*)dst)->den);break; | |
203 default: return NULL; | |
204 } | |
205 return buf; | |
2862 | 206 } |
207 | |
2873 | 208 static int av_get_number(void *obj, const char *name, AVOption **o_out, double *num, int *den, int64_t *intnum){ |
2877 | 209 AVOption *o= find_opt(obj, name, NULL); |
2862 | 210 void *dst; |
211 if(!o || o->offset<=0) | |
2873 | 212 goto error; |
2862 | 213 |
214 dst= ((uint8_t*)obj) + o->offset; | |
215 | |
2873 | 216 if(o_out) *o_out= o; |
217 | |
2862 | 218 switch(o->type){ |
2967 | 219 case FF_OPT_TYPE_FLAGS: |
2873 | 220 case FF_OPT_TYPE_INT: *intnum= *(int *)dst;return 0; |
221 case FF_OPT_TYPE_INT64: *intnum= *(int64_t*)dst;return 0; | |
222 case FF_OPT_TYPE_FLOAT: *num= *(float *)dst;return 0; | |
223 case FF_OPT_TYPE_DOUBLE: *num= *(double *)dst;return 0; | |
2967 | 224 case FF_OPT_TYPE_RATIONAL: *intnum= ((AVRational*)dst)->num; |
2873 | 225 *den = ((AVRational*)dst)->den; |
226 return 0; | |
2862 | 227 } |
2873 | 228 error: |
229 *den=*intnum=0; | |
230 return -1; | |
2862 | 231 } |
2873 | 232 |
233 double av_get_double(void *obj, const char *name, AVOption **o_out){ | |
234 int64_t intnum=1; | |
235 double num=1; | |
236 int den=1; | |
237 | |
238 av_get_number(obj, name, o_out, &num, &den, &intnum); | |
239 return num*intnum/den; | |
240 } | |
241 | |
242 AVRational av_get_q(void *obj, const char *name, AVOption **o_out){ | |
243 int64_t intnum=1; | |
244 double num=1; | |
245 int den=1; | |
246 | |
247 av_get_number(obj, name, o_out, &num, &den, &intnum); | |
248 if(num == 1.0 && (int)intnum == intnum) | |
249 return (AVRational){intnum, den}; | |
250 else | |
251 return av_d2q(num*intnum/den, 1<<24); | |
252 } | |
253 | |
254 int64_t av_get_int(void *obj, const char *name, AVOption **o_out){ | |
255 int64_t intnum=1; | |
256 double num=1; | |
257 int den=1; | |
258 | |
259 av_get_number(obj, name, o_out, &num, &den, &intnum); | |
260 return num*intnum/den; | |
261 } | |
262 | |
3961 | 263 static void opt_list(void *obj, void *av_log_obj, char *unit) |
3788
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
264 { |
2873 | 265 AVOption *opt=NULL; |
2967 | 266 |
2873 | 267 while((opt= av_next_option(obj, opt))){ |
268 if(!(opt->flags & (AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM))) | |
269 continue; | |
2967 | 270 |
3788
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
271 /* Don't print CONST's on level one. |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
272 * Don't print anything but CONST's on level two. |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
273 * Only print items from the requested unit. |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
274 */ |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
275 if (!unit && opt->type==FF_OPT_TYPE_CONST) |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
276 continue; |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
277 else if (unit && opt->type!=FF_OPT_TYPE_CONST) |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
278 continue; |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
279 else if (unit && opt->type==FF_OPT_TYPE_CONST && strcmp(unit, opt->unit)) |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
280 continue; |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
281 else if (unit && opt->type == FF_OPT_TYPE_CONST) |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
282 av_log(av_log_obj, AV_LOG_INFO, " %-15s ", opt->name); |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
283 else |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
284 av_log(av_log_obj, AV_LOG_INFO, "-%-17s ", opt->name); |
3141
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
285 |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
286 switch( opt->type ) |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
287 { |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
288 case FF_OPT_TYPE_FLAGS: |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
289 av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<flags>" ); |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
290 break; |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
291 case FF_OPT_TYPE_INT: |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
292 av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<int>" ); |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
293 break; |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
294 case FF_OPT_TYPE_INT64: |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
295 av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<int64>" ); |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
296 break; |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
297 case FF_OPT_TYPE_DOUBLE: |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
298 av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<double>" ); |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
299 break; |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
300 case FF_OPT_TYPE_FLOAT: |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
301 av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<float>" ); |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
302 break; |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
303 case FF_OPT_TYPE_STRING: |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
304 av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<string>" ); |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
305 break; |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
306 case FF_OPT_TYPE_RATIONAL: |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
307 av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<rational>" ); |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
308 break; |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
309 case FF_OPT_TYPE_CONST: |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
310 default: |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
311 av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "" ); |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
312 break; |
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
313 } |
2876 | 314 av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.'); |
315 av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.'); | |
316 av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_VIDEO_PARAM ) ? 'V' : '.'); | |
317 av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_AUDIO_PARAM ) ? 'A' : '.'); | |
318 av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.'); | |
2967 | 319 |
2888 | 320 if(opt->help) |
321 av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help); | |
322 av_log(av_log_obj, AV_LOG_INFO, "\n"); | |
3788
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
323 if (opt->unit && opt->type != FF_OPT_TYPE_CONST) { |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
324 opt_list(obj, av_log_obj, opt->unit); |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
325 } |
2873 | 326 } |
3788
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
327 } |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
328 |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
329 int av_opt_show(void *obj, void *av_log_obj){ |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
330 if(!obj) |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
331 return -1; |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
332 |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
333 av_log(av_log_obj, AV_LOG_INFO, "%s AVOptions:\n", (*(AVClass**)obj)->class_name); |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
334 |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
335 opt_list(obj, av_log_obj, NULL); |
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
336 |
2873 | 337 return 0; |
338 } | |
3702 | 339 |
3703
301d975b69e3
adds doxygen docs to av_opt_set_defaults. Patch by Takis
gpoirier
parents:
3702
diff
changeset
|
340 /** Set the values of the AVCodecContext or AVFormatContext structure. |
301d975b69e3
adds doxygen docs to av_opt_set_defaults. Patch by Takis
gpoirier
parents:
3702
diff
changeset
|
341 * They are set to the defaults specified in the according AVOption options |
301d975b69e3
adds doxygen docs to av_opt_set_defaults. Patch by Takis
gpoirier
parents:
3702
diff
changeset
|
342 * array default_val field. |
301d975b69e3
adds doxygen docs to av_opt_set_defaults. Patch by Takis
gpoirier
parents:
3702
diff
changeset
|
343 * |
301d975b69e3
adds doxygen docs to av_opt_set_defaults. Patch by Takis
gpoirier
parents:
3702
diff
changeset
|
344 * @param s AVCodecContext or AVFormatContext for which the defaults will be set |
301d975b69e3
adds doxygen docs to av_opt_set_defaults. Patch by Takis
gpoirier
parents:
3702
diff
changeset
|
345 */ |
3702 | 346 void av_opt_set_defaults(void *s) |
347 { | |
348 AVOption *opt = NULL; | |
349 while ((opt = av_next_option(s, opt)) != NULL) { | |
350 switch(opt->type) { | |
351 case FF_OPT_TYPE_CONST: | |
352 /* Nothing to be done here */ | |
353 break; | |
354 case FF_OPT_TYPE_FLAGS: | |
355 case FF_OPT_TYPE_INT: { | |
356 int val; | |
357 val = opt->default_val; | |
358 av_set_int(s, opt->name, val); | |
359 } | |
360 break; | |
361 case FF_OPT_TYPE_FLOAT: { | |
362 double val; | |
363 val = opt->default_val; | |
364 av_set_double(s, opt->name, val); | |
365 } | |
366 break; | |
367 case FF_OPT_TYPE_RATIONAL: { | |
368 AVRational val; | |
369 val = av_d2q(opt->default_val, INT_MAX); | |
370 av_set_q(s, opt->name, val); | |
371 } | |
372 break; | |
373 case FF_OPT_TYPE_STRING: | |
374 /* Cannot set default for string as default_val is of type * double */ | |
375 break; | |
376 default: | |
377 av_log(s, AV_LOG_DEBUG, "AVOption type %d of option %s not implemented yet\n", opt->type, opt->name); | |
378 } | |
379 } | |
380 } | |
381 |