annotate opt.c @ 9830:bd0879f752e6 libavcodec

Express the H.264 parser dependency on the golomb code in configure instead of in the Makefile as it is done for all other parts that depend on golomb.
author diego
date Tue, 09 Jun 2009 20:29:52 +0000
parents 04d77f7cc7fd
children 917c88a80b67
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 /**
8718
e9d9d946f213 Use full internal pathname in doxygen @file directives.
diego
parents: 8439
diff changeset
23 * @file libavcodec/opt.c
2862
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
8344
844463c05193 Implement the av_set_number2() internal function, which makes possible
stefano
parents: 8343
diff changeset
50 static int av_set_number2(void *obj, const char *name, double num, int den, int64_t intnum, const AVOption **o_out){
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;
8344
844463c05193 Implement the av_set_number2() internal function, which makes possible
stefano
parents: 8343
diff changeset
53 if(o_out)
844463c05193 Implement the av_set_number2() internal function, which makes possible
stefano
parents: 8343
diff changeset
54 *o_out= o;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
55 if(!o || o->offset<=0)
8344
844463c05193 Implement the av_set_number2() internal function, which makes possible
stefano
parents: 8343
diff changeset
56 return AVERROR(ENOENT);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
57
3735
6c407dc6ab4a Inform the user that a certain AVOption is out of range.
takis
parents: 3731
diff changeset
58 if(o->max*den < num*intnum || o->min*den > num*intnum) {
9640
854368240f7d Provide a context to av_log() calls in av_set_number2() and
stefano
parents: 8718
diff changeset
59 av_log(obj, AV_LOG_ERROR, "Value %lf for parameter '%s' out of range\n", num, name);
8344
844463c05193 Implement the av_set_number2() internal function, which makes possible
stefano
parents: 8343
diff changeset
60 return AVERROR(ERANGE);
3735
6c407dc6ab4a Inform the user that a certain AVOption is out of range.
takis
parents: 3731
diff changeset
61 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
62
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
63 dst= ((uint8_t*)obj) + o->offset;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
64
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
65 switch(o->type){
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
66 case FF_OPT_TYPE_FLAGS:
6451
355b2eb9f553 Fix handling flags with the MSB set.
michael
parents: 6353
diff changeset
67 case FF_OPT_TYPE_INT: *(int *)dst= llrint(num/den)*intnum; break;
355b2eb9f553 Fix handling flags with the MSB set.
michael
parents: 6353
diff changeset
68 case FF_OPT_TYPE_INT64: *(int64_t *)dst= llrint(num/den)*intnum; break;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
69 case FF_OPT_TYPE_FLOAT: *(float *)dst= num*intnum/den; break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
70 case FF_OPT_TYPE_DOUBLE:*(double *)dst= num*intnum/den; break;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
71 case FF_OPT_TYPE_RATIONAL:
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
72 if((int)num == num) *(AVRational*)dst= (AVRational){num*intnum, den};
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
73 else *(AVRational*)dst= av_d2q(num*intnum/den, 1<<24);
6015
bb4f24c580f5 Add a missing break, before av_set_number would always return NULL for
reimar
parents: 5977
diff changeset
74 break;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
75 default:
8344
844463c05193 Implement the av_set_number2() internal function, which makes possible
stefano
parents: 8343
diff changeset
76 return AVERROR(EINVAL);
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
77 }
8344
844463c05193 Implement the av_set_number2() internal function, which makes possible
stefano
parents: 8343
diff changeset
78 return 0;
844463c05193 Implement the av_set_number2() internal function, which makes possible
stefano
parents: 8343
diff changeset
79 }
844463c05193 Implement the av_set_number2() internal function, which makes possible
stefano
parents: 8343
diff changeset
80
844463c05193 Implement the av_set_number2() internal function, which makes possible
stefano
parents: 8343
diff changeset
81 static const AVOption *av_set_number(void *obj, const char *name, double num, int den, int64_t intnum){
844463c05193 Implement the av_set_number2() internal function, which makes possible
stefano
parents: 8343
diff changeset
82 const AVOption *o = NULL;
844463c05193 Implement the av_set_number2() internal function, which makes possible
stefano
parents: 8343
diff changeset
83 if (av_set_number2(obj, name, num, den, intnum, &o) < 0)
844463c05193 Implement the av_set_number2() internal function, which makes possible
stefano
parents: 8343
diff changeset
84 return NULL;
844463c05193 Implement the av_set_number2() internal function, which makes possible
stefano
parents: 8343
diff changeset
85 else
844463c05193 Implement the av_set_number2() internal function, which makes possible
stefano
parents: 8343
diff changeset
86 return o;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
87 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
88
7129
322023e630a6 mark read-only data as const
stefang
parents: 6853
diff changeset
89 static const double const_values[]={
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
90 M_PI,
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
91 M_E,
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
92 FF_QP2LAMBDA,
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
93 0
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
94 };
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
95
7129
322023e630a6 mark read-only data as const
stefang
parents: 6853
diff changeset
96 static const char * const const_names[]={
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
97 "PI",
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
98 "E",
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
99 "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
6034
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
103 static int hexchar2int(char c) {
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
104 if (c >= '0' && c <= '9') return c - '0';
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
105 if (c >= 'a' && c <= 'f') return c - 'a' + 10;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
106 if (c >= 'A' && c <= 'F') return c - 'A' + 10;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
107 return -1;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
108 }
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
109
8356
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
110 int av_set_string3(void *obj, const char *name, const char *val, int alloc, const AVOption **o_out){
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
111 int ret;
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
112 const AVOption *o= av_find_opt(obj, name, NULL, 0, 0);
8356
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
113 if (o_out)
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
114 *o_out = o;
9641
04d77f7cc7fd Make av_set_string3() print a message in case of unknown option.
stefano
parents: 9640
diff changeset
115 if(!o) {
04d77f7cc7fd Make av_set_string3() print a message in case of unknown option.
stefano
parents: 9640
diff changeset
116 av_log(obj, AV_LOG_ERROR, "Unknown option '%s'\n", name);
8356
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
117 return AVERROR(ENOENT);
9641
04d77f7cc7fd Make av_set_string3() print a message in case of unknown option.
stefano
parents: 9640
diff changeset
118 }
8356
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
119 if(!val || o->offset<=0)
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
120 return AVERROR(EINVAL);
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
121
6034
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
122 if(o->type == FF_OPT_TYPE_BINARY){
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
123 uint8_t **dst = (uint8_t **)(((uint8_t*)obj) + o->offset);
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
124 int *lendst = (int *)(dst + 1);
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
125 uint8_t *bin, *ptr;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
126 int len = strlen(val);
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
127 av_freep(dst);
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
128 *lendst = 0;
8356
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
129 if (len & 1) return AVERROR(EINVAL);
6034
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
130 len /= 2;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
131 ptr = bin = av_malloc(len);
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
132 while (*val) {
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
133 int a = hexchar2int(*val++);
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
134 int b = hexchar2int(*val++);
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
135 if (a < 0 || b < 0) {
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
136 av_free(bin);
8356
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
137 return AVERROR(EINVAL);
6034
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
138 }
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
139 *ptr++ = (a << 4) | b;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
140 }
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
141 *dst = bin;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
142 *lendst = len;
8356
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
143 return 0;
6034
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
144 }
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
145 if(o->type != FF_OPT_TYPE_STRING){
6853
9bfb69f1739e Anoter try to make +- behave sanely.
michael
parents: 6845
diff changeset
146 int notfirst=0;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
147 for(;;){
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
148 int i;
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
149 char buf[256];
2874
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
150 int cmd=0;
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
151 double d;
6353
lucabe
parents: 6034
diff changeset
152 const char *error = NULL;
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 if(*val == '+' || *val == '-')
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
155 cmd= *(val++);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
156
2874
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
157 for(i=0; i<sizeof(buf)-1 && val[i] && val[i]!='+' && val[i]!='-'; i++)
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
158 buf[i]= val[i];
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
159 buf[i]=0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
160
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
161 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
162 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
163 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
164 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
165 d= o_named->default_val;
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
166 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
167 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
168 else if(!strcmp(buf, "min" )) d= o->min;
4747
66aff3b71861 add 'all' and 'none' options for partitions config
gpoirier
parents: 4629
diff changeset
169 else if(!strcmp(buf, "none" )) d= 0;
66aff3b71861 add 'all' and 'none' options for partitions config
gpoirier
parents: 4629
diff changeset
170 else if(!strcmp(buf, "all" )) d= ~0;
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
171 else {
6794
ba5913f27124 Fix a typo.
benoit
parents: 6451
diff changeset
172 if (error)
9640
854368240f7d Provide a context to av_log() calls in av_set_number2() and
stefano
parents: 8718
diff changeset
173 av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\": %s\n", val, error);
8356
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
174 return AVERROR(EINVAL);
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
175 }
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
176 }
2874
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
177 if(o->type == FF_OPT_TYPE_FLAGS){
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
178 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
179 else if(cmd=='-') d= av_get_int(obj, name, NULL) &~(int64_t)d;
6845
80ebdc755fa9 Fix + - bug with non flags.
michael
parents: 6799
diff changeset
180 }else{
6853
9bfb69f1739e Anoter try to make +- behave sanely.
michael
parents: 6845
diff changeset
181 if (cmd=='+') d= notfirst*av_get_double(obj, name, NULL) + d;
9bfb69f1739e Anoter try to make +- behave sanely.
michael
parents: 6845
diff changeset
182 else if(cmd=='-') d= notfirst*av_get_double(obj, name, NULL) - d;
6845
80ebdc755fa9 Fix + - bug with non flags.
michael
parents: 6799
diff changeset
183 }
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
184
8356
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
185 if ((ret = av_set_number2(obj, name, d, 1, 1, o_out)) < 0)
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
186 return ret;
6797
51bbc2f553e2 Update offset in the option string later, to have a better error message.
benoit
parents: 6794
diff changeset
187 val+= i;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
188 if(!*val)
8356
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
189 return 0;
6853
9bfb69f1739e Anoter try to make +- behave sanely.
michael
parents: 6845
diff changeset
190 notfirst=1;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
191 }
8356
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
192 return AVERROR(EINVAL);
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
193 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
194
7224
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
195 if(alloc){
7271
8c58eeb20826 Fix the logic to access the location of a string to free when setting
stefano
parents: 7224
diff changeset
196 av_free(*(void**)(((uint8_t*)obj) + o->offset));
7224
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
197 val= av_strdup(val);
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
198 }
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
199
5976
58ee364cd8fb make the AVOption code work with strings instead of crash
michael
parents: 5215
diff changeset
200 memcpy(((uint8_t*)obj) + o->offset, &val, sizeof(val));
8356
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
201 return 0;
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
202 }
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
203
8407
8903ad65c412 Put under #if LIBAVCODEC_VERSION_MAJOR < 53 the deprecated functions
stefano
parents: 8406
diff changeset
204 #if LIBAVCODEC_VERSION_MAJOR < 53
8356
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
205 const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc){
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
206 const AVOption *o;
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
207 if (av_set_string3(obj, name, val, alloc, &o) < 0)
0030146fc2ba Implement av_set_string3().
stefano
parents: 8344
diff changeset
208 return NULL;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
209 return o;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
210 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
211
7224
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
212 const AVOption *av_set_string(void *obj, const char *name, const char *val){
8406
ea27308fa023 Remove calls to deprecated av_set_string2() with calls to
stefano
parents: 8356
diff changeset
213 const AVOption *o;
ea27308fa023 Remove calls to deprecated av_set_string2() with calls to
stefano
parents: 8356
diff changeset
214 if (av_set_string3(obj, name, val, 0, &o) < 0)
ea27308fa023 Remove calls to deprecated av_set_string2() with calls to
stefano
parents: 8356
diff changeset
215 return NULL;
ea27308fa023 Remove calls to deprecated av_set_string2() with calls to
stefano
parents: 8356
diff changeset
216 return o;
7224
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
217 }
8407
8903ad65c412 Put under #if LIBAVCODEC_VERSION_MAJOR < 53 the deprecated functions
stefano
parents: 8406
diff changeset
218 #endif
7224
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
219
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
220 const AVOption *av_set_double(void *obj, const char *name, double n){
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
221 return av_set_number(obj, name, n, 1, 1);
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
222 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
223
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
224 const AVOption *av_set_q(void *obj, const char *name, AVRational n){
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
225 return av_set_number(obj, name, n.num, n.den, 1);
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
226 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
227
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
228 const AVOption *av_set_int(void *obj, const char *name, int64_t n){
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
229 return av_set_number(obj, name, 1, 1, n);
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
230 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
231
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
232 /**
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
233 *
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
234 * @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
235 * @param buf_len allocated length in bytes of buf
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
236 */
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
237 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
238 const AVOption *o= av_find_opt(obj, name, NULL, 0, 0);
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
239 void *dst;
6034
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
240 uint8_t *bin;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
241 int len, i;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
242 if(!o || o->offset<=0)
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
243 return NULL;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
244 if(o->type != FF_OPT_TYPE_STRING && (!buf || !buf_len))
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
245 return NULL;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
246
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
247 dst= ((uint8_t*)obj) + o->offset;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
248 if(o_out) *o_out= o;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
249
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
250 switch(o->type){
2874
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
251 case FF_OPT_TYPE_FLAGS: snprintf(buf, buf_len, "0x%08X",*(int *)dst);break;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
252 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
253 case FF_OPT_TYPE_INT64: snprintf(buf, buf_len, "%"PRId64, *(int64_t*)dst);break;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
254 case FF_OPT_TYPE_FLOAT: snprintf(buf, buf_len, "%f" , *(float *)dst);break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
255 case FF_OPT_TYPE_DOUBLE: snprintf(buf, buf_len, "%f" , *(double *)dst);break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
256 case FF_OPT_TYPE_RATIONAL: snprintf(buf, buf_len, "%d/%d", ((AVRational*)dst)->num, ((AVRational*)dst)->den);break;
5977
853d1ea80942 simplify
michael
parents: 5976
diff changeset
257 case FF_OPT_TYPE_STRING: return *(void**)dst;
6034
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
258 case FF_OPT_TYPE_BINARY:
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
259 len = *(int*)(((uint8_t *)dst) + sizeof(uint8_t *));
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
260 if(len >= (buf_len + 1)/2) return NULL;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
261 bin = *(uint8_t**)dst;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
262 for(i = 0; i < len; i++) snprintf(buf + i*2, 3, "%02X", bin[i]);
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
263 break;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
264 default: return NULL;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
265 }
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
266 return buf;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
267 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
268
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
269 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
270 const AVOption *o= av_find_opt(obj, name, NULL, 0, 0);
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
271 void *dst;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
272 if(!o || o->offset<=0)
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
273 goto error;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
274
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
275 dst= ((uint8_t*)obj) + o->offset;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
276
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
277 if(o_out) *o_out= o;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
278
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
279 switch(o->type){
6451
355b2eb9f553 Fix handling flags with the MSB set.
michael
parents: 6353
diff changeset
280 case FF_OPT_TYPE_FLAGS: *intnum= *(unsigned int*)dst;return 0;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
281 case FF_OPT_TYPE_INT: *intnum= *(int *)dst;return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
282 case FF_OPT_TYPE_INT64: *intnum= *(int64_t*)dst;return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
283 case FF_OPT_TYPE_FLOAT: *num= *(float *)dst;return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
284 case FF_OPT_TYPE_DOUBLE: *num= *(double *)dst;return 0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
285 case FF_OPT_TYPE_RATIONAL: *intnum= ((AVRational*)dst)->num;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
286 *den = ((AVRational*)dst)->den;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
287 return 0;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
288 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
289 error:
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
290 *den=*intnum=0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
291 return -1;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
292 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
293
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
294 double av_get_double(void *obj, const char *name, const AVOption **o_out){
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
295 int64_t intnum=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
296 double num=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
297 int den=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
298
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
299 av_get_number(obj, name, o_out, &num, &den, &intnum);
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
300 return num*intnum/den;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
301 }
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
302
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
303 AVRational av_get_q(void *obj, const char *name, const AVOption **o_out){
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
304 int64_t intnum=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
305 double num=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
306 int den=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
307
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
308 av_get_number(obj, name, o_out, &num, &den, &intnum);
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
309 if(num == 1.0 && (int)intnum == intnum)
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
310 return (AVRational){intnum, den};
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
311 else
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
312 return av_d2q(num*intnum/den, 1<<24);
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
313 }
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
314
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
315 int64_t av_get_int(void *obj, const char *name, const AVOption **o_out){
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
316 int64_t intnum=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
317 double num=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
318 int den=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
319
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
320 av_get_number(obj, name, o_out, &num, &den, &intnum);
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
321 return num*intnum/den;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
322 }
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
323
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
324 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
325 {
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
326 const AVOption *opt=NULL;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
327
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
328 while((opt= av_next_option(obj, opt))){
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
329 if(!(opt->flags & (AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM)))
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
330 continue;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
331
3788
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
332 /* 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
333 * 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
334 * 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
335 */
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
336 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
337 continue;
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
338 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
339 continue;
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
340 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
341 continue;
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
342 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
343 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
344 else
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
345 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
346
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
347 switch( opt->type )
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
348 {
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
349 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
350 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
351 break;
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
352 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
353 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
354 break;
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
355 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
356 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
357 break;
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
358 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
359 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
360 break;
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
361 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
362 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
363 break;
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
364 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
365 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
366 break;
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
367 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
368 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
369 break;
6034
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
370 case FF_OPT_TYPE_BINARY:
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
371 av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<binary>" );
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
372 break;
3141
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
373 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
374 default:
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
375 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
376 break;
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
377 }
2876
8026edf6a349 avoid stdio.h
michael
parents: 2875
diff changeset
378 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
379 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
380 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
381 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
382 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
383
2888
771fae923356 dont print NULL
michael
parents: 2880
diff changeset
384 if(opt->help)
771fae923356 dont print NULL
michael
parents: 2880
diff changeset
385 av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help);
771fae923356 dont print NULL
michael
parents: 2880
diff changeset
386 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
387 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
388 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
389 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
390 }
3788
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
391 }
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
392
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
393 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
394 if(!obj)
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
395 return -1;
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
396
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
397 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
398
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
399 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
400
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
401 return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
402 }
3702
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
403
3703
301d975b69e3 adds doxygen docs to av_opt_set_defaults. Patch by Takis
gpoirier
parents: 3702
diff changeset
404 /** 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
405 * 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
406 * array default_val field.
301d975b69e3 adds doxygen docs to av_opt_set_defaults. Patch by Takis
gpoirier
parents: 3702
diff changeset
407 *
301d975b69e3 adds doxygen docs to av_opt_set_defaults. Patch by Takis
gpoirier
parents: 3702
diff changeset
408 * @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
409 */
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
410 void av_opt_set_defaults2(void *s, int mask, int flags)
3702
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
411 {
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
412 const AVOption *opt = NULL;
3702
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
413 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
414 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
415 continue;
3702
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
416 switch(opt->type) {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
417 case FF_OPT_TYPE_CONST:
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
418 /* Nothing to be done here */
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
419 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
420 case FF_OPT_TYPE_FLAGS:
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
421 case FF_OPT_TYPE_INT: {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
422 int val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
423 val = opt->default_val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
424 av_set_int(s, opt->name, val);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
425 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
426 break;
8262
f0bf2db65dc3 Fix FF_OPT_TYPE_INT64 support of defaults.
michael
parents: 7271
diff changeset
427 case FF_OPT_TYPE_INT64:
f0bf2db65dc3 Fix FF_OPT_TYPE_INT64 support of defaults.
michael
parents: 7271
diff changeset
428 if((double)(opt->default_val+0.6) == opt->default_val)
f0bf2db65dc3 Fix FF_OPT_TYPE_INT64 support of defaults.
michael
parents: 7271
diff changeset
429 av_log(s, AV_LOG_DEBUG, "loss of precission in default of %s\n", opt->name);
f0bf2db65dc3 Fix FF_OPT_TYPE_INT64 support of defaults.
michael
parents: 7271
diff changeset
430 av_set_int(s, opt->name, opt->default_val);
f0bf2db65dc3 Fix FF_OPT_TYPE_INT64 support of defaults.
michael
parents: 7271
diff changeset
431 break;
3702
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
432 case FF_OPT_TYPE_FLOAT: {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
433 double val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
434 val = opt->default_val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
435 av_set_double(s, opt->name, val);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
436 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
437 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
438 case FF_OPT_TYPE_RATIONAL: {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
439 AVRational val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
440 val = av_d2q(opt->default_val, INT_MAX);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
441 av_set_q(s, opt->name, val);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
442 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
443 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
444 case FF_OPT_TYPE_STRING:
6034
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
445 case FF_OPT_TYPE_BINARY:
3702
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
446 /* Cannot set default for string as default_val is of type * double */
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
447 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
448 default:
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
449 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
450 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
451 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
452 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
453
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
454 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
455 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
456 }
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
457