Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

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