annotate opt.c @ 5757:ace63c809071 libavcodec

Remove uses of SIGILL for CPU extension detection, that method is not acceptable in a library. Should not change anything for PPC, the autodetection is currently pointless due to other code being compiled with -maltivec as well (and detection for OSX and AmigaOS remains in place). SPARC binaries built with VIS support can now only run on systems with VIS.
author reimar
date Tue, 02 Oct 2007 18:18:35 +0000
parents 2b72f9bc4f06
children 58ee364cd8fb
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 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
21
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
22 /**
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
23 * @file opt.c
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
24 * AVOptions
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
25 * @author Michael Niedermayer <michaelni@gmx.at>
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
26 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
27
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
28 #include "avcodec.h"
2880
4d91f38477ee dont include opt.h in avcodec.h
michael
parents: 2877
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
31
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
36
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
39 return o;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
40 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
41 return NULL;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
42 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
52 void *dst;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
53 if(!o || o->offset<=0)
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
54 return NULL;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
58 return NULL;
3735
6c407dc6ab4a Inform the user that a certain AVOption is out of range.
takis
parents: 3731
diff changeset
59 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
60
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
61 dst= ((uint8_t*)obj) + o->offset;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
62
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
63 switch(o->type){
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
64 case FF_OPT_TYPE_FLAGS:
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
65 case FF_OPT_TYPE_INT: *(int *)dst= lrintf(num/den)*intnum; break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
66 case FF_OPT_TYPE_INT64: *(int64_t *)dst= lrintf(num/den)*intnum; break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
67 case FF_OPT_TYPE_FLOAT: *(float *)dst= num*intnum/den; break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
68 case FF_OPT_TYPE_DOUBLE:*(double *)dst= num*intnum/den; break;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
69 case FF_OPT_TYPE_RATIONAL:
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
70 if((int)num == num) *(AVRational*)dst= (AVRational){num*intnum, den};
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
71 else *(AVRational*)dst= av_d2q(num*intnum/den, 1<<24);
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
72 default:
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
73 return NULL;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
74 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
75 return o;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
76 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
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
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
82
2877
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
83 for(;o && o->name; o++){
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
84 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
85 double tmp= d;
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
86 if(o->type == FF_OPT_TYPE_FLAGS)
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
87 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
88
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
89 av_set_number(v, o->name, tmp, 1, 1);
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
90 ret= o;
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
91 }
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 return ret;
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
94 }
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
95
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
96 static double const_values[]={
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
97 M_PI,
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
98 M_E,
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
99 FF_QP2LAMBDA,
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
100 0
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
101 };
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 static const char *const_names[]={
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
104 "PI",
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
105 "E",
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
106 "QP2LAMBDA",
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
107 0
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
108 };
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
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
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
112 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
113 return set_all_opt(obj, o->unit, o->default_val);
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
114 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
115 if(!o || !val || o->offset<=0)
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
116 return NULL;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
117 if(o->type != FF_OPT_TYPE_STRING){
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
118 for(;;){
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
119 int i;
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
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
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
123 char *error = NULL;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
129 buf[i]= val[i];
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
130 buf[i]=0;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
131 val+= i;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
132
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
133 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
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
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
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
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
143 else {
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
144 if (!error)
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
145 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
146 return NULL;
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
147 }
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
158 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
159 return NULL;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
160 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
161
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
162 memcpy(((uint8_t*)obj) + o->offset, val, sizeof(val));
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
163 return o;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
164 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
167 return av_set_number(obj, name, n, 1, 1);
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
168 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
171 return av_set_number(obj, name, n.num, n.den, 1);
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
172 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
175 return av_set_number(obj, name, 1, 1, n);
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
176 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
177
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
178 /**
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
179 *
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
180 * @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
181 * @param buf_len allocated length in bytes of buf
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
185 void *dst;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
186 if(!o || o->offset<=0)
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
187 return NULL;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
188 if(o->type != FF_OPT_TYPE_STRING && (!buf || !buf_len))
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
189 return NULL;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
190
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
191 dst= ((uint8_t*)obj) + o->offset;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
192 if(o_out) *o_out= o;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
193
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
194 if(o->type == FF_OPT_TYPE_STRING)
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
195 return dst;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
196
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
199 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
200 case FF_OPT_TYPE_INT64: snprintf(buf, buf_len, "%"PRId64, *(int64_t*)dst);break;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
201 case FF_OPT_TYPE_FLOAT: snprintf(buf, buf_len, "%f" , *(float *)dst);break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
202 case FF_OPT_TYPE_DOUBLE: snprintf(buf, buf_len, "%f" , *(double *)dst);break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
203 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
204 default: return NULL;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
205 }
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
206 return buf;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
207 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
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
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
211 void *dst;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
212 if(!o || o->offset<=0)
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
213 goto error;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
214
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
215 dst= ((uint8_t*)obj) + o->offset;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
216
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
217 if(o_out) *o_out= o;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
218
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
219 switch(o->type){
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
220 case FF_OPT_TYPE_FLAGS:
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
221 case FF_OPT_TYPE_INT: *intnum= *(int *)dst;return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
222 case FF_OPT_TYPE_INT64: *intnum= *(int64_t*)dst;return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
223 case FF_OPT_TYPE_FLOAT: *num= *(float *)dst;return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
224 case FF_OPT_TYPE_DOUBLE: *num= *(double *)dst;return 0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
225 case FF_OPT_TYPE_RATIONAL: *intnum= ((AVRational*)dst)->num;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
226 *den = ((AVRational*)dst)->den;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
227 return 0;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
228 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
229 error:
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
230 *den=*intnum=0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
231 return -1;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
232 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
235 int64_t intnum=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
236 double num=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
237 int den=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
238
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
239 av_get_number(obj, name, o_out, &num, &den, &intnum);
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
240 return num*intnum/den;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
241 }
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
244 int64_t intnum=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
245 double num=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
246 int den=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
247
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
248 av_get_number(obj, name, o_out, &num, &den, &intnum);
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
249 if(num == 1.0 && (int)intnum == intnum)
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
250 return (AVRational){intnum, den};
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
251 else
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
252 return av_d2q(num*intnum/den, 1<<24);
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
253 }
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
256 int64_t intnum=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
257 double num=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
258 int den=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
259
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
260 av_get_number(obj, name, o_out, &num, &den, &intnum);
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
261 return num*intnum/den;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
262 }
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
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
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
267
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
268 while((opt= av_next_option(obj, opt))){
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
269 if(!(opt->flags & (AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM)))
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
270 continue;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
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
8026edf6a349 avoid stdio.h
michael
parents: 2875
diff changeset
315 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
316 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
317 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
318 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
319 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
320
2888
771fae923356 dont print NULL
michael
parents: 2880
diff changeset
321 if(opt->help)
771fae923356 dont print NULL
michael
parents: 2880
diff changeset
322 av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help);
771fae923356 dont print NULL
michael
parents: 2880
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
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
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
338 return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
339 }
3702
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
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
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
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
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
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
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
353 switch(opt->type) {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
354 case FF_OPT_TYPE_CONST:
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
355 /* Nothing to be done here */
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
356 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
357 case FF_OPT_TYPE_FLAGS:
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
358 case FF_OPT_TYPE_INT: {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
359 int val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
360 val = opt->default_val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
361 av_set_int(s, opt->name, val);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
362 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
363 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
364 case FF_OPT_TYPE_FLOAT: {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
365 double val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
366 val = opt->default_val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
367 av_set_double(s, opt->name, val);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
368 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
369 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
370 case FF_OPT_TYPE_RATIONAL: {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
371 AVRational val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
372 val = av_d2q(opt->default_val, INT_MAX);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
373 av_set_q(s, opt->name, val);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
374 }
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 case FF_OPT_TYPE_STRING:
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
377 /* Cannot set default for string as default_val is of type * double */
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
378 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
379 default:
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
380 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
381 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
382 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
383 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
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