opt.h 7.7 KB
Newer Older
1 2 3 4
/*
 * AVOptions
 * copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>
 *
5 6 7
 * This file is part of FFmpeg.
 *
 * FFmpeg is free software; you can redistribute it and/or
8 9
 * modify it under the terms of the GNU Lesser General Public
 * 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 14 15 16 17
 * 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
18
 * License along with FFmpeg; if not, write to the Free Software
19 20 21
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

22 23
#ifndef AVCODEC_OPT_H
#define AVCODEC_OPT_H
24 25

/**
26
 * @file
27 28 29
 * AVOptions
 */

30
#include "libavutil/rational.h"
31
#include "avcodec.h"
32

33 34 35 36 37 38 39 40
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,
41
    FF_OPT_TYPE_BINARY,  ///< offset must point to a pointer immediately followed by an int for the length
42 43 44 45
    FF_OPT_TYPE_CONST=128,
};

/**
D
Diego Biurrun 已提交
46
 * AVOption
47 48 49 50 51
 */
typedef struct AVOption {
    const char *name;

    /**
D
Diego Biurrun 已提交
52 53
     * short English help text
     * @todo What about other languages?
54 55
     */
    const char *help;
56 57 58

    /**
     * The offset relative to the context structure where the option
S
Stefano Sabatini 已提交
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 69
    double min;                 ///< minimum valid value for the option
    double max;                 ///< maximum valid value for the option
70

71 72 73 74 75 76 77 78
    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
79 80 81 82 83 84

    /**
     * The logical unit to which the option belongs. Non-constant
     * options and corresponding named constants share the same
     * unit. May be NULL.
     */
85 86 87
    const char *unit;
} AVOption;

88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
/**
 * AVOption2.
 * THIS IS NOT PART OF THE API/ABI YET!
 * This is identical to AVOption except that default_val was replaced by
 * an union, it should be compatible with AVOption on normal platforms.
 */
typedef struct AVOption2 {
    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;
    } 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;
} AVOption2;

140

S
Stefano Sabatini 已提交
141
/**
142
 * Look for an option in obj. Look only for the options which
143
 * have the flags set as specified in mask and flags (that is,
S
Stefano Sabatini 已提交
144 145 146
 * for which it is the case that opt->flags & mask == flags).
 *
 * @param[in] obj a pointer to a struct whose first element is a
147
 * pointer to an AVClass
S
Stefano Sabatini 已提交
148 149 150 151 152
 * @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
 */
153
const 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 158
/**
 * @see av_set_string2()
 */
159 160
attribute_deprecated const AVOption *av_set_string(void *obj, const char *name, const char *val);

S
Stefano Sabatini 已提交
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
S
Stefano Sabatini 已提交
164 165 166 167
 * valid
 * @see av_set_string3()
 */
attribute_deprecated const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc);
168
#endif
S
Stefano Sabatini 已提交
169

170
/**
171
 * Set the field of obj with the given name to value.
172 173 174 175 176 177 178 179 180 181 182 183 184 185
 *
 * @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.
S
Stefano Sabatini 已提交
186 187
 * @param[out] o_out if non-NULL put here a pointer to the AVOption
 * found
188 189 190
 * @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
191 192 193 194 195
 * @return 0 if the value has been set, or an AVERROR code in case of
 * error:
 * AVERROR(ENOENT) if no matching option exists
 * AVERROR(ERANGE) if the value is out of range
 * AVERROR(EINVAL) if the value is not valid
196
 */
S
Stefano Sabatini 已提交
197
int av_set_string3(void *obj, const char *name, const char *val, int alloc, const AVOption **o_out);
198

199 200 201 202 203 204 205 206
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);
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

#if FF_API_OPT_SHOW
/**
 * @deprecated Use av_opt_show2() instead.
 */
attribute_deprecated int av_opt_show(void *obj, void *av_log_obj);
#endif

/**
 * 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);

226
void av_opt_set_defaults(void *s);
227
void av_opt_set_defaults2(void *s, int mask, int flags);
228

229
#endif /* AVCODEC_OPT_H */