AVOptions provide a generic system to declare options on arbitrary structs ("objects"). 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_next() 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_next() 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_next() are needed. The distinction is that child_next() iterates over actually existing objects, while child_class_next() 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_next() 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 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_next() 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 allows 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.
Search in possible children of the given object first.
Definition at line 539 of file opt.h.
Referenced by av_get_string(), av_opt_find2(), av_probe_input_buffer(), configure_output_audio_filter(), ff_rtp_chain_mux_open(), init(), init_filters(), insert_trim(), lavfi_read_header(), open_input_file(), open_output_file(), opt_default(), parse_key_value_pair(), and process_options().
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.
Definition at line 547 of file opt.h.
Referenced by av_opt_find2(), av_opt_ptr(), filter_codec_opts(), init(), open_input_file(), open_output_file(), opt_default(), opt_list(), and process_options().
offset must point to a pointer immediately followed by an int for the length
offset must point to two consecutive integers
offset must point to AVRational
offset must point to a pointer immediately followed by an int for the length
Look for an option in obj.
Look only for the options which have the flags set as specified in mask and flags (that is, for which it is the case that opt->flags & mask == flags).
Set the field of obj with the given name to value.
Definition at line 688 of file opt.c.
Referenced by config_output(), and query_formats().
Definition at line 57 of file opt.c.
Referenced by av_find_opt(), print_option(), and show_opts().
Show the obj options.
Definition at line 980 of file opt.c.
Referenced by show_help_children().
Set the values of all AVOption fields to their default values.
Definition at line 992 of file opt.c.
Referenced by av_opencl_init(), av_opencl_set_option(), avcodec_get_context_defaults3(), avcodec_open2(), avfilter_graph_alloc(), avformat_alloc_output_context2(), avformat_get_context_defaults(), avformat_open_input(), avresample_alloc_context(), ff_filter_alloc(), init_muxer(), swr_alloc(), sws_alloc_context(), url_alloc_for_protocol(), and writer_open().
Definition at line 998 of file opt.c.
Referenced by av_opt_set_defaults(), and avcodec_get_context_defaults3().
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.
Definition at line 1113 of file opt.c.
Referenced by writer_open().
Parse the key-value pairs list in opts.
For each key=value pair found, set the value of the corresponding option in ctx.
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.
Free all string and binary options in obj.
Definition at line 1245 of file opt.c.
Referenced by av_opencl_free_option(), av_opencl_uninit(), av_write_trailer(), avcodec_close(), avfilter_free(), avformat_free_context(), avresample_free(), ffurl_closep(), join_init(), seg_write_trailer(), uninit(), and writer_close().
Check whether a particular flag is set in a flags field.
Definition at line 802 of file opt.c.
Referenced by ff_rtp_get_payload_type().
Set all the options from a given dictionary on an object.
Definition at line 1253 of file opt.c.
Referenced by avcodec_open2(), avfilter_init_dict(), avformat_open_input(), config_output(), ffurl_open(), and init_muxer().
Extract a key-value pair from the beginning of a string.
Definition at line 1171 of file opt.c.
Referenced by av_opt_set_from_string(), init_report(), parse_slave_options(), and process_options().
Look for an option in an object.
Consider only options which have all the specified flags set.
Definition at line 1274 of file opt.c.
Referenced by av_get_string(), av_opt_flag_is_set(), av_opt_query_ranges_default(), av_set_double(), av_set_int(), av_set_q(), av_set_string3(), ffserver_opt_default(), filter_codec_opts(), init(), open_input_file(), open_output_file(), opt_default(), process_options(), and set_string_number().
Look for an option in an object.
Consider only options which have all the specified flags set.
Definition at line 1280 of file opt.c.
Referenced by av_opt_find(), av_opt_find2(), av_opt_get(), av_opt_get_image_size(), av_opt_ptr(), av_opt_set(), av_opt_set_bin(), av_opt_set_image_size(), av_opt_set_video_rate(), get_format(), get_number(), set_format(), and set_number().
Iterate over all AVOptions belonging to obj.
Definition at line 63 of file opt.c.
Referenced by av_next_option(), av_opt_find2(), av_opt_free(), av_opt_set_defaults2(), opt_list(), process_options(), and show_stream().
Iterate over AVOptions-enabled children of obj.
Definition at line 1321 of file opt.c.
Referenced by av_opt_find2().
Iterate over potential AVOptions-enabled children of parent.
Definition at line 1329 of file opt.c.
Referenced by av_opt_find2(), and show_help_children().
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,
Definition at line 1336 of file opt.c.
Referenced by decode_video().
Free an AVOptionRanges struct and set it to NULL.
Definition at line 1426 of file opt.c.
Referenced by opt_list().
Get a list of allowed ranges for the given option.
The returned list may depend on other fields in obj like for example profile.
The result must be freed with av_opt_freep_ranges.
Definition at line 1344 of file opt.c.
Referenced by opt_list().
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.
The result must be freed with av_opt_free_ranges.
Definition at line 1358 of file opt.c.
Referenced by av_opt_query_ranges().