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 AVCODEC_OPT_H 23#define AVCODEC_OPT_H 24 25/** 26 * @file 27 * AVOptions 28 */ 29 30#include "libavutil/rational.h" 31#include "avcodec.h" 32 33enum AVOptionType{ 34 FF_OPT_TYPE_FLAGS, 35 FF_OPT_TYPE_INT, 36 FF_OPT_TYPE_INT64, 37 FF_OPT_TYPE_DOUBLE, 38 FF_OPT_TYPE_FLOAT, 39 FF_OPT_TYPE_STRING, 40 FF_OPT_TYPE_RATIONAL, 41 FF_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length 42 FF_OPT_TYPE_CONST=128, 43}; 44 45/** 46 * AVOption 47 */ 48typedef struct AVOption { 49 const char *name; 50 51 /** 52 * short English help text 53 * @todo What about other languages? 54 */ 55 const char *help; 56 57 /** 58 * The offset relative to the context structure where the option 59 * value is stored. It should be 0 for named constants. 60 */ 61 int offset; 62 enum AVOptionType type; 63 64 /** 65 * the default value for scalar options 66 */ 67 double default_val; 68 double min; ///< minimum valid value for the option 69 double max; ///< maximum valid value for the option 70 71 int flags; 72#define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding 73#define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding 74#define AV_OPT_FLAG_METADATA 4 ///< some data extracted or inserted into the file like title, comment, ... 75#define AV_OPT_FLAG_AUDIO_PARAM 8 76#define AV_OPT_FLAG_VIDEO_PARAM 16 77#define AV_OPT_FLAG_SUBTITLE_PARAM 32 78//FIXME think about enc-audio, ... style flags 79 80 /** 81 * The logical unit to which the option belongs. Non-constant 82 * options and corresponding named constants share the same 83 * unit. May be NULL. 84 */ 85 const char *unit; 86} AVOption; 87 88/** 89 * AVOption2. 90 * THIS IS NOT PART OF THE API/ABI YET! 91 * This is identical to AVOption except that default_val was replaced by 92 * an union, it should be compatible with AVOption on normal platforms. 93 */ 94typedef struct AVOption2 { 95 const char *name; 96 97 /** 98 * short English help text 99 * @todo What about other languages? 100 */ 101 const char *help; 102 103 /** 104 * The offset relative to the context structure where the option 105 * value is stored. It should be 0 for named constants. 106 */ 107 int offset; 108 enum AVOptionType type; 109 110 /** 111 * the default value for scalar options 112 */ 113 union { 114 double dbl; 115 const char *str; 116 } default_val; 117 118 double min; ///< minimum valid value for the option 119 double max; ///< maximum valid value for the option 120 121 int flags; 122/* 123#define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding 124#define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding 125#define AV_OPT_FLAG_METADATA 4 ///< some data extracted or inserted into the file like title, comment, ... 126#define AV_OPT_FLAG_AUDIO_PARAM 8 127#define AV_OPT_FLAG_VIDEO_PARAM 16 128#define AV_OPT_FLAG_SUBTITLE_PARAM 32 129*/ 130//FIXME think about enc-audio, ... style flags 131 132 /** 133 * The logical unit to which the option belongs. Non-constant 134 * options and corresponding named constants share the same 135 * unit. May be NULL. 136 */ 137 const char *unit; 138} AVOption2; 139 140 141/** 142 * Looks for an option in obj. Looks only for the options which 143 * have the flags set as specified in mask and flags (that is, 144 * for which it is the case that opt->flags & mask == flags). 145 * 146 * @param[in] obj a pointer to a struct whose first element is a 147 * pointer to an AVClass 148 * @param[in] name the name of the option to look for 149 * @param[in] unit the unit of the option to look for, or any if NULL 150 * @return a pointer to the option found, or NULL if no option 151 * has been found 152 */ 153const AVOption *av_find_opt(void *obj, const char *name, const char *unit, int mask, int flags); 154 155#if LIBAVCODEC_VERSION_MAJOR < 53 156/** 157 * @see av_set_string2() 158 */ 159attribute_deprecated const AVOption *av_set_string(void *obj, const char *name, const char *val); 160 161/** 162 * @return a pointer to the AVOption corresponding to the field set or 163 * NULL if no matching AVOption exists, or if the value val is not 164 * valid 165 * @see av_set_string3() 166 */ 167attribute_deprecated const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc); 168#endif 169 170/** 171 * Sets the field of obj with the given name to value. 172 * 173 * @param[in] obj A struct whose first element is a pointer to an 174 * AVClass. 175 * @param[in] name the name of the field to set 176 * @param[in] val The value to set. If the field is not of a string 177 * type, then the given string is parsed. 178 * SI postfixes and some named scalars are supported. 179 * If the field is of a numeric type, it has to be a numeric or named 180 * scalar. Behavior with more than one scalar and +- infix operators 181 * is undefined. 182 * If the field is of a flags type, it has to be a sequence of numeric 183 * scalars or named flags separated by '+' or '-'. Prefixing a flag 184 * with '+' causes it to be set without affecting the other flags; 185 * similarly, '-' unsets a flag. 186 * @param[out] o_out if non-NULL put here a pointer to the AVOption 187 * found 188 * @param alloc when 1 then the old value will be av_freed() and the 189 * new av_strduped() 190 * when 0 then no av_free() nor av_strdup() will be used 191 * @return 0 if the value has been set, or an AVERROR code in case of 192 * error: 193 * AVERROR(ENOENT) if no matching option exists 194 * AVERROR(ERANGE) if the value is out of range 195 * AVERROR(EINVAL) if the value is not valid 196 */ 197int av_set_string3(void *obj, const char *name, const char *val, int alloc, const AVOption **o_out); 198 199const AVOption *av_set_double(void *obj, const char *name, double n); 200const AVOption *av_set_q(void *obj, const char *name, AVRational n); 201const AVOption *av_set_int(void *obj, const char *name, int64_t n); 202double av_get_double(void *obj, const char *name, const AVOption **o_out); 203AVRational av_get_q(void *obj, const char *name, const AVOption **o_out); 204int64_t av_get_int(void *obj, const char *name, const AVOption **o_out); 205const char *av_get_string(void *obj, const char *name, const AVOption **o_out, char *buf, int buf_len); 206const AVOption *av_next_option(void *obj, const AVOption *last); 207int av_opt_show(void *obj, void *av_log_obj); 208void av_opt_set_defaults(void *s); 209void av_opt_set_defaults2(void *s, int mask, int flags); 210 211#endif /* AVCODEC_OPT_H */ 212