Mercurial > mm7
comparison lib/libavutil/opt.h @ 2134:992d2e6f907d
preparation for libavcodec
author | zipi |
---|---|
date | Tue, 31 Dec 2013 14:52:14 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2133:e378232bfd36 | 2134:992d2e6f907d |
---|---|
1 /* | |
2 * AVOptions | |
3 * copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at> | |
4 * | |
5 * This file is part of FFmpeg. | |
6 * | |
7 * FFmpeg is free software; you can redistribute it and/or | |
8 * modify it under the terms of the GNU Lesser General Public | |
9 * License as published by the Free Software Foundation; either | |
10 * version 2.1 of the License, or (at your option) any later version. | |
11 * | |
12 * FFmpeg is distributed in the hope that it will be useful, | |
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Lesser General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Lesser General Public | |
18 * License along with FFmpeg; if not, write to the Free Software | |
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
20 */ | |
21 | |
22 #ifndef AVUTIL_OPT_H | |
23 #define AVUTIL_OPT_H | |
24 | |
25 /** | |
26 * @file | |
27 * AVOptions | |
28 */ | |
29 | |
30 #include "rational.h" | |
31 #include "avutil.h" | |
32 #include "dict.h" | |
33 #include "log.h" | |
34 #include "pixfmt.h" | |
35 #include "samplefmt.h" | |
36 | |
37 /** | |
38 * @defgroup avoptions AVOptions | |
39 * @ingroup lavu_data | |
40 * @{ | |
41 * AVOptions provide a generic system to declare options on arbitrary structs | |
42 * ("objects"). An option can have a help text, a type and a range of possible | |
43 * values. Options may then be enumerated, read and written to. | |
44 * | |
45 * @section avoptions_implement Implementing AVOptions | |
46 * This section describes how to add AVOptions capabilities to a struct. | |
47 * | |
48 * All AVOptions-related information is stored in an AVClass. Therefore | |
49 * the first member of the struct should be a pointer to an AVClass describing it. | |
50 * The option field of the AVClass must be set to a NULL-terminated static array | |
51 * of AVOptions. Each AVOption must have a non-empty name, a type, a default | |
52 * value and for number-type AVOptions also a range of allowed values. It must | |
53 * also declare an offset in bytes from the start of the struct, where the field | |
54 * associated with this AVOption is located. Other fields in the AVOption struct | |
55 * should also be set when applicable, but are not required. | |
56 * | |
57 * The following example illustrates an AVOptions-enabled struct: | |
58 * @code | |
59 * typedef struct test_struct { | |
60 * AVClass *class; | |
61 * int int_opt; | |
62 * char *str_opt; | |
63 * uint8_t *bin_opt; | |
64 * int bin_len; | |
65 * } test_struct; | |
66 * | |
67 * static const AVOption options[] = { | |
68 * { "test_int", "This is a test option of int type.", offsetof(test_struct, int_opt), | |
69 * AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX }, | |
70 * { "test_str", "This is a test option of string type.", offsetof(test_struct, str_opt), | |
71 * AV_OPT_TYPE_STRING }, | |
72 * { "test_bin", "This is a test option of binary type.", offsetof(test_struct, bin_opt), | |
73 * AV_OPT_TYPE_BINARY }, | |
74 * { NULL }, | |
75 * }; | |
76 * | |
77 * static const AVClass test_class = { | |
78 * .class_name = "test class", | |
79 * .item_name = av_default_item_name, | |
80 * .option = options, | |
81 * .version = LIBAVUTIL_VERSION_INT, | |
82 * }; | |
83 * @endcode | |
84 * | |
85 * Next, when allocating your struct, you must ensure that the AVClass pointer | |
86 * is set to the correct value. Then, av_opt_set_defaults() can be called to | |
87 * initialize defaults. After that the struct is ready to be used with the | |
88 * AVOptions API. | |
89 * | |
90 * When cleaning up, you may use the av_opt_free() function to automatically | |
91 * free all the allocated string and binary options. | |
92 * | |
93 * Continuing with the above example: | |
94 * | |
95 * @code | |
96 * test_struct *alloc_test_struct(void) | |
97 * { | |
98 * test_struct *ret = av_malloc(sizeof(*ret)); | |
99 * ret->class = &test_class; | |
100 * av_opt_set_defaults(ret); | |
101 * return ret; | |
102 * } | |
103 * void free_test_struct(test_struct **foo) | |
104 * { | |
105 * av_opt_free(*foo); | |
106 * av_freep(foo); | |
107 * } | |
108 * @endcode | |
109 * | |
110 * @subsection avoptions_implement_nesting Nesting | |
111 * It may happen that an AVOptions-enabled struct contains another | |
112 * AVOptions-enabled struct as a member (e.g. AVCodecContext in | |
113 * libavcodec exports generic options, while its priv_data field exports | |
114 * codec-specific options). In such a case, it is possible to set up the | |
115 * parent struct to export a child's options. To do that, simply | |
116 * implement AVClass.child_next() and AVClass.child_class_next() in the | |
117 * parent struct's AVClass. | |
118 * Assuming that the test_struct from above now also contains a | |
119 * child_struct field: | |
120 * | |
121 * @code | |
122 * typedef struct child_struct { | |
123 * AVClass *class; | |
124 * int flags_opt; | |
125 * } child_struct; | |
126 * static const AVOption child_opts[] = { | |
127 * { "test_flags", "This is a test option of flags type.", | |
128 * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX }, | |
129 * { NULL }, | |
130 * }; | |
131 * static const AVClass child_class = { | |
132 * .class_name = "child class", | |
133 * .item_name = av_default_item_name, | |
134 * .option = child_opts, | |
135 * .version = LIBAVUTIL_VERSION_INT, | |
136 * }; | |
137 * | |
138 * void *child_next(void *obj, void *prev) | |
139 * { | |
140 * test_struct *t = obj; | |
141 * if (!prev && t->child_struct) | |
142 * return t->child_struct; | |
143 * return NULL | |
144 * } | |
145 * const AVClass child_class_next(const AVClass *prev) | |
146 * { | |
147 * return prev ? NULL : &child_class; | |
148 * } | |
149 * @endcode | |
150 * Putting child_next() and child_class_next() as defined above into | |
151 * test_class will now make child_struct's options accessible through | |
152 * test_struct (again, proper setup as described above needs to be done on | |
153 * child_struct right after it is created). | |
154 * | |
155 * From the above example it might not be clear why both child_next() | |
156 * and child_class_next() are needed. The distinction is that child_next() | |
157 * iterates over actually existing objects, while child_class_next() | |
158 * iterates over all possible child classes. E.g. if an AVCodecContext | |
159 * was initialized to use a codec which has private options, then its | |
160 * child_next() will return AVCodecContext.priv_data and finish | |
161 * iterating. OTOH child_class_next() on AVCodecContext.av_class will | |
162 * iterate over all available codecs with private options. | |
163 * | |
164 * @subsection avoptions_implement_named_constants Named constants | |
165 * It is possible to create named constants for options. Simply set the unit | |
166 * field of the option the constants should apply to to a string and | |
167 * create the constants themselves as options of type AV_OPT_TYPE_CONST | |
168 * with their unit field set to the same string. | |
169 * Their default_val field should contain the value of the named | |
170 * constant. | |
171 * For example, to add some named constants for the test_flags option | |
172 * above, put the following into the child_opts array: | |
173 * @code | |
174 * { "test_flags", "This is a test option of flags type.", | |
175 * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, "test_unit" }, | |
176 * { "flag1", "This is a flag with value 16", 0, AV_OPT_TYPE_CONST, { .i64 = 16 }, 0, 0, "test_unit" }, | |
177 * @endcode | |
178 * | |
179 * @section avoptions_use Using AVOptions | |
180 * This section deals with accessing options in an AVOptions-enabled struct. | |
181 * Such structs in FFmpeg are e.g. AVCodecContext in libavcodec or | |
182 * AVFormatContext in libavformat. | |
183 * | |
184 * @subsection avoptions_use_examine Examining AVOptions | |
185 * The basic functions for examining options are av_opt_next(), which iterates | |
186 * over all options defined for one object, and av_opt_find(), which searches | |
187 * for an option with the given name. | |
188 * | |
189 * The situation is more complicated with nesting. An AVOptions-enabled struct | |
190 * may have AVOptions-enabled children. Passing the AV_OPT_SEARCH_CHILDREN flag | |
191 * to av_opt_find() will make the function search children recursively. | |
192 * | |
193 * For enumerating there are basically two cases. The first is when you want to | |
194 * get all options that may potentially exist on the struct and its children | |
195 * (e.g. when constructing documentation). In that case you should call | |
196 * av_opt_child_class_next() recursively on the parent struct's AVClass. The | |
197 * second case is when you have an already initialized struct with all its | |
198 * children and you want to get all options that can be actually written or read | |
199 * from it. In that case you should call av_opt_child_next() recursively (and | |
200 * av_opt_next() on each result). | |
201 * | |
202 * @subsection avoptions_use_get_set Reading and writing AVOptions | |
203 * When setting options, you often have a string read directly from the | |
204 * user. In such a case, simply passing it to av_opt_set() is enough. For | |
205 * non-string type options, av_opt_set() will parse the string according to the | |
206 * option type. | |
207 * | |
208 * Similarly av_opt_get() will read any option type and convert it to a string | |
209 * which will be returned. Do not forget that the string is allocated, so you | |
210 * have to free it with av_free(). | |
211 * | |
212 * In some cases it may be more convenient to put all options into an | |
213 * AVDictionary and call av_opt_set_dict() on it. A specific case of this | |
214 * are the format/codec open functions in lavf/lavc which take a dictionary | |
215 * filled with option as a parameter. This allows to set some options | |
216 * that cannot be set otherwise, since e.g. the input file format is not known | |
217 * before the file is actually opened. | |
218 */ | |
219 | |
220 enum AVOptionType{ | |
221 AV_OPT_TYPE_FLAGS, | |
222 AV_OPT_TYPE_INT, | |
223 AV_OPT_TYPE_INT64, | |
224 AV_OPT_TYPE_DOUBLE, | |
225 AV_OPT_TYPE_FLOAT, | |
226 AV_OPT_TYPE_STRING, | |
227 AV_OPT_TYPE_RATIONAL, | |
228 AV_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length | |
229 AV_OPT_TYPE_CONST = 128, | |
230 AV_OPT_TYPE_IMAGE_SIZE = MKBETAG('S','I','Z','E'), ///< offset must point to two consecutive integers | |
231 AV_OPT_TYPE_PIXEL_FMT = MKBETAG('P','F','M','T'), | |
232 AV_OPT_TYPE_SAMPLE_FMT = MKBETAG('S','F','M','T'), | |
233 AV_OPT_TYPE_VIDEO_RATE = MKBETAG('V','R','A','T'), ///< offset must point to AVRational | |
234 AV_OPT_TYPE_DURATION = MKBETAG('D','U','R',' '), | |
235 AV_OPT_TYPE_COLOR = MKBETAG('C','O','L','R'), | |
236 #if FF_API_OLD_AVOPTIONS | |
237 FF_OPT_TYPE_FLAGS = 0, | |
238 FF_OPT_TYPE_INT, | |
239 FF_OPT_TYPE_INT64, | |
240 FF_OPT_TYPE_DOUBLE, | |
241 FF_OPT_TYPE_FLOAT, | |
242 FF_OPT_TYPE_STRING, | |
243 FF_OPT_TYPE_RATIONAL, | |
244 FF_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length | |
245 FF_OPT_TYPE_CONST=128, | |
246 #endif | |
247 }; | |
248 | |
249 /** | |
250 * AVOption | |
251 */ | |
252 typedef struct AVOption { | |
253 const char *name; | |
254 | |
255 /** | |
256 * short English help text | |
257 * @todo What about other languages? | |
258 */ | |
259 const char *help; | |
260 | |
261 /** | |
262 * The offset relative to the context structure where the option | |
263 * value is stored. It should be 0 for named constants. | |
264 */ | |
265 int offset; | |
266 enum AVOptionType type; | |
267 | |
268 /** | |
269 * the default value for scalar options | |
270 */ | |
271 union { | |
272 int64_t i64; | |
273 double dbl; | |
274 const char *str; | |
275 /* TODO those are unused now */ | |
276 AVRational q; | |
277 } default_val; | |
278 double min; ///< minimum valid value for the option | |
279 double max; ///< maximum valid value for the option | |
280 | |
281 int flags; | |
282 #define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding | |
283 #define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding | |
284 #define AV_OPT_FLAG_METADATA 4 ///< some data extracted or inserted into the file like title, comment, ... | |
285 #define AV_OPT_FLAG_AUDIO_PARAM 8 | |
286 #define AV_OPT_FLAG_VIDEO_PARAM 16 | |
287 #define AV_OPT_FLAG_SUBTITLE_PARAM 32 | |
288 #define AV_OPT_FLAG_FILTERING_PARAM (1<<16) ///< a generic parameter which can be set by the user for filtering | |
289 //FIXME think about enc-audio, ... style flags | |
290 | |
291 /** | |
292 * The logical unit to which the option belongs. Non-constant | |
293 * options and corresponding named constants share the same | |
294 * unit. May be NULL. | |
295 */ | |
296 const char *unit; | |
297 } AVOption; | |
298 | |
299 /** | |
300 * A single allowed range of values, or a single allowed value. | |
301 */ | |
302 typedef struct AVOptionRange { | |
303 const char *str; | |
304 double value_min, value_max; ///< For string ranges this represents the min/max length, for dimensions this represents the min/max pixel count | |
305 double component_min, component_max; ///< For string this represents the unicode range for chars, 0-127 limits to ASCII | |
306 int is_range; ///< if set to 1 the struct encodes a range, if set to 0 a single value | |
307 } AVOptionRange; | |
308 | |
309 /** | |
310 * List of AVOptionRange structs | |
311 */ | |
312 typedef struct AVOptionRanges { | |
313 AVOptionRange **range; | |
314 int nb_ranges; | |
315 } AVOptionRanges; | |
316 | |
317 | |
318 #if FF_API_FIND_OPT | |
319 /** | |
320 * Look for an option in obj. Look only for the options which | |
321 * have the flags set as specified in mask and flags (that is, | |
322 * for which it is the case that opt->flags & mask == flags). | |
323 * | |
324 * @param[in] obj a pointer to a struct whose first element is a | |
325 * pointer to an AVClass | |
326 * @param[in] name the name of the option to look for | |
327 * @param[in] unit the unit of the option to look for, or any if NULL | |
328 * @return a pointer to the option found, or NULL if no option | |
329 * has been found | |
330 * | |
331 * @deprecated use av_opt_find. | |
332 */ | |
333 attribute_deprecated | |
334 const AVOption *av_find_opt(void *obj, const char *name, const char *unit, int mask, int flags); | |
335 #endif | |
336 | |
337 #if FF_API_OLD_AVOPTIONS | |
338 /** | |
339 * Set the field of obj with the given name to value. | |
340 * | |
341 * @param[in] obj A struct whose first element is a pointer to an | |
342 * AVClass. | |
343 * @param[in] name the name of the field to set | |
344 * @param[in] val The value to set. If the field is not of a string | |
345 * type, then the given string is parsed. | |
346 * SI postfixes and some named scalars are supported. | |
347 * If the field is of a numeric type, it has to be a numeric or named | |
348 * scalar. Behavior with more than one scalar and +- infix operators | |
349 * is undefined. | |
350 * If the field is of a flags type, it has to be a sequence of numeric | |
351 * scalars or named flags separated by '+' or '-'. Prefixing a flag | |
352 * with '+' causes it to be set without affecting the other flags; | |
353 * similarly, '-' unsets a flag. | |
354 * @param[out] o_out if non-NULL put here a pointer to the AVOption | |
355 * found | |
356 * @param alloc this parameter is currently ignored | |
357 * @return 0 if the value has been set, or an AVERROR code in case of | |
358 * error: | |
359 * AVERROR_OPTION_NOT_FOUND if no matching option exists | |
360 * AVERROR(ERANGE) if the value is out of range | |
361 * AVERROR(EINVAL) if the value is not valid | |
362 * @deprecated use av_opt_set() | |
363 */ | |
364 attribute_deprecated | |
365 int av_set_string3(void *obj, const char *name, const char *val, int alloc, const AVOption **o_out); | |
366 | |
367 attribute_deprecated const AVOption *av_set_double(void *obj, const char *name, double n); | |
368 attribute_deprecated const AVOption *av_set_q(void *obj, const char *name, AVRational n); | |
369 attribute_deprecated const AVOption *av_set_int(void *obj, const char *name, int64_t n); | |
370 | |
371 double av_get_double(void *obj, const char *name, const AVOption **o_out); | |
372 AVRational av_get_q(void *obj, const char *name, const AVOption **o_out); | |
373 int64_t av_get_int(void *obj, const char *name, const AVOption **o_out); | |
374 attribute_deprecated const char *av_get_string(void *obj, const char *name, const AVOption **o_out, char *buf, int buf_len); | |
375 attribute_deprecated const AVOption *av_next_option(void *obj, const AVOption *last); | |
376 #endif | |
377 | |
378 /** | |
379 * Show the obj options. | |
380 * | |
381 * @param req_flags requested flags for the options to show. Show only the | |
382 * options for which it is opt->flags & req_flags. | |
383 * @param rej_flags rejected flags for the options to show. Show only the | |
384 * options for which it is !(opt->flags & req_flags). | |
385 * @param av_log_obj log context to use for showing the options | |
386 */ | |
387 int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags); | |
388 | |
389 /** | |
390 * Set the values of all AVOption fields to their default values. | |
391 * | |
392 * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) | |
393 */ | |
394 void av_opt_set_defaults(void *s); | |
395 | |
396 #if FF_API_OLD_AVOPTIONS | |
397 attribute_deprecated | |
398 void av_opt_set_defaults2(void *s, int mask, int flags); | |
399 #endif | |
400 | |
401 /** | |
402 * Parse the key/value pairs list in opts. For each key/value pair | |
403 * found, stores the value in the field in ctx that is named like the | |
404 * key. ctx must be an AVClass context, storing is done using | |
405 * AVOptions. | |
406 * | |
407 * @param opts options string to parse, may be NULL | |
408 * @param key_val_sep a 0-terminated list of characters used to | |
409 * separate key from value | |
410 * @param pairs_sep a 0-terminated list of characters used to separate | |
411 * two pairs from each other | |
412 * @return the number of successfully set key/value pairs, or a negative | |
413 * value corresponding to an AVERROR code in case of error: | |
414 * AVERROR(EINVAL) if opts cannot be parsed, | |
415 * the error code issued by av_set_string3() if a key/value pair | |
416 * cannot be set | |
417 */ | |
418 int av_set_options_string(void *ctx, const char *opts, | |
419 const char *key_val_sep, const char *pairs_sep); | |
420 | |
421 /** | |
422 * Parse the key-value pairs list in opts. For each key=value pair found, | |
423 * set the value of the corresponding option in ctx. | |
424 * | |
425 * @param ctx the AVClass object to set options on | |
426 * @param opts the options string, key-value pairs separated by a | |
427 * delimiter | |
428 * @param shorthand a NULL-terminated array of options names for shorthand | |
429 * notation: if the first field in opts has no key part, | |
430 * the key is taken from the first element of shorthand; | |
431 * then again for the second, etc., until either opts is | |
432 * finished, shorthand is finished or a named option is | |
433 * found; after that, all options must be named | |
434 * @param key_val_sep a 0-terminated list of characters used to separate | |
435 * key from value, for example '=' | |
436 * @param pairs_sep a 0-terminated list of characters used to separate | |
437 * two pairs from each other, for example ':' or ',' | |
438 * @return the number of successfully set key=value pairs, or a negative | |
439 * value corresponding to an AVERROR code in case of error: | |
440 * AVERROR(EINVAL) if opts cannot be parsed, | |
441 * the error code issued by av_set_string3() if a key/value pair | |
442 * cannot be set | |
443 * | |
444 * Options names must use only the following characters: a-z A-Z 0-9 - . / _ | |
445 * Separators must use characters distinct from option names and from each | |
446 * other. | |
447 */ | |
448 int av_opt_set_from_string(void *ctx, const char *opts, | |
449 const char *const *shorthand, | |
450 const char *key_val_sep, const char *pairs_sep); | |
451 /** | |
452 * Free all string and binary options in obj. | |
453 */ | |
454 void av_opt_free(void *obj); | |
455 | |
456 /** | |
457 * Check whether a particular flag is set in a flags field. | |
458 * | |
459 * @param field_name the name of the flag field option | |
460 * @param flag_name the name of the flag to check | |
461 * @return non-zero if the flag is set, zero if the flag isn't set, | |
462 * isn't of the right type, or the flags field doesn't exist. | |
463 */ | |
464 int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name); | |
465 | |
466 /** | |
467 * Set all the options from a given dictionary on an object. | |
468 * | |
469 * @param obj a struct whose first element is a pointer to AVClass | |
470 * @param options options to process. This dictionary will be freed and replaced | |
471 * by a new one containing all options not found in obj. | |
472 * Of course this new dictionary needs to be freed by caller | |
473 * with av_dict_free(). | |
474 * | |
475 * @return 0 on success, a negative AVERROR if some option was found in obj, | |
476 * but could not be set. | |
477 * | |
478 * @see av_dict_copy() | |
479 */ | |
480 int av_opt_set_dict(void *obj, struct AVDictionary **options); | |
481 | |
482 /** | |
483 * Extract a key-value pair from the beginning of a string. | |
484 * | |
485 * @param ropts pointer to the options string, will be updated to | |
486 * point to the rest of the string (one of the pairs_sep | |
487 * or the final NUL) | |
488 * @param key_val_sep a 0-terminated list of characters used to separate | |
489 * key from value, for example '=' | |
490 * @param pairs_sep a 0-terminated list of characters used to separate | |
491 * two pairs from each other, for example ':' or ',' | |
492 * @param flags flags; see the AV_OPT_FLAG_* values below | |
493 * @param rkey parsed key; must be freed using av_free() | |
494 * @param rval parsed value; must be freed using av_free() | |
495 * | |
496 * @return >=0 for success, or a negative value corresponding to an | |
497 * AVERROR code in case of error; in particular: | |
498 * AVERROR(EINVAL) if no key is present | |
499 * | |
500 */ | |
501 int av_opt_get_key_value(const char **ropts, | |
502 const char *key_val_sep, const char *pairs_sep, | |
503 unsigned flags, | |
504 char **rkey, char **rval); | |
505 | |
506 enum { | |
507 | |
508 /** | |
509 * Accept to parse a value without a key; the key will then be returned | |
510 * as NULL. | |
511 */ | |
512 AV_OPT_FLAG_IMPLICIT_KEY = 1, | |
513 }; | |
514 | |
515 /** | |
516 * @defgroup opt_eval_funcs Evaluating option strings | |
517 * @{ | |
518 * This group of functions can be used to evaluate option strings | |
519 * and get numbers out of them. They do the same thing as av_opt_set(), | |
520 * except the result is written into the caller-supplied pointer. | |
521 * | |
522 * @param obj a struct whose first element is a pointer to AVClass. | |
523 * @param o an option for which the string is to be evaluated. | |
524 * @param val string to be evaluated. | |
525 * @param *_out value of the string will be written here. | |
526 * | |
527 * @return 0 on success, a negative number on failure. | |
528 */ | |
529 int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int *flags_out); | |
530 int av_opt_eval_int (void *obj, const AVOption *o, const char *val, int *int_out); | |
531 int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t *int64_out); | |
532 int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float *float_out); | |
533 int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double *double_out); | |
534 int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational *q_out); | |
535 /** | |
536 * @} | |
537 */ | |
538 | |
539 #define AV_OPT_SEARCH_CHILDREN 0x0001 /**< Search in possible children of the | |
540 given object first. */ | |
541 /** | |
542 * The obj passed to av_opt_find() is fake -- only a double pointer to AVClass | |
543 * instead of a required pointer to a struct containing AVClass. This is | |
544 * useful for searching for options without needing to allocate the corresponding | |
545 * object. | |
546 */ | |
547 #define AV_OPT_SEARCH_FAKE_OBJ 0x0002 | |
548 | |
549 /** | |
550 * Look for an option in an object. Consider only options which | |
551 * have all the specified flags set. | |
552 * | |
553 * @param[in] obj A pointer to a struct whose first element is a | |
554 * pointer to an AVClass. | |
555 * Alternatively a double pointer to an AVClass, if | |
556 * AV_OPT_SEARCH_FAKE_OBJ search flag is set. | |
557 * @param[in] name The name of the option to look for. | |
558 * @param[in] unit When searching for named constants, name of the unit | |
559 * it belongs to. | |
560 * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). | |
561 * @param search_flags A combination of AV_OPT_SEARCH_*. | |
562 * | |
563 * @return A pointer to the option found, or NULL if no option | |
564 * was found. | |
565 * | |
566 * @note Options found with AV_OPT_SEARCH_CHILDREN flag may not be settable | |
567 * directly with av_set_string3(). Use special calls which take an options | |
568 * AVDictionary (e.g. avformat_open_input()) to set options found with this | |
569 * flag. | |
570 */ | |
571 const AVOption *av_opt_find(void *obj, const char *name, const char *unit, | |
572 int opt_flags, int search_flags); | |
573 | |
574 /** | |
575 * Look for an option in an object. Consider only options which | |
576 * have all the specified flags set. | |
577 * | |
578 * @param[in] obj A pointer to a struct whose first element is a | |
579 * pointer to an AVClass. | |
580 * Alternatively a double pointer to an AVClass, if | |
581 * AV_OPT_SEARCH_FAKE_OBJ search flag is set. | |
582 * @param[in] name The name of the option to look for. | |
583 * @param[in] unit When searching for named constants, name of the unit | |
584 * it belongs to. | |
585 * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). | |
586 * @param search_flags A combination of AV_OPT_SEARCH_*. | |
587 * @param[out] target_obj if non-NULL, an object to which the option belongs will be | |
588 * written here. It may be different from obj if AV_OPT_SEARCH_CHILDREN is present | |
589 * in search_flags. This parameter is ignored if search_flags contain | |
590 * AV_OPT_SEARCH_FAKE_OBJ. | |
591 * | |
592 * @return A pointer to the option found, or NULL if no option | |
593 * was found. | |
594 */ | |
595 const AVOption *av_opt_find2(void *obj, const char *name, const char *unit, | |
596 int opt_flags, int search_flags, void **target_obj); | |
597 | |
598 /** | |
599 * Iterate over all AVOptions belonging to obj. | |
600 * | |
601 * @param obj an AVOptions-enabled struct or a double pointer to an | |
602 * AVClass describing it. | |
603 * @param prev result of the previous call to av_opt_next() on this object | |
604 * or NULL | |
605 * @return next AVOption or NULL | |
606 */ | |
607 const AVOption *av_opt_next(void *obj, const AVOption *prev); | |
608 | |
609 /** | |
610 * Iterate over AVOptions-enabled children of obj. | |
611 * | |
612 * @param prev result of a previous call to this function or NULL | |
613 * @return next AVOptions-enabled child or NULL | |
614 */ | |
615 void *av_opt_child_next(void *obj, void *prev); | |
616 | |
617 /** | |
618 * Iterate over potential AVOptions-enabled children of parent. | |
619 * | |
620 * @param prev result of a previous call to this function or NULL | |
621 * @return AVClass corresponding to next potential child or NULL | |
622 */ | |
623 const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev); | |
624 | |
625 /** | |
626 * @defgroup opt_set_funcs Option setting functions | |
627 * @{ | |
628 * Those functions set the field of obj with the given name to value. | |
629 * | |
630 * @param[in] obj A struct whose first element is a pointer to an AVClass. | |
631 * @param[in] name the name of the field to set | |
632 * @param[in] val The value to set. In case of av_opt_set() if the field is not | |
633 * of a string type, then the given string is parsed. | |
634 * SI postfixes and some named scalars are supported. | |
635 * If the field is of a numeric type, it has to be a numeric or named | |
636 * scalar. Behavior with more than one scalar and +- infix operators | |
637 * is undefined. | |
638 * If the field is of a flags type, it has to be a sequence of numeric | |
639 * scalars or named flags separated by '+' or '-'. Prefixing a flag | |
640 * with '+' causes it to be set without affecting the other flags; | |
641 * similarly, '-' unsets a flag. | |
642 * @param search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN | |
643 * is passed here, then the option may be set on a child of obj. | |
644 * | |
645 * @return 0 if the value has been set, or an AVERROR code in case of | |
646 * error: | |
647 * AVERROR_OPTION_NOT_FOUND if no matching option exists | |
648 * AVERROR(ERANGE) if the value is out of range | |
649 * AVERROR(EINVAL) if the value is not valid | |
650 */ | |
651 int av_opt_set (void *obj, const char *name, const char *val, int search_flags); | |
652 int av_opt_set_int (void *obj, const char *name, int64_t val, int search_flags); | |
653 int av_opt_set_double(void *obj, const char *name, double val, int search_flags); | |
654 int av_opt_set_q (void *obj, const char *name, AVRational val, int search_flags); | |
655 int av_opt_set_bin (void *obj, const char *name, const uint8_t *val, int size, int search_flags); | |
656 int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags); | |
657 int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags); | |
658 int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags); | |
659 int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags); | |
660 | |
661 /** | |
662 * Set a binary option to an integer list. | |
663 * | |
664 * @param obj AVClass object to set options on | |
665 * @param name name of the binary option | |
666 * @param val pointer to an integer list (must have the correct type with | |
667 * regard to the contents of the list) | |
668 * @param term list terminator (usually 0 or -1) | |
669 * @param flags search flags | |
670 */ | |
671 #define av_opt_set_int_list(obj, name, val, term, flags) \ | |
672 (av_int_list_length(val, term) > INT_MAX / sizeof(*(val)) ? \ | |
673 AVERROR(EINVAL) : \ | |
674 av_opt_set_bin(obj, name, (const uint8_t *)(val), \ | |
675 av_int_list_length(val, term) * sizeof(*(val)), flags)) | |
676 /** | |
677 * @} | |
678 */ | |
679 | |
680 /** | |
681 * @defgroup opt_get_funcs Option getting functions | |
682 * @{ | |
683 * Those functions get a value of the option with the given name from an object. | |
684 * | |
685 * @param[in] obj a struct whose first element is a pointer to an AVClass. | |
686 * @param[in] name name of the option to get. | |
687 * @param[in] search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN | |
688 * is passed here, then the option may be found in a child of obj. | |
689 * @param[out] out_val value of the option will be written here | |
690 * @return 0 on success, a negative error code otherwise | |
691 */ | |
692 /** | |
693 * @note the returned string will av_malloc()ed and must be av_free()ed by the caller | |
694 */ | |
695 int av_opt_get (void *obj, const char *name, int search_flags, uint8_t **out_val); | |
696 int av_opt_get_int (void *obj, const char *name, int search_flags, int64_t *out_val); | |
697 int av_opt_get_double(void *obj, const char *name, int search_flags, double *out_val); | |
698 int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational *out_val); | |
699 int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_out, int *h_out); | |
700 int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt); | |
701 int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt); | |
702 int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val); | |
703 /** | |
704 * @} | |
705 */ | |
706 /** | |
707 * Gets a pointer to the requested field in a struct. | |
708 * This function allows accessing a struct even when its fields are moved or | |
709 * renamed since the application making the access has been compiled, | |
710 * | |
711 * @returns a pointer to the field, it can be cast to the correct type and read | |
712 * or written to. | |
713 */ | |
714 void *av_opt_ptr(const AVClass *avclass, void *obj, const char *name); | |
715 | |
716 /** | |
717 * Free an AVOptionRanges struct and set it to NULL. | |
718 */ | |
719 void av_opt_freep_ranges(AVOptionRanges **ranges); | |
720 | |
721 /** | |
722 * Get a list of allowed ranges for the given option. | |
723 * | |
724 * The returned list may depend on other fields in obj like for example profile. | |
725 * | |
726 * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored | |
727 * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance | |
728 * | |
729 * The result must be freed with av_opt_freep_ranges. | |
730 * | |
731 * @return >= 0 on success, a negative errro code otherwise | |
732 */ | |
733 int av_opt_query_ranges(AVOptionRanges **, void *obj, const char *key, int flags); | |
734 | |
735 /** | |
736 * Get a default list of allowed ranges for the given option. | |
737 * | |
738 * This list is constructed without using the AVClass.query_ranges() callback | |
739 * and can be used as fallback from within the callback. | |
740 * | |
741 * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored | |
742 * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance | |
743 * | |
744 * The result must be freed with av_opt_free_ranges. | |
745 * | |
746 * @return >= 0 on success, a negative errro code otherwise | |
747 */ | |
748 int av_opt_query_ranges_default(AVOptionRanges **, void *obj, const char *key, int flags); | |
749 | |
750 /** | |
751 * @} | |
752 */ | |
753 | |
754 #endif /* AVUTIL_OPT_H */ |