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 libavcodec/opt.h 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/** 90 * Looks for an option in \p obj. Looks only for the options which 91 * have the flags set as specified in \p mask and \p flags (that is, 92 * for which it is the case that opt->flags & mask == flags). 93 * 94 * @param[in] obj a pointer to a struct whose first element is a 95 * pointer to an AVClass 96 * @param[in] name the name of the option to look for 97 * @param[in] unit the unit of the option to look for, or any if NULL 98 * @return a pointer to the option found, or NULL if no option 99 * has been found 100 */ 101const AVOption *av_find_opt(void *obj, const char *name, const char *unit, int mask, int flags); 102 103#if LIBAVCODEC_VERSION_MAJOR < 53 104/** 105 * @see av_set_string2() 106 */ 107attribute_deprecated const AVOption *av_set_string(void *obj, const char *name, const char *val); 108 109/** 110 * @return a pointer to the AVOption corresponding to the field set or 111 * NULL if no matching AVOption exists, or if the value \p val is not 112 * valid 113 * @see av_set_string3() 114 */ 115attribute_deprecated const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc); 116#endif 117 118/** 119 * Sets the field of obj with the given name to value. 120 * 121 * @param[in] obj A struct whose first element is a pointer to an 122 * AVClass. 123 * @param[in] name the name of the field to set 124 * @param[in] val The value to set. If the field is not of a string 125 * type, then the given string is parsed. 126 * SI postfixes and some named scalars are supported. 127 * If the field is of a numeric type, it has to be a numeric or named 128 * scalar. Behavior with more than one scalar and +- infix operators 129 * is undefined. 130 * If the field is of a flags type, it has to be a sequence of numeric 131 * scalars or named flags separated by '+' or '-'. Prefixing a flag 132 * with '+' causes it to be set without affecting the other flags; 133 * similarly, '-' unsets a flag. 134 * @param[out] o_out if non-NULL put here a pointer to the AVOption 135 * found 136 * @param alloc when 1 then the old value will be av_freed() and the 137 * new av_strduped() 138 * when 0 then no av_free() nor av_strdup() will be used 139 * @return 0 if the value has been set, an AVERROR* error code if no 140 * matching option exists, or if the value \p val is not valid 141 */ 142int av_set_string3(void *obj, const char *name, const char *val, int alloc, const AVOption **o_out); 143 144const AVOption *av_set_double(void *obj, const char *name, double n); 145const AVOption *av_set_q(void *obj, const char *name, AVRational n); 146const AVOption *av_set_int(void *obj, const char *name, int64_t n); 147double av_get_double(void *obj, const char *name, const AVOption **o_out); 148AVRational av_get_q(void *obj, const char *name, const AVOption **o_out); 149int64_t av_get_int(void *obj, const char *name, const AVOption **o_out); 150const char *av_get_string(void *obj, const char *name, const AVOption **o_out, char *buf, int buf_len); 151const AVOption *av_next_option(void *obj, const AVOption *last); 152int av_opt_show(void *obj, void *av_log_obj); 153void av_opt_set_defaults(void *s); 154void av_opt_set_defaults2(void *s, int mask, int flags); 155 156#endif /* AVCODEC_OPT_H */ 157