annotate opt.c @ 7900:37f62a3dc645 libavcodec

Correct comment in the direct mode code. (note, yes this is unrelated to the previous simplification, the code always behaved like it is documented now.)
author michael
date Sun, 21 Sep 2008 23:49:53 +0000
parents 8c58eeb20826
children f0bf2db65dc3
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:
6451
355b2eb9f553 Fix handling flags with the MSB set.
michael
parents: 6353
diff changeset
65 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
66 case FF_OPT_TYPE_INT64: *(int64_t *)dst= llrint(num/den)*intnum; break;
2873
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);
6015
bb4f24c580f5 Add a missing break, before av_set_number would always return NULL for
reimar
parents: 5977
diff changeset
72 break;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
73 default:
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
74 return NULL;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
75 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
76 return o;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
77 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
78
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
79 static const AVOption *set_all_opt(void *v, const char *unit, double d){
2877
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
80 AVClass *c= *(AVClass**)v; //FIXME silly way of storing AVClass
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
81 const AVOption *o= c->option;
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
82 const AVOption *ret=NULL;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
83
2877
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
84 for(;o && o->name; o++){
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
85 if(o->type != FF_OPT_TYPE_CONST && o->unit && !strcmp(o->unit, unit)){
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
86 double tmp= d;
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
87 if(o->type == FF_OPT_TYPE_FLAGS)
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
88 tmp= av_get_int(v, o->name, NULL) | (int64_t)d;
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
89
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
90 av_set_number(v, o->name, tmp, 1, 1);
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
91 ret= o;
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
92 }
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
93 }
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
94 return ret;
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
95 }
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
96
7129
322023e630a6 mark read-only data as const
stefang
parents: 6853
diff changeset
97 static const double const_values[]={
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
98 M_PI,
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
99 M_E,
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
100 FF_QP2LAMBDA,
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
101 0
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
102 };
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
103
7129
322023e630a6 mark read-only data as const
stefang
parents: 6853
diff changeset
104 static const char * const const_names[]={
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
105 "PI",
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
106 "E",
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
107 "QP2LAMBDA",
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
108 0
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
109 };
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
110
6034
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
111 static int hexchar2int(char c) {
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
112 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
113 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
114 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
115 return -1;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
116 }
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
117
7224
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
118 const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc){
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
119 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
120 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
121 return set_all_opt(obj, o->unit, o->default_val);
b447caeb6978 convert some options in ffmpeg.c to AVOptions
michael
parents: 2876
diff changeset
122 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
123 if(!o || !val || o->offset<=0)
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
124 return NULL;
6034
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
125 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
126 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
127 int *lendst = (int *)(dst + 1);
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
128 uint8_t *bin, *ptr;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
129 int len = strlen(val);
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
130 av_freep(dst);
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
131 *lendst = 0;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
132 if (len & 1) return NULL;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
133 len /= 2;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
134 ptr = bin = av_malloc(len);
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
135 while (*val) {
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
136 int a = hexchar2int(*val++);
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
137 int b = hexchar2int(*val++);
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
138 if (a < 0 || b < 0) {
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
139 av_free(bin);
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
140 return NULL;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
141 }
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
142 *ptr++ = (a << 4) | b;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
143 }
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
144 *dst = bin;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
145 *lendst = len;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
146 return o;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
147 }
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
148 if(o->type != FF_OPT_TYPE_STRING){
6853
9bfb69f1739e Anoter try to make +- behave sanely.
michael
parents: 6845
diff changeset
149 int notfirst=0;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
150 for(;;){
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
151 int i;
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
152 char buf[256];
2874
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
153 int cmd=0;
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
154 double d;
6353
lucabe
parents: 6034
diff changeset
155 const char *error = NULL;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
156
2874
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
157 if(*val == '+' || *val == '-')
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
158 cmd= *(val++);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
159
2874
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
160 for(i=0; i<sizeof(buf)-1 && val[i] && val[i]!='+' && val[i]!='-'; i++)
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
161 buf[i]= val[i];
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
162 buf[i]=0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
163
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
164 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
165 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
166 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
167 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
168 d= o_named->default_val;
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
169 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
170 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
171 else if(!strcmp(buf, "min" )) d= o->min;
4747
66aff3b71861 add 'all' and 'none' options for partitions config
gpoirier
parents: 4629
diff changeset
172 else if(!strcmp(buf, "none" )) d= 0;
66aff3b71861 add 'all' and 'none' options for partitions config
gpoirier
parents: 4629
diff changeset
173 else if(!strcmp(buf, "all" )) d= ~0;
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
174 else {
6794
ba5913f27124 Fix a typo.
benoit
parents: 6451
diff changeset
175 if (error)
3778
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
176 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
177 return NULL;
67a63fa775a7 Make AVOption parsign code use ff_eval2()
takis
parents: 3735
diff changeset
178 }
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
179 }
2874
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
180 if(o->type == FF_OPT_TYPE_FLAGS){
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
181 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
182 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
183 }else{
6853
9bfb69f1739e Anoter try to make +- behave sanely.
michael
parents: 6845
diff changeset
184 if (cmd=='+') d= notfirst*av_get_double(obj, name, NULL) + d;
9bfb69f1739e Anoter try to make +- behave sanely.
michael
parents: 6845
diff changeset
185 else if(cmd=='-') d= notfirst*av_get_double(obj, name, NULL) - d;
6845
80ebdc755fa9 Fix + - bug with non flags.
michael
parents: 6799
diff changeset
186 }
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
187
6799
2854b51e7f47 Make av_set_string() fail when number could not be set.
benoit
parents: 6797
diff changeset
188 if (!av_set_number(obj, name, d, 1, 1))
2854b51e7f47 Make av_set_string() fail when number could not be set.
benoit
parents: 6797
diff changeset
189 return NULL;
6797
51bbc2f553e2 Update offset in the option string later, to have a better error message.
benoit
parents: 6794
diff changeset
190 val+= i;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
191 if(!*val)
2874
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
192 return o;
6853
9bfb69f1739e Anoter try to make +- behave sanely.
michael
parents: 6845
diff changeset
193 notfirst=1;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
194 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
195 return NULL;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
196 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
197
7224
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
198 if(alloc){
7271
8c58eeb20826 Fix the logic to access the location of a string to free when setting
stefano
parents: 7224
diff changeset
199 av_free(*(void**)(((uint8_t*)obj) + o->offset));
7224
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
200 val= av_strdup(val);
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
201 }
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
202
5976
58ee364cd8fb make the AVOption code work with strings instead of crash
michael
parents: 5215
diff changeset
203 memcpy(((uint8_t*)obj) + o->offset, &val, sizeof(val));
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
204 return o;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
205 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
206
7224
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
207 const AVOption *av_set_string(void *obj, const char *name, const char *val){
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
208 return av_set_string2(obj, name, val, 0);
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
209 }
d5a52b28c9de Fix the av_set_string() free / alloc issue.
michael
parents: 7129
diff changeset
210
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
211 const AVOption *av_set_double(void *obj, const char *name, double n){
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
212 return av_set_number(obj, name, n, 1, 1);
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
213 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
214
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
215 const AVOption *av_set_q(void *obj, const char *name, AVRational n){
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
216 return av_set_number(obj, name, n.num, n.den, 1);
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
217 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
218
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
219 const AVOption *av_set_int(void *obj, const char *name, int64_t n){
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
220 return av_set_number(obj, name, 1, 1, n);
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
221 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
222
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
223 /**
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
224 *
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
225 * @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
226 * @param buf_len allocated length in bytes of buf
55809f38eb63 AVOption API improvments
michael
parents: 2865
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 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
229 const AVOption *o= av_find_opt(obj, name, NULL, 0, 0);
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
230 void *dst;
6034
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
231 uint8_t *bin;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
232 int len, i;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
233 if(!o || o->offset<=0)
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
234 return NULL;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
235 if(o->type != FF_OPT_TYPE_STRING && (!buf || !buf_len))
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
236 return NULL;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
237
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
238 dst= ((uint8_t*)obj) + o->offset;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
239 if(o_out) *o_out= o;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
240
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
241 switch(o->type){
2874
b6def74f5811 flags and named constants with type checking of course for AVOption
michael
parents: 2873
diff changeset
242 case FF_OPT_TYPE_FLAGS: snprintf(buf, buf_len, "0x%08X",*(int *)dst);break;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
243 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
244 case FF_OPT_TYPE_INT64: snprintf(buf, buf_len, "%"PRId64, *(int64_t*)dst);break;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
245 case FF_OPT_TYPE_FLOAT: snprintf(buf, buf_len, "%f" , *(float *)dst);break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
246 case FF_OPT_TYPE_DOUBLE: snprintf(buf, buf_len, "%f" , *(double *)dst);break;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
247 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
248 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
249 case FF_OPT_TYPE_BINARY:
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
250 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
251 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
252 bin = *(uint8_t**)dst;
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
253 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
254 break;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
255 default: return NULL;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
256 }
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
257 return buf;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
258 }
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
259
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
260 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
261 const AVOption *o= av_find_opt(obj, name, NULL, 0, 0);
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
262 void *dst;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
263 if(!o || o->offset<=0)
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
264 goto error;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
265
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
266 dst= ((uint8_t*)obj) + o->offset;
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
267
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
268 if(o_out) *o_out= o;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
269
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
270 switch(o->type){
6451
355b2eb9f553 Fix handling flags with the MSB set.
michael
parents: 6353
diff changeset
271 case FF_OPT_TYPE_FLAGS: *intnum= *(unsigned int*)dst;return 0;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
272 case FF_OPT_TYPE_INT: *intnum= *(int *)dst;return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
273 case FF_OPT_TYPE_INT64: *intnum= *(int64_t*)dst;return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
274 case FF_OPT_TYPE_FLOAT: *num= *(float *)dst;return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
275 case FF_OPT_TYPE_DOUBLE: *num= *(double *)dst;return 0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
276 case FF_OPT_TYPE_RATIONAL: *intnum= ((AVRational*)dst)->num;
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
277 *den = ((AVRational*)dst)->den;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
278 return 0;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
279 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
280 error:
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
281 *den=*intnum=0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
282 return -1;
2862
f4aea2c316cc AVOption first try
michael
parents:
diff changeset
283 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
284
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
285 double av_get_double(void *obj, const char *name, const AVOption **o_out){
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
286 int64_t intnum=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
287 double num=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
288 int den=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
289
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
290 av_get_number(obj, name, o_out, &num, &den, &intnum);
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
291 return num*intnum/den;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
292 }
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 AVRational av_get_q(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 if(num == 1.0 && (int)intnum == intnum)
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
301 return (AVRational){intnum, den};
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
302 else
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
303 return av_d2q(num*intnum/den, 1<<24);
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
304 }
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
305
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
306 int64_t av_get_int(void *obj, const char *name, const AVOption **o_out){
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
307 int64_t intnum=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
308 double num=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
309 int den=1;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
310
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
311 av_get_number(obj, name, o_out, &num, &den, &intnum);
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
312 return num*intnum/den;
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 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
316 {
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
317 const AVOption *opt=NULL;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
318
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
319 while((opt= av_next_option(obj, opt))){
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
320 if(!(opt->flags & (AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM)))
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
321 continue;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2962
diff changeset
322
3788
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
323 /* 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
324 * 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
325 * 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
326 */
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
327 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
328 continue;
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
329 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
330 continue;
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
331 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
332 continue;
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
333 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
334 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
335 else
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
336 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
337
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
338 switch( opt->type )
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
339 {
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
340 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
341 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
342 break;
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
343 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
344 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
345 break;
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
346 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
347 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
348 break;
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_DOUBLE:
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 ", "<double>" );
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_FLOAT:
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 ", "<float>" );
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_STRING:
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 ", "<string>" );
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_RATIONAL:
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 ", "<rational>" );
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
360 break;
6034
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
361 case FF_OPT_TYPE_BINARY:
72bb141d9c05 Add FF_OPT_TYPE_BINARY and use it to add a cryptokey option
reimar
parents: 6015
diff changeset
362 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
363 break;
3141
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_CONST:
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
365 default:
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
366 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
367 break;
25493c849d70 Give a hint about what is the expected the data type of command line options.
gpoirier
parents: 3036
diff changeset
368 }
2876
8026edf6a349 avoid stdio.h
michael
parents: 2875
diff changeset
369 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
370 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
371 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
372 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
373 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
374
2888
771fae923356 dont print NULL
michael
parents: 2880
diff changeset
375 if(opt->help)
771fae923356 dont print NULL
michael
parents: 2880
diff changeset
376 av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help);
771fae923356 dont print NULL
michael
parents: 2880
diff changeset
377 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
378 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
379 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
380 }
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
381 }
3788
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
382 }
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
383
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
384 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
385 if(!obj)
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
386 return -1;
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
387
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
388 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
389
484d719a2028 Reformat the output of the list of available AVOptions, by indenting the
takis
parents: 3786
diff changeset
390 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
391
2873
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
392 return 0;
55809f38eb63 AVOption API improvments
michael
parents: 2865
diff changeset
393 }
3702
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
394
3703
301d975b69e3 adds doxygen docs to av_opt_set_defaults. Patch by Takis
gpoirier
parents: 3702
diff changeset
395 /** 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
396 * 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
397 * array default_val field.
301d975b69e3 adds doxygen docs to av_opt_set_defaults. Patch by Takis
gpoirier
parents: 3702
diff changeset
398 *
301d975b69e3 adds doxygen docs to av_opt_set_defaults. Patch by Takis
gpoirier
parents: 3702
diff changeset
399 * @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
400 */
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
401 void av_opt_set_defaults2(void *s, int mask, int flags)
3702
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
402 {
4369
e10acab2322a Constantize AVOption, solve few warnings, patch from flameeyes@gentoo.org aka "the other Diego"
lu_zero
parents: 3961
diff changeset
403 const AVOption *opt = NULL;
3702
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
404 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
405 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
406 continue;
3702
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
407 switch(opt->type) {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
408 case FF_OPT_TYPE_CONST:
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
409 /* Nothing to be done here */
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
410 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
411 case FF_OPT_TYPE_FLAGS:
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
412 case FF_OPT_TYPE_INT: {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
413 int val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
414 val = opt->default_val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
415 av_set_int(s, opt->name, val);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
416 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
417 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
418 case FF_OPT_TYPE_FLOAT: {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
419 double val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
420 val = opt->default_val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
421 av_set_double(s, opt->name, val);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
422 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
423 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
424 case FF_OPT_TYPE_RATIONAL: {
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
425 AVRational val;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
426 val = av_d2q(opt->default_val, INT_MAX);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
427 av_set_q(s, opt->name, val);
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
428 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
429 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
430 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
431 case FF_OPT_TYPE_BINARY:
3702
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
432 /* Cannot set default for string as default_val is of type * double */
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
433 break;
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
434 default:
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
435 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
436 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
437 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
438 }
7e7d8a3fe080 make AVOptions default value field work.
gpoirier
parents: 3141
diff changeset
439
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
440 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
441 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
442 }
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
443