annotate opt.c @ 4443:54bed3ee58f3 libavcodec

simpify state and make code 2% faster reimar, dont hesitate to flame me for not sending patches and feel free to revert any or all of my changes to lzo.c if you dont like them
author michael
date Wed, 31 Jan 2007 10:34:13 +0000
parents e10acab2322a
children b0016ed89048
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
1 /*
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
2 * AVOptions
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
3 * Copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
15 * Lesser General Public License for more details.
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
16 *
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
20 *
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
21 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
22
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
23 /**
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
24 * @file opt.c
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
25 * AVOptions
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
26 * @author Michael Niedermayer <michaelni@gmx.at>
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
27 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
28
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
29 #include "avcodec.h"
2880
4d91f38477ee dont include opt.h in avcodec.h
michael
parents: 2877
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
32
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
37
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
38 for(;o && o->name; o++){
2877
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
39 if(!strcmp(o->name, name) && (!unit || !strcmp(o->unit, unit)) )
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
40 return o;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
41 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
42 return NULL;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
43 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
53 void *dst;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
54 if(!o || o->offset<=0)
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
55 return NULL;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
59 return NULL;
3735
6c407dc6ab4a Inform the user that a certain AVOption is out of range.
takis
parents: 3731
diff changeset
60 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
61
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
62 dst= ((uint8_t*)obj) + o->offset;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
63
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
64 switch(o->type){
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
65 case FF_OPT_TYPE_FLAGS:
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
66 case FF_OPT_TYPE_INT: *(int *)dst= lrintf(num/den)*intnum; break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
67 case FF_OPT_TYPE_INT64: *(int64_t *)dst= lrintf(num/den)*intnum; break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
68 case FF_OPT_TYPE_FLOAT: *(float *)dst= num*intnum/den; break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
69 case FF_OPT_TYPE_DOUBLE:*(double *)dst= num*intnum/den; break;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
70 case FF_OPT_TYPE_RATIONAL:
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
71 if((int)num == num) *(AVRational*)dst= (AVRational){num*intnum, den};
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
72 else *(AVRational*)dst= av_d2q(num*intnum/den, 1<<24);
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
73 default:
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
74 return NULL;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
75 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
76 return o;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
77 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
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
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
83
2877
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
84 for(;o && o->name; o++){
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
85 if(o->type != FF_OPT_TYPE_CONST && o->unit && !strcmp(o->unit, unit)){
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
86 double tmp= d;
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
87 if(o->type == FF_OPT_TYPE_FLAGS)
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
88 tmp= av_get_int(v, o->name, NULL) | (int64_t)d;
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
89
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
90 av_set_number(v, o->name, tmp, 1, 1);
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
91 ret= o;
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
92 }
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
93 }
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
94 return ret;
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
95 }
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
96
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
97 static double const_values[]={
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
98 M_PI,
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
99 M_E,
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
100 FF_QP2LAMBDA,
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
101 0
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
102 };
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
103
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
104 static const char *const_names[]={
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
105 "PI",
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
106 "E",
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
107 "QP2LAMBDA",
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
108 0
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
109 };
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
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
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
113 if(o && o->offset==0 && o->type == FF_OPT_TYPE_CONST && o->unit){
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
114 return set_all_opt(obj, o->unit, o->default_val);
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
115 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
116 if(!o || !val || o->offset<=0)
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
117 return NULL;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
118 if(o->type != FF_OPT_TYPE_STRING){
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
119 for(;;){
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
120 int i;
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
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
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
124 char *error = NULL;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
130 buf[i]= val[i];
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
131 buf[i]=0;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
132 val+= i;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
133
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
134 d = ff_eval2(buf, const_values, const_names, NULL, NULL, NULL, NULL, NULL, &error);
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
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
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
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
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
142 else {
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
143 if (!error)
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
144 av_log(NULL, AV_LOG_ERROR, "Unable to parse option value \"%s\": %s\n", val, error);
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
145 return NULL;
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
146 }
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
157 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
158 return NULL;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
159 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
160
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
161 memcpy(((uint8_t*)obj) + o->offset, val, sizeof(val));
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
162 return o;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
163 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
166 return av_set_number(obj, name, n, 1, 1);
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
167 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
170 return av_set_number(obj, name, n.num, n.den, 1);
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
171 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
174 return av_set_number(obj, name, 1, 1, n);
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
175 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
176
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
177 /**
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
178 *
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
179 * @param buf a buffer which is used for returning non string values as strings, can be NULL
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
180 * @param buf_len allocated length in bytes of buf
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
184 void *dst;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
185 if(!o || o->offset<=0)
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
186 return NULL;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
187 if(o->type != FF_OPT_TYPE_STRING && (!buf || !buf_len))
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
188 return NULL;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
189
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
190 dst= ((uint8_t*)obj) + o->offset;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
191 if(o_out) *o_out= o;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
192
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
193 if(o->type == FF_OPT_TYPE_STRING)
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
194 return dst;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
195
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
198 case FF_OPT_TYPE_INT: snprintf(buf, buf_len, "%d" , *(int *)dst);break;
2962
fde28cb7e3d5 use PRIxN, %zd, %td formats where needed
mru
parents: 2888
diff changeset
199 case FF_OPT_TYPE_INT64: snprintf(buf, buf_len, "%"PRId64, *(int64_t*)dst);break;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
200 case FF_OPT_TYPE_FLOAT: snprintf(buf, buf_len, "%f" , *(float *)dst);break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
201 case FF_OPT_TYPE_DOUBLE: snprintf(buf, buf_len, "%f" , *(double *)dst);break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
202 case FF_OPT_TYPE_RATIONAL: snprintf(buf, buf_len, "%d/%d", ((AVRational*)dst)->num, ((AVRational*)dst)->den);break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
203 default: return NULL;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
204 }
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
205 return buf;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
206 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
210 void *dst;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
211 if(!o || o->offset<=0)
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
212 goto error;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
213
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
214 dst= ((uint8_t*)obj) + o->offset;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
215
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
216 if(o_out) *o_out= o;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
217
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
218 switch(o->type){
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
219 case FF_OPT_TYPE_FLAGS:
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
220 case FF_OPT_TYPE_INT: *intnum= *(int *)dst;return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
221 case FF_OPT_TYPE_INT64: *intnum= *(int64_t*)dst;return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
222 case FF_OPT_TYPE_FLOAT: *num= *(float *)dst;return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
223 case FF_OPT_TYPE_DOUBLE: *num= *(double *)dst;return 0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
224 case FF_OPT_TYPE_RATIONAL: *intnum= ((AVRational*)dst)->num;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
225 *den = ((AVRational*)dst)->den;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
226 return 0;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
227 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
228 error:
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
229 *den=*intnum=0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
230 return -1;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
231 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
234 int64_t intnum=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
235 double num=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
236 int den=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
237
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
238 av_get_number(obj, name, o_out, &num, &den, &intnum);
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
239 return num*intnum/den;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
240 }
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
243 int64_t intnum=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
244 double num=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
245 int den=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
246
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
247 av_get_number(obj, name, o_out, &num, &den, &intnum);
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
248 if(num == 1.0 && (int)intnum == intnum)
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
249 return (AVRational){intnum, den};
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
250 else
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
251 return av_d2q(num*intnum/den, 1<<24);
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
252 }
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
255 int64_t intnum=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
256 double num=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
257 int den=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
258
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
259 av_get_number(obj, name, o_out, &num, &den, &intnum);
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
260 return num*intnum/den;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
261 }
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
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
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
266
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
267 while((opt= av_next_option(obj, opt))){
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
268 if(!(opt->flags & (AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM)))
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
269 continue;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
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
8026edf6a349 avoid stdio.h
michael
parents: 2875
diff changeset
314 av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.');
8026edf6a349 avoid stdio.h
michael
parents: 2875
diff changeset
315 av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.');
8026edf6a349 avoid stdio.h
michael
parents: 2875
diff changeset
316 av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_VIDEO_PARAM ) ? 'V' : '.');
8026edf6a349 avoid stdio.h
michael
parents: 2875
diff changeset
317 av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_AUDIO_PARAM ) ? 'A' : '.');
8026edf6a349 avoid stdio.h
michael
parents: 2875
diff changeset
318 av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.');
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
319
2888
771fae923356 dont print NULL
michael
parents: 2880
diff changeset
320 if(opt->help)
771fae923356 dont print NULL
michael
parents: 2880
diff changeset
321 av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help);
771fae923356 dont print NULL
michael
parents: 2880
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
337 return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
338 }
3702
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
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
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
346 void av_opt_set_defaults(void *s)
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
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
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
349 while ((opt = av_next_option(s, opt)) != NULL) {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
350 switch(opt->type) {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
351 case FF_OPT_TYPE_CONST:
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
352 /* Nothing to be done here */
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
353 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
354 case FF_OPT_TYPE_FLAGS:
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
355 case FF_OPT_TYPE_INT: {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
356 int val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
357 val = opt->default_val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
358 av_set_int(s, opt->name, val);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
359 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
360 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
361 case FF_OPT_TYPE_FLOAT: {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
362 double val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
363 val = opt->default_val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
364 av_set_double(s, opt->name, val);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
365 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
366 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
367 case FF_OPT_TYPE_RATIONAL: {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
368 AVRational val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
369 val = av_d2q(opt->default_val, INT_MAX);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
370 av_set_q(s, opt->name, val);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
371 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
372 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
373 case FF_OPT_TYPE_STRING:
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
374 /* Cannot set default for string as default_val is of type * double */
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
375 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
376 default:
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
377 av_log(s, AV_LOG_DEBUG, "AVOption type %d of option %s not implemented yet\n", opt->type, opt->name);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
378 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
379 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
380 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
381