FFmpeg 5.1.6
|
AVOptions provide a generic system to declare options on arbitrary structs ("objects"). More...
Modules | |
Evaluating option strings | |
This group of functions can be used to evaluate option strings and get numbers out of them. | |
Option setting functions | |
Those functions set the field of obj with the given name to value. | |
Option getting functions | |
Those functions get a value of the option with the given name from an object. | |
Data Structures | |
struct | AVOption |
AVOption. More... | |
struct | AVOptionRange |
A single allowed range of values, or a single allowed value. More... | |
struct | AVOptionRanges |
List of AVOptionRange structs. More... | |
Macros | |
#define | AV_OPT_SEARCH_CHILDREN (1 << 0) |
Search in possible children of the given object first. More... | |
#define | AV_OPT_SEARCH_FAKE_OBJ (1 << 1) |
The obj passed to av_opt_find() is fake – only a double pointer to AVClass instead of a required pointer to a struct containing AVClass. More... | |
#define | AV_OPT_ALLOW_NULL (1 << 2) |
In av_opt_get, return NULL if the option has a pointer type and is set to NULL, rather than returning an empty string. More... | |
#define | AV_OPT_MULTI_COMPONENT_RANGE (1 << 12) |
Allows av_opt_query_ranges and av_opt_query_ranges_default to return more than one component for certain option types. More... | |
#define | AV_OPT_SERIALIZE_SKIP_DEFAULTS 0x00000001 |
Serialize options that are not set to default values only. More... | |
#define | AV_OPT_SERIALIZE_OPT_FLAGS_EXACT 0x00000002 |
Serialize options that exactly match opt_flags only. More... | |
Functions | |
int | av_opt_show2 (void *obj, void *av_log_obj, int req_flags, int rej_flags) |
Show the obj options. More... | |
void | av_opt_set_defaults (void *s) |
Set the values of all AVOption fields to their default values. More... | |
void | av_opt_set_defaults2 (void *s, int mask, int flags) |
Set the values of all AVOption fields to their default values. More... | |
int | av_set_options_string (void *ctx, const char *opts, const char *key_val_sep, const char *pairs_sep) |
Parse the key/value pairs list in opts. More... | |
int | av_opt_set_from_string (void *ctx, const char *opts, const char *const *shorthand, const char *key_val_sep, const char *pairs_sep) |
Parse the key-value pairs list in opts. More... | |
void | av_opt_free (void *obj) |
Free all allocated objects in obj. More... | |
int | av_opt_flag_is_set (void *obj, const char *field_name, const char *flag_name) |
Check whether a particular flag is set in a flags field. More... | |
int | av_opt_set_dict (void *obj, struct AVDictionary **options) |
Set all the options from a given dictionary on an object. More... | |
int | av_opt_set_dict2 (void *obj, struct AVDictionary **options, int search_flags) |
Set all the options from a given dictionary on an object. More... | |
int | av_opt_get_key_value (const char **ropts, const char *key_val_sep, const char *pairs_sep, unsigned flags, char **rkey, char **rval) |
Extract a key-value pair from the beginning of a string. More... | |
const AVOption * | av_opt_find (void *obj, const char *name, const char *unit, int opt_flags, int search_flags) |
Look for an option in an object. More... | |
const AVOption * | av_opt_find2 (void *obj, const char *name, const char *unit, int opt_flags, int search_flags, void **target_obj) |
Look for an option in an object. More... | |
const AVOption * | av_opt_next (const void *obj, const AVOption *prev) |
Iterate over all AVOptions belonging to obj. More... | |
void * | av_opt_child_next (void *obj, void *prev) |
Iterate over AVOptions-enabled children of obj. More... | |
const AVClass * | av_opt_child_class_iterate (const AVClass *parent, void **iter) |
Iterate over potential AVOptions-enabled children of parent. More... | |
void * | av_opt_ptr (const AVClass *avclass, void *obj, const char *name) |
Gets a pointer to the requested field in a struct. More... | |
void | av_opt_freep_ranges (AVOptionRanges **ranges) |
Free an AVOptionRanges struct and set it to NULL. More... | |
int | av_opt_query_ranges (AVOptionRanges **, void *obj, const char *key, int flags) |
Get a list of allowed ranges for the given option. More... | |
int | av_opt_copy (void *dest, const void *src) |
Copy options from src object into dest object. More... | |
int | av_opt_query_ranges_default (AVOptionRanges **, void *obj, const char *key, int flags) |
Get a default list of allowed ranges for the given option. More... | |
int | av_opt_is_set_to_default (void *obj, const AVOption *o) |
Check if given option is set to its default value. More... | |
int | av_opt_is_set_to_default_by_name (void *obj, const char *name, int search_flags) |
Check if given option is set to its default value. More... | |
int | av_opt_serialize (void *obj, int opt_flags, int flags, char **buffer, const char key_val_sep, const char pairs_sep) |
Serialize object's options. More... | |
AVOptions provide a generic system to declare options on arbitrary structs ("objects").
An option can have a help text, a type and a range of possible values. Options may then be enumerated, read and written to.
This section describes how to add AVOptions capabilities to a struct.
All AVOptions-related information is stored in an AVClass. Therefore the first member of the struct should be a pointer to an AVClass describing it. The option field of the AVClass must be set to a NULL-terminated static array of AVOptions. Each AVOption must have a non-empty name, a type, a default value and for number-type AVOptions also a range of allowed values. It must also declare an offset in bytes from the start of the struct, where the field associated with this AVOption is located. Other fields in the AVOption struct should also be set when applicable, but are not required.
The following example illustrates an AVOptions-enabled struct:
Next, when allocating your struct, you must ensure that the AVClass pointer is set to the correct value. Then, av_opt_set_defaults() can be called to initialize defaults. After that the struct is ready to be used with the AVOptions API.
When cleaning up, you may use the av_opt_free() function to automatically free all the allocated string and binary options.
Continuing with the above example:
It may happen that an AVOptions-enabled struct contains another AVOptions-enabled struct as a member (e.g. AVCodecContext in libavcodec exports generic options, while its priv_data field exports codec-specific options). In such a case, it is possible to set up the parent struct to export a child's options. To do that, simply implement AVClass.child_next() and AVClass.child_class_iterate() in the parent struct's AVClass. Assuming that the test_struct from above now also contains a child_struct field:
Putting child_next() and child_class_iterate() as defined above into test_class will now make child_struct's options accessible through test_struct (again, proper setup as described above needs to be done on child_struct right after it is created).
From the above example it might not be clear why both child_next() and child_class_iterate() are needed. The distinction is that child_next() iterates over actually existing objects, while child_class_iterate() iterates over all possible child classes. E.g. if an AVCodecContext was initialized to use a codec which has private options, then its child_next() will return AVCodecContext.priv_data and finish iterating. OTOH child_class_iterate() on AVCodecContext.av_class will iterate over all available codecs with private options.
It is possible to create named constants for options. Simply set the unit field of the option the constants should apply to a string and create the constants themselves as options of type AV_OPT_TYPE_CONST with their unit field set to the same string. Their default_val field should contain the value of the named constant. For example, to add some named constants for the test_flags option above, put the following into the child_opts array:
This section deals with accessing options in an AVOptions-enabled struct. Such structs in FFmpeg are e.g. AVCodecContext in libavcodec or AVFormatContext in libavformat.
The basic functions for examining options are av_opt_next(), which iterates over all options defined for one object, and av_opt_find(), which searches for an option with the given name.
The situation is more complicated with nesting. An AVOptions-enabled struct may have AVOptions-enabled children. Passing the AV_OPT_SEARCH_CHILDREN flag to av_opt_find() will make the function search children recursively.
For enumerating there are basically two cases. The first is when you want to get all options that may potentially exist on the struct and its children (e.g. when constructing documentation). In that case you should call av_opt_child_class_iterate() recursively on the parent struct's AVClass. The second case is when you have an already initialized struct with all its children and you want to get all options that can be actually written or read from it. In that case you should call av_opt_child_next() recursively (and av_opt_next() on each result).
When setting options, you often have a string read directly from the user. In such a case, simply passing it to av_opt_set() is enough. For non-string type options, av_opt_set() will parse the string according to the option type.
Similarly av_opt_get() will read any option type and convert it to a string which will be returned. Do not forget that the string is allocated, so you have to free it with av_free().
In some cases it may be more convenient to put all options into an AVDictionary and call av_opt_set_dict() on it. A specific case of this are the format/codec open functions in lavf/lavc which take a dictionary filled with option as a parameter. This makes it possible to set some options that cannot be set otherwise, since e.g. the input file format is not known before the file is actually opened.
#define AV_OPT_SEARCH_CHILDREN (1 << 0) |
Search in possible children of the given object first.
#define AV_OPT_SEARCH_FAKE_OBJ (1 << 1) |
The obj passed to av_opt_find() is fake – only a double pointer to AVClass instead of a required pointer to a struct containing AVClass.
This is useful for searching for options without needing to allocate the corresponding object.
#define AV_OPT_ALLOW_NULL (1 << 2) |
#define AV_OPT_MULTI_COMPONENT_RANGE (1 << 12) |
Allows av_opt_query_ranges and av_opt_query_ranges_default to return more than one component for certain option types.
#define AV_OPT_SERIALIZE_SKIP_DEFAULTS 0x00000001 |
#define AV_OPT_SERIALIZE_OPT_FLAGS_EXACT 0x00000002 |
enum AVOptionType |
Enumerator | |
---|---|
AV_OPT_TYPE_FLAGS | |
AV_OPT_TYPE_INT | |
AV_OPT_TYPE_INT64 | |
AV_OPT_TYPE_DOUBLE | |
AV_OPT_TYPE_FLOAT | |
AV_OPT_TYPE_STRING | |
AV_OPT_TYPE_RATIONAL | |
AV_OPT_TYPE_BINARY | offset must point to a pointer immediately followed by an int for the length |
AV_OPT_TYPE_DICT | |
AV_OPT_TYPE_UINT64 | |
AV_OPT_TYPE_CONST | |
AV_OPT_TYPE_IMAGE_SIZE | offset must point to two consecutive integers |
AV_OPT_TYPE_PIXEL_FMT | |
AV_OPT_TYPE_SAMPLE_FMT | |
AV_OPT_TYPE_VIDEO_RATE | offset must point to AVRational |
AV_OPT_TYPE_DURATION | |
AV_OPT_TYPE_COLOR | |
AV_OPT_TYPE_CHANNEL_LAYOUT | |
AV_OPT_TYPE_BOOL | |
AV_OPT_TYPE_CHLAYOUT |
anonymous enum |
int av_opt_show2 | ( | void * | obj, |
void * | av_log_obj, | ||
int | req_flags, | ||
int | rej_flags | ||
) |
Show the obj options.
req_flags | requested flags for the options to show. Show only the options for which it is opt->flags & req_flags. |
rej_flags | rejected flags for the options to show. Show only the options for which it is !(opt->flags & req_flags). |
av_log_obj | log context to use for showing the options |
void av_opt_set_defaults | ( | void * | s | ) |
void av_opt_set_defaults2 | ( | void * | s, |
int | mask, | ||
int | flags | ||
) |
Set the values of all AVOption fields to their default values.
Only these AVOption fields for which (opt->flags & mask) == flags will have their default applied to s.
s | an AVOption-enabled struct (its first member must be a pointer to AVClass) |
mask | combination of AV_OPT_FLAG_* |
flags | combination of AV_OPT_FLAG_* |
int av_set_options_string | ( | void * | ctx, |
const char * | opts, | ||
const char * | key_val_sep, | ||
const char * | pairs_sep | ||
) |
Parse the key/value pairs list in opts.
For each key/value pair found, stores the value in the field in ctx that is named like the key. ctx must be an AVClass context, storing is done using AVOptions.
opts | options string to parse, may be NULL |
key_val_sep | a 0-terminated list of characters used to separate key from value |
pairs_sep | a 0-terminated list of characters used to separate two pairs from each other |
int av_opt_set_from_string | ( | void * | ctx, |
const char * | opts, | ||
const char *const * | shorthand, | ||
const char * | key_val_sep, | ||
const char * | pairs_sep | ||
) |
Parse the key-value pairs list in opts.
For each key=value pair found, set the value of the corresponding option in ctx.
ctx | the AVClass object to set options on |
opts | the options string, key-value pairs separated by a delimiter |
shorthand | a NULL-terminated array of options names for shorthand notation: if the first field in opts has no key part, the key is taken from the first element of shorthand; then again for the second, etc., until either opts is finished, shorthand is finished or a named option is found; after that, all options must be named |
key_val_sep | a 0-terminated list of characters used to separate key from value, for example '=' |
pairs_sep | a 0-terminated list of characters used to separate two pairs from each other, for example ':' or ',' |
Options names must use only the following characters: a-z A-Z 0-9 - . / _ Separators must use characters distinct from option names and from each other.
void av_opt_free | ( | void * | obj | ) |
Free all allocated objects in obj.
int av_opt_flag_is_set | ( | void * | obj, |
const char * | field_name, | ||
const char * | flag_name | ||
) |
Check whether a particular flag is set in a flags field.
field_name | the name of the flag field option |
flag_name | the name of the flag to check |
int av_opt_set_dict | ( | void * | obj, |
struct AVDictionary ** | options | ||
) |
Set all the options from a given dictionary on an object.
obj | a struct whose first element is a pointer to AVClass |
options | options to process. This dictionary will be freed and replaced by a new one containing all options not found in obj. Of course this new dictionary needs to be freed by caller with av_dict_free(). |
int av_opt_set_dict2 | ( | void * | obj, |
struct AVDictionary ** | options, | ||
int | search_flags | ||
) |
Set all the options from a given dictionary on an object.
obj | a struct whose first element is a pointer to AVClass |
options | options to process. This dictionary will be freed and replaced by a new one containing all options not found in obj. Of course this new dictionary needs to be freed by caller with av_dict_free(). |
search_flags | A combination of AV_OPT_SEARCH_*. |
int av_opt_get_key_value | ( | const char ** | ropts, |
const char * | key_val_sep, | ||
const char * | pairs_sep, | ||
unsigned | flags, | ||
char ** | rkey, | ||
char ** | rval | ||
) |
Extract a key-value pair from the beginning of a string.
ropts | pointer to the options string, will be updated to point to the rest of the string (one of the pairs_sep or the final NUL) |
key_val_sep | a 0-terminated list of characters used to separate key from value, for example '=' |
pairs_sep | a 0-terminated list of characters used to separate two pairs from each other, for example ':' or ',' |
flags | flags; see the AV_OPT_FLAG_* values below |
rkey | parsed key; must be freed using av_free() |
rval | parsed value; must be freed using av_free() |
const AVOption * av_opt_find | ( | void * | obj, |
const char * | name, | ||
const char * | unit, | ||
int | opt_flags, | ||
int | search_flags | ||
) |
Look for an option in an object.
Consider only options which have all the specified flags set.
[in] | obj | A pointer to a struct whose first element is a pointer to an AVClass. Alternatively a double pointer to an AVClass, if AV_OPT_SEARCH_FAKE_OBJ search flag is set. |
[in] | name | The name of the option to look for. |
[in] | unit | When searching for named constants, name of the unit it belongs to. |
opt_flags | Find only options with all the specified flags set (AV_OPT_FLAG). | |
search_flags | A combination of AV_OPT_SEARCH_*. |
const AVOption * av_opt_find2 | ( | void * | obj, |
const char * | name, | ||
const char * | unit, | ||
int | opt_flags, | ||
int | search_flags, | ||
void ** | target_obj | ||
) |
Look for an option in an object.
Consider only options which have all the specified flags set.
[in] | obj | A pointer to a struct whose first element is a pointer to an AVClass. Alternatively a double pointer to an AVClass, if AV_OPT_SEARCH_FAKE_OBJ search flag is set. |
[in] | name | The name of the option to look for. |
[in] | unit | When searching for named constants, name of the unit it belongs to. |
opt_flags | Find only options with all the specified flags set (AV_OPT_FLAG). | |
search_flags | A combination of AV_OPT_SEARCH_*. | |
[out] | target_obj | if non-NULL, an object to which the option belongs will be written here. It may be different from obj if AV_OPT_SEARCH_CHILDREN is present in search_flags. This parameter is ignored if search_flags contain AV_OPT_SEARCH_FAKE_OBJ. |
Iterate over all AVOptions belonging to obj.
obj | an AVOptions-enabled struct or a double pointer to an AVClass describing it. |
prev | result of the previous call to av_opt_next() on this object or NULL |
void * av_opt_child_next | ( | void * | obj, |
void * | prev | ||
) |
Iterate over AVOptions-enabled children of obj.
prev | result of a previous call to this function or NULL |
Iterate over potential AVOptions-enabled children of parent.
iter | a pointer where iteration state is stored. |
void * av_opt_ptr | ( | const AVClass * | avclass, |
void * | obj, | ||
const char * | name | ||
) |
Gets a pointer to the requested field in a struct.
This function allows accessing a struct even when its fields are moved or renamed since the application making the access has been compiled,
void av_opt_freep_ranges | ( | AVOptionRanges ** | ranges | ) |
Free an AVOptionRanges struct and set it to NULL.
int av_opt_query_ranges | ( | AVOptionRanges ** | , |
void * | obj, | ||
const char * | key, | ||
int | flags | ||
) |
Get a list of allowed ranges for the given option.
The returned list may depend on other fields in obj like for example profile.
flags | is a bitmask of flags, undefined flags should not be set and should be ignored AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, |
The result must be freed with av_opt_freep_ranges.
int av_opt_copy | ( | void * | dest, |
const void * | src | ||
) |
Copy options from src object into dest object.
The underlying AVClass of both src and dest must coincide. The guarantee below does not apply if this is not fulfilled.
Options that require memory allocation (e.g. string or binary) are malloc'ed in dest object. Original memory allocated for such options is freed unless both src and dest options points to the same memory.
Even on error it is guaranteed that allocated options from src and dest no longer alias each other afterwards; in particular calling av_opt_free() on both src and dest is safe afterwards if dest has been memdup'ed from src.
dest | Object to copy from |
src | Object to copy into |
int av_opt_query_ranges_default | ( | AVOptionRanges ** | , |
void * | obj, | ||
const char * | key, | ||
int | flags | ||
) |
Get a default list of allowed ranges for the given option.
This list is constructed without using the AVClass.query_ranges() callback and can be used as fallback from within the callback.
flags | is a bitmask of flags, undefined flags should not be set and should be ignored AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, |
The result must be freed with av_opt_free_ranges.
int av_opt_is_set_to_default | ( | void * | obj, |
const AVOption * | o | ||
) |
Check if given option is set to its default value.
Options o must belong to the obj. This function must not be called to check child's options state.
obj | AVClass object to check option on |
o | option to be checked |
int av_opt_is_set_to_default_by_name | ( | void * | obj, |
const char * | name, | ||
int | search_flags | ||
) |
Check if given option is set to its default value.
obj | AVClass object to check option on |
name | option name |
search_flags | combination of AV_OPT_SEARCH_* |
int av_opt_serialize | ( | void * | obj, |
int | opt_flags, | ||
int | flags, | ||
char ** | buffer, | ||
const char | key_val_sep, | ||
const char | pairs_sep | ||
) |
Serialize object's options.
Create a string containing object's serialized options. Such string may be passed back to av_opt_set_from_string() in order to restore option values. A key/value or pairs separator occurring in the serialized value or name string are escaped through the av_escape() function.
[in] | obj | AVClass object to serialize |
[in] | opt_flags | serialize options with all the specified flags set (AV_OPT_FLAG) |
[in] | flags | combination of AV_OPT_SERIALIZE_* flags |
[out] | buffer | Pointer to buffer that will be allocated with string containg serialized options. Buffer must be freed by the caller when is no longer needed. |
[in] | key_val_sep | character used to separate key from value |
[in] | pairs_sep | character used to separate two pairs from each other |