opt.h 5.2 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 FFMPEG_OPT_H
#define FFMPEG_OPT_H
24 25 26 27 28 29

/**
 * @file opt.h
 * AVOptions
 */

30
#include "libavutil/rational.h"
31

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

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

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

    /**
     * The offset relative to the context structure where the option
S
Stefano Sabatini 已提交
58
     * value is stored. It should be 0 for named constants.
59 60
     */
    int offset;
61
    enum AVOptionType type;
62

63
    /**
64
     * the default value for scalar options
65
     */
66
    double default_val;
67 68
    double min;                 ///< minimum valid value for the option
    double max;                 ///< maximum valid value for the option
69

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

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


S
Stefano Sabatini 已提交
88 89 90 91 92 93 94 95 96 97 98 99
/**
 * Looks for an option in \p obj. Looks only for the options which
 * have the flags set as specified in \p mask and \p 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
 */
100
const AVOption *av_find_opt(void *obj, const char *name, const char *unit, int mask, int flags);
101

102 103 104
/**
 * @see av_set_string2()
 */
105 106 107 108
attribute_deprecated const AVOption *av_set_string(void *obj, const char *name, const char *val);

/**
 * Sets the field of obj with the given name to value.
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
 *
 * @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.
 * @return a pointer to the AVOption corresponding to the field set or
 * NULL if no matching AVOption exists, or if the value \p val is not
 * valid
126 127 128 129 130 131
 * @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
 */
const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc);

132 133 134 135 136 137 138 139
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);
M
Michael Niedermayer 已提交
140
int av_opt_show(void *obj, void *av_log_obj);
141
void av_opt_set_defaults(void *s);
142
void av_opt_set_defaults2(void *s, int mask, int flags);
143

144
#endif /* FFMPEG_OPT_H */