mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
59eb12faff
* qatar/master: (30 commits) AVOptions: make default_val a union, as proposed in AVOption2. arm/h264pred: add missing argument type. h264dsp_mmx: place bracket outside #if/#endif block. lavf/utils: fix ff_interleave_compare_dts corner case. fate: add 10-bit H264 tests. h264: do not print "too many references" warning for intra-only. Enable decoding of high bit depth h264. Adds 8-, 9- and 10-bit versions of some of the functions used by the h264 decoder. Add support for higher QP values in h264. Add the notion of pixel size in h264 related functions. Make the h264 loop filter bit depth aware. Template dsputil_template.c with respect to pixel size, etc. Template h264idct_template.c with respect to pixel size, etc. Preparatory patch for high bit depth h264 decoding support. Move some functions in dsputil.c into a new file dsputil_template.c. Move the functions in h264idct into a new file h264idct_template.c. Move the functions in h264pred.c into a new file h264pred_template.c. Preparatory patch for high bit depth h264 decoding support. Add pixel formats for 9- and 10-bit yuv420p. Choose h264 chroma dc dequant function dynamically. ... Conflicts: doc/APIchanges ffmpeg.c ffplay.c libavcodec/alpha/dsputil_alpha.c libavcodec/arm/dsputil_init_arm.c libavcodec/arm/dsputil_init_armv6.c libavcodec/arm/dsputil_init_neon.c libavcodec/arm/dsputil_iwmmxt.c libavcodec/arm/h264pred_init_arm.c libavcodec/bfin/dsputil_bfin.c libavcodec/dsputil.c libavcodec/h264.c libavcodec/h264.h libavcodec/h264_cabac.c libavcodec/h264_cavlc.c libavcodec/h264_loopfilter.c libavcodec/h264_ps.c libavcodec/h264_refs.c libavcodec/h264dsp.c libavcodec/h264idct.c libavcodec/h264pred.c libavcodec/mlib/dsputil_mlib.c libavcodec/options.c libavcodec/ppc/dsputil_altivec.c libavcodec/ppc/dsputil_ppc.c libavcodec/ppc/h264_altivec.c libavcodec/ps2/dsputil_mmi.c libavcodec/sh4/dsputil_align.c libavcodec/sh4/dsputil_sh4.c libavcodec/sparc/dsputil_vis.c libavcodec/utils.c libavcodec/version.h libavcodec/x86/dsputil_mmx.c libavformat/options.c libavformat/utils.c libavutil/pixfmt.h libswscale/swscale.c libswscale/swscale_internal.h libswscale/swscale_template.c tests/ref/seek/lavf_avi Merged-by: Michael Niedermayer <michaelni@gmx.at>
180 lines
6.5 KiB
C
180 lines
6.5 KiB
C
/*
|
|
* AVOptions
|
|
* copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>
|
|
*
|
|
* This file is part of FFmpeg.
|
|
*
|
|
* FFmpeg 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.
|
|
*
|
|
* FFmpeg 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 FFmpeg; 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"
|
|
|
|
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;
|
|
|
|
/**
|
|
* 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
|
|
*/
|
|
const AVOption *av_find_opt(void *obj, const char *name, const char *unit, int mask, int flags);
|
|
|
|
/**
|
|
* 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(ENOENT) 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);
|
|
|
|
void av_opt_set_defaults(void *s);
|
|
void av_opt_set_defaults2(void *s, int mask, int flags);
|
|
|
|
/**
|
|
* 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);
|
|
|
|
#endif /* AVUTIL_OPT_H */
|