Mercurial > libavcodec.hg
annotate opt.c @ 4580:55d7ebd2d699 libavcodec
fix chroma mc2 bug, this is based on a patch by (Oleg Metelitsa oleg hitron co kr)
and does slow the mc2 chroma put down, avg interrestingly seems unaffected speedwise on duron
this of course should be rather done in a way which doesnt slow it down but its better a few %
slower but correct then incorrect
| author | michael |
|---|---|
| date | Fri, 23 Feb 2007 14:29:13 +0000 |
| parents | e10acab2322a |
| children | b0016ed89048 |
| 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 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
34 static const AVOption *find_opt(void *v, const char *name, const char *unit){ |
| 2862 | 35 AVClass *c= *(AVClass**)v; //FIXME silly way of storing AVClass |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
36 const 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 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
45 const AVOption *av_next_option(void *obj, const AVOption *last){ |
|
2865
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 |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
51 static const AVOption *av_set_number(void *obj, const char *name, double num, int den, int64_t intnum){ |
|
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
52 const 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 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
79 static const AVOption *set_all_opt(void *v, const char *unit, double d){ |
| 2877 | 80 AVClass *c= *(AVClass**)v; //FIXME silly way of storing AVClass |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
81 const AVOption *o= c->option; |
|
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
82 const 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 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
111 const AVOption *av_set_string(void *obj, const char *name, const char *val){ |
|
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
112 const AVOption *o= find_opt(obj, name, NULL); |
| 2877 | 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)) { | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
136 const 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 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
165 const AVOption *av_set_double(void *obj, const char *name, double n){ |
| 2862 | 166 return av_set_number(obj, name, n, 1, 1); |
| 167 } | |
| 168 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
169 const 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 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
173 const 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 */ | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
182 const char *av_get_string(void *obj, const char *name, const AVOption **o_out, char *buf, int buf_len){ |
|
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
183 const 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 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
208 static int av_get_number(void *obj, const char *name, const AVOption **o_out, double *num, int *den, int64_t *intnum){ |
|
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
209 const 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 |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
233 double av_get_double(void *obj, const char *name, const AVOption **o_out){ |
| 2873 | 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 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
242 AVRational av_get_q(void *obj, const char *name, const AVOption **o_out){ |
| 2873 | 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 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
254 int64_t av_get_int(void *obj, const char *name, const AVOption **o_out){ |
| 2873 | 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 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
263 static void opt_list(void *obj, void *av_log_obj, const char *unit) |
|
3788
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
264 { |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
265 const 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 { | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
348 const AVOption *opt = NULL; |
| 3702 | 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 |
