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