Mercurial > libavcodec.hg
annotate opt.c @ 5319:40af705cef7e libavcodec
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
Fix the bugs:
1. The quality of output because of incorrect windowing coefficients.
New code for window generation.
2. Dynrng values were reset where dynrng value is present in the first block,
but not in the subsequent block.
| author | jbr |
|---|---|
| date | Sat, 14 Jul 2007 16:03:14 +0000 |
| parents | 2b72f9bc4f06 |
| children | 58ee364cd8fb |
| 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 */ |
| 2967 | 21 |
| 2862 | 22 /** |
| 23 * @file opt.c | |
| 24 * AVOptions | |
| 25 * @author Michael Niedermayer <michaelni@gmx.at> | |
| 26 */ | |
| 2967 | 27 |
| 2862 | 28 #include "avcodec.h" |
| 2880 | 29 #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
|
30 #include "eval.h" |
| 2862 | 31 |
| 32 //FIXME order them and do a bin search | |
|
4628
b0016ed89048
make av_find_opt() available to the public and add a mask+flags parameter to search for specific AVOptions
michael
parents:
4369
diff
changeset
|
33 const AVOption *av_find_opt(void *v, const char *name, const char *unit, int mask, int flags){ |
| 2862 | 34 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
|
35 const AVOption *o= c->option; |
| 2967 | 36 |
| 2862 | 37 for(;o && o->name; o++){ |
|
4748
c6a2b573f259
Fix a bug in av_find_opt(). Because some of the AVOption structures have field
takis
parents:
4747
diff
changeset
|
38 if(!strcmp(o->name, name) && (!unit || (o->unit && !strcmp(o->unit, unit))) && (o->flags & mask) == flags ) |
| 2862 | 39 return o; |
| 40 } | |
| 41 return NULL; | |
| 42 } | |
| 43 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
44 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
|
45 if(last && last[1].name) return ++last; |
|
3b999ce45b37
AVOption enumeration support and some flags to classify AVOptions
michael
parents:
2862
diff
changeset
|
46 else if(last) return NULL; |
|
3b999ce45b37
AVOption enumeration support and some flags to classify AVOptions
michael
parents:
2862
diff
changeset
|
47 else return (*(AVClass**)obj)->option; |
|
3b999ce45b37
AVOption enumeration support and some flags to classify AVOptions
michael
parents:
2862
diff
changeset
|
48 } |
|
3b999ce45b37
AVOption enumeration support and some flags to classify AVOptions
michael
parents:
2862
diff
changeset
|
49 |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
50 static const AVOption *av_set_number(void *obj, const char *name, double num, int den, int64_t intnum){ |
|
4628
b0016ed89048
make av_find_opt() available to the public and add a mask+flags parameter to search for specific AVOptions
michael
parents:
4369
diff
changeset
|
51 const AVOption *o= av_find_opt(obj, name, NULL, 0, 0); |
| 2862 | 52 void *dst; |
| 2967 | 53 if(!o || o->offset<=0) |
| 2873 | 54 return NULL; |
| 2967 | 55 |
|
3735
6c407dc6ab4a
Inform the user that a certain AVOption is out of range.
takis
parents:
3731
diff
changeset
|
56 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
|
57 av_log(NULL, AV_LOG_ERROR, "Value %lf for parameter '%s' out of range.\n", num, name); |
| 2873 | 58 return NULL; |
|
3735
6c407dc6ab4a
Inform the user that a certain AVOption is out of range.
takis
parents:
3731
diff
changeset
|
59 } |
| 2967 | 60 |
| 2862 | 61 dst= ((uint8_t*)obj) + o->offset; |
| 62 | |
| 63 switch(o->type){ | |
| 2967 | 64 case FF_OPT_TYPE_FLAGS: |
| 2873 | 65 case FF_OPT_TYPE_INT: *(int *)dst= lrintf(num/den)*intnum; break; |
| 66 case FF_OPT_TYPE_INT64: *(int64_t *)dst= lrintf(num/den)*intnum; break; | |
| 67 case FF_OPT_TYPE_FLOAT: *(float *)dst= num*intnum/den; break; | |
| 68 case FF_OPT_TYPE_DOUBLE:*(double *)dst= num*intnum/den; break; | |
| 2862 | 69 case FF_OPT_TYPE_RATIONAL: |
| 2873 | 70 if((int)num == num) *(AVRational*)dst= (AVRational){num*intnum, den}; |
| 71 else *(AVRational*)dst= av_d2q(num*intnum/den, 1<<24); | |
| 2862 | 72 default: |
| 2873 | 73 return NULL; |
| 2862 | 74 } |
| 2873 | 75 return o; |
| 2862 | 76 } |
| 77 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
78 static const AVOption *set_all_opt(void *v, const char *unit, double d){ |
| 2877 | 79 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
|
80 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
|
81 const AVOption *ret=NULL; |
| 2967 | 82 |
| 2877 | 83 for(;o && o->name; o++){ |
| 84 if(o->type != FF_OPT_TYPE_CONST && o->unit && !strcmp(o->unit, unit)){ | |
| 85 double tmp= d; | |
| 86 if(o->type == FF_OPT_TYPE_FLAGS) | |
| 87 tmp= av_get_int(v, o->name, NULL) | (int64_t)d; | |
| 88 | |
| 89 av_set_number(v, o->name, tmp, 1, 1); | |
| 90 ret= o; | |
| 91 } | |
| 92 } | |
| 93 return ret; | |
| 94 } | |
| 95 | |
| 3778 | 96 static double const_values[]={ |
| 97 M_PI, | |
| 98 M_E, | |
| 99 FF_QP2LAMBDA, | |
| 100 0 | |
| 101 }; | |
| 102 | |
| 103 static const char *const_names[]={ | |
| 104 "PI", | |
| 105 "E", | |
| 106 "QP2LAMBDA", | |
| 107 0 | |
| 108 }; | |
| 109 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
110 const AVOption *av_set_string(void *obj, const char *name, const char *val){ |
|
4628
b0016ed89048
make av_find_opt() available to the public and add a mask+flags parameter to search for specific AVOptions
michael
parents:
4369
diff
changeset
|
111 const AVOption *o= av_find_opt(obj, name, NULL, 0, 0); |
| 2877 | 112 if(o && o->offset==0 && o->type == FF_OPT_TYPE_CONST && o->unit){ |
| 113 return set_all_opt(obj, o->unit, o->default_val); | |
| 114 } | |
| 2967 | 115 if(!o || !val || o->offset<=0) |
| 2873 | 116 return NULL; |
| 2862 | 117 if(o->type != FF_OPT_TYPE_STRING){ |
| 118 for(;;){ | |
| 119 int i; | |
| 3778 | 120 char buf[256]; |
|
2874
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
121 int cmd=0; |
|
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
122 double d; |
| 3778 | 123 char *error = NULL; |
| 2862 | 124 |
|
2874
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
125 if(*val == '+' || *val == '-') |
|
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
126 cmd= *(val++); |
| 2967 | 127 |
|
2874
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
128 for(i=0; i<sizeof(buf)-1 && val[i] && val[i]!='+' && val[i]!='-'; i++) |
| 2862 | 129 buf[i]= val[i]; |
| 130 buf[i]=0; | |
| 131 val+= i; | |
| 2967 | 132 |
| 3778 | 133 d = ff_eval2(buf, const_values, const_names, NULL, NULL, NULL, NULL, NULL, &error); |
| 134 if(isnan(d)) { | |
|
4628
b0016ed89048
make av_find_opt() available to the public and add a mask+flags parameter to search for specific AVOptions
michael
parents:
4369
diff
changeset
|
135 const AVOption *o_named= av_find_opt(obj, buf, o->unit, 0, 0); |
| 2967 | 136 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
|
137 d= o_named->default_val; |
|
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
138 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
|
139 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
|
140 else if(!strcmp(buf, "min" )) d= o->min; |
|
4747
66aff3b71861
add 'all' and 'none' options for partitions config
gpoirier
parents:
4629
diff
changeset
|
141 else if(!strcmp(buf, "none" )) d= 0; |
|
66aff3b71861
add 'all' and 'none' options for partitions config
gpoirier
parents:
4629
diff
changeset
|
142 else if(!strcmp(buf, "all" )) d= ~0; |
| 3778 | 143 else { |
| 144 if (!error) | |
| 145 av_log(NULL, AV_LOG_ERROR, "Unable to parse option value \"%s\": %s\n", val, error); | |
| 146 return NULL; | |
| 147 } | |
| 2862 | 148 } |
|
2874
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
149 if(o->type == FF_OPT_TYPE_FLAGS){ |
|
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
150 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=='-') 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
|
152 }else if(cmd=='-') |
|
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
153 d= -d; |
| 2862 | 154 |
|
2874
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
155 av_set_number(obj, name, d, 1, 1); |
| 2862 | 156 if(!*val) |
|
2874
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
157 return o; |
| 2862 | 158 } |
| 2873 | 159 return NULL; |
| 2862 | 160 } |
| 2967 | 161 |
| 2862 | 162 memcpy(((uint8_t*)obj) + o->offset, val, sizeof(val)); |
| 2873 | 163 return o; |
| 2862 | 164 } |
| 165 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
166 const AVOption *av_set_double(void *obj, const char *name, double n){ |
| 2862 | 167 return av_set_number(obj, name, n, 1, 1); |
| 168 } | |
| 169 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
170 const AVOption *av_set_q(void *obj, const char *name, AVRational n){ |
| 2862 | 171 return av_set_number(obj, name, n.num, n.den, 1); |
| 172 } | |
| 173 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
174 const AVOption *av_set_int(void *obj, const char *name, int64_t n){ |
| 2862 | 175 return av_set_number(obj, name, 1, 1, n); |
| 176 } | |
| 177 | |
| 2873 | 178 /** |
| 2967 | 179 * |
| 2873 | 180 * @param buf a buffer which is used for returning non string values as strings, can be NULL |
| 181 * @param buf_len allocated length in bytes of buf | |
| 182 */ | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
183 const char *av_get_string(void *obj, const char *name, const AVOption **o_out, char *buf, int buf_len){ |
|
4628
b0016ed89048
make av_find_opt() available to the public and add a mask+flags parameter to search for specific AVOptions
michael
parents:
4369
diff
changeset
|
184 const AVOption *o= av_find_opt(obj, name, NULL, 0, 0); |
| 2873 | 185 void *dst; |
| 2862 | 186 if(!o || o->offset<=0) |
| 187 return NULL; | |
| 2873 | 188 if(o->type != FF_OPT_TYPE_STRING && (!buf || !buf_len)) |
| 2862 | 189 return NULL; |
| 190 | |
| 2873 | 191 dst= ((uint8_t*)obj) + o->offset; |
| 192 if(o_out) *o_out= o; | |
| 2967 | 193 |
| 2873 | 194 if(o->type == FF_OPT_TYPE_STRING) |
| 195 return dst; | |
| 2967 | 196 |
| 2873 | 197 switch(o->type){ |
|
2874
b6def74f5811
flags and named constants with type checking of course for AVOption
michael
parents:
2873
diff
changeset
|
198 case FF_OPT_TYPE_FLAGS: snprintf(buf, buf_len, "0x%08X",*(int *)dst);break; |
| 2873 | 199 case FF_OPT_TYPE_INT: snprintf(buf, buf_len, "%d" , *(int *)dst);break; |
| 2962 | 200 case FF_OPT_TYPE_INT64: snprintf(buf, buf_len, "%"PRId64, *(int64_t*)dst);break; |
| 2873 | 201 case FF_OPT_TYPE_FLOAT: snprintf(buf, buf_len, "%f" , *(float *)dst);break; |
| 202 case FF_OPT_TYPE_DOUBLE: snprintf(buf, buf_len, "%f" , *(double *)dst);break; | |
| 203 case FF_OPT_TYPE_RATIONAL: snprintf(buf, buf_len, "%d/%d", ((AVRational*)dst)->num, ((AVRational*)dst)->den);break; | |
| 204 default: return NULL; | |
| 205 } | |
| 206 return buf; | |
| 2862 | 207 } |
| 208 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
209 static int av_get_number(void *obj, const char *name, const AVOption **o_out, double *num, int *den, int64_t *intnum){ |
|
4628
b0016ed89048
make av_find_opt() available to the public and add a mask+flags parameter to search for specific AVOptions
michael
parents:
4369
diff
changeset
|
210 const AVOption *o= av_find_opt(obj, name, NULL, 0, 0); |
| 2862 | 211 void *dst; |
| 212 if(!o || o->offset<=0) | |
| 2873 | 213 goto error; |
| 2862 | 214 |
| 215 dst= ((uint8_t*)obj) + o->offset; | |
| 216 | |
| 2873 | 217 if(o_out) *o_out= o; |
| 218 | |
| 2862 | 219 switch(o->type){ |
| 2967 | 220 case FF_OPT_TYPE_FLAGS: |
| 2873 | 221 case FF_OPT_TYPE_INT: *intnum= *(int *)dst;return 0; |
| 222 case FF_OPT_TYPE_INT64: *intnum= *(int64_t*)dst;return 0; | |
| 223 case FF_OPT_TYPE_FLOAT: *num= *(float *)dst;return 0; | |
| 224 case FF_OPT_TYPE_DOUBLE: *num= *(double *)dst;return 0; | |
| 2967 | 225 case FF_OPT_TYPE_RATIONAL: *intnum= ((AVRational*)dst)->num; |
| 2873 | 226 *den = ((AVRational*)dst)->den; |
| 227 return 0; | |
| 2862 | 228 } |
| 2873 | 229 error: |
| 230 *den=*intnum=0; | |
| 231 return -1; | |
| 2862 | 232 } |
| 2873 | 233 |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
234 double av_get_double(void *obj, const char *name, const AVOption **o_out){ |
| 2873 | 235 int64_t intnum=1; |
| 236 double num=1; | |
| 237 int den=1; | |
| 238 | |
| 239 av_get_number(obj, name, o_out, &num, &den, &intnum); | |
| 240 return num*intnum/den; | |
| 241 } | |
| 242 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
243 AVRational av_get_q(void *obj, const char *name, const AVOption **o_out){ |
| 2873 | 244 int64_t intnum=1; |
| 245 double num=1; | |
| 246 int den=1; | |
| 247 | |
| 248 av_get_number(obj, name, o_out, &num, &den, &intnum); | |
| 249 if(num == 1.0 && (int)intnum == intnum) | |
| 250 return (AVRational){intnum, den}; | |
| 251 else | |
| 252 return av_d2q(num*intnum/den, 1<<24); | |
| 253 } | |
| 254 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
255 int64_t av_get_int(void *obj, const char *name, const AVOption **o_out){ |
| 2873 | 256 int64_t intnum=1; |
| 257 double num=1; | |
| 258 int den=1; | |
| 259 | |
| 260 av_get_number(obj, name, o_out, &num, &den, &intnum); | |
| 261 return num*intnum/den; | |
| 262 } | |
| 263 | |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
264 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
|
265 { |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
266 const AVOption *opt=NULL; |
| 2967 | 267 |
| 2873 | 268 while((opt= av_next_option(obj, opt))){ |
| 269 if(!(opt->flags & (AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM))) | |
| 270 continue; | |
| 2967 | 271 |
|
3788
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
272 /* 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
|
273 * 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
|
274 * 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
|
275 */ |
|
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
276 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
|
277 continue; |
|
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
278 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
|
279 continue; |
|
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
280 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
|
281 continue; |
|
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
282 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
|
283 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
|
284 else |
|
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
285 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
|
286 |
|
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
287 switch( opt->type ) |
|
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
288 { |
|
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_FLAGS: |
|
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 ", "<flags>" ); |
|
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_INT: |
|
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 ", "<int>" ); |
|
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_INT64: |
|
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 ", "<int64>" ); |
|
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_DOUBLE: |
|
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 ", "<double>" ); |
|
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_FLOAT: |
|
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 ", "<float>" ); |
|
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_STRING: |
|
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 ", "<string>" ); |
|
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_RATIONAL: |
|
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
308 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
|
309 break; |
|
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
310 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
|
311 default: |
|
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
312 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
|
313 break; |
|
25493c849d70
Give a hint about what is the expected the data type of command line options.
gpoirier
parents:
3036
diff
changeset
|
314 } |
| 2876 | 315 av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.'); |
| 316 av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.'); | |
| 317 av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_VIDEO_PARAM ) ? 'V' : '.'); | |
| 318 av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_AUDIO_PARAM ) ? 'A' : '.'); | |
| 319 av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.'); | |
| 2967 | 320 |
| 2888 | 321 if(opt->help) |
| 322 av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help); | |
| 323 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
|
324 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
|
325 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
|
326 } |
| 2873 | 327 } |
|
3788
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 |
|
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
330 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
|
331 if(!obj) |
|
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
332 return -1; |
|
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
333 |
|
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
334 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
|
335 |
|
484d719a2028
Reformat the output of the list of available AVOptions, by indenting the
takis
parents:
3786
diff
changeset
|
336 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
|
337 |
| 2873 | 338 return 0; |
| 339 } | |
| 3702 | 340 |
|
3703
301d975b69e3
adds doxygen docs to av_opt_set_defaults. Patch by Takis
gpoirier
parents:
3702
diff
changeset
|
341 /** 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
|
342 * 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
|
343 * array default_val field. |
|
301d975b69e3
adds doxygen docs to av_opt_set_defaults. Patch by Takis
gpoirier
parents:
3702
diff
changeset
|
344 * |
|
301d975b69e3
adds doxygen docs to av_opt_set_defaults. Patch by Takis
gpoirier
parents:
3702
diff
changeset
|
345 * @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
|
346 */ |
|
4629
2faa1399dd68
add av_opt_set_defaults2() which sets just defaults from AVOptions whos flags match a user specified & mask = flags
michael
parents:
4628
diff
changeset
|
347 void av_opt_set_defaults2(void *s, int mask, int flags) |
| 3702 | 348 { |
|
4369
e10acab2322a
Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents:
3961
diff
changeset
|
349 const AVOption *opt = NULL; |
| 3702 | 350 while ((opt = av_next_option(s, opt)) != NULL) { |
|
4629
2faa1399dd68
add av_opt_set_defaults2() which sets just defaults from AVOptions whos flags match a user specified & mask = flags
michael
parents:
4628
diff
changeset
|
351 if((opt->flags & mask) != flags) |
|
2faa1399dd68
add av_opt_set_defaults2() which sets just defaults from AVOptions whos flags match a user specified & mask = flags
michael
parents:
4628
diff
changeset
|
352 continue; |
| 3702 | 353 switch(opt->type) { |
| 354 case FF_OPT_TYPE_CONST: | |
| 355 /* Nothing to be done here */ | |
| 356 break; | |
| 357 case FF_OPT_TYPE_FLAGS: | |
| 358 case FF_OPT_TYPE_INT: { | |
| 359 int val; | |
| 360 val = opt->default_val; | |
| 361 av_set_int(s, opt->name, val); | |
| 362 } | |
| 363 break; | |
| 364 case FF_OPT_TYPE_FLOAT: { | |
| 365 double val; | |
| 366 val = opt->default_val; | |
| 367 av_set_double(s, opt->name, val); | |
| 368 } | |
| 369 break; | |
| 370 case FF_OPT_TYPE_RATIONAL: { | |
| 371 AVRational val; | |
| 372 val = av_d2q(opt->default_val, INT_MAX); | |
| 373 av_set_q(s, opt->name, val); | |
| 374 } | |
| 375 break; | |
| 376 case FF_OPT_TYPE_STRING: | |
| 377 /* Cannot set default for string as default_val is of type * double */ | |
| 378 break; | |
| 379 default: | |
| 380 av_log(s, AV_LOG_DEBUG, "AVOption type %d of option %s not implemented yet\n", opt->type, opt->name); | |
| 381 } | |
| 382 } | |
| 383 } | |
| 384 | |
|
4629
2faa1399dd68
add av_opt_set_defaults2() which sets just defaults from AVOptions whos flags match a user specified & mask = flags
michael
parents:
4628
diff
changeset
|
385 void av_opt_set_defaults(void *s){ |
|
2faa1399dd68
add av_opt_set_defaults2() which sets just defaults from AVOptions whos flags match a user specified & mask = flags
michael
parents:
4628
diff
changeset
|
386 av_opt_set_defaults2(s, 0, 0); |
|
2faa1399dd68
add av_opt_set_defaults2() which sets just defaults from AVOptions whos flags match a user specified & mask = flags
michael
parents:
4628
diff
changeset
|
387 } |
|
2faa1399dd68
add av_opt_set_defaults2() which sets just defaults from AVOptions whos flags match a user specified & mask = flags
michael
parents:
4628
diff
changeset
|
388 |
