mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-15 19:55:08 +00:00
79eff91325
It's a hack which was created to allow for multiple options with different defaults to refer to same field (e.g. 'b' vs 'ab'). There is no need for it anymore.
261 lines
9.4 KiB
C
261 lines
9.4 KiB
C
/*
|
|
* AVOptions
|
|
* copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>
|
|
*
|
|
* This file is part of Libav.
|
|
*
|
|
* Libav is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* Libav is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with Libav; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#ifndef AVUTIL_OPT_H
|
|
#define AVUTIL_OPT_H
|
|
|
|
/**
|
|
* @file
|
|
* AVOptions
|
|
*/
|
|
|
|
#include "rational.h"
|
|
#include "avutil.h"
|
|
#include "dict.h"
|
|
|
|
enum AVOptionType{
|
|
FF_OPT_TYPE_FLAGS,
|
|
FF_OPT_TYPE_INT,
|
|
FF_OPT_TYPE_INT64,
|
|
FF_OPT_TYPE_DOUBLE,
|
|
FF_OPT_TYPE_FLOAT,
|
|
FF_OPT_TYPE_STRING,
|
|
FF_OPT_TYPE_RATIONAL,
|
|
FF_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length
|
|
FF_OPT_TYPE_CONST=128,
|
|
};
|
|
|
|
/**
|
|
* AVOption
|
|
*/
|
|
typedef struct AVOption {
|
|
const char *name;
|
|
|
|
/**
|
|
* short English help text
|
|
* @todo What about other languages?
|
|
*/
|
|
const char *help;
|
|
|
|
/**
|
|
* The offset relative to the context structure where the option
|
|
* value is stored. It should be 0 for named constants.
|
|
*/
|
|
int offset;
|
|
enum AVOptionType type;
|
|
|
|
/**
|
|
* the default value for scalar options
|
|
*/
|
|
union {
|
|
double dbl;
|
|
const char *str;
|
|
/* TODO those are unused now */
|
|
int64_t i64;
|
|
AVRational q;
|
|
} default_val;
|
|
double min; ///< minimum valid value for the option
|
|
double max; ///< maximum valid value for the option
|
|
|
|
int flags;
|
|
#define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding
|
|
#define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding
|
|
#define AV_OPT_FLAG_METADATA 4 ///< some data extracted or inserted into the file like title, comment, ...
|
|
#define AV_OPT_FLAG_AUDIO_PARAM 8
|
|
#define AV_OPT_FLAG_VIDEO_PARAM 16
|
|
#define AV_OPT_FLAG_SUBTITLE_PARAM 32
|
|
//FIXME think about enc-audio, ... style flags
|
|
|
|
/**
|
|
* The logical unit to which the option belongs. Non-constant
|
|
* options and corresponding named constants share the same
|
|
* unit. May be NULL.
|
|
*/
|
|
const char *unit;
|
|
} AVOption;
|
|
|
|
#if FF_API_FIND_OPT
|
|
/**
|
|
* 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).
|
|
*
|
|
* @param[in] obj a pointer to a struct whose first element is a
|
|
* pointer to an AVClass
|
|
* @param[in] name the name of the option to look for
|
|
* @param[in] unit the unit of the option to look for, or any if NULL
|
|
* @return a pointer to the option found, or NULL if no option
|
|
* has been found
|
|
*
|
|
* @deprecated use av_opt_find.
|
|
*/
|
|
attribute_deprecated
|
|
const AVOption *av_find_opt(void *obj, const char *name, const char *unit, int mask, int flags);
|
|
#endif
|
|
|
|
/**
|
|
* Set the field of obj with the given name to value.
|
|
*
|
|
* @param[in] obj A struct whose first element is a pointer to an
|
|
* AVClass.
|
|
* @param[in] name the name of the field to set
|
|
* @param[in] val The value to set. If the field is not of a string
|
|
* type, then the given string is parsed.
|
|
* SI postfixes and some named scalars are supported.
|
|
* If the field is of a numeric type, it has to be a numeric or named
|
|
* scalar. Behavior with more than one scalar and +- infix operators
|
|
* is undefined.
|
|
* If the field is of a flags type, it has to be a sequence of numeric
|
|
* scalars or named flags separated by '+' or '-'. Prefixing a flag
|
|
* with '+' causes it to be set without affecting the other flags;
|
|
* similarly, '-' unsets a flag.
|
|
* @param[out] o_out if non-NULL put here a pointer to the AVOption
|
|
* found
|
|
* @param alloc when 1 then the old value will be av_freed() and the
|
|
* new av_strduped()
|
|
* when 0 then no av_free() nor av_strdup() will be used
|
|
* @return 0 if the value has been set, or an AVERROR code in case of
|
|
* error:
|
|
* AVERROR_OPTION_NOT_FOUND if no matching option exists
|
|
* AVERROR(ERANGE) if the value is out of range
|
|
* AVERROR(EINVAL) if the value is not valid
|
|
*/
|
|
int av_set_string3(void *obj, const char *name, const char *val, int alloc, const AVOption **o_out);
|
|
|
|
const AVOption *av_set_double(void *obj, const char *name, double n);
|
|
const AVOption *av_set_q(void *obj, const char *name, AVRational n);
|
|
const AVOption *av_set_int(void *obj, const char *name, int64_t n);
|
|
double av_get_double(void *obj, const char *name, const AVOption **o_out);
|
|
AVRational av_get_q(void *obj, const char *name, const AVOption **o_out);
|
|
int64_t av_get_int(void *obj, const char *name, const AVOption **o_out);
|
|
const char *av_get_string(void *obj, const char *name, const AVOption **o_out, char *buf, int buf_len);
|
|
const AVOption *av_next_option(void *obj, const AVOption *last);
|
|
|
|
/**
|
|
* Show the obj options.
|
|
*
|
|
* @param req_flags requested flags for the options to show. Show only the
|
|
* options for which it is opt->flags & req_flags.
|
|
* @param rej_flags rejected flags for the options to show. Show only the
|
|
* options for which it is !(opt->flags & req_flags).
|
|
* @param av_log_obj log context to use for showing the options
|
|
*/
|
|
int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags);
|
|
|
|
/**
|
|
* Set the values of all AVOption fields to their default values.
|
|
*
|
|
* @param s an AVOption-enabled struct (its first member must be a pointer to AVClass)
|
|
*/
|
|
void av_opt_set_defaults(void *s);
|
|
|
|
#if FF_API_OLD_AVOPTIONS
|
|
attribute_deprecated
|
|
void av_opt_set_defaults2(void *s, int mask, int flags);
|
|
#endif
|
|
|
|
/**
|
|
* 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.
|
|
*
|
|
* @param key_val_sep a 0-terminated list of characters used to
|
|
* separate key from value
|
|
* @param pairs_sep a 0-terminated list of characters used to separate
|
|
* two pairs from each other
|
|
* @return the number of successfully set key/value pairs, or a negative
|
|
* value corresponding to an AVERROR code in case of error:
|
|
* AVERROR(EINVAL) if opts cannot be parsed,
|
|
* the error code issued by av_set_string3() if a key/value pair
|
|
* cannot be set
|
|
*/
|
|
int av_set_options_string(void *ctx, const char *opts,
|
|
const char *key_val_sep, const char *pairs_sep);
|
|
|
|
/**
|
|
* Free all string and binary options in obj.
|
|
*/
|
|
void av_opt_free(void *obj);
|
|
|
|
/**
|
|
* Check whether a particular flag is set in a flags field.
|
|
*
|
|
* @param field_name the name of the flag field option
|
|
* @param flag_name the name of the flag to check
|
|
* @return non-zero if the flag is set, zero if the flag isn't set,
|
|
* isn't of the right type, or the flags field doesn't exist.
|
|
*/
|
|
int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name);
|
|
|
|
/*
|
|
* Set all the options from a given dictionary on an object.
|
|
*
|
|
* @param obj a struct whose first element is a pointer to AVClass
|
|
* @param 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().
|
|
*
|
|
* @return 0 on success, a negative AVERROR if some option was found in obj,
|
|
* but could not be set.
|
|
*
|
|
* @see av_dict_copy()
|
|
*/
|
|
int av_opt_set_dict(void *obj, struct AVDictionary **options);
|
|
|
|
#define AV_OPT_SEARCH_CHILDREN 0x0001 /**< Search in possible children of the
|
|
given object first. */
|
|
/**
|
|
* 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_SEARCH_FAKE_OBJ 0x0002
|
|
|
|
/**
|
|
* Look for an option in an object. Consider only options which
|
|
* have all the specified flags set.
|
|
*
|
|
* @param[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.
|
|
* @param[in] name The name of the option to look for.
|
|
* @param[in] unit When searching for named constants, name of the unit
|
|
* it belongs to.
|
|
* @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG).
|
|
* @param search_flags A combination of AV_OPT_SEARCH_*.
|
|
*
|
|
* @return A pointer to the option found, or NULL if no option
|
|
* was found.
|
|
*
|
|
* @note Options found with AV_OPT_SEARCH_CHILDREN flag may not be settable
|
|
* directly with av_set_string3(). Use special calls which take an options
|
|
* AVDictionary (e.g. avformat_open_input()) to set options found with this
|
|
* flag.
|
|
*/
|
|
const AVOption *av_opt_find(void *obj, const char *name, const char *unit,
|
|
int opt_flags, int search_flags);
|
|
|
|
#endif /* AVUTIL_OPT_H */
|