update
This commit is contained in:
Binary file not shown.
13
Podfile.lock
13
Podfile.lock
@@ -22,8 +22,7 @@ PODS:
|
|||||||
- BRPickerView/Base
|
- BRPickerView/Base
|
||||||
- BRPickerView/StringPickerView (2.8.1):
|
- BRPickerView/StringPickerView (2.8.1):
|
||||||
- BRPickerView/Base
|
- BRPickerView/Base
|
||||||
- DDAudioPlayerKit_Private (0.1.4):
|
- DDAudioPlayerKit_Private (0.1.5)
|
||||||
- DDFFmpegKit_Private
|
|
||||||
- DDAutoUIKit_Private (0.1.3)
|
- DDAutoUIKit_Private (0.1.3)
|
||||||
- DDBasicControlsKit_Private/DDBaseAnimation/DDTransitionAnimation (0.3.2)
|
- DDBasicControlsKit_Private/DDBaseAnimation/DDTransitionAnimation (0.3.2)
|
||||||
- DDBasicControlsKit_Private/DDBaseAttributedString (0.3.2):
|
- DDBasicControlsKit_Private/DDBaseAttributedString (0.3.2):
|
||||||
@@ -179,12 +178,6 @@ PODS:
|
|||||||
- DDBasicControlsKit_Private/DDBaseView
|
- DDBasicControlsKit_Private/DDBaseView
|
||||||
- DDControlsKit_Private/DDViewController (0.1.2):
|
- DDControlsKit_Private/DDViewController (0.1.2):
|
||||||
- DDBasicControlsKit_Private/DDBaseViewController
|
- DDBasicControlsKit_Private/DDBaseViewController
|
||||||
- DDFFmpegKit_Private (0.2.0):
|
|
||||||
- DDFFmpegKit_Private/DDFFmpegBase (= 0.2.0)
|
|
||||||
- DDFFmpegKit_Private/DDFFmpegManager (= 0.2.0)
|
|
||||||
- DDFFmpegKit_Private/DDFFmpegBase (0.2.0)
|
|
||||||
- DDFFmpegKit_Private/DDFFmpegManager (0.2.0):
|
|
||||||
- DDFFmpegKit_Private/DDFFmpegBase
|
|
||||||
- DDFontKit_Private (0.1.0)
|
- DDFontKit_Private (0.1.0)
|
||||||
- DDLogKit_Private (0.1.4):
|
- DDLogKit_Private (0.1.4):
|
||||||
- DDLogKit_Private/OCLog (= 0.1.4)
|
- DDLogKit_Private/OCLog (= 0.1.4)
|
||||||
@@ -337,7 +330,6 @@ SPEC REPOS:
|
|||||||
- DDCategoryKit_Private
|
- DDCategoryKit_Private
|
||||||
- DDColorKit_Private
|
- DDColorKit_Private
|
||||||
- DDControlsKit_Private
|
- DDControlsKit_Private
|
||||||
- DDFFmpegKit_Private
|
|
||||||
- DDFontKit_Private
|
- DDFontKit_Private
|
||||||
- DDLogKit_Private
|
- DDLogKit_Private
|
||||||
- DDMAMapKit_Private
|
- DDMAMapKit_Private
|
||||||
@@ -378,13 +370,12 @@ SPEC CHECKSUMS:
|
|||||||
AMapSearch-NO-IDFA: 10cbd3ad7d122045a0c1f5760f6d46ff576ca918
|
AMapSearch-NO-IDFA: 10cbd3ad7d122045a0c1f5760f6d46ff576ca918
|
||||||
AMapTrack-NO-IDFA: 7109cf1867f5d6c407c8191492b1f73101e1682e
|
AMapTrack-NO-IDFA: 7109cf1867f5d6c407c8191492b1f73101e1682e
|
||||||
BRPickerView: 2531a2d4d0fea0b57a1c738de215af0f88863a2f
|
BRPickerView: 2531a2d4d0fea0b57a1c738de215af0f88863a2f
|
||||||
DDAudioPlayerKit_Private: 2428aa6a3c21596c378d4f38a5c3b202fb05e677
|
DDAudioPlayerKit_Private: c2bab407c6c6bb92b005315a72c8ee3768ffc6b3
|
||||||
DDAutoUIKit_Private: 188066b4d13c8096676ddd9efa15974238f6dca3
|
DDAutoUIKit_Private: 188066b4d13c8096676ddd9efa15974238f6dca3
|
||||||
DDBasicControlsKit_Private: d3aebc505eaac273a8f6b85238662ad6e64a1a08
|
DDBasicControlsKit_Private: d3aebc505eaac273a8f6b85238662ad6e64a1a08
|
||||||
DDCategoryKit_Private: 19d515c43d5e9c4ee80b8ccf3fb8ab40368b8668
|
DDCategoryKit_Private: 19d515c43d5e9c4ee80b8ccf3fb8ab40368b8668
|
||||||
DDColorKit_Private: 77fddb62410a2d5e6fb003083d233c0d7ea0a08f
|
DDColorKit_Private: 77fddb62410a2d5e6fb003083d233c0d7ea0a08f
|
||||||
DDControlsKit_Private: c3ac79b391cec6ecb26262a0d3b02718f696ab19
|
DDControlsKit_Private: c3ac79b391cec6ecb26262a0d3b02718f696ab19
|
||||||
DDFFmpegKit_Private: 6bf928d9107e1cb976473af0d02ae382b3b97800
|
|
||||||
DDFontKit_Private: 7b8f4ebf0f60622874036202734d8460dc7b3806
|
DDFontKit_Private: 7b8f4ebf0f60622874036202734d8460dc7b3806
|
||||||
DDLogKit_Private: 1ed442cc7be004bd05f27bfda9b525e113df54e0
|
DDLogKit_Private: 1ed442cc7be004bd05f27bfda9b525e113df54e0
|
||||||
DDMAMapKit_Private: fda2942ba7a3b7da4d440e59a89db9fd6708d842
|
DDMAMapKit_Private: fda2942ba7a3b7da4d440e59a89db9fd6708d842
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,648 +0,0 @@
|
|||||||
/*
|
|
||||||
* Various utilities for command line tools
|
|
||||||
* copyright (c) 2003 Fabrice Bellard
|
|
||||||
*
|
|
||||||
* 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 FFTOOLS_CMDUTILS_H
|
|
||||||
#define FFTOOLS_CMDUTILS_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
#include "avcodec.h"
|
|
||||||
#include "avfilter.h"
|
|
||||||
#include "avformat.h"
|
|
||||||
#include "swscale.h"
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
#undef main /* We don't want SDL to override our main() */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* program name, defined by the program for show_version().
|
|
||||||
*/
|
|
||||||
extern const char program_name[];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* program birth year, defined by the program for show_banner()
|
|
||||||
*/
|
|
||||||
extern const int program_birth_year;
|
|
||||||
|
|
||||||
extern AVCodecContext *avcodec_opts[AVMEDIA_TYPE_NB];
|
|
||||||
extern AVFormatContext *avformat_opts;
|
|
||||||
extern AVDictionary *sws_dict;
|
|
||||||
extern AVDictionary *swr_opts;
|
|
||||||
extern AVDictionary *format_opts, *codec_opts, *resample_opts;
|
|
||||||
extern int hide_banner;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register a program-specific cleanup routine.
|
|
||||||
*/
|
|
||||||
void register_exit(void (*cb)(int ret));
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wraps exit with a program-specific cleanup routine.
|
|
||||||
*/
|
|
||||||
void exit_program(int ret) av_noreturn;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize dynamic library loading
|
|
||||||
*/
|
|
||||||
void init_dynload(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize the cmdutils option system, in particular
|
|
||||||
* allocate the *_opts contexts.
|
|
||||||
*/
|
|
||||||
void init_opts(void);
|
|
||||||
/**
|
|
||||||
* Uninitialize the cmdutils option system, in particular
|
|
||||||
* free the *_opts contexts and their contents.
|
|
||||||
*/
|
|
||||||
void uninit_opts(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Trivial log callback.
|
|
||||||
* Only suitable for opt_help and similar since it lacks prefix handling.
|
|
||||||
*/
|
|
||||||
void log_callback_help(void* ptr, int level, const char* fmt, va_list vl);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Override the cpuflags.
|
|
||||||
*/
|
|
||||||
int opt_cpuflags(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fallback for options that are not explicitly handled, these will be
|
|
||||||
* parsed through AVOptions.
|
|
||||||
*/
|
|
||||||
int opt_default(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the libav* libraries log level.
|
|
||||||
*/
|
|
||||||
int opt_loglevel(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
int opt_report(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
int opt_max_alloc(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
int opt_codec_debug(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Limit the execution time.
|
|
||||||
*/
|
|
||||||
int opt_timelimit(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse a string and return its corresponding value as a double.
|
|
||||||
* Exit from the application if the string cannot be correctly
|
|
||||||
* parsed or the corresponding value is invalid.
|
|
||||||
*
|
|
||||||
* @param context the context of the value to be set (e.g. the
|
|
||||||
* corresponding command line option name)
|
|
||||||
* @param numstr the string to be parsed
|
|
||||||
* @param type the type (OPT_INT64 or OPT_FLOAT) as which the
|
|
||||||
* string should be parsed
|
|
||||||
* @param min the minimum valid accepted value
|
|
||||||
* @param max the maximum valid accepted value
|
|
||||||
*/
|
|
||||||
double parse_number_or_die(const char *context, const char *numstr, int type,
|
|
||||||
double min, double max);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse a string specifying a time and return its corresponding
|
|
||||||
* value as a number of microseconds. Exit from the application if
|
|
||||||
* the string cannot be correctly parsed.
|
|
||||||
*
|
|
||||||
* @param context the context of the value to be set (e.g. the
|
|
||||||
* corresponding command line option name)
|
|
||||||
* @param timestr the string to be parsed
|
|
||||||
* @param is_duration a flag which tells how to interpret timestr, if
|
|
||||||
* not zero timestr is interpreted as a duration, otherwise as a
|
|
||||||
* date
|
|
||||||
*
|
|
||||||
* @see av_parse_time()
|
|
||||||
*/
|
|
||||||
int64_t parse_time_or_die(const char *context, const char *timestr,
|
|
||||||
int is_duration);
|
|
||||||
|
|
||||||
typedef struct SpecifierOpt {
|
|
||||||
char *specifier; /**< stream/chapter/program/... specifier */
|
|
||||||
union {
|
|
||||||
uint8_t *str;
|
|
||||||
int i;
|
|
||||||
int64_t i64;
|
|
||||||
uint64_t ui64;
|
|
||||||
float f;
|
|
||||||
double dbl;
|
|
||||||
} u;
|
|
||||||
} SpecifierOpt;
|
|
||||||
|
|
||||||
typedef struct OptionDef {
|
|
||||||
const char *name;
|
|
||||||
int flags;
|
|
||||||
#define HAS_ARG 0x0001
|
|
||||||
#define OPT_BOOL 0x0002
|
|
||||||
#define OPT_EXPERT 0x0004
|
|
||||||
#define OPT_STRING 0x0008
|
|
||||||
#define OPT_VIDEO 0x0010
|
|
||||||
#define OPT_AUDIO 0x0020
|
|
||||||
#define OPT_INT 0x0080
|
|
||||||
#define OPT_FLOAT 0x0100
|
|
||||||
#define OPT_SUBTITLE 0x0200
|
|
||||||
#define OPT_INT64 0x0400
|
|
||||||
#define OPT_EXIT 0x0800
|
|
||||||
#define OPT_DATA 0x1000
|
|
||||||
#define OPT_PERFILE 0x2000 /* the option is per-file (currently ffmpeg-only).
|
|
||||||
implied by OPT_OFFSET or OPT_SPEC */
|
|
||||||
#define OPT_OFFSET 0x4000 /* option is specified as an offset in a passed optctx */
|
|
||||||
#define OPT_SPEC 0x8000 /* option is to be stored in an array of SpecifierOpt.
|
|
||||||
Implies OPT_OFFSET. Next element after the offset is
|
|
||||||
an int containing element count in the array. */
|
|
||||||
#define OPT_TIME 0x10000
|
|
||||||
#define OPT_DOUBLE 0x20000
|
|
||||||
#define OPT_INPUT 0x40000
|
|
||||||
#define OPT_OUTPUT 0x80000
|
|
||||||
union {
|
|
||||||
void *dst_ptr;
|
|
||||||
int (*func_arg)(void *, const char *, const char *);
|
|
||||||
size_t off;
|
|
||||||
} u;
|
|
||||||
const char *help;
|
|
||||||
const char *argname;
|
|
||||||
} OptionDef;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print help for all options matching specified flags.
|
|
||||||
*
|
|
||||||
* @param options a list of options
|
|
||||||
* @param msg title of this group. Only printed if at least one option matches.
|
|
||||||
* @param req_flags print only options which have all those flags set.
|
|
||||||
* @param rej_flags don't print options which have any of those flags set.
|
|
||||||
* @param alt_flags print only options that have at least one of those flags set
|
|
||||||
*/
|
|
||||||
void show_help_options(const OptionDef *options, const char *msg, int req_flags,
|
|
||||||
int rej_flags, int alt_flags);
|
|
||||||
|
|
||||||
#if CONFIG_AVDEVICE
|
|
||||||
#define CMDUTILS_COMMON_OPTIONS_AVDEVICE \
|
|
||||||
{ "sources" , OPT_EXIT | HAS_ARG, { .func_arg = show_sources }, \
|
|
||||||
"list sources of the input device", "device" }, \
|
|
||||||
{ "sinks" , OPT_EXIT | HAS_ARG, { .func_arg = show_sinks }, \
|
|
||||||
"list sinks of the output device", "device" }, \
|
|
||||||
|
|
||||||
#else
|
|
||||||
#define CMDUTILS_COMMON_OPTIONS_AVDEVICE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define CMDUTILS_COMMON_OPTIONS \
|
|
||||||
{ "L", OPT_EXIT, { .func_arg = show_license }, "show license" }, \
|
|
||||||
{ "h", OPT_EXIT, { .func_arg = show_help }, "show help", "topic" }, \
|
|
||||||
{ "?", OPT_EXIT, { .func_arg = show_help }, "show help", "topic" }, \
|
|
||||||
{ "help", OPT_EXIT, { .func_arg = show_help }, "show help", "topic" }, \
|
|
||||||
{ "-help", OPT_EXIT, { .func_arg = show_help }, "show help", "topic" }, \
|
|
||||||
{ "version", OPT_EXIT, { .func_arg = show_version }, "show version" }, \
|
|
||||||
{ "buildconf", OPT_EXIT, { .func_arg = show_buildconf }, "show build configuration" }, \
|
|
||||||
{ "formats", OPT_EXIT, { .func_arg = show_formats }, "show available formats" }, \
|
|
||||||
{ "muxers", OPT_EXIT, { .func_arg = show_muxers }, "show available muxers" }, \
|
|
||||||
{ "demuxers", OPT_EXIT, { .func_arg = show_demuxers }, "show available demuxers" }, \
|
|
||||||
{ "devices", OPT_EXIT, { .func_arg = show_devices }, "show available devices" }, \
|
|
||||||
{ "codecs", OPT_EXIT, { .func_arg = show_codecs }, "show available codecs" }, \
|
|
||||||
{ "decoders", OPT_EXIT, { .func_arg = show_decoders }, "show available decoders" }, \
|
|
||||||
{ "encoders", OPT_EXIT, { .func_arg = show_encoders }, "show available encoders" }, \
|
|
||||||
{ "bsfs", OPT_EXIT, { .func_arg = show_bsfs }, "show available bit stream filters" }, \
|
|
||||||
{ "protocols", OPT_EXIT, { .func_arg = show_protocols }, "show available protocols" }, \
|
|
||||||
{ "filters", OPT_EXIT, { .func_arg = show_filters }, "show available filters" }, \
|
|
||||||
{ "pix_fmts", OPT_EXIT, { .func_arg = show_pix_fmts }, "show available pixel formats" }, \
|
|
||||||
{ "layouts", OPT_EXIT, { .func_arg = show_layouts }, "show standard channel layouts" }, \
|
|
||||||
{ "sample_fmts", OPT_EXIT, { .func_arg = show_sample_fmts }, "show available audio sample formats" }, \
|
|
||||||
{ "colors", OPT_EXIT, { .func_arg = show_colors }, "show available color names" }, \
|
|
||||||
{ "loglevel", HAS_ARG, { .func_arg = opt_loglevel }, "set logging level", "loglevel" }, \
|
|
||||||
{ "v", HAS_ARG, { .func_arg = opt_loglevel }, "set logging level", "loglevel" }, \
|
|
||||||
{ "report", 0, { .func_arg = opt_report }, "generate a report" }, \
|
|
||||||
{ "max_alloc", HAS_ARG, { .func_arg = opt_max_alloc }, "set maximum size of a single allocated block", "bytes" }, \
|
|
||||||
{ "cpuflags", HAS_ARG | OPT_EXPERT, { .func_arg = opt_cpuflags }, "force specific cpu flags", "flags" }, \
|
|
||||||
{ "hide_banner", OPT_BOOL | OPT_EXPERT, {&hide_banner}, "do not show program banner", "hide_banner" }, \
|
|
||||||
CMDUTILS_COMMON_OPTIONS_AVDEVICE \
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show help for all options with given flags in class and all its
|
|
||||||
* children.
|
|
||||||
*/
|
|
||||||
void show_help_children(const AVClass *class, int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Per-fftool specific help handler. Implemented in each
|
|
||||||
* fftool, called by show_help().
|
|
||||||
*/
|
|
||||||
void show_help_default(const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generic -h handler common to all fftools.
|
|
||||||
*/
|
|
||||||
int show_help(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse the command line arguments.
|
|
||||||
*
|
|
||||||
* @param optctx an opaque options context
|
|
||||||
* @param argc number of command line arguments
|
|
||||||
* @param argv values of command line arguments
|
|
||||||
* @param options Array with the definitions required to interpret every
|
|
||||||
* option of the form: -option_name [argument]
|
|
||||||
* @param parse_arg_function Name of the function called to process every
|
|
||||||
* argument without a leading option name flag. NULL if such arguments do
|
|
||||||
* not have to be processed.
|
|
||||||
*/
|
|
||||||
void parse_options(void *optctx, int argc, char **argv, const OptionDef *options,
|
|
||||||
void (* parse_arg_function)(void *optctx, const char*));
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse one given option.
|
|
||||||
*
|
|
||||||
* @return on success 1 if arg was consumed, 0 otherwise; negative number on error
|
|
||||||
*/
|
|
||||||
int parse_option(void *optctx, const char *opt, const char *arg,
|
|
||||||
const OptionDef *options);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An option extracted from the commandline.
|
|
||||||
* Cannot use AVDictionary because of options like -map which can be
|
|
||||||
* used multiple times.
|
|
||||||
*/
|
|
||||||
typedef struct Option {
|
|
||||||
const OptionDef *opt;
|
|
||||||
const char *key;
|
|
||||||
const char *val;
|
|
||||||
} Option;
|
|
||||||
|
|
||||||
typedef struct OptionGroupDef {
|
|
||||||
/**< group name */
|
|
||||||
const char *name;
|
|
||||||
/**
|
|
||||||
* Option to be used as group separator. Can be NULL for groups which
|
|
||||||
* are terminated by a non-option argument (e.g. ffmpeg output files)
|
|
||||||
*/
|
|
||||||
const char *sep;
|
|
||||||
/**
|
|
||||||
* Option flags that must be set on each option that is
|
|
||||||
* applied to this group
|
|
||||||
*/
|
|
||||||
int flags;
|
|
||||||
} OptionGroupDef;
|
|
||||||
|
|
||||||
typedef struct OptionGroup {
|
|
||||||
const OptionGroupDef *group_def;
|
|
||||||
const char *arg;
|
|
||||||
|
|
||||||
Option *opts;
|
|
||||||
int nb_opts;
|
|
||||||
|
|
||||||
AVDictionary *codec_opts;
|
|
||||||
AVDictionary *format_opts;
|
|
||||||
AVDictionary *resample_opts;
|
|
||||||
AVDictionary *sws_dict;
|
|
||||||
AVDictionary *swr_opts;
|
|
||||||
} OptionGroup;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A list of option groups that all have the same group type
|
|
||||||
* (e.g. input files or output files)
|
|
||||||
*/
|
|
||||||
typedef struct OptionGroupList {
|
|
||||||
const OptionGroupDef *group_def;
|
|
||||||
|
|
||||||
OptionGroup *groups;
|
|
||||||
int nb_groups;
|
|
||||||
} OptionGroupList;
|
|
||||||
|
|
||||||
typedef struct OptionParseContext {
|
|
||||||
OptionGroup global_opts;
|
|
||||||
|
|
||||||
OptionGroupList *groups;
|
|
||||||
int nb_groups;
|
|
||||||
|
|
||||||
/* parsing state */
|
|
||||||
OptionGroup cur_group;
|
|
||||||
} OptionParseContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse an options group and write results into optctx.
|
|
||||||
*
|
|
||||||
* @param optctx an app-specific options context. NULL for global options group
|
|
||||||
*/
|
|
||||||
int parse_optgroup(void *optctx, OptionGroup *g);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Split the commandline into an intermediate form convenient for further
|
|
||||||
* processing.
|
|
||||||
*
|
|
||||||
* The commandline is assumed to be composed of options which either belong to a
|
|
||||||
* group (those with OPT_SPEC, OPT_OFFSET or OPT_PERFILE) or are global
|
|
||||||
* (everything else).
|
|
||||||
*
|
|
||||||
* A group (defined by an OptionGroupDef struct) is a sequence of options
|
|
||||||
* terminated by either a group separator option (e.g. -i) or a parameter that
|
|
||||||
* is not an option (doesn't start with -). A group without a separator option
|
|
||||||
* must always be first in the supplied groups list.
|
|
||||||
*
|
|
||||||
* All options within the same group are stored in one OptionGroup struct in an
|
|
||||||
* OptionGroupList, all groups with the same group definition are stored in one
|
|
||||||
* OptionGroupList in OptionParseContext.groups. The order of group lists is the
|
|
||||||
* same as the order of group definitions.
|
|
||||||
*/
|
|
||||||
int split_commandline(OptionParseContext *octx, int argc, char *argv[],
|
|
||||||
const OptionDef *options,
|
|
||||||
const OptionGroupDef *groups, int nb_groups);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free all allocated memory in an OptionParseContext.
|
|
||||||
*/
|
|
||||||
void uninit_parse_context(OptionParseContext *octx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Find the '-loglevel' option in the command line args and apply it.
|
|
||||||
*/
|
|
||||||
void parse_loglevel(int argc, char **argv, const OptionDef *options);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return index of option opt in argv or 0 if not found.
|
|
||||||
*/
|
|
||||||
int locate_option(int argc, char **argv, const OptionDef *options,
|
|
||||||
const char *optname);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if the given stream matches a stream specifier.
|
|
||||||
*
|
|
||||||
* @param s Corresponding format context.
|
|
||||||
* @param st Stream from s to be checked.
|
|
||||||
* @param spec A stream specifier of the [v|a|s|d]:[\<stream index\>] form.
|
|
||||||
*
|
|
||||||
* @return 1 if the stream matches, 0 if it doesn't, <0 on error
|
|
||||||
*/
|
|
||||||
int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filter out options for given codec.
|
|
||||||
*
|
|
||||||
* Create a new options dictionary containing only the options from
|
|
||||||
* opts which apply to the codec with ID codec_id.
|
|
||||||
*
|
|
||||||
* @param opts dictionary to place options in
|
|
||||||
* @param codec_id ID of the codec that should be filtered for
|
|
||||||
* @param s Corresponding format context.
|
|
||||||
* @param st A stream from s for which the options should be filtered.
|
|
||||||
* @param codec The particular codec for which the options should be filtered.
|
|
||||||
* If null, the default one is looked up according to the codec id.
|
|
||||||
* @return a pointer to the created dictionary
|
|
||||||
*/
|
|
||||||
AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id,
|
|
||||||
AVFormatContext *s, AVStream *st, AVCodec *codec);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setup AVCodecContext options for avformat_find_stream_info().
|
|
||||||
*
|
|
||||||
* Create an array of dictionaries, one dictionary for each stream
|
|
||||||
* contained in s.
|
|
||||||
* Each dictionary will contain the options from codec_opts which can
|
|
||||||
* be applied to the corresponding stream codec context.
|
|
||||||
*
|
|
||||||
* @return pointer to the created array of dictionaries, NULL if it
|
|
||||||
* cannot be created
|
|
||||||
*/
|
|
||||||
AVDictionary **setup_find_stream_info_opts(AVFormatContext *s,
|
|
||||||
AVDictionary *codec_opts);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print an error message to stderr, indicating filename and a human
|
|
||||||
* readable description of the error code err.
|
|
||||||
*
|
|
||||||
* If strerror_r() is not available the use of this function in a
|
|
||||||
* multithreaded application may be unsafe.
|
|
||||||
*
|
|
||||||
* @see av_strerror()
|
|
||||||
*/
|
|
||||||
void print_error(const char *filename, int err);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print the program banner to stderr. The banner contents depend on the
|
|
||||||
* current version of the repository and of the libav* libraries used by
|
|
||||||
* the program.
|
|
||||||
*/
|
|
||||||
void show_banner(int argc, char **argv, const OptionDef *options);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print the version of the program to stdout. The version message
|
|
||||||
* depends on the current versions of the repository and of the libav*
|
|
||||||
* libraries.
|
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
|
||||||
int show_version(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print the build configuration of the program to stdout. The contents
|
|
||||||
* depend on the definition of FFMPEG_CONFIGURATION.
|
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
|
||||||
int show_buildconf(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print the license of the program to stdout. The license depends on
|
|
||||||
* the license of the libraries compiled into the program.
|
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
|
||||||
int show_license(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a listing containing all the formats supported by the
|
|
||||||
* program (including devices).
|
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
|
||||||
int show_formats(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a listing containing all the muxers supported by the
|
|
||||||
* program (including devices).
|
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
|
||||||
int show_muxers(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a listing containing all the demuxer supported by the
|
|
||||||
* program (including devices).
|
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
|
||||||
int show_demuxers(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a listing containing all the devices supported by the
|
|
||||||
* program.
|
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
|
||||||
int show_devices(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
#if CONFIG_AVDEVICE
|
|
||||||
/**
|
|
||||||
* Print a listing containing autodetected sinks of the output device.
|
|
||||||
* Device name with options may be passed as an argument to limit results.
|
|
||||||
*/
|
|
||||||
int show_sinks(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a listing containing autodetected sources of the input device.
|
|
||||||
* Device name with options may be passed as an argument to limit results.
|
|
||||||
*/
|
|
||||||
int show_sources(void *optctx, const char *opt, const char *arg);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a listing containing all the codecs supported by the
|
|
||||||
* program.
|
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
|
||||||
int show_codecs(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a listing containing all the decoders supported by the
|
|
||||||
* program.
|
|
||||||
*/
|
|
||||||
int show_decoders(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a listing containing all the encoders supported by the
|
|
||||||
* program.
|
|
||||||
*/
|
|
||||||
int show_encoders(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a listing containing all the filters supported by the
|
|
||||||
* program.
|
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
|
||||||
int show_filters(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a listing containing all the bit stream filters supported by the
|
|
||||||
* program.
|
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
|
||||||
int show_bsfs(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a listing containing all the protocols supported by the
|
|
||||||
* program.
|
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
|
||||||
int show_protocols(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a listing containing all the pixel formats supported by the
|
|
||||||
* program.
|
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
|
||||||
int show_pix_fmts(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a listing containing all the standard channel layouts supported by
|
|
||||||
* the program.
|
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
|
||||||
int show_layouts(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a listing containing all the sample formats supported by the
|
|
||||||
* program.
|
|
||||||
*/
|
|
||||||
int show_sample_fmts(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a listing containing all the color names and values recognized
|
|
||||||
* by the program.
|
|
||||||
*/
|
|
||||||
int show_colors(void *optctx, const char *opt, const char *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return a positive value if a line read from standard input
|
|
||||||
* starts with [yY], otherwise return 0.
|
|
||||||
*/
|
|
||||||
int read_yesno(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a file corresponding to a preset file.
|
|
||||||
*
|
|
||||||
* If is_path is non-zero, look for the file in the path preset_name.
|
|
||||||
* Otherwise search for a file named arg.ffpreset in the directories
|
|
||||||
* $FFMPEG_DATADIR (if set), $HOME/.ffmpeg, and in the datadir defined
|
|
||||||
* at configuration time or in a "ffpresets" folder along the executable
|
|
||||||
* on win32, in that order. If no such file is found and
|
|
||||||
* codec_name is defined, then search for a file named
|
|
||||||
* codec_name-preset_name.avpreset in the above-mentioned directories.
|
|
||||||
*
|
|
||||||
* @param filename buffer where the name of the found filename is written
|
|
||||||
* @param filename_size size in bytes of the filename buffer
|
|
||||||
* @param preset_name name of the preset to search
|
|
||||||
* @param is_path tell if preset_name is a filename path
|
|
||||||
* @param codec_name name of the codec for which to look for the
|
|
||||||
* preset, may be NULL
|
|
||||||
*/
|
|
||||||
FILE *get_preset_file(char *filename, size_t filename_size,
|
|
||||||
const char *preset_name, int is_path, const char *codec_name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Realloc array to hold new_size elements of elem_size.
|
|
||||||
* Calls exit() on failure.
|
|
||||||
*
|
|
||||||
* @param array array to reallocate
|
|
||||||
* @param elem_size size in bytes of each element
|
|
||||||
* @param size new element count will be written here
|
|
||||||
* @param new_size number of elements to place in reallocated array
|
|
||||||
* @return reallocated array
|
|
||||||
*/
|
|
||||||
void *grow_array(void *array, int elem_size, int *size, int new_size);
|
|
||||||
|
|
||||||
#define media_type_string av_get_media_type_string
|
|
||||||
|
|
||||||
#define GROW_ARRAY(array, nb_elems)\
|
|
||||||
array = grow_array(array, sizeof(*array), &nb_elems, nb_elems + 1)
|
|
||||||
|
|
||||||
#define GET_PIX_FMT_NAME(pix_fmt)\
|
|
||||||
const char *name = av_get_pix_fmt_name(pix_fmt);
|
|
||||||
|
|
||||||
#define GET_CODEC_NAME(id)\
|
|
||||||
const char *name = avcodec_descriptor_get(id)->name;
|
|
||||||
|
|
||||||
#define GET_SAMPLE_FMT_NAME(sample_fmt)\
|
|
||||||
const char *name = av_get_sample_fmt_name(sample_fmt)
|
|
||||||
|
|
||||||
#define GET_SAMPLE_RATE_NAME(rate)\
|
|
||||||
char name[16];\
|
|
||||||
snprintf(name, sizeof(name), "%d", rate);
|
|
||||||
|
|
||||||
#define GET_CH_LAYOUT_NAME(ch_layout)\
|
|
||||||
char name[16];\
|
|
||||||
snprintf(name, sizeof(name), "0x%"PRIx64, ch_layout);
|
|
||||||
|
|
||||||
#define GET_CH_LAYOUT_DESC(ch_layout)\
|
|
||||||
char name[128];\
|
|
||||||
av_get_channel_layout_string(name, sizeof(name), 0, ch_layout);
|
|
||||||
|
|
||||||
double get_rotation(AVStream *st);
|
|
||||||
|
|
||||||
#endif /* FFTOOLS_CMDUTILS_H */
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,668 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 FFTOOLS_FFMPEG_H
|
|
||||||
#define FFTOOLS_FFMPEG_H
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <signal.h>
|
|
||||||
|
|
||||||
#include "cmdutils.h"
|
|
||||||
|
|
||||||
#include "avformat.h"
|
|
||||||
#include "avio.h"
|
|
||||||
|
|
||||||
#include "avcodec.h"
|
|
||||||
|
|
||||||
#include "avfilter.h"
|
|
||||||
|
|
||||||
#include "avutil.h"
|
|
||||||
#include "dict.h"
|
|
||||||
#include "eval.h"
|
|
||||||
#include "fifo.h"
|
|
||||||
#include "hwcontext.h"
|
|
||||||
#include "pixfmt.h"
|
|
||||||
#include "rational.h"
|
|
||||||
#include "thread.h"
|
|
||||||
#include "threadmessage.h"
|
|
||||||
|
|
||||||
#include "swresample.h"
|
|
||||||
|
|
||||||
#define VSYNC_AUTO -1
|
|
||||||
#define VSYNC_PASSTHROUGH 0
|
|
||||||
#define VSYNC_CFR 1
|
|
||||||
#define VSYNC_VFR 2
|
|
||||||
#define VSYNC_VSCFR 0xfe
|
|
||||||
#define VSYNC_DROP 0xff
|
|
||||||
|
|
||||||
#define MAX_STREAMS 1024 /* arbitrary sanity check value */
|
|
||||||
|
|
||||||
enum HWAccelID {
|
|
||||||
HWACCEL_NONE = 0,
|
|
||||||
HWACCEL_AUTO,
|
|
||||||
HWACCEL_GENERIC,
|
|
||||||
HWACCEL_VIDEOTOOLBOX,
|
|
||||||
HWACCEL_QSV,
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct HWAccel {
|
|
||||||
const char *name;
|
|
||||||
int (*init)(AVCodecContext *s);
|
|
||||||
enum HWAccelID id;
|
|
||||||
enum AVPixelFormat pix_fmt;
|
|
||||||
} HWAccel;
|
|
||||||
|
|
||||||
typedef struct HWDevice {
|
|
||||||
const char *name;
|
|
||||||
enum AVHWDeviceType type;
|
|
||||||
AVBufferRef *device_ref;
|
|
||||||
} HWDevice;
|
|
||||||
|
|
||||||
/* select an input stream for an output stream */
|
|
||||||
typedef struct StreamMap {
|
|
||||||
int disabled; /* 1 is this mapping is disabled by a negative map */
|
|
||||||
int file_index;
|
|
||||||
int stream_index;
|
|
||||||
int sync_file_index;
|
|
||||||
int sync_stream_index;
|
|
||||||
char *linklabel; /* name of an output link, for mapping lavfi outputs */
|
|
||||||
} StreamMap;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int file_idx, stream_idx, channel_idx; // input
|
|
||||||
int ofile_idx, ostream_idx; // output
|
|
||||||
} AudioChannelMap;
|
|
||||||
|
|
||||||
typedef struct OptionsContext {
|
|
||||||
OptionGroup *g;
|
|
||||||
|
|
||||||
/* input/output options */
|
|
||||||
int64_t start_time;
|
|
||||||
int64_t start_time_eof;
|
|
||||||
int seek_timestamp;
|
|
||||||
const char *format;
|
|
||||||
|
|
||||||
SpecifierOpt *codec_names;
|
|
||||||
int nb_codec_names;
|
|
||||||
SpecifierOpt *audio_channels;
|
|
||||||
int nb_audio_channels;
|
|
||||||
SpecifierOpt *audio_sample_rate;
|
|
||||||
int nb_audio_sample_rate;
|
|
||||||
SpecifierOpt *frame_rates;
|
|
||||||
int nb_frame_rates;
|
|
||||||
SpecifierOpt *frame_sizes;
|
|
||||||
int nb_frame_sizes;
|
|
||||||
SpecifierOpt *frame_pix_fmts;
|
|
||||||
int nb_frame_pix_fmts;
|
|
||||||
|
|
||||||
/* input options */
|
|
||||||
int64_t input_ts_offset;
|
|
||||||
int loop;
|
|
||||||
int rate_emu;
|
|
||||||
int accurate_seek;
|
|
||||||
int thread_queue_size;
|
|
||||||
|
|
||||||
SpecifierOpt *ts_scale;
|
|
||||||
int nb_ts_scale;
|
|
||||||
SpecifierOpt *dump_attachment;
|
|
||||||
int nb_dump_attachment;
|
|
||||||
SpecifierOpt *hwaccels;
|
|
||||||
int nb_hwaccels;
|
|
||||||
SpecifierOpt *hwaccel_devices;
|
|
||||||
int nb_hwaccel_devices;
|
|
||||||
SpecifierOpt *hwaccel_output_formats;
|
|
||||||
int nb_hwaccel_output_formats;
|
|
||||||
SpecifierOpt *autorotate;
|
|
||||||
int nb_autorotate;
|
|
||||||
|
|
||||||
/* output options */
|
|
||||||
StreamMap *stream_maps;
|
|
||||||
int nb_stream_maps;
|
|
||||||
AudioChannelMap *audio_channel_maps; /* one info entry per -map_channel */
|
|
||||||
int nb_audio_channel_maps; /* number of (valid) -map_channel settings */
|
|
||||||
int metadata_global_manual;
|
|
||||||
int metadata_streams_manual;
|
|
||||||
int metadata_chapters_manual;
|
|
||||||
const char **attachments;
|
|
||||||
int nb_attachments;
|
|
||||||
|
|
||||||
int chapters_input_file;
|
|
||||||
|
|
||||||
int64_t recording_time;
|
|
||||||
int64_t stop_time;
|
|
||||||
uint64_t limit_filesize;
|
|
||||||
float mux_preload;
|
|
||||||
float mux_max_delay;
|
|
||||||
int shortest;
|
|
||||||
int bitexact;
|
|
||||||
|
|
||||||
int video_disable;
|
|
||||||
int audio_disable;
|
|
||||||
int subtitle_disable;
|
|
||||||
int data_disable;
|
|
||||||
|
|
||||||
/* indexed by output file stream index */
|
|
||||||
int *streamid_map;
|
|
||||||
int nb_streamid_map;
|
|
||||||
|
|
||||||
SpecifierOpt *metadata;
|
|
||||||
int nb_metadata;
|
|
||||||
SpecifierOpt *max_frames;
|
|
||||||
int nb_max_frames;
|
|
||||||
SpecifierOpt *bitstream_filters;
|
|
||||||
int nb_bitstream_filters;
|
|
||||||
SpecifierOpt *codec_tags;
|
|
||||||
int nb_codec_tags;
|
|
||||||
SpecifierOpt *sample_fmts;
|
|
||||||
int nb_sample_fmts;
|
|
||||||
SpecifierOpt *qscale;
|
|
||||||
int nb_qscale;
|
|
||||||
SpecifierOpt *forced_key_frames;
|
|
||||||
int nb_forced_key_frames;
|
|
||||||
SpecifierOpt *force_fps;
|
|
||||||
int nb_force_fps;
|
|
||||||
SpecifierOpt *frame_aspect_ratios;
|
|
||||||
int nb_frame_aspect_ratios;
|
|
||||||
SpecifierOpt *rc_overrides;
|
|
||||||
int nb_rc_overrides;
|
|
||||||
SpecifierOpt *intra_matrices;
|
|
||||||
int nb_intra_matrices;
|
|
||||||
SpecifierOpt *inter_matrices;
|
|
||||||
int nb_inter_matrices;
|
|
||||||
SpecifierOpt *chroma_intra_matrices;
|
|
||||||
int nb_chroma_intra_matrices;
|
|
||||||
SpecifierOpt *top_field_first;
|
|
||||||
int nb_top_field_first;
|
|
||||||
SpecifierOpt *metadata_map;
|
|
||||||
int nb_metadata_map;
|
|
||||||
SpecifierOpt *presets;
|
|
||||||
int nb_presets;
|
|
||||||
SpecifierOpt *copy_initial_nonkeyframes;
|
|
||||||
int nb_copy_initial_nonkeyframes;
|
|
||||||
SpecifierOpt *copy_prior_start;
|
|
||||||
int nb_copy_prior_start;
|
|
||||||
SpecifierOpt *filters;
|
|
||||||
int nb_filters;
|
|
||||||
SpecifierOpt *filter_scripts;
|
|
||||||
int nb_filter_scripts;
|
|
||||||
SpecifierOpt *reinit_filters;
|
|
||||||
int nb_reinit_filters;
|
|
||||||
SpecifierOpt *fix_sub_duration;
|
|
||||||
int nb_fix_sub_duration;
|
|
||||||
SpecifierOpt *canvas_sizes;
|
|
||||||
int nb_canvas_sizes;
|
|
||||||
SpecifierOpt *pass;
|
|
||||||
int nb_pass;
|
|
||||||
SpecifierOpt *passlogfiles;
|
|
||||||
int nb_passlogfiles;
|
|
||||||
SpecifierOpt *max_muxing_queue_size;
|
|
||||||
int nb_max_muxing_queue_size;
|
|
||||||
SpecifierOpt *guess_layout_max;
|
|
||||||
int nb_guess_layout_max;
|
|
||||||
SpecifierOpt *apad;
|
|
||||||
int nb_apad;
|
|
||||||
SpecifierOpt *discard;
|
|
||||||
int nb_discard;
|
|
||||||
SpecifierOpt *disposition;
|
|
||||||
int nb_disposition;
|
|
||||||
SpecifierOpt *program;
|
|
||||||
int nb_program;
|
|
||||||
SpecifierOpt *time_bases;
|
|
||||||
int nb_time_bases;
|
|
||||||
SpecifierOpt *enc_time_bases;
|
|
||||||
int nb_enc_time_bases;
|
|
||||||
} OptionsContext;
|
|
||||||
|
|
||||||
typedef struct InputFilter {
|
|
||||||
AVFilterContext *filter;
|
|
||||||
struct InputStream *ist;
|
|
||||||
struct FilterGraph *graph;
|
|
||||||
uint8_t *name;
|
|
||||||
enum AVMediaType type; // AVMEDIA_TYPE_SUBTITLE for sub2video
|
|
||||||
|
|
||||||
AVFifoBuffer *frame_queue;
|
|
||||||
|
|
||||||
// parameters configured for this input
|
|
||||||
int format;
|
|
||||||
|
|
||||||
int width, height;
|
|
||||||
AVRational sample_aspect_ratio;
|
|
||||||
|
|
||||||
int sample_rate;
|
|
||||||
int channels;
|
|
||||||
uint64_t channel_layout;
|
|
||||||
|
|
||||||
AVBufferRef *hw_frames_ctx;
|
|
||||||
|
|
||||||
int eof;
|
|
||||||
} InputFilter;
|
|
||||||
|
|
||||||
typedef struct OutputFilter {
|
|
||||||
AVFilterContext *filter;
|
|
||||||
struct OutputStream *ost;
|
|
||||||
struct FilterGraph *graph;
|
|
||||||
uint8_t *name;
|
|
||||||
|
|
||||||
/* temporary storage until stream maps are processed */
|
|
||||||
AVFilterInOut *out_tmp;
|
|
||||||
enum AVMediaType type;
|
|
||||||
|
|
||||||
/* desired output stream properties */
|
|
||||||
int width, height;
|
|
||||||
AVRational frame_rate;
|
|
||||||
int format;
|
|
||||||
int sample_rate;
|
|
||||||
uint64_t channel_layout;
|
|
||||||
|
|
||||||
// those are only set if no format is specified and the encoder gives us multiple options
|
|
||||||
int *formats;
|
|
||||||
uint64_t *channel_layouts;
|
|
||||||
int *sample_rates;
|
|
||||||
} OutputFilter;
|
|
||||||
|
|
||||||
typedef struct FilterGraph {
|
|
||||||
int index;
|
|
||||||
const char *graph_desc;
|
|
||||||
|
|
||||||
AVFilterGraph *graph;
|
|
||||||
int reconfiguration;
|
|
||||||
|
|
||||||
InputFilter **inputs;
|
|
||||||
int nb_inputs;
|
|
||||||
OutputFilter **outputs;
|
|
||||||
int nb_outputs;
|
|
||||||
} FilterGraph;
|
|
||||||
|
|
||||||
typedef struct InputStream {
|
|
||||||
int file_index;
|
|
||||||
AVStream *st;
|
|
||||||
int discard; /* true if stream data should be discarded */
|
|
||||||
int user_set_discard;
|
|
||||||
int decoding_needed; /* non zero if the packets must be decoded in 'raw_fifo', see DECODING_FOR_* */
|
|
||||||
#define DECODING_FOR_OST 1
|
|
||||||
#define DECODING_FOR_FILTER 2
|
|
||||||
|
|
||||||
AVCodecContext *dec_ctx;
|
|
||||||
AVCodec *dec;
|
|
||||||
AVFrame *decoded_frame;
|
|
||||||
AVFrame *filter_frame; /* a ref of decoded_frame, to be sent to filters */
|
|
||||||
|
|
||||||
int64_t start; /* time when read started */
|
|
||||||
/* predicted dts of the next packet read for this stream or (when there are
|
|
||||||
* several frames in a packet) of the next frame in current packet (in AV_TIME_BASE units) */
|
|
||||||
int64_t next_dts;
|
|
||||||
int64_t dts; ///< dts of the last packet read for this stream (in AV_TIME_BASE units)
|
|
||||||
|
|
||||||
int64_t next_pts; ///< synthetic pts for the next decode frame (in AV_TIME_BASE units)
|
|
||||||
int64_t pts; ///< current pts of the decoded frame (in AV_TIME_BASE units)
|
|
||||||
int wrap_correction_done;
|
|
||||||
|
|
||||||
int64_t filter_in_rescale_delta_last;
|
|
||||||
|
|
||||||
int64_t min_pts; /* pts with the smallest value in a current stream */
|
|
||||||
int64_t max_pts; /* pts with the higher value in a current stream */
|
|
||||||
|
|
||||||
// when forcing constant input framerate through -r,
|
|
||||||
// this contains the pts that will be given to the next decoded frame
|
|
||||||
int64_t cfr_next_pts;
|
|
||||||
|
|
||||||
int64_t nb_samples; /* number of samples in the last decoded audio frame before looping */
|
|
||||||
|
|
||||||
double ts_scale;
|
|
||||||
int saw_first_ts;
|
|
||||||
AVDictionary *decoder_opts;
|
|
||||||
AVRational framerate; /* framerate forced with -r */
|
|
||||||
int top_field_first;
|
|
||||||
int guess_layout_max;
|
|
||||||
|
|
||||||
int autorotate;
|
|
||||||
|
|
||||||
int fix_sub_duration;
|
|
||||||
struct { /* previous decoded subtitle and related variables */
|
|
||||||
int got_output;
|
|
||||||
int ret;
|
|
||||||
AVSubtitle subtitle;
|
|
||||||
} prev_sub;
|
|
||||||
|
|
||||||
struct sub2video {
|
|
||||||
int64_t last_pts;
|
|
||||||
int64_t end_pts;
|
|
||||||
AVFifoBuffer *sub_queue; ///< queue of AVSubtitle* before filter init
|
|
||||||
AVFrame *frame;
|
|
||||||
int w, h;
|
|
||||||
unsigned int initialize; ///< marks if sub2video_update should force an initialization
|
|
||||||
} sub2video;
|
|
||||||
|
|
||||||
int dr1;
|
|
||||||
|
|
||||||
/* decoded data from this stream goes into all those filters
|
|
||||||
* currently video and audio only */
|
|
||||||
InputFilter **filters;
|
|
||||||
int nb_filters;
|
|
||||||
|
|
||||||
int reinit_filters;
|
|
||||||
|
|
||||||
/* hwaccel options */
|
|
||||||
enum HWAccelID hwaccel_id;
|
|
||||||
enum AVHWDeviceType hwaccel_device_type;
|
|
||||||
char *hwaccel_device;
|
|
||||||
enum AVPixelFormat hwaccel_output_format;
|
|
||||||
|
|
||||||
/* hwaccel context */
|
|
||||||
void *hwaccel_ctx;
|
|
||||||
void (*hwaccel_uninit)(AVCodecContext *s);
|
|
||||||
int (*hwaccel_get_buffer)(AVCodecContext *s, AVFrame *frame, int flags);
|
|
||||||
int (*hwaccel_retrieve_data)(AVCodecContext *s, AVFrame *frame);
|
|
||||||
enum AVPixelFormat hwaccel_pix_fmt;
|
|
||||||
enum AVPixelFormat hwaccel_retrieved_pix_fmt;
|
|
||||||
AVBufferRef *hw_frames_ctx;
|
|
||||||
|
|
||||||
/* stats */
|
|
||||||
// combined size of all the packets read
|
|
||||||
uint64_t data_size;
|
|
||||||
/* number of packets successfully read for this stream */
|
|
||||||
uint64_t nb_packets;
|
|
||||||
// number of frames/samples retrieved from the decoder
|
|
||||||
uint64_t frames_decoded;
|
|
||||||
uint64_t samples_decoded;
|
|
||||||
|
|
||||||
int64_t *dts_buffer;
|
|
||||||
int nb_dts_buffer;
|
|
||||||
|
|
||||||
int got_output;
|
|
||||||
} InputStream;
|
|
||||||
|
|
||||||
typedef struct InputFile {
|
|
||||||
AVFormatContext *ctx;
|
|
||||||
int eof_reached; /* true if eof reached */
|
|
||||||
int eagain; /* true if last read attempt returned EAGAIN */
|
|
||||||
int ist_index; /* index of first stream in input_streams */
|
|
||||||
int loop; /* set number of times input stream should be looped */
|
|
||||||
int64_t duration; /* actual duration of the longest stream in a file
|
|
||||||
at the moment when looping happens */
|
|
||||||
AVRational time_base; /* time base of the duration */
|
|
||||||
int64_t input_ts_offset;
|
|
||||||
|
|
||||||
int64_t ts_offset;
|
|
||||||
int64_t last_ts;
|
|
||||||
int64_t start_time; /* user-specified start time in AV_TIME_BASE or AV_NOPTS_VALUE */
|
|
||||||
int seek_timestamp;
|
|
||||||
int64_t recording_time;
|
|
||||||
int nb_streams; /* number of stream that ffmpeg is aware of; may be different
|
|
||||||
from ctx.nb_streams if new streams appear during av_read_frame() */
|
|
||||||
int nb_streams_warn; /* number of streams that the user was warned of */
|
|
||||||
int rate_emu;
|
|
||||||
int accurate_seek;
|
|
||||||
|
|
||||||
#if HAVE_THREADS
|
|
||||||
AVThreadMessageQueue *in_thread_queue;
|
|
||||||
pthread_t thread; /* thread reading from this file */
|
|
||||||
int non_blocking; /* reading packets from the thread should not block */
|
|
||||||
int joined; /* the thread has been joined */
|
|
||||||
int thread_queue_size; /* maximum number of queued packets */
|
|
||||||
#endif
|
|
||||||
} InputFile;
|
|
||||||
|
|
||||||
enum forced_keyframes_const {
|
|
||||||
FKF_N,
|
|
||||||
FKF_N_FORCED,
|
|
||||||
FKF_PREV_FORCED_N,
|
|
||||||
FKF_PREV_FORCED_T,
|
|
||||||
FKF_T,
|
|
||||||
FKF_NB
|
|
||||||
};
|
|
||||||
|
|
||||||
#define ABORT_ON_FLAG_EMPTY_OUTPUT (1 << 0)
|
|
||||||
#define ABORT_ON_FLAG_EMPTY_OUTPUT_STREAM (1 << 1)
|
|
||||||
|
|
||||||
extern const char *const forced_keyframes_const_names[];
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
ENCODER_FINISHED = 1,
|
|
||||||
MUXER_FINISHED = 2,
|
|
||||||
} OSTFinished ;
|
|
||||||
|
|
||||||
typedef struct OutputStream {
|
|
||||||
int file_index; /* file index */
|
|
||||||
int index; /* stream index in the output file */
|
|
||||||
int source_index; /* InputStream index */
|
|
||||||
AVStream *st; /* stream in the output file */
|
|
||||||
int encoding_needed; /* true if encoding needed for this stream */
|
|
||||||
int frame_number;
|
|
||||||
/* input pts and corresponding output pts
|
|
||||||
for A/V sync */
|
|
||||||
struct InputStream *sync_ist; /* input stream to sync against */
|
|
||||||
int64_t sync_opts; /* output frame counter, could be changed to some true timestamp */ // FIXME look at frame_number
|
|
||||||
/* pts of the first frame encoded for this stream, used for limiting
|
|
||||||
* recording time */
|
|
||||||
int64_t first_pts;
|
|
||||||
/* dts of the last packet sent to the muxer */
|
|
||||||
int64_t last_mux_dts;
|
|
||||||
// the timebase of the packets sent to the muxer
|
|
||||||
AVRational mux_timebase;
|
|
||||||
AVRational enc_timebase;
|
|
||||||
|
|
||||||
AVBSFContext *bsf_ctx;
|
|
||||||
|
|
||||||
AVCodecContext *enc_ctx;
|
|
||||||
AVCodecParameters *ref_par; /* associated input codec parameters with encoders options applied */
|
|
||||||
AVCodec *enc;
|
|
||||||
int64_t max_frames;
|
|
||||||
AVFrame *filtered_frame;
|
|
||||||
AVFrame *last_frame;
|
|
||||||
int last_dropped;
|
|
||||||
int last_nb0_frames[3];
|
|
||||||
|
|
||||||
void *hwaccel_ctx;
|
|
||||||
|
|
||||||
/* video only */
|
|
||||||
AVRational frame_rate;
|
|
||||||
int is_cfr;
|
|
||||||
int force_fps;
|
|
||||||
int top_field_first;
|
|
||||||
int rotate_overridden;
|
|
||||||
double rotate_override_value;
|
|
||||||
|
|
||||||
AVRational frame_aspect_ratio;
|
|
||||||
|
|
||||||
/* forced key frames */
|
|
||||||
int64_t forced_kf_ref_pts;
|
|
||||||
int64_t *forced_kf_pts;
|
|
||||||
int forced_kf_count;
|
|
||||||
int forced_kf_index;
|
|
||||||
char *forced_keyframes;
|
|
||||||
AVExpr *forced_keyframes_pexpr;
|
|
||||||
double forced_keyframes_expr_const_values[FKF_NB];
|
|
||||||
|
|
||||||
/* audio only */
|
|
||||||
int *audio_channels_map; /* list of the channels id to pick from the source stream */
|
|
||||||
int audio_channels_mapped; /* number of channels in audio_channels_map */
|
|
||||||
|
|
||||||
char *logfile_prefix;
|
|
||||||
FILE *logfile;
|
|
||||||
|
|
||||||
OutputFilter *filter;
|
|
||||||
char *avfilter;
|
|
||||||
char *filters; ///< filtergraph associated to the -filter option
|
|
||||||
char *filters_script; ///< filtergraph script associated to the -filter_script option
|
|
||||||
|
|
||||||
AVDictionary *encoder_opts;
|
|
||||||
AVDictionary *sws_dict;
|
|
||||||
AVDictionary *swr_opts;
|
|
||||||
AVDictionary *resample_opts;
|
|
||||||
char *apad;
|
|
||||||
OSTFinished finished; /* no more packets should be written for this stream */
|
|
||||||
int unavailable; /* true if the steram is unavailable (possibly temporarily) */
|
|
||||||
int stream_copy;
|
|
||||||
|
|
||||||
// init_output_stream() has been called for this stream
|
|
||||||
// The encoder and the bitstream filters have been initialized and the stream
|
|
||||||
// parameters are set in the AVStream.
|
|
||||||
int initialized;
|
|
||||||
|
|
||||||
int inputs_done;
|
|
||||||
|
|
||||||
const char *attachment_filename;
|
|
||||||
int copy_initial_nonkeyframes;
|
|
||||||
int copy_prior_start;
|
|
||||||
char *disposition;
|
|
||||||
|
|
||||||
int keep_pix_fmt;
|
|
||||||
|
|
||||||
/* stats */
|
|
||||||
// combined size of all the packets written
|
|
||||||
uint64_t data_size;
|
|
||||||
// number of packets send to the muxer
|
|
||||||
uint64_t packets_written;
|
|
||||||
// number of frames/samples sent to the encoder
|
|
||||||
uint64_t frames_encoded;
|
|
||||||
uint64_t samples_encoded;
|
|
||||||
|
|
||||||
/* packet quality factor */
|
|
||||||
int quality;
|
|
||||||
|
|
||||||
int max_muxing_queue_size;
|
|
||||||
|
|
||||||
/* the packets are buffered here until the muxer is ready to be initialized */
|
|
||||||
AVFifoBuffer *muxing_queue;
|
|
||||||
|
|
||||||
/* packet picture type */
|
|
||||||
int pict_type;
|
|
||||||
|
|
||||||
/* frame encode sum of squared error values */
|
|
||||||
int64_t error[4];
|
|
||||||
} OutputStream;
|
|
||||||
|
|
||||||
typedef struct OutputFile {
|
|
||||||
AVFormatContext *ctx;
|
|
||||||
AVDictionary *opts;
|
|
||||||
int ost_index; /* index of the first stream in output_streams */
|
|
||||||
int64_t recording_time; ///< desired length of the resulting file in microseconds == AV_TIME_BASE units
|
|
||||||
int64_t start_time; ///< start time in microseconds == AV_TIME_BASE units
|
|
||||||
uint64_t limit_filesize; /* filesize limit expressed in bytes */
|
|
||||||
|
|
||||||
int shortest;
|
|
||||||
|
|
||||||
int header_written;
|
|
||||||
} OutputFile;
|
|
||||||
|
|
||||||
extern InputStream **input_streams;
|
|
||||||
extern int nb_input_streams;
|
|
||||||
extern InputFile **input_files;
|
|
||||||
extern int nb_input_files;
|
|
||||||
|
|
||||||
extern OutputStream **output_streams;
|
|
||||||
extern int nb_output_streams;
|
|
||||||
extern OutputFile **output_files;
|
|
||||||
extern int nb_output_files;
|
|
||||||
|
|
||||||
extern FilterGraph **filtergraphs;
|
|
||||||
extern int nb_filtergraphs;
|
|
||||||
|
|
||||||
extern char *vstats_filename;
|
|
||||||
extern char *sdp_filename;
|
|
||||||
|
|
||||||
extern float audio_drift_threshold;
|
|
||||||
extern float dts_delta_threshold;
|
|
||||||
extern float dts_error_threshold;
|
|
||||||
|
|
||||||
extern int audio_volume;
|
|
||||||
extern int audio_sync_method;
|
|
||||||
extern int video_sync_method;
|
|
||||||
extern float frame_drop_threshold;
|
|
||||||
extern int do_benchmark;
|
|
||||||
extern int do_benchmark_all;
|
|
||||||
extern int do_deinterlace;
|
|
||||||
extern int do_hex_dump;
|
|
||||||
extern int do_pkt_dump;
|
|
||||||
extern int copy_ts;
|
|
||||||
extern int start_at_zero;
|
|
||||||
extern int copy_tb;
|
|
||||||
extern int debug_ts;
|
|
||||||
extern int exit_on_error;
|
|
||||||
extern int abort_on_flags;
|
|
||||||
extern int print_stats;
|
|
||||||
extern int qp_hist;
|
|
||||||
extern int stdin_interaction;
|
|
||||||
extern int frame_bits_per_raw_sample;
|
|
||||||
extern AVIOContext *progress_avio;
|
|
||||||
extern float max_error_rate;
|
|
||||||
extern char *videotoolbox_pixfmt;
|
|
||||||
|
|
||||||
extern int filter_nbthreads;
|
|
||||||
extern int filter_complex_nbthreads;
|
|
||||||
extern int vstats_version;
|
|
||||||
|
|
||||||
extern const AVIOInterruptCB int_cb;
|
|
||||||
|
|
||||||
extern const OptionDef options[];
|
|
||||||
extern const HWAccel hwaccels[];
|
|
||||||
#if CONFIG_QSV
|
|
||||||
extern char *qsv_device;
|
|
||||||
#endif
|
|
||||||
extern HWDevice *filter_hw_device;
|
|
||||||
|
|
||||||
int ffmpeg_main(int argc, char **argv);
|
|
||||||
|
|
||||||
void term_init(void);
|
|
||||||
void term_exit(void);
|
|
||||||
|
|
||||||
void reset_options(OptionsContext *o, int is_input);
|
|
||||||
void show_usage(void);
|
|
||||||
|
|
||||||
void opt_output_file(void *optctx, const char *filename);
|
|
||||||
|
|
||||||
void remove_avoptions(AVDictionary **a, AVDictionary *b);
|
|
||||||
void assert_avoptions(AVDictionary *m);
|
|
||||||
|
|
||||||
int guess_input_channel_layout(InputStream *ist);
|
|
||||||
|
|
||||||
enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *avctx, AVCodec *codec, enum AVPixelFormat target);
|
|
||||||
void choose_sample_fmt(AVStream *st, AVCodec *codec);
|
|
||||||
|
|
||||||
int configure_filtergraph(FilterGraph *fg);
|
|
||||||
int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOut *out);
|
|
||||||
void check_filter_outputs(void);
|
|
||||||
int ist_in_filtergraph(FilterGraph *fg, InputStream *ist);
|
|
||||||
int filtergraph_is_simple(FilterGraph *fg);
|
|
||||||
int init_simple_filtergraph(InputStream *ist, OutputStream *ost);
|
|
||||||
int init_complex_filtergraph(FilterGraph *fg);
|
|
||||||
|
|
||||||
void sub2video_update(InputStream *ist, int64_t heartbeat_pts, AVSubtitle *sub);
|
|
||||||
|
|
||||||
int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *frame);
|
|
||||||
|
|
||||||
int ffmpeg_parse_options(int argc, char **argv);
|
|
||||||
|
|
||||||
int videotoolbox_init(AVCodecContext *s);
|
|
||||||
int qsv_init(AVCodecContext *s);
|
|
||||||
|
|
||||||
HWDevice *hw_device_get_by_name(const char *name);
|
|
||||||
int hw_device_init_from_string(const char *arg, HWDevice **dev);
|
|
||||||
void hw_device_free_all(void);
|
|
||||||
|
|
||||||
int hw_device_setup_for_decode(InputStream *ist);
|
|
||||||
int hw_device_setup_for_encode(OutputStream *ost);
|
|
||||||
int hw_device_setup_for_filter(FilterGraph *fg);
|
|
||||||
|
|
||||||
int hwaccel_decode_init(AVCodecContext *avctx);
|
|
||||||
|
|
||||||
#endif /* FFTOOLS_FFMPEG_H */
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,551 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "avstring.h"
|
|
||||||
#include "pixdesc.h"
|
|
||||||
#include "buffersink.h"
|
|
||||||
|
|
||||||
#include "ffmpeg.h"
|
|
||||||
|
|
||||||
static int nb_hw_devices;
|
|
||||||
static HWDevice **hw_devices;
|
|
||||||
|
|
||||||
static HWDevice *hw_device_get_by_type(enum AVHWDeviceType type)
|
|
||||||
{
|
|
||||||
HWDevice *found = NULL;
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < nb_hw_devices; i++) {
|
|
||||||
if (hw_devices[i]->type == type) {
|
|
||||||
if (found)
|
|
||||||
return NULL;
|
|
||||||
found = hw_devices[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return found;
|
|
||||||
}
|
|
||||||
|
|
||||||
HWDevice *hw_device_get_by_name(const char *name)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < nb_hw_devices; i++) {
|
|
||||||
if (!strcmp(hw_devices[i]->name, name))
|
|
||||||
return hw_devices[i];
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static HWDevice *hw_device_add(void)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
err = av_reallocp_array(&hw_devices, nb_hw_devices + 1,
|
|
||||||
sizeof(*hw_devices));
|
|
||||||
if (err) {
|
|
||||||
nb_hw_devices = 0;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
hw_devices[nb_hw_devices] = av_mallocz(sizeof(HWDevice));
|
|
||||||
if (!hw_devices[nb_hw_devices])
|
|
||||||
return NULL;
|
|
||||||
return hw_devices[nb_hw_devices++];
|
|
||||||
}
|
|
||||||
|
|
||||||
static char *hw_device_default_name(enum AVHWDeviceType type)
|
|
||||||
{
|
|
||||||
// Make an automatic name of the form "type%d". We arbitrarily
|
|
||||||
// limit at 1000 anonymous devices of the same type - there is
|
|
||||||
// probably something else very wrong if you get to this limit.
|
|
||||||
const char *type_name = av_hwdevice_get_type_name(type);
|
|
||||||
char *name;
|
|
||||||
size_t index_pos;
|
|
||||||
int index, index_limit = 1000;
|
|
||||||
index_pos = strlen(type_name);
|
|
||||||
name = av_malloc(index_pos + 4);
|
|
||||||
if (!name)
|
|
||||||
return NULL;
|
|
||||||
for (index = 0; index < index_limit; index++) {
|
|
||||||
snprintf(name, index_pos + 4, "%s%d", type_name, index);
|
|
||||||
if (!hw_device_get_by_name(name))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (index >= index_limit) {
|
|
||||||
av_freep(&name);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
int hw_device_init_from_string(const char *arg, HWDevice **dev_out)
|
|
||||||
{
|
|
||||||
// "type=name:device,key=value,key2=value2"
|
|
||||||
// "type:device,key=value,key2=value2"
|
|
||||||
// -> av_hwdevice_ctx_create()
|
|
||||||
// "type=name@name"
|
|
||||||
// "type@name"
|
|
||||||
// -> av_hwdevice_ctx_create_derived()
|
|
||||||
|
|
||||||
AVDictionary *options = NULL;
|
|
||||||
const char *type_name = NULL, *name = NULL, *device = NULL;
|
|
||||||
enum AVHWDeviceType type;
|
|
||||||
HWDevice *dev, *src;
|
|
||||||
AVBufferRef *device_ref = NULL;
|
|
||||||
int err;
|
|
||||||
const char *errmsg, *p, *q;
|
|
||||||
size_t k;
|
|
||||||
|
|
||||||
k = strcspn(arg, ":=@");
|
|
||||||
p = arg + k;
|
|
||||||
|
|
||||||
type_name = av_strndup(arg, k);
|
|
||||||
if (!type_name) {
|
|
||||||
err = AVERROR(ENOMEM);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
type = av_hwdevice_find_type_by_name(type_name);
|
|
||||||
if (type == AV_HWDEVICE_TYPE_NONE) {
|
|
||||||
errmsg = "unknown device type";
|
|
||||||
goto invalid;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*p == '=') {
|
|
||||||
k = strcspn(p + 1, ":@");
|
|
||||||
|
|
||||||
name = av_strndup(p + 1, k);
|
|
||||||
if (!name) {
|
|
||||||
err = AVERROR(ENOMEM);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
if (hw_device_get_by_name(name)) {
|
|
||||||
errmsg = "named device already exists";
|
|
||||||
goto invalid;
|
|
||||||
}
|
|
||||||
|
|
||||||
p += 1 + k;
|
|
||||||
} else {
|
|
||||||
name = hw_device_default_name(type);
|
|
||||||
if (!name) {
|
|
||||||
err = AVERROR(ENOMEM);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!*p) {
|
|
||||||
// New device with no parameters.
|
|
||||||
err = av_hwdevice_ctx_create(&device_ref, type,
|
|
||||||
NULL, NULL, 0);
|
|
||||||
if (err < 0)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
} else if (*p == ':') {
|
|
||||||
// New device with some parameters.
|
|
||||||
++p;
|
|
||||||
q = strchr(p, ',');
|
|
||||||
if (q) {
|
|
||||||
if (q - p > 0) {
|
|
||||||
device = av_strndup(p, q - p);
|
|
||||||
if (!device) {
|
|
||||||
err = AVERROR(ENOMEM);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
err = av_dict_parse_string(&options, q + 1, "=", ",", 0);
|
|
||||||
if (err < 0) {
|
|
||||||
errmsg = "failed to parse options";
|
|
||||||
goto invalid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
err = av_hwdevice_ctx_create(&device_ref, type,
|
|
||||||
q ? device : p[0] ? p : NULL,
|
|
||||||
options, 0);
|
|
||||||
if (err < 0)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
} else if (*p == '@') {
|
|
||||||
// Derive from existing device.
|
|
||||||
|
|
||||||
src = hw_device_get_by_name(p + 1);
|
|
||||||
if (!src) {
|
|
||||||
errmsg = "invalid source device name";
|
|
||||||
goto invalid;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = av_hwdevice_ctx_create_derived(&device_ref, type,
|
|
||||||
src->device_ref, 0);
|
|
||||||
if (err < 0)
|
|
||||||
goto fail;
|
|
||||||
} else {
|
|
||||||
errmsg = "parse error";
|
|
||||||
goto invalid;
|
|
||||||
}
|
|
||||||
|
|
||||||
dev = hw_device_add();
|
|
||||||
if (!dev) {
|
|
||||||
err = AVERROR(ENOMEM);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
dev->name = name;
|
|
||||||
dev->type = type;
|
|
||||||
dev->device_ref = device_ref;
|
|
||||||
|
|
||||||
if (dev_out)
|
|
||||||
*dev_out = dev;
|
|
||||||
|
|
||||||
name = NULL;
|
|
||||||
err = 0;
|
|
||||||
done:
|
|
||||||
av_freep(&type_name);
|
|
||||||
av_freep(&name);
|
|
||||||
av_freep(&device);
|
|
||||||
av_dict_free(&options);
|
|
||||||
return err;
|
|
||||||
invalid:
|
|
||||||
av_log(NULL, AV_LOG_ERROR,
|
|
||||||
"Invalid device specification \"%s\": %s\n", arg, errmsg);
|
|
||||||
err = AVERROR(EINVAL);
|
|
||||||
goto done;
|
|
||||||
fail:
|
|
||||||
av_log(NULL, AV_LOG_ERROR,
|
|
||||||
"Device creation failed: %d.\n", err);
|
|
||||||
av_buffer_unref(&device_ref);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int hw_device_init_from_type(enum AVHWDeviceType type,
|
|
||||||
const char *device,
|
|
||||||
HWDevice **dev_out)
|
|
||||||
{
|
|
||||||
AVBufferRef *device_ref = NULL;
|
|
||||||
HWDevice *dev;
|
|
||||||
char *name;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
name = hw_device_default_name(type);
|
|
||||||
if (!name) {
|
|
||||||
err = AVERROR(ENOMEM);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = av_hwdevice_ctx_create(&device_ref, type, device, NULL, 0);
|
|
||||||
if (err < 0) {
|
|
||||||
av_log(NULL, AV_LOG_ERROR,
|
|
||||||
"Device creation failed: %d.\n", err);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
dev = hw_device_add();
|
|
||||||
if (!dev) {
|
|
||||||
err = AVERROR(ENOMEM);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
dev->name = name;
|
|
||||||
dev->type = type;
|
|
||||||
dev->device_ref = device_ref;
|
|
||||||
|
|
||||||
if (dev_out)
|
|
||||||
*dev_out = dev;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
fail:
|
|
||||||
av_freep(&name);
|
|
||||||
av_buffer_unref(&device_ref);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
void hw_device_free_all(void)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < nb_hw_devices; i++) {
|
|
||||||
av_freep(&hw_devices[i]->name);
|
|
||||||
av_buffer_unref(&hw_devices[i]->device_ref);
|
|
||||||
av_freep(&hw_devices[i]);
|
|
||||||
}
|
|
||||||
av_freep(&hw_devices);
|
|
||||||
nb_hw_devices = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static HWDevice *hw_device_match_by_codec(const AVCodec *codec)
|
|
||||||
{
|
|
||||||
const AVCodecHWConfig *config;
|
|
||||||
HWDevice *dev;
|
|
||||||
int i;
|
|
||||||
for (i = 0;; i++) {
|
|
||||||
config = avcodec_get_hw_config(codec, i);
|
|
||||||
if (!config)
|
|
||||||
return NULL;
|
|
||||||
if (!(config->methods & AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX))
|
|
||||||
continue;
|
|
||||||
dev = hw_device_get_by_type(config->device_type);
|
|
||||||
if (dev)
|
|
||||||
return dev;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int hw_device_setup_for_decode(InputStream *ist)
|
|
||||||
{
|
|
||||||
const AVCodecHWConfig *config;
|
|
||||||
enum AVHWDeviceType type;
|
|
||||||
HWDevice *dev = NULL;
|
|
||||||
int err, auto_device = 0;
|
|
||||||
|
|
||||||
if (ist->hwaccel_device) {
|
|
||||||
dev = hw_device_get_by_name(ist->hwaccel_device);
|
|
||||||
if (!dev) {
|
|
||||||
if (ist->hwaccel_id == HWACCEL_AUTO) {
|
|
||||||
auto_device = 1;
|
|
||||||
} else if (ist->hwaccel_id == HWACCEL_GENERIC) {
|
|
||||||
type = ist->hwaccel_device_type;
|
|
||||||
err = hw_device_init_from_type(type, ist->hwaccel_device,
|
|
||||||
&dev);
|
|
||||||
} else {
|
|
||||||
// This will be dealt with by API-specific initialisation
|
|
||||||
// (using hwaccel_device), so nothing further needed here.
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (ist->hwaccel_id == HWACCEL_AUTO) {
|
|
||||||
ist->hwaccel_device_type = dev->type;
|
|
||||||
} else if (ist->hwaccel_device_type != dev->type) {
|
|
||||||
av_log(ist->dec_ctx, AV_LOG_ERROR, "Invalid hwaccel device "
|
|
||||||
"specified for decoder: device %s of type %s is not "
|
|
||||||
"usable with hwaccel %s.\n", dev->name,
|
|
||||||
av_hwdevice_get_type_name(dev->type),
|
|
||||||
av_hwdevice_get_type_name(ist->hwaccel_device_type));
|
|
||||||
return AVERROR(EINVAL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (ist->hwaccel_id == HWACCEL_AUTO) {
|
|
||||||
auto_device = 1;
|
|
||||||
} else if (ist->hwaccel_id == HWACCEL_GENERIC) {
|
|
||||||
type = ist->hwaccel_device_type;
|
|
||||||
dev = hw_device_get_by_type(type);
|
|
||||||
if (!dev)
|
|
||||||
err = hw_device_init_from_type(type, NULL, &dev);
|
|
||||||
} else {
|
|
||||||
dev = hw_device_match_by_codec(ist->dec);
|
|
||||||
if (!dev) {
|
|
||||||
// No device for this codec, but not using generic hwaccel
|
|
||||||
// and therefore may well not need one - ignore.
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (auto_device) {
|
|
||||||
int i;
|
|
||||||
if (!avcodec_get_hw_config(ist->dec, 0)) {
|
|
||||||
// Decoder does not support any hardware devices.
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
for (i = 0; !dev; i++) {
|
|
||||||
config = avcodec_get_hw_config(ist->dec, i);
|
|
||||||
if (!config)
|
|
||||||
break;
|
|
||||||
type = config->device_type;
|
|
||||||
dev = hw_device_get_by_type(type);
|
|
||||||
if (dev) {
|
|
||||||
av_log(ist->dec_ctx, AV_LOG_INFO, "Using auto "
|
|
||||||
"hwaccel type %s with existing device %s.\n",
|
|
||||||
av_hwdevice_get_type_name(type), dev->name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (i = 0; !dev; i++) {
|
|
||||||
config = avcodec_get_hw_config(ist->dec, i);
|
|
||||||
if (!config)
|
|
||||||
break;
|
|
||||||
type = config->device_type;
|
|
||||||
// Try to make a new device of this type.
|
|
||||||
err = hw_device_init_from_type(type, ist->hwaccel_device,
|
|
||||||
&dev);
|
|
||||||
if (err < 0) {
|
|
||||||
// Can't make a device of this type.
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (ist->hwaccel_device) {
|
|
||||||
av_log(ist->dec_ctx, AV_LOG_INFO, "Using auto "
|
|
||||||
"hwaccel type %s with new device created "
|
|
||||||
"from %s.\n", av_hwdevice_get_type_name(type),
|
|
||||||
ist->hwaccel_device);
|
|
||||||
} else {
|
|
||||||
av_log(ist->dec_ctx, AV_LOG_INFO, "Using auto "
|
|
||||||
"hwaccel type %s with new default device.\n",
|
|
||||||
av_hwdevice_get_type_name(type));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (dev) {
|
|
||||||
ist->hwaccel_device_type = type;
|
|
||||||
} else {
|
|
||||||
av_log(ist->dec_ctx, AV_LOG_INFO, "Auto hwaccel "
|
|
||||||
"disabled: no device found.\n");
|
|
||||||
ist->hwaccel_id = HWACCEL_NONE;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!dev) {
|
|
||||||
av_log(ist->dec_ctx, AV_LOG_ERROR, "No device available "
|
|
||||||
"for decoder: device type %s needed for codec %s.\n",
|
|
||||||
av_hwdevice_get_type_name(type), ist->dec->name);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
ist->dec_ctx->hw_device_ctx = av_buffer_ref(dev->device_ref);
|
|
||||||
if (!ist->dec_ctx->hw_device_ctx)
|
|
||||||
return AVERROR(ENOMEM);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int hw_device_setup_for_encode(OutputStream *ost)
|
|
||||||
{
|
|
||||||
const AVCodecHWConfig *config;
|
|
||||||
HWDevice *dev = NULL;
|
|
||||||
AVBufferRef *frames_ref = NULL;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (ost->filter) {
|
|
||||||
frames_ref = av_buffersink_get_hw_frames_ctx(ost->filter->filter);
|
|
||||||
if (frames_ref &&
|
|
||||||
((AVHWFramesContext*)frames_ref->data)->format ==
|
|
||||||
ost->enc_ctx->pix_fmt) {
|
|
||||||
// Matching format, will try to use hw_frames_ctx.
|
|
||||||
} else {
|
|
||||||
frames_ref = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0;; i++) {
|
|
||||||
config = avcodec_get_hw_config(ost->enc, i);
|
|
||||||
if (!config)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (frames_ref &&
|
|
||||||
config->methods & AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX &&
|
|
||||||
(config->pix_fmt == AV_PIX_FMT_NONE ||
|
|
||||||
config->pix_fmt == ost->enc_ctx->pix_fmt)) {
|
|
||||||
av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using input "
|
|
||||||
"frames context (format %s) with %s encoder.\n",
|
|
||||||
av_get_pix_fmt_name(ost->enc_ctx->pix_fmt),
|
|
||||||
ost->enc->name);
|
|
||||||
ost->enc_ctx->hw_frames_ctx = av_buffer_ref(frames_ref);
|
|
||||||
if (!ost->enc_ctx->hw_frames_ctx)
|
|
||||||
return AVERROR(ENOMEM);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!dev &&
|
|
||||||
config->methods & AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX)
|
|
||||||
dev = hw_device_get_by_type(config->device_type);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dev) {
|
|
||||||
av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using device %s "
|
|
||||||
"(type %s) with %s encoder.\n", dev->name,
|
|
||||||
av_hwdevice_get_type_name(dev->type), ost->enc->name);
|
|
||||||
ost->enc_ctx->hw_device_ctx = av_buffer_ref(dev->device_ref);
|
|
||||||
if (!ost->enc_ctx->hw_device_ctx)
|
|
||||||
return AVERROR(ENOMEM);
|
|
||||||
} else {
|
|
||||||
// No device required, or no device available.
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int hwaccel_retrieve_data(AVCodecContext *avctx, AVFrame *input)
|
|
||||||
{
|
|
||||||
InputStream *ist = avctx->opaque;
|
|
||||||
AVFrame *output = NULL;
|
|
||||||
enum AVPixelFormat output_format = ist->hwaccel_output_format;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
if (input->format == output_format) {
|
|
||||||
// Nothing to do.
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
output = av_frame_alloc();
|
|
||||||
if (!output)
|
|
||||||
return AVERROR(ENOMEM);
|
|
||||||
|
|
||||||
output->format = output_format;
|
|
||||||
|
|
||||||
err = av_hwframe_transfer_data(output, input, 0);
|
|
||||||
if (err < 0) {
|
|
||||||
av_log(avctx, AV_LOG_ERROR, "Failed to transfer data to "
|
|
||||||
"output frame: %d.\n", err);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = av_frame_copy_props(output, input);
|
|
||||||
if (err < 0) {
|
|
||||||
av_frame_unref(output);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
av_frame_unref(input);
|
|
||||||
av_frame_move_ref(input, output);
|
|
||||||
av_frame_free(&output);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
fail:
|
|
||||||
av_frame_free(&output);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
int hwaccel_decode_init(AVCodecContext *avctx)
|
|
||||||
{
|
|
||||||
InputStream *ist = avctx->opaque;
|
|
||||||
|
|
||||||
ist->hwaccel_retrieve_data = &hwaccel_retrieve_data;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int hw_device_setup_for_filter(FilterGraph *fg)
|
|
||||||
{
|
|
||||||
HWDevice *dev;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
// If the user has supplied exactly one hardware device then just
|
|
||||||
// give it straight to every filter for convenience. If more than
|
|
||||||
// one device is available then the user needs to pick one explcitly
|
|
||||||
// with the filter_hw_device option.
|
|
||||||
if (filter_hw_device)
|
|
||||||
dev = filter_hw_device;
|
|
||||||
else if (nb_hw_devices == 1)
|
|
||||||
dev = hw_devices[0];
|
|
||||||
else
|
|
||||||
dev = NULL;
|
|
||||||
|
|
||||||
if (dev) {
|
|
||||||
for (i = 0; i < fg->graph->nb_filters; i++) {
|
|
||||||
fg->graph->filters[i]->hw_device_ctx =
|
|
||||||
av_buffer_ref(dev->device_ref);
|
|
||||||
if (!fg->graph->filters[i]->hw_device_ctx)
|
|
||||||
return AVERROR(ENOMEM);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,169 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#if HAVE_UTGETOSTYPEFROMSTRING
|
|
||||||
#include <CoreServices/CoreServices.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "avcodec.h"
|
|
||||||
#include "videotoolbox.h"
|
|
||||||
#include "imgutils.h"
|
|
||||||
#include "ffmpeg.h"
|
|
||||||
|
|
||||||
typedef struct VTContext {
|
|
||||||
AVFrame *tmp_frame;
|
|
||||||
} VTContext;
|
|
||||||
|
|
||||||
char *videotoolbox_pixfmt;
|
|
||||||
|
|
||||||
static int videotoolbox_retrieve_data(AVCodecContext *s, AVFrame *frame)
|
|
||||||
{
|
|
||||||
InputStream *ist = s->opaque;
|
|
||||||
VTContext *vt = ist->hwaccel_ctx;
|
|
||||||
CVPixelBufferRef pixbuf = (CVPixelBufferRef)frame->data[3];
|
|
||||||
OSType pixel_format = CVPixelBufferGetPixelFormatType(pixbuf);
|
|
||||||
CVReturn err;
|
|
||||||
uint8_t *data[4] = { 0 };
|
|
||||||
int linesize[4] = { 0 };
|
|
||||||
int planes, ret, i;
|
|
||||||
|
|
||||||
av_frame_unref(vt->tmp_frame);
|
|
||||||
|
|
||||||
switch (pixel_format) {
|
|
||||||
case kCVPixelFormatType_420YpCbCr8Planar: vt->tmp_frame->format = AV_PIX_FMT_YUV420P; break;
|
|
||||||
case kCVPixelFormatType_422YpCbCr8: vt->tmp_frame->format = AV_PIX_FMT_UYVY422; break;
|
|
||||||
case kCVPixelFormatType_32BGRA: vt->tmp_frame->format = AV_PIX_FMT_BGRA; break;
|
|
||||||
#ifdef kCFCoreFoundationVersionNumber10_7
|
|
||||||
case kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange:
|
|
||||||
case kCVPixelFormatType_420YpCbCr8BiPlanarFullRange: vt->tmp_frame->format = AV_PIX_FMT_NV12; break;
|
|
||||||
#endif
|
|
||||||
#if HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE
|
|
||||||
case kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange:
|
|
||||||
case kCVPixelFormatType_420YpCbCr10BiPlanarFullRange: vt->tmp_frame->format = AV_PIX_FMT_P010; break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
av_log(NULL, AV_LOG_ERROR,
|
|
||||||
"%s: Unsupported pixel format: %s\n",
|
|
||||||
av_fourcc2str(s->codec_tag), videotoolbox_pixfmt);
|
|
||||||
return AVERROR(ENOSYS);
|
|
||||||
}
|
|
||||||
|
|
||||||
vt->tmp_frame->width = frame->width;
|
|
||||||
vt->tmp_frame->height = frame->height;
|
|
||||||
ret = av_frame_get_buffer(vt->tmp_frame, 0);
|
|
||||||
if (ret < 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
err = CVPixelBufferLockBaseAddress(pixbuf, kCVPixelBufferLock_ReadOnly);
|
|
||||||
if (err != kCVReturnSuccess) {
|
|
||||||
av_log(NULL, AV_LOG_ERROR, "Error locking the pixel buffer.\n");
|
|
||||||
return AVERROR_UNKNOWN;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CVPixelBufferIsPlanar(pixbuf)) {
|
|
||||||
|
|
||||||
planes = CVPixelBufferGetPlaneCount(pixbuf);
|
|
||||||
for (i = 0; i < planes; i++) {
|
|
||||||
data[i] = CVPixelBufferGetBaseAddressOfPlane(pixbuf, i);
|
|
||||||
linesize[i] = CVPixelBufferGetBytesPerRowOfPlane(pixbuf, i);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
data[0] = CVPixelBufferGetBaseAddress(pixbuf);
|
|
||||||
linesize[0] = CVPixelBufferGetBytesPerRow(pixbuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
av_image_copy(vt->tmp_frame->data, vt->tmp_frame->linesize,
|
|
||||||
(const uint8_t **)data, linesize, vt->tmp_frame->format,
|
|
||||||
frame->width, frame->height);
|
|
||||||
|
|
||||||
ret = av_frame_copy_props(vt->tmp_frame, frame);
|
|
||||||
CVPixelBufferUnlockBaseAddress(pixbuf, kCVPixelBufferLock_ReadOnly);
|
|
||||||
if (ret < 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
av_frame_unref(frame);
|
|
||||||
av_frame_move_ref(frame, vt->tmp_frame);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void videotoolbox_uninit(AVCodecContext *s)
|
|
||||||
{
|
|
||||||
InputStream *ist = s->opaque;
|
|
||||||
VTContext *vt = ist->hwaccel_ctx;
|
|
||||||
|
|
||||||
ist->hwaccel_uninit = NULL;
|
|
||||||
ist->hwaccel_retrieve_data = NULL;
|
|
||||||
|
|
||||||
av_frame_free(&vt->tmp_frame);
|
|
||||||
|
|
||||||
av_videotoolbox_default_free(s);
|
|
||||||
av_freep(&ist->hwaccel_ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
int videotoolbox_init(AVCodecContext *s)
|
|
||||||
{
|
|
||||||
InputStream *ist = s->opaque;
|
|
||||||
int loglevel = (ist->hwaccel_id == HWACCEL_AUTO) ? AV_LOG_VERBOSE : AV_LOG_ERROR;
|
|
||||||
int ret = 0;
|
|
||||||
VTContext *vt;
|
|
||||||
|
|
||||||
vt = av_mallocz(sizeof(*vt));
|
|
||||||
if (!vt)
|
|
||||||
return AVERROR(ENOMEM);
|
|
||||||
|
|
||||||
ist->hwaccel_ctx = vt;
|
|
||||||
ist->hwaccel_uninit = videotoolbox_uninit;
|
|
||||||
ist->hwaccel_retrieve_data = videotoolbox_retrieve_data;
|
|
||||||
|
|
||||||
vt->tmp_frame = av_frame_alloc();
|
|
||||||
if (!vt->tmp_frame) {
|
|
||||||
ret = AVERROR(ENOMEM);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: reindent
|
|
||||||
if (!videotoolbox_pixfmt) {
|
|
||||||
ret = av_videotoolbox_default_init(s);
|
|
||||||
} else {
|
|
||||||
AVVideotoolboxContext *vtctx = av_videotoolbox_alloc_context();
|
|
||||||
CFStringRef pixfmt_str = CFStringCreateWithCString(kCFAllocatorDefault,
|
|
||||||
videotoolbox_pixfmt,
|
|
||||||
kCFStringEncodingUTF8);
|
|
||||||
#if HAVE_UTGETOSTYPEFROMSTRING
|
|
||||||
vtctx->cv_pix_fmt_type = UTGetOSTypeFromString(pixfmt_str);
|
|
||||||
#else
|
|
||||||
av_log(s, loglevel, "UTGetOSTypeFromString() is not available "
|
|
||||||
"on this platform, %s pixel format can not be honored from "
|
|
||||||
"the command line\n", videotoolbox_pixfmt);
|
|
||||||
#endif
|
|
||||||
ret = av_videotoolbox_default_init2(s, vtctx);
|
|
||||||
CFRelease(pixfmt_str);
|
|
||||||
}
|
|
||||||
if (ret < 0) {
|
|
||||||
av_log(NULL, loglevel, "Error creating Videotoolbox decoder.\n");
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
fail:
|
|
||||||
videotoolbox_uninit(s);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
/*
|
|
||||||
* AC-3 parser prototypes
|
|
||||||
* Copyright (c) 2003 Fabrice Bellard
|
|
||||||
* Copyright (c) 2003 Michael Niedermayer
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_AC3_PARSER_H
|
|
||||||
#define AVCODEC_AC3_PARSER_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extract the bitstream ID and the frame size from AC-3 data.
|
|
||||||
*/
|
|
||||||
int av_ac3_parse_header(const uint8_t *buf, size_t size,
|
|
||||||
uint8_t *bitstream_id, uint16_t *frame_size);
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* AVCODEC_AC3_PARSER_H */
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 AVCODEC_ADTS_PARSER_H
|
|
||||||
#define AVCODEC_ADTS_PARSER_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#define AV_AAC_ADTS_HEADER_SIZE 7
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extract the number of samples and frames from AAC data.
|
|
||||||
* @param[in] buf pointer to AAC data buffer
|
|
||||||
* @param[out] samples Pointer to where number of samples is written
|
|
||||||
* @param[out] frames Pointer to where number of frames is written
|
|
||||||
* @return Returns 0 on success, error code on failure.
|
|
||||||
*/
|
|
||||||
int av_adts_header_parse(const uint8_t *buf, uint32_t *samples,
|
|
||||||
uint8_t *frames);
|
|
||||||
|
|
||||||
#endif /* AVCODEC_ADTS_PARSER_H */
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,149 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 AVCODEC_VERSION_H
|
|
||||||
#define AVCODEC_VERSION_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup libavc
|
|
||||||
* Libavcodec version macros.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "avutilVersion.h"
|
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 58
|
|
||||||
#define LIBAVCODEC_VERSION_MINOR 91
|
|
||||||
#define LIBAVCODEC_VERSION_MICRO 100
|
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
|
||||||
LIBAVCODEC_VERSION_MINOR, \
|
|
||||||
LIBAVCODEC_VERSION_MICRO)
|
|
||||||
#define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_MAJOR, \
|
|
||||||
LIBAVCODEC_VERSION_MINOR, \
|
|
||||||
LIBAVCODEC_VERSION_MICRO)
|
|
||||||
#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT
|
|
||||||
|
|
||||||
#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* FF_API_* defines may be placed below to indicate public API that will be
|
|
||||||
* dropped at a future version bump. The defines themselves are not part of
|
|
||||||
* the public API and may change, break or disappear at any time.
|
|
||||||
*
|
|
||||||
* @note, when bumping the major version it is recommended to manually
|
|
||||||
* disable each FF_API_* in its own commit instead of disabling them all
|
|
||||||
* at once through the bump. This improves the git bisect-ability of the change.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef FF_API_LOWRES
|
|
||||||
#define FF_API_LOWRES (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_DEBUG_MV
|
|
||||||
#define FF_API_DEBUG_MV (LIBAVCODEC_VERSION_MAJOR < 58)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_AVCTX_TIMEBASE
|
|
||||||
#define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_CODED_FRAME
|
|
||||||
#define FF_API_CODED_FRAME (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_SIDEDATA_ONLY_PKT
|
|
||||||
#define FF_API_SIDEDATA_ONLY_PKT (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_VDPAU_PROFILE
|
|
||||||
#define FF_API_VDPAU_PROFILE (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_CONVERGENCE_DURATION
|
|
||||||
#define FF_API_CONVERGENCE_DURATION (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_AVPICTURE
|
|
||||||
#define FF_API_AVPICTURE (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_AVPACKET_OLD_API
|
|
||||||
#define FF_API_AVPACKET_OLD_API (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_RTP_CALLBACK
|
|
||||||
#define FF_API_RTP_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_VBV_DELAY
|
|
||||||
#define FF_API_VBV_DELAY (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_CODER_TYPE
|
|
||||||
#define FF_API_CODER_TYPE (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_STAT_BITS
|
|
||||||
#define FF_API_STAT_BITS (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_PRIVATE_OPT
|
|
||||||
#define FF_API_PRIVATE_OPT (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_ASS_TIMING
|
|
||||||
#define FF_API_ASS_TIMING (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_OLD_BSF
|
|
||||||
#define FF_API_OLD_BSF (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_COPY_CONTEXT
|
|
||||||
#define FF_API_COPY_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_GET_CONTEXT_DEFAULTS
|
|
||||||
#define FF_API_GET_CONTEXT_DEFAULTS (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_NVENC_OLD_NAME
|
|
||||||
#define FF_API_NVENC_OLD_NAME (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_STRUCT_VAAPI_CONTEXT
|
|
||||||
#define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_MERGE_SD_API
|
|
||||||
#define FF_API_MERGE_SD_API (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_TAG_STRING
|
|
||||||
#define FF_API_TAG_STRING (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_GETCHROMA
|
|
||||||
#define FF_API_GETCHROMA (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_CODEC_GET_SET
|
|
||||||
#define FF_API_CODEC_GET_SET (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_USER_VISIBLE_AVHWACCEL
|
|
||||||
#define FF_API_USER_VISIBLE_AVHWACCEL (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_LOCKMGR
|
|
||||||
#define FF_API_LOCKMGR (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_NEXT
|
|
||||||
#define FF_API_NEXT (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_UNSANITIZED_BITRATES
|
|
||||||
#define FF_API_UNSANITIZED_BITRATES (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_OPENH264_SLICE_MODE
|
|
||||||
#define FF_API_OPENH264_SLICE_MODE (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_OPENH264_CABAC
|
|
||||||
#define FF_API_OPENH264_CABAC (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_UNUSED_CODEC_CAPS
|
|
||||||
#define FF_API_UNUSED_CODEC_CAPS (LIBAVCODEC_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* AVCODEC_VERSION_H */
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 AVCODEC_AVDCT_H
|
|
||||||
#define AVCODEC_AVDCT_H
|
|
||||||
|
|
||||||
#include "opt.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* AVDCT context.
|
|
||||||
* @note function pointers can be NULL if the specific features have been
|
|
||||||
* disabled at build time.
|
|
||||||
*/
|
|
||||||
typedef struct AVDCT {
|
|
||||||
const AVClass *av_class;
|
|
||||||
|
|
||||||
void (*idct)(int16_t *block /* align 16 */);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IDCT input permutation.
|
|
||||||
* Several optimized IDCTs need a permutated input (relative to the
|
|
||||||
* normal order of the reference IDCT).
|
|
||||||
* This permutation must be performed before the idct_put/add.
|
|
||||||
* Note, normally this can be merged with the zigzag/alternate scan<br>
|
|
||||||
* An example to avoid confusion:
|
|
||||||
* - (->decode coeffs -> zigzag reorder -> dequant -> reference IDCT -> ...)
|
|
||||||
* - (x -> reference DCT -> reference IDCT -> x)
|
|
||||||
* - (x -> reference DCT -> simple_mmx_perm = idct_permutation
|
|
||||||
* -> simple_idct_mmx -> x)
|
|
||||||
* - (-> decode coeffs -> zigzag reorder -> simple_mmx_perm -> dequant
|
|
||||||
* -> simple_idct_mmx -> ...)
|
|
||||||
*/
|
|
||||||
uint8_t idct_permutation[64];
|
|
||||||
|
|
||||||
void (*fdct)(int16_t *block /* align 16 */);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DCT algorithm.
|
|
||||||
* must use AVOptions to set this field.
|
|
||||||
*/
|
|
||||||
int dct_algo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IDCT algorithm.
|
|
||||||
* must use AVOptions to set this field.
|
|
||||||
*/
|
|
||||||
int idct_algo;
|
|
||||||
|
|
||||||
void (*get_pixels)(int16_t *block /* align 16 */,
|
|
||||||
const uint8_t *pixels /* align 8 */,
|
|
||||||
ptrdiff_t line_size);
|
|
||||||
|
|
||||||
int bits_per_sample;
|
|
||||||
|
|
||||||
void (*get_pixels_unaligned)(int16_t *block /* align 16 */,
|
|
||||||
const uint8_t *pixels,
|
|
||||||
ptrdiff_t line_size);
|
|
||||||
} AVDCT;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocates a AVDCT context.
|
|
||||||
* This needs to be initialized with avcodec_dct_init() after optionally
|
|
||||||
* configuring it with AVOptions.
|
|
||||||
*
|
|
||||||
* To free it use av_free()
|
|
||||||
*/
|
|
||||||
AVDCT *avcodec_dct_alloc(void);
|
|
||||||
int avcodec_dct_init(AVDCT *);
|
|
||||||
|
|
||||||
const AVClass *avcodec_dct_get_class(void);
|
|
||||||
|
|
||||||
#endif /* AVCODEC_AVDCT_H */
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 AVCODEC_AVFFT_H
|
|
||||||
#define AVCODEC_AVFFT_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavc_fft
|
|
||||||
* FFT functions
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavc_fft FFT functions
|
|
||||||
* @ingroup lavc_misc
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef float FFTSample;
|
|
||||||
|
|
||||||
typedef struct FFTComplex {
|
|
||||||
FFTSample re, im;
|
|
||||||
} FFTComplex;
|
|
||||||
|
|
||||||
typedef struct FFTContext FFTContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set up a complex FFT.
|
|
||||||
* @param nbits log2 of the length of the input array
|
|
||||||
* @param inverse if 0 perform the forward transform, if 1 perform the inverse
|
|
||||||
*/
|
|
||||||
FFTContext *av_fft_init(int nbits, int inverse);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Do the permutation needed BEFORE calling ff_fft_calc().
|
|
||||||
*/
|
|
||||||
void av_fft_permute(FFTContext *s, FFTComplex *z);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Do a complex FFT with the parameters defined in av_fft_init(). The
|
|
||||||
* input data must be permuted before. No 1.0/sqrt(n) normalization is done.
|
|
||||||
*/
|
|
||||||
void av_fft_calc(FFTContext *s, FFTComplex *z);
|
|
||||||
|
|
||||||
void av_fft_end(FFTContext *s);
|
|
||||||
|
|
||||||
FFTContext *av_mdct_init(int nbits, int inverse, double scale);
|
|
||||||
void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input);
|
|
||||||
void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input);
|
|
||||||
void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input);
|
|
||||||
void av_mdct_end(FFTContext *s);
|
|
||||||
|
|
||||||
/* Real Discrete Fourier Transform */
|
|
||||||
|
|
||||||
enum RDFTransformType {
|
|
||||||
DFT_R2C,
|
|
||||||
IDFT_C2R,
|
|
||||||
IDFT_R2C,
|
|
||||||
DFT_C2R,
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct RDFTContext RDFTContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set up a real FFT.
|
|
||||||
* @param nbits log2 of the length of the input array
|
|
||||||
* @param trans the type of transform
|
|
||||||
*/
|
|
||||||
RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans);
|
|
||||||
void av_rdft_calc(RDFTContext *s, FFTSample *data);
|
|
||||||
void av_rdft_end(RDFTContext *s);
|
|
||||||
|
|
||||||
/* Discrete Cosine Transform */
|
|
||||||
|
|
||||||
typedef struct DCTContext DCTContext;
|
|
||||||
|
|
||||||
enum DCTTransformType {
|
|
||||||
DCT_II = 0,
|
|
||||||
DCT_III,
|
|
||||||
DCT_I,
|
|
||||||
DST_I,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set up DCT.
|
|
||||||
*
|
|
||||||
* @param nbits size of the input array:
|
|
||||||
* (1 << nbits) for DCT-II, DCT-III and DST-I
|
|
||||||
* (1 << nbits) + 1 for DCT-I
|
|
||||||
* @param type the type of transform
|
|
||||||
*
|
|
||||||
* @note the first element of the input of DST-I is ignored
|
|
||||||
*/
|
|
||||||
DCTContext *av_dct_init(int nbits, enum DCTTransformType type);
|
|
||||||
void av_dct_calc(DCTContext *s, FFTSample *data);
|
|
||||||
void av_dct_end (DCTContext *s);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVCODEC_AVFFT_H */
|
|
||||||
@@ -1,325 +0,0 @@
|
|||||||
/*
|
|
||||||
* Bitstream filters public API
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_BSF_H
|
|
||||||
#define AVCODEC_BSF_H
|
|
||||||
|
|
||||||
#include "dict.h"
|
|
||||||
#include "log.h"
|
|
||||||
#include "rational.h"
|
|
||||||
|
|
||||||
#include "codec_id.h"
|
|
||||||
#include "codec_par.h"
|
|
||||||
#include "packet.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavc_core
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct AVBSFInternal AVBSFInternal;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The bitstream filter state.
|
|
||||||
*
|
|
||||||
* This struct must be allocated with av_bsf_alloc() and freed with
|
|
||||||
* av_bsf_free().
|
|
||||||
*
|
|
||||||
* The fields in the struct will only be changed (by the caller or by the
|
|
||||||
* filter) as described in their documentation, and are to be considered
|
|
||||||
* immutable otherwise.
|
|
||||||
*/
|
|
||||||
typedef struct AVBSFContext {
|
|
||||||
/**
|
|
||||||
* A class for logging and AVOptions
|
|
||||||
*/
|
|
||||||
const AVClass *av_class;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The bitstream filter this context is an instance of.
|
|
||||||
*/
|
|
||||||
const struct AVBitStreamFilter *filter;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Opaque libavcodec internal data. Must not be touched by the caller in any
|
|
||||||
* way.
|
|
||||||
*/
|
|
||||||
AVBSFInternal *internal;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Opaque filter-specific private data. If filter->priv_class is non-NULL,
|
|
||||||
* this is an AVOptions-enabled struct.
|
|
||||||
*/
|
|
||||||
void *priv_data;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parameters of the input stream. This field is allocated in
|
|
||||||
* av_bsf_alloc(), it needs to be filled by the caller before
|
|
||||||
* av_bsf_init().
|
|
||||||
*/
|
|
||||||
AVCodecParameters *par_in;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parameters of the output stream. This field is allocated in
|
|
||||||
* av_bsf_alloc(), it is set by the filter in av_bsf_init().
|
|
||||||
*/
|
|
||||||
AVCodecParameters *par_out;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The timebase used for the timestamps of the input packets. Set by the
|
|
||||||
* caller before av_bsf_init().
|
|
||||||
*/
|
|
||||||
AVRational time_base_in;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The timebase used for the timestamps of the output packets. Set by the
|
|
||||||
* filter in av_bsf_init().
|
|
||||||
*/
|
|
||||||
AVRational time_base_out;
|
|
||||||
} AVBSFContext;
|
|
||||||
|
|
||||||
typedef struct AVBitStreamFilter {
|
|
||||||
const char *name;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A list of codec ids supported by the filter, terminated by
|
|
||||||
* AV_CODEC_ID_NONE.
|
|
||||||
* May be NULL, in that case the bitstream filter works with any codec id.
|
|
||||||
*/
|
|
||||||
const enum AVCodecID *codec_ids;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class for the private data, used to declare bitstream filter private
|
|
||||||
* AVOptions. This field is NULL for bitstream filters that do not declare
|
|
||||||
* any options.
|
|
||||||
*
|
|
||||||
* If this field is non-NULL, the first member of the filter private data
|
|
||||||
* must be a pointer to AVClass, which will be set by libavcodec generic
|
|
||||||
* code to this class.
|
|
||||||
*/
|
|
||||||
const AVClass *priv_class;
|
|
||||||
|
|
||||||
/*****************************************************************
|
|
||||||
* No fields below this line are part of the public API. They
|
|
||||||
* may not be used outside of libavcodec and can be changed and
|
|
||||||
* removed at will.
|
|
||||||
* New public fields should be added right above.
|
|
||||||
*****************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
int priv_data_size;
|
|
||||||
int (*init)(AVBSFContext *ctx);
|
|
||||||
int (*filter)(AVBSFContext *ctx, AVPacket *pkt);
|
|
||||||
void (*close)(AVBSFContext *ctx);
|
|
||||||
void (*flush)(AVBSFContext *ctx);
|
|
||||||
} AVBitStreamFilter;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return a bitstream filter with the specified name or NULL if no such
|
|
||||||
* bitstream filter exists.
|
|
||||||
*/
|
|
||||||
const AVBitStreamFilter *av_bsf_get_by_name(const char *name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Iterate over all registered bitstream filters.
|
|
||||||
*
|
|
||||||
* @param opaque a pointer where libavcodec will store the iteration state. Must
|
|
||||||
* point to NULL to start the iteration.
|
|
||||||
*
|
|
||||||
* @return the next registered bitstream filter or NULL when the iteration is
|
|
||||||
* finished
|
|
||||||
*/
|
|
||||||
const AVBitStreamFilter *av_bsf_iterate(void **opaque);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate a context for a given bitstream filter. The caller must fill in the
|
|
||||||
* context parameters as described in the documentation and then call
|
|
||||||
* av_bsf_init() before sending any data to the filter.
|
|
||||||
*
|
|
||||||
* @param filter the filter for which to allocate an instance.
|
|
||||||
* @param ctx a pointer into which the pointer to the newly-allocated context
|
|
||||||
* will be written. It must be freed with av_bsf_free() after the
|
|
||||||
* filtering is done.
|
|
||||||
*
|
|
||||||
* @return 0 on success, a negative AVERROR code on failure
|
|
||||||
*/
|
|
||||||
int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prepare the filter for use, after all the parameters and options have been
|
|
||||||
* set.
|
|
||||||
*/
|
|
||||||
int av_bsf_init(AVBSFContext *ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Submit a packet for filtering.
|
|
||||||
*
|
|
||||||
* After sending each packet, the filter must be completely drained by calling
|
|
||||||
* av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or
|
|
||||||
* AVERROR_EOF.
|
|
||||||
*
|
|
||||||
* @param pkt the packet to filter. The bitstream filter will take ownership of
|
|
||||||
* the packet and reset the contents of pkt. pkt is not touched if an error occurs.
|
|
||||||
* If pkt is empty (i.e. NULL, or pkt->data is NULL and pkt->side_data_elems zero),
|
|
||||||
* it signals the end of the stream (i.e. no more non-empty packets will be sent;
|
|
||||||
* sending more empty packets does nothing) and will cause the filter to output
|
|
||||||
* any packets it may have buffered internally.
|
|
||||||
*
|
|
||||||
* @return 0 on success. AVERROR(EAGAIN) if packets need to be retrieved from the
|
|
||||||
* filter (using av_bsf_receive_packet()) before new input can be consumed. Another
|
|
||||||
* negative AVERROR value if an error occurs.
|
|
||||||
*/
|
|
||||||
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve a filtered packet.
|
|
||||||
*
|
|
||||||
* @param[out] pkt this struct will be filled with the contents of the filtered
|
|
||||||
* packet. It is owned by the caller and must be freed using
|
|
||||||
* av_packet_unref() when it is no longer needed.
|
|
||||||
* This parameter should be "clean" (i.e. freshly allocated
|
|
||||||
* with av_packet_alloc() or unreffed with av_packet_unref())
|
|
||||||
* when this function is called. If this function returns
|
|
||||||
* successfully, the contents of pkt will be completely
|
|
||||||
* overwritten by the returned data. On failure, pkt is not
|
|
||||||
* touched.
|
|
||||||
*
|
|
||||||
* @return 0 on success. AVERROR(EAGAIN) if more packets need to be sent to the
|
|
||||||
* filter (using av_bsf_send_packet()) to get more output. AVERROR_EOF if there
|
|
||||||
* will be no further output from the filter. Another negative AVERROR value if
|
|
||||||
* an error occurs.
|
|
||||||
*
|
|
||||||
* @note one input packet may result in several output packets, so after sending
|
|
||||||
* a packet with av_bsf_send_packet(), this function needs to be called
|
|
||||||
* repeatedly until it stops returning 0. It is also possible for a filter to
|
|
||||||
* output fewer packets than were sent to it, so this function may return
|
|
||||||
* AVERROR(EAGAIN) immediately after a successful av_bsf_send_packet() call.
|
|
||||||
*/
|
|
||||||
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset the internal bitstream filter state / flush internal buffers.
|
|
||||||
*/
|
|
||||||
void av_bsf_flush(AVBSFContext *ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free a bitstream filter context and everything associated with it; write NULL
|
|
||||||
* into the supplied pointer.
|
|
||||||
*/
|
|
||||||
void av_bsf_free(AVBSFContext **ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the AVClass for AVBSFContext. It can be used in combination with
|
|
||||||
* AV_OPT_SEARCH_FAKE_OBJ for examining options.
|
|
||||||
*
|
|
||||||
* @see av_opt_find().
|
|
||||||
*/
|
|
||||||
const AVClass *av_bsf_get_class(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Structure for chain/list of bitstream filters.
|
|
||||||
* Empty list can be allocated by av_bsf_list_alloc().
|
|
||||||
*/
|
|
||||||
typedef struct AVBSFList AVBSFList;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate empty list of bitstream filters.
|
|
||||||
* The list must be later freed by av_bsf_list_free()
|
|
||||||
* or finalized by av_bsf_list_finalize().
|
|
||||||
*
|
|
||||||
* @return Pointer to @ref AVBSFList on success, NULL in case of failure
|
|
||||||
*/
|
|
||||||
AVBSFList *av_bsf_list_alloc(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free list of bitstream filters.
|
|
||||||
*
|
|
||||||
* @param lst Pointer to pointer returned by av_bsf_list_alloc()
|
|
||||||
*/
|
|
||||||
void av_bsf_list_free(AVBSFList **lst);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Append bitstream filter to the list of bitstream filters.
|
|
||||||
*
|
|
||||||
* @param lst List to append to
|
|
||||||
* @param bsf Filter context to be appended
|
|
||||||
*
|
|
||||||
* @return >=0 on success, negative AVERROR in case of failure
|
|
||||||
*/
|
|
||||||
int av_bsf_list_append(AVBSFList *lst, AVBSFContext *bsf);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Construct new bitstream filter context given it's name and options
|
|
||||||
* and append it to the list of bitstream filters.
|
|
||||||
*
|
|
||||||
* @param lst List to append to
|
|
||||||
* @param bsf_name Name of the bitstream filter
|
|
||||||
* @param options Options for the bitstream filter, can be set to NULL
|
|
||||||
*
|
|
||||||
* @return >=0 on success, negative AVERROR in case of failure
|
|
||||||
*/
|
|
||||||
int av_bsf_list_append2(AVBSFList *lst, const char * bsf_name, AVDictionary **options);
|
|
||||||
/**
|
|
||||||
* Finalize list of bitstream filters.
|
|
||||||
*
|
|
||||||
* This function will transform @ref AVBSFList to single @ref AVBSFContext,
|
|
||||||
* so the whole chain of bitstream filters can be treated as single filter
|
|
||||||
* freshly allocated by av_bsf_alloc().
|
|
||||||
* If the call is successful, @ref AVBSFList structure is freed and lst
|
|
||||||
* will be set to NULL. In case of failure, caller is responsible for
|
|
||||||
* freeing the structure by av_bsf_list_free()
|
|
||||||
*
|
|
||||||
* @param lst Filter list structure to be transformed
|
|
||||||
* @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure
|
|
||||||
* representing the chain of bitstream filters
|
|
||||||
*
|
|
||||||
* @return >=0 on success, negative AVERROR in case of failure
|
|
||||||
*/
|
|
||||||
int av_bsf_list_finalize(AVBSFList **lst, AVBSFContext **bsf);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse string describing list of bitstream filters and create single
|
|
||||||
* @ref AVBSFContext describing the whole chain of bitstream filters.
|
|
||||||
* Resulting @ref AVBSFContext can be treated as any other @ref AVBSFContext freshly
|
|
||||||
* allocated by av_bsf_alloc().
|
|
||||||
*
|
|
||||||
* @param str String describing chain of bitstream filters in format
|
|
||||||
* `bsf1[=opt1=val1:opt2=val2][,bsf2]`
|
|
||||||
* @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure
|
|
||||||
* representing the chain of bitstream filters
|
|
||||||
*
|
|
||||||
* @return >=0 on success, negative AVERROR in case of failure
|
|
||||||
*/
|
|
||||||
int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get null/pass-through bitstream filter.
|
|
||||||
*
|
|
||||||
* @param[out] bsf Pointer to be set to new instance of pass-through bitstream filter
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
int av_bsf_get_null_filter(AVBSFContext **bsf);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif // AVCODEC_BSF_H
|
|
||||||
@@ -1,462 +0,0 @@
|
|||||||
/*
|
|
||||||
* AVCodec public API
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_CODEC_H
|
|
||||||
#define AVCODEC_CODEC_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "avutil.h"
|
|
||||||
#include "hwcontext.h"
|
|
||||||
#include "log.h"
|
|
||||||
#include "pixfmt.h"
|
|
||||||
#include "rational.h"
|
|
||||||
#include "samplefmt.h"
|
|
||||||
|
|
||||||
#include "codec_id.h"
|
|
||||||
#include "avcodecVersion.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavc_core
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decoder can use draw_horiz_band callback.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_DRAW_HORIZ_BAND (1 << 0)
|
|
||||||
/**
|
|
||||||
* Codec uses get_buffer() for allocating buffers and supports custom allocators.
|
|
||||||
* If not set, it might not use get_buffer() at all or use operations that
|
|
||||||
* assume the buffer was allocated by avcodec_default_get_buffer.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_DR1 (1 << 1)
|
|
||||||
#define AV_CODEC_CAP_TRUNCATED (1 << 3)
|
|
||||||
/**
|
|
||||||
* Encoder or decoder requires flushing with NULL input at the end in order to
|
|
||||||
* give the complete and correct output.
|
|
||||||
*
|
|
||||||
* NOTE: If this flag is not set, the codec is guaranteed to never be fed with
|
|
||||||
* with NULL data. The user can still send NULL data to the public encode
|
|
||||||
* or decode function, but libavcodec will not pass it along to the codec
|
|
||||||
* unless this flag is set.
|
|
||||||
*
|
|
||||||
* Decoders:
|
|
||||||
* The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL,
|
|
||||||
* avpkt->size=0 at the end to get the delayed data until the decoder no longer
|
|
||||||
* returns frames.
|
|
||||||
*
|
|
||||||
* Encoders:
|
|
||||||
* The encoder needs to be fed with NULL data at the end of encoding until the
|
|
||||||
* encoder no longer returns data.
|
|
||||||
*
|
|
||||||
* NOTE: For encoders implementing the AVCodec.encode2() function, setting this
|
|
||||||
* flag also means that the encoder must set the pts and duration for
|
|
||||||
* each output packet. If this flag is not set, the pts and duration will
|
|
||||||
* be determined by libavcodec from the input frame.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_DELAY (1 << 5)
|
|
||||||
/**
|
|
||||||
* Codec can be fed a final frame with a smaller size.
|
|
||||||
* This can be used to prevent truncation of the last audio samples.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_SMALL_LAST_FRAME (1 << 6)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Codec can output multiple frames per AVPacket
|
|
||||||
* Normally demuxers return one frame at a time, demuxers which do not do
|
|
||||||
* are connected to a parser to split what they return into proper frames.
|
|
||||||
* This flag is reserved to the very rare category of codecs which have a
|
|
||||||
* bitstream that cannot be split into frames without timeconsuming
|
|
||||||
* operations like full decoding. Demuxers carrying such bitstreams thus
|
|
||||||
* may return multiple frames in a packet. This has many disadvantages like
|
|
||||||
* prohibiting stream copy in many cases thus it should only be considered
|
|
||||||
* as a last resort.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_SUBFRAMES (1 << 8)
|
|
||||||
/**
|
|
||||||
* Codec is experimental and is thus avoided in favor of non experimental
|
|
||||||
* encoders
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_EXPERIMENTAL (1 << 9)
|
|
||||||
/**
|
|
||||||
* Codec should fill in channel configuration and samplerate instead of container
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_CHANNEL_CONF (1 << 10)
|
|
||||||
/**
|
|
||||||
* Codec supports frame-level multithreading.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_FRAME_THREADS (1 << 12)
|
|
||||||
/**
|
|
||||||
* Codec supports slice-based (or partition-based) multithreading.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_SLICE_THREADS (1 << 13)
|
|
||||||
/**
|
|
||||||
* Codec supports changed parameters at any point.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_PARAM_CHANGE (1 << 14)
|
|
||||||
/**
|
|
||||||
* Codec supports avctx->thread_count == 0 (auto).
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_AUTO_THREADS (1 << 15)
|
|
||||||
/**
|
|
||||||
* Audio encoder supports receiving a different number of samples in each call.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE (1 << 16)
|
|
||||||
/**
|
|
||||||
* Decoder is not a preferred choice for probing.
|
|
||||||
* This indicates that the decoder is not a good choice for probing.
|
|
||||||
* It could for example be an expensive to spin up hardware decoder,
|
|
||||||
* or it could simply not provide a lot of useful information about
|
|
||||||
* the stream.
|
|
||||||
* A decoder marked with this flag should only be used as last resort
|
|
||||||
* choice for probing.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_AVOID_PROBING (1 << 17)
|
|
||||||
|
|
||||||
#if FF_API_UNUSED_CODEC_CAPS
|
|
||||||
/**
|
|
||||||
* Deprecated and unused. Use AVCodecDescriptor.props instead
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_INTRA_ONLY 0x40000000
|
|
||||||
/**
|
|
||||||
* Deprecated and unused. Use AVCodecDescriptor.props instead
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_LOSSLESS 0x80000000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Codec is backed by a hardware implementation. Typically used to
|
|
||||||
* identify a non-hwaccel hardware decoder. For information about hwaccels, use
|
|
||||||
* avcodec_get_hw_config() instead.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_HARDWARE (1 << 18)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Codec is potentially backed by a hardware implementation, but not
|
|
||||||
* necessarily. This is used instead of AV_CODEC_CAP_HARDWARE, if the
|
|
||||||
* implementation provides some sort of internal fallback.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_HYBRID (1 << 19)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This codec takes the reordered_opaque field from input AVFrames
|
|
||||||
* and returns it in the corresponding field in AVCodecContext after
|
|
||||||
* encoding.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE (1 << 20)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This encoder can be flushed using avcodec_flush_buffers(). If this flag is
|
|
||||||
* not set, the encoder must be closed and reopened to ensure that no frames
|
|
||||||
* remain pending.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_CAP_ENCODER_FLUSH (1 << 21)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* AVProfile.
|
|
||||||
*/
|
|
||||||
typedef struct AVProfile {
|
|
||||||
int profile;
|
|
||||||
const char *name; ///< short name for the profile
|
|
||||||
} AVProfile;
|
|
||||||
|
|
||||||
typedef struct AVCodecDefault AVCodecDefault;
|
|
||||||
|
|
||||||
struct AVCodecContext;
|
|
||||||
struct AVSubtitle;
|
|
||||||
struct AVPacket;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* AVCodec.
|
|
||||||
*/
|
|
||||||
typedef struct AVCodec {
|
|
||||||
/**
|
|
||||||
* Name of the codec implementation.
|
|
||||||
* The name is globally unique among encoders and among decoders (but an
|
|
||||||
* encoder and a decoder can share the same name).
|
|
||||||
* This is the primary way to find a codec from the user perspective.
|
|
||||||
*/
|
|
||||||
const char *name;
|
|
||||||
/**
|
|
||||||
* Descriptive name for the codec, meant to be more human readable than name.
|
|
||||||
* You should use the NULL_IF_CONFIG_SMALL() macro to define it.
|
|
||||||
*/
|
|
||||||
const char *long_name;
|
|
||||||
enum AVMediaType type;
|
|
||||||
enum AVCodecID id;
|
|
||||||
/**
|
|
||||||
* Codec capabilities.
|
|
||||||
* see AV_CODEC_CAP_*
|
|
||||||
*/
|
|
||||||
int capabilities;
|
|
||||||
const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
|
|
||||||
const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
|
|
||||||
const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
|
|
||||||
const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
|
|
||||||
const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
|
|
||||||
uint8_t max_lowres; ///< maximum value for lowres supported by the decoder
|
|
||||||
const AVClass *priv_class; ///< AVClass for the private context
|
|
||||||
const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Group name of the codec implementation.
|
|
||||||
* This is a short symbolic name of the wrapper backing this codec. A
|
|
||||||
* wrapper uses some kind of external implementation for the codec, such
|
|
||||||
* as an external library, or a codec implementation provided by the OS or
|
|
||||||
* the hardware.
|
|
||||||
* If this field is NULL, this is a builtin, libavcodec native codec.
|
|
||||||
* If non-NULL, this will be the suffix in AVCodec.name in most cases
|
|
||||||
* (usually AVCodec.name will be of the form "<codec_name>_<wrapper_name>").
|
|
||||||
*/
|
|
||||||
const char *wrapper_name;
|
|
||||||
|
|
||||||
/*****************************************************************
|
|
||||||
* No fields below this line are part of the public API. They
|
|
||||||
* may not be used outside of libavcodec and can be changed and
|
|
||||||
* removed at will.
|
|
||||||
* New public fields should be added right above.
|
|
||||||
*****************************************************************
|
|
||||||
*/
|
|
||||||
int priv_data_size;
|
|
||||||
struct AVCodec *next;
|
|
||||||
/**
|
|
||||||
* @name Frame-level threading support functions
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* Copy necessary context variables from a previous thread context to the current one.
|
|
||||||
* If not defined, the next thread will start automatically; otherwise, the codec
|
|
||||||
* must call ff_thread_finish_setup().
|
|
||||||
*
|
|
||||||
* dst and src will (rarely) point to the same context, in which case memcpy should be skipped.
|
|
||||||
*/
|
|
||||||
int (*update_thread_context)(struct AVCodecContext *dst, const struct AVCodecContext *src);
|
|
||||||
/** @} */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Private codec-specific defaults.
|
|
||||||
*/
|
|
||||||
const AVCodecDefault *defaults;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize codec static data, called from avcodec_register().
|
|
||||||
*
|
|
||||||
* This is not intended for time consuming operations as it is
|
|
||||||
* run for every codec regardless of that codec being used.
|
|
||||||
*/
|
|
||||||
void (*init_static_data)(struct AVCodec *codec);
|
|
||||||
|
|
||||||
int (*init)(struct AVCodecContext *);
|
|
||||||
int (*encode_sub)(struct AVCodecContext *, uint8_t *buf, int buf_size,
|
|
||||||
const struct AVSubtitle *sub);
|
|
||||||
/**
|
|
||||||
* Encode data to an AVPacket.
|
|
||||||
*
|
|
||||||
* @param avctx codec context
|
|
||||||
* @param avpkt output AVPacket (may contain a user-provided buffer)
|
|
||||||
* @param[in] frame AVFrame containing the raw data to be encoded
|
|
||||||
* @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a
|
|
||||||
* non-empty packet was returned in avpkt.
|
|
||||||
* @return 0 on success, negative error code on failure
|
|
||||||
*/
|
|
||||||
int (*encode2)(struct AVCodecContext *avctx, struct AVPacket *avpkt,
|
|
||||||
const struct AVFrame *frame, int *got_packet_ptr);
|
|
||||||
int (*decode)(struct AVCodecContext *, void *outdata, int *outdata_size, struct AVPacket *avpkt);
|
|
||||||
int (*close)(struct AVCodecContext *);
|
|
||||||
/**
|
|
||||||
* Encode API with decoupled packet/frame dataflow. The API is the
|
|
||||||
* same as the avcodec_ prefixed APIs (avcodec_send_frame() etc.), except
|
|
||||||
* that:
|
|
||||||
* - never called if the codec is closed or the wrong type,
|
|
||||||
* - if AV_CODEC_CAP_DELAY is not set, drain frames are never sent,
|
|
||||||
* - only one drain frame is ever passed down,
|
|
||||||
*/
|
|
||||||
int (*send_frame)(struct AVCodecContext *avctx, const struct AVFrame *frame);
|
|
||||||
int (*receive_packet)(struct AVCodecContext *avctx, struct AVPacket *avpkt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decode API with decoupled packet/frame dataflow. This function is called
|
|
||||||
* to get one output frame. It should call ff_decode_get_packet() to obtain
|
|
||||||
* input data.
|
|
||||||
*/
|
|
||||||
int (*receive_frame)(struct AVCodecContext *avctx, struct AVFrame *frame);
|
|
||||||
/**
|
|
||||||
* Flush buffers.
|
|
||||||
* Will be called when seeking
|
|
||||||
*/
|
|
||||||
void (*flush)(struct AVCodecContext *);
|
|
||||||
/**
|
|
||||||
* Internal codec capabilities.
|
|
||||||
* See FF_CODEC_CAP_* in internal.h
|
|
||||||
*/
|
|
||||||
int caps_internal;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decoding only, a comma-separated list of bitstream filters to apply to
|
|
||||||
* packets before decoding.
|
|
||||||
*/
|
|
||||||
const char *bsfs;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Array of pointers to hardware configurations supported by the codec,
|
|
||||||
* or NULL if no hardware supported. The array is terminated by a NULL
|
|
||||||
* pointer.
|
|
||||||
*
|
|
||||||
* The user can only access this field via avcodec_get_hw_config().
|
|
||||||
*/
|
|
||||||
const struct AVCodecHWConfigInternal **hw_configs;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of supported codec_tags, terminated by FF_CODEC_TAGS_END.
|
|
||||||
*/
|
|
||||||
const uint32_t *codec_tags;
|
|
||||||
} AVCodec;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Iterate over all registered codecs.
|
|
||||||
*
|
|
||||||
* @param opaque a pointer where libavcodec will store the iteration state. Must
|
|
||||||
* point to NULL to start the iteration.
|
|
||||||
*
|
|
||||||
* @return the next registered codec or NULL when the iteration is
|
|
||||||
* finished
|
|
||||||
*/
|
|
||||||
const AVCodec *av_codec_iterate(void **opaque);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Find a registered decoder with a matching codec ID.
|
|
||||||
*
|
|
||||||
* @param id AVCodecID of the requested decoder
|
|
||||||
* @return A decoder if one was found, NULL otherwise.
|
|
||||||
*/
|
|
||||||
AVCodec *avcodec_find_decoder(enum AVCodecID id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Find a registered decoder with the specified name.
|
|
||||||
*
|
|
||||||
* @param name name of the requested decoder
|
|
||||||
* @return A decoder if one was found, NULL otherwise.
|
|
||||||
*/
|
|
||||||
AVCodec *avcodec_find_decoder_by_name(const char *name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Find a registered encoder with a matching codec ID.
|
|
||||||
*
|
|
||||||
* @param id AVCodecID of the requested encoder
|
|
||||||
* @return An encoder if one was found, NULL otherwise.
|
|
||||||
*/
|
|
||||||
AVCodec *avcodec_find_encoder(enum AVCodecID id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Find a registered encoder with the specified name.
|
|
||||||
*
|
|
||||||
* @param name name of the requested encoder
|
|
||||||
* @return An encoder if one was found, NULL otherwise.
|
|
||||||
*/
|
|
||||||
AVCodec *avcodec_find_encoder_by_name(const char *name);
|
|
||||||
/**
|
|
||||||
* @return a non-zero number if codec is an encoder, zero otherwise
|
|
||||||
*/
|
|
||||||
int av_codec_is_encoder(const AVCodec *codec);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return a non-zero number if codec is a decoder, zero otherwise
|
|
||||||
*/
|
|
||||||
int av_codec_is_decoder(const AVCodec *codec);
|
|
||||||
|
|
||||||
enum {
|
|
||||||
/**
|
|
||||||
* The codec supports this format via the hw_device_ctx interface.
|
|
||||||
*
|
|
||||||
* When selecting this format, AVCodecContext.hw_device_ctx should
|
|
||||||
* have been set to a device of the specified type before calling
|
|
||||||
* avcodec_open2().
|
|
||||||
*/
|
|
||||||
AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX = 0x01,
|
|
||||||
/**
|
|
||||||
* The codec supports this format via the hw_frames_ctx interface.
|
|
||||||
*
|
|
||||||
* When selecting this format for a decoder,
|
|
||||||
* AVCodecContext.hw_frames_ctx should be set to a suitable frames
|
|
||||||
* context inside the get_format() callback. The frames context
|
|
||||||
* must have been created on a device of the specified type.
|
|
||||||
*
|
|
||||||
* When selecting this format for an encoder,
|
|
||||||
* AVCodecContext.hw_frames_ctx should be set to the context which
|
|
||||||
* will be used for the input frames before calling avcodec_open2().
|
|
||||||
*/
|
|
||||||
AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX = 0x02,
|
|
||||||
/**
|
|
||||||
* The codec supports this format by some internal method.
|
|
||||||
*
|
|
||||||
* This format can be selected without any additional configuration -
|
|
||||||
* no device or frames context is required.
|
|
||||||
*/
|
|
||||||
AV_CODEC_HW_CONFIG_METHOD_INTERNAL = 0x04,
|
|
||||||
/**
|
|
||||||
* The codec supports this format by some ad-hoc method.
|
|
||||||
*
|
|
||||||
* Additional settings and/or function calls are required. See the
|
|
||||||
* codec-specific documentation for details. (Methods requiring
|
|
||||||
* this sort of configuration are deprecated and others should be
|
|
||||||
* used in preference.)
|
|
||||||
*/
|
|
||||||
AV_CODEC_HW_CONFIG_METHOD_AD_HOC = 0x08,
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct AVCodecHWConfig {
|
|
||||||
/**
|
|
||||||
* For decoders, a hardware pixel format which that decoder may be
|
|
||||||
* able to decode to if suitable hardware is available.
|
|
||||||
*
|
|
||||||
* For encoders, a pixel format which the encoder may be able to
|
|
||||||
* accept. If set to AV_PIX_FMT_NONE, this applies to all pixel
|
|
||||||
* formats supported by the codec.
|
|
||||||
*/
|
|
||||||
enum AVPixelFormat pix_fmt;
|
|
||||||
/**
|
|
||||||
* Bit set of AV_CODEC_HW_CONFIG_METHOD_* flags, describing the possible
|
|
||||||
* setup methods which can be used with this configuration.
|
|
||||||
*/
|
|
||||||
int methods;
|
|
||||||
/**
|
|
||||||
* The device type associated with the configuration.
|
|
||||||
*
|
|
||||||
* Must be set for AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX and
|
|
||||||
* AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, otherwise unused.
|
|
||||||
*/
|
|
||||||
enum AVHWDeviceType device_type;
|
|
||||||
} AVCodecHWConfig;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve supported hardware configurations for a codec.
|
|
||||||
*
|
|
||||||
* Values of index from zero to some maximum return the indexed configuration
|
|
||||||
* descriptor; all other values return NULL. If the codec does not support
|
|
||||||
* any hardware configurations then it will always return NULL.
|
|
||||||
*/
|
|
||||||
const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *codec, int index);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVCODEC_CODEC_H */
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
/*
|
|
||||||
* Codec descriptors public API
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_CODEC_DESC_H
|
|
||||||
#define AVCODEC_CODEC_DESC_H
|
|
||||||
|
|
||||||
#include "avutil.h"
|
|
||||||
|
|
||||||
#include "codec_id.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavc_core
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct describes the properties of a single codec described by an
|
|
||||||
* AVCodecID.
|
|
||||||
* @see avcodec_descriptor_get()
|
|
||||||
*/
|
|
||||||
typedef struct AVCodecDescriptor {
|
|
||||||
enum AVCodecID id;
|
|
||||||
enum AVMediaType type;
|
|
||||||
/**
|
|
||||||
* Name of the codec described by this descriptor. It is non-empty and
|
|
||||||
* unique for each codec descriptor. It should contain alphanumeric
|
|
||||||
* characters and '_' only.
|
|
||||||
*/
|
|
||||||
const char *name;
|
|
||||||
/**
|
|
||||||
* A more descriptive name for this codec. May be NULL.
|
|
||||||
*/
|
|
||||||
const char *long_name;
|
|
||||||
/**
|
|
||||||
* Codec properties, a combination of AV_CODEC_PROP_* flags.
|
|
||||||
*/
|
|
||||||
int props;
|
|
||||||
/**
|
|
||||||
* MIME type(s) associated with the codec.
|
|
||||||
* May be NULL; if not, a NULL-terminated array of MIME types.
|
|
||||||
* The first item is always non-NULL and is the preferred MIME type.
|
|
||||||
*/
|
|
||||||
const char *const *mime_types;
|
|
||||||
/**
|
|
||||||
* If non-NULL, an array of profiles recognized for this codec.
|
|
||||||
* Terminated with FF_PROFILE_UNKNOWN.
|
|
||||||
*/
|
|
||||||
const struct AVProfile *profiles;
|
|
||||||
} AVCodecDescriptor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Codec uses only intra compression.
|
|
||||||
* Video and audio codecs only.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_PROP_INTRA_ONLY (1 << 0)
|
|
||||||
/**
|
|
||||||
* Codec supports lossy compression. Audio and video codecs only.
|
|
||||||
* @note a codec may support both lossy and lossless
|
|
||||||
* compression modes
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_PROP_LOSSY (1 << 1)
|
|
||||||
/**
|
|
||||||
* Codec supports lossless compression. Audio and video codecs only.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_PROP_LOSSLESS (1 << 2)
|
|
||||||
/**
|
|
||||||
* Codec supports frame reordering. That is, the coded order (the order in which
|
|
||||||
* the encoded packets are output by the encoders / stored / input to the
|
|
||||||
* decoders) may be different from the presentation order of the corresponding
|
|
||||||
* frames.
|
|
||||||
*
|
|
||||||
* For codecs that do not have this property set, PTS and DTS should always be
|
|
||||||
* equal.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_PROP_REORDER (1 << 3)
|
|
||||||
/**
|
|
||||||
* Subtitle codec is bitmap based
|
|
||||||
* Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_PROP_BITMAP_SUB (1 << 16)
|
|
||||||
/**
|
|
||||||
* Subtitle codec is text based.
|
|
||||||
* Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field.
|
|
||||||
*/
|
|
||||||
#define AV_CODEC_PROP_TEXT_SUB (1 << 17)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return descriptor for given codec ID or NULL if no descriptor exists.
|
|
||||||
*/
|
|
||||||
const AVCodecDescriptor *avcodec_descriptor_get(enum AVCodecID id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Iterate over all codec descriptors known to libavcodec.
|
|
||||||
*
|
|
||||||
* @param prev previous descriptor. NULL to get the first descriptor.
|
|
||||||
*
|
|
||||||
* @return next descriptor or NULL after the last descriptor
|
|
||||||
*/
|
|
||||||
const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return codec descriptor with the given name or NULL if no such descriptor
|
|
||||||
* exists.
|
|
||||||
*/
|
|
||||||
const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif // AVCODEC_CODEC_DESC_H
|
|
||||||
@@ -1,577 +0,0 @@
|
|||||||
/*
|
|
||||||
* Codec IDs
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_CODEC_ID_H
|
|
||||||
#define AVCODEC_CODEC_ID_H
|
|
||||||
|
|
||||||
#include "avutil.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavc_core
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Identify the syntax and semantics of the bitstream.
|
|
||||||
* The principle is roughly:
|
|
||||||
* Two decoders with the same ID can decode the same streams.
|
|
||||||
* Two encoders with the same ID can encode compatible streams.
|
|
||||||
* There may be slight deviations from the principle due to implementation
|
|
||||||
* details.
|
|
||||||
*
|
|
||||||
* If you add a codec ID to this list, add it so that
|
|
||||||
* 1. no value of an existing codec ID changes (that would break ABI),
|
|
||||||
* 2. it is as close as possible to similar codecs
|
|
||||||
*
|
|
||||||
* After adding new codec IDs, do not forget to add an entry to the codec
|
|
||||||
* descriptor list and bump libavcodec minor version.
|
|
||||||
*/
|
|
||||||
enum AVCodecID {
|
|
||||||
AV_CODEC_ID_NONE,
|
|
||||||
|
|
||||||
/* video codecs */
|
|
||||||
AV_CODEC_ID_MPEG1VIDEO,
|
|
||||||
AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
|
|
||||||
AV_CODEC_ID_H261,
|
|
||||||
AV_CODEC_ID_H263,
|
|
||||||
AV_CODEC_ID_RV10,
|
|
||||||
AV_CODEC_ID_RV20,
|
|
||||||
AV_CODEC_ID_MJPEG,
|
|
||||||
AV_CODEC_ID_MJPEGB,
|
|
||||||
AV_CODEC_ID_LJPEG,
|
|
||||||
AV_CODEC_ID_SP5X,
|
|
||||||
AV_CODEC_ID_JPEGLS,
|
|
||||||
AV_CODEC_ID_MPEG4,
|
|
||||||
AV_CODEC_ID_RAWVIDEO,
|
|
||||||
AV_CODEC_ID_MSMPEG4V1,
|
|
||||||
AV_CODEC_ID_MSMPEG4V2,
|
|
||||||
AV_CODEC_ID_MSMPEG4V3,
|
|
||||||
AV_CODEC_ID_WMV1,
|
|
||||||
AV_CODEC_ID_WMV2,
|
|
||||||
AV_CODEC_ID_H263P,
|
|
||||||
AV_CODEC_ID_H263I,
|
|
||||||
AV_CODEC_ID_FLV1,
|
|
||||||
AV_CODEC_ID_SVQ1,
|
|
||||||
AV_CODEC_ID_SVQ3,
|
|
||||||
AV_CODEC_ID_DVVIDEO,
|
|
||||||
AV_CODEC_ID_HUFFYUV,
|
|
||||||
AV_CODEC_ID_CYUV,
|
|
||||||
AV_CODEC_ID_H264,
|
|
||||||
AV_CODEC_ID_INDEO3,
|
|
||||||
AV_CODEC_ID_VP3,
|
|
||||||
AV_CODEC_ID_THEORA,
|
|
||||||
AV_CODEC_ID_ASV1,
|
|
||||||
AV_CODEC_ID_ASV2,
|
|
||||||
AV_CODEC_ID_FFV1,
|
|
||||||
AV_CODEC_ID_4XM,
|
|
||||||
AV_CODEC_ID_VCR1,
|
|
||||||
AV_CODEC_ID_CLJR,
|
|
||||||
AV_CODEC_ID_MDEC,
|
|
||||||
AV_CODEC_ID_ROQ,
|
|
||||||
AV_CODEC_ID_INTERPLAY_VIDEO,
|
|
||||||
AV_CODEC_ID_XAN_WC3,
|
|
||||||
AV_CODEC_ID_XAN_WC4,
|
|
||||||
AV_CODEC_ID_RPZA,
|
|
||||||
AV_CODEC_ID_CINEPAK,
|
|
||||||
AV_CODEC_ID_WS_VQA,
|
|
||||||
AV_CODEC_ID_MSRLE,
|
|
||||||
AV_CODEC_ID_MSVIDEO1,
|
|
||||||
AV_CODEC_ID_IDCIN,
|
|
||||||
AV_CODEC_ID_8BPS,
|
|
||||||
AV_CODEC_ID_SMC,
|
|
||||||
AV_CODEC_ID_FLIC,
|
|
||||||
AV_CODEC_ID_TRUEMOTION1,
|
|
||||||
AV_CODEC_ID_VMDVIDEO,
|
|
||||||
AV_CODEC_ID_MSZH,
|
|
||||||
AV_CODEC_ID_ZLIB,
|
|
||||||
AV_CODEC_ID_QTRLE,
|
|
||||||
AV_CODEC_ID_TSCC,
|
|
||||||
AV_CODEC_ID_ULTI,
|
|
||||||
AV_CODEC_ID_QDRAW,
|
|
||||||
AV_CODEC_ID_VIXL,
|
|
||||||
AV_CODEC_ID_QPEG,
|
|
||||||
AV_CODEC_ID_PNG,
|
|
||||||
AV_CODEC_ID_PPM,
|
|
||||||
AV_CODEC_ID_PBM,
|
|
||||||
AV_CODEC_ID_PGM,
|
|
||||||
AV_CODEC_ID_PGMYUV,
|
|
||||||
AV_CODEC_ID_PAM,
|
|
||||||
AV_CODEC_ID_FFVHUFF,
|
|
||||||
AV_CODEC_ID_RV30,
|
|
||||||
AV_CODEC_ID_RV40,
|
|
||||||
AV_CODEC_ID_VC1,
|
|
||||||
AV_CODEC_ID_WMV3,
|
|
||||||
AV_CODEC_ID_LOCO,
|
|
||||||
AV_CODEC_ID_WNV1,
|
|
||||||
AV_CODEC_ID_AASC,
|
|
||||||
AV_CODEC_ID_INDEO2,
|
|
||||||
AV_CODEC_ID_FRAPS,
|
|
||||||
AV_CODEC_ID_TRUEMOTION2,
|
|
||||||
AV_CODEC_ID_BMP,
|
|
||||||
AV_CODEC_ID_CSCD,
|
|
||||||
AV_CODEC_ID_MMVIDEO,
|
|
||||||
AV_CODEC_ID_ZMBV,
|
|
||||||
AV_CODEC_ID_AVS,
|
|
||||||
AV_CODEC_ID_SMACKVIDEO,
|
|
||||||
AV_CODEC_ID_NUV,
|
|
||||||
AV_CODEC_ID_KMVC,
|
|
||||||
AV_CODEC_ID_FLASHSV,
|
|
||||||
AV_CODEC_ID_CAVS,
|
|
||||||
AV_CODEC_ID_JPEG2000,
|
|
||||||
AV_CODEC_ID_VMNC,
|
|
||||||
AV_CODEC_ID_VP5,
|
|
||||||
AV_CODEC_ID_VP6,
|
|
||||||
AV_CODEC_ID_VP6F,
|
|
||||||
AV_CODEC_ID_TARGA,
|
|
||||||
AV_CODEC_ID_DSICINVIDEO,
|
|
||||||
AV_CODEC_ID_TIERTEXSEQVIDEO,
|
|
||||||
AV_CODEC_ID_TIFF,
|
|
||||||
AV_CODEC_ID_GIF,
|
|
||||||
AV_CODEC_ID_DXA,
|
|
||||||
AV_CODEC_ID_DNXHD,
|
|
||||||
AV_CODEC_ID_THP,
|
|
||||||
AV_CODEC_ID_SGI,
|
|
||||||
AV_CODEC_ID_C93,
|
|
||||||
AV_CODEC_ID_BETHSOFTVID,
|
|
||||||
AV_CODEC_ID_PTX,
|
|
||||||
AV_CODEC_ID_TXD,
|
|
||||||
AV_CODEC_ID_VP6A,
|
|
||||||
AV_CODEC_ID_AMV,
|
|
||||||
AV_CODEC_ID_VB,
|
|
||||||
AV_CODEC_ID_PCX,
|
|
||||||
AV_CODEC_ID_SUNRAST,
|
|
||||||
AV_CODEC_ID_INDEO4,
|
|
||||||
AV_CODEC_ID_INDEO5,
|
|
||||||
AV_CODEC_ID_MIMIC,
|
|
||||||
AV_CODEC_ID_RL2,
|
|
||||||
AV_CODEC_ID_ESCAPE124,
|
|
||||||
AV_CODEC_ID_DIRAC,
|
|
||||||
AV_CODEC_ID_BFI,
|
|
||||||
AV_CODEC_ID_CMV,
|
|
||||||
AV_CODEC_ID_MOTIONPIXELS,
|
|
||||||
AV_CODEC_ID_TGV,
|
|
||||||
AV_CODEC_ID_TGQ,
|
|
||||||
AV_CODEC_ID_TQI,
|
|
||||||
AV_CODEC_ID_AURA,
|
|
||||||
AV_CODEC_ID_AURA2,
|
|
||||||
AV_CODEC_ID_V210X,
|
|
||||||
AV_CODEC_ID_TMV,
|
|
||||||
AV_CODEC_ID_V210,
|
|
||||||
AV_CODEC_ID_DPX,
|
|
||||||
AV_CODEC_ID_MAD,
|
|
||||||
AV_CODEC_ID_FRWU,
|
|
||||||
AV_CODEC_ID_FLASHSV2,
|
|
||||||
AV_CODEC_ID_CDGRAPHICS,
|
|
||||||
AV_CODEC_ID_R210,
|
|
||||||
AV_CODEC_ID_ANM,
|
|
||||||
AV_CODEC_ID_BINKVIDEO,
|
|
||||||
AV_CODEC_ID_IFF_ILBM,
|
|
||||||
#define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM
|
|
||||||
AV_CODEC_ID_KGV1,
|
|
||||||
AV_CODEC_ID_YOP,
|
|
||||||
AV_CODEC_ID_VP8,
|
|
||||||
AV_CODEC_ID_PICTOR,
|
|
||||||
AV_CODEC_ID_ANSI,
|
|
||||||
AV_CODEC_ID_A64_MULTI,
|
|
||||||
AV_CODEC_ID_A64_MULTI5,
|
|
||||||
AV_CODEC_ID_R10K,
|
|
||||||
AV_CODEC_ID_MXPEG,
|
|
||||||
AV_CODEC_ID_LAGARITH,
|
|
||||||
AV_CODEC_ID_PRORES,
|
|
||||||
AV_CODEC_ID_JV,
|
|
||||||
AV_CODEC_ID_DFA,
|
|
||||||
AV_CODEC_ID_WMV3IMAGE,
|
|
||||||
AV_CODEC_ID_VC1IMAGE,
|
|
||||||
AV_CODEC_ID_UTVIDEO,
|
|
||||||
AV_CODEC_ID_BMV_VIDEO,
|
|
||||||
AV_CODEC_ID_VBLE,
|
|
||||||
AV_CODEC_ID_DXTORY,
|
|
||||||
AV_CODEC_ID_V410,
|
|
||||||
AV_CODEC_ID_XWD,
|
|
||||||
AV_CODEC_ID_CDXL,
|
|
||||||
AV_CODEC_ID_XBM,
|
|
||||||
AV_CODEC_ID_ZEROCODEC,
|
|
||||||
AV_CODEC_ID_MSS1,
|
|
||||||
AV_CODEC_ID_MSA1,
|
|
||||||
AV_CODEC_ID_TSCC2,
|
|
||||||
AV_CODEC_ID_MTS2,
|
|
||||||
AV_CODEC_ID_CLLC,
|
|
||||||
AV_CODEC_ID_MSS2,
|
|
||||||
AV_CODEC_ID_VP9,
|
|
||||||
AV_CODEC_ID_AIC,
|
|
||||||
AV_CODEC_ID_ESCAPE130,
|
|
||||||
AV_CODEC_ID_G2M,
|
|
||||||
AV_CODEC_ID_WEBP,
|
|
||||||
AV_CODEC_ID_HNM4_VIDEO,
|
|
||||||
AV_CODEC_ID_HEVC,
|
|
||||||
#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC
|
|
||||||
AV_CODEC_ID_FIC,
|
|
||||||
AV_CODEC_ID_ALIAS_PIX,
|
|
||||||
AV_CODEC_ID_BRENDER_PIX,
|
|
||||||
AV_CODEC_ID_PAF_VIDEO,
|
|
||||||
AV_CODEC_ID_EXR,
|
|
||||||
AV_CODEC_ID_VP7,
|
|
||||||
AV_CODEC_ID_SANM,
|
|
||||||
AV_CODEC_ID_SGIRLE,
|
|
||||||
AV_CODEC_ID_MVC1,
|
|
||||||
AV_CODEC_ID_MVC2,
|
|
||||||
AV_CODEC_ID_HQX,
|
|
||||||
AV_CODEC_ID_TDSC,
|
|
||||||
AV_CODEC_ID_HQ_HQA,
|
|
||||||
AV_CODEC_ID_HAP,
|
|
||||||
AV_CODEC_ID_DDS,
|
|
||||||
AV_CODEC_ID_DXV,
|
|
||||||
AV_CODEC_ID_SCREENPRESSO,
|
|
||||||
AV_CODEC_ID_RSCC,
|
|
||||||
AV_CODEC_ID_AVS2,
|
|
||||||
|
|
||||||
AV_CODEC_ID_Y41P = 0x8000,
|
|
||||||
AV_CODEC_ID_AVRP,
|
|
||||||
AV_CODEC_ID_012V,
|
|
||||||
AV_CODEC_ID_AVUI,
|
|
||||||
AV_CODEC_ID_AYUV,
|
|
||||||
AV_CODEC_ID_TARGA_Y216,
|
|
||||||
AV_CODEC_ID_V308,
|
|
||||||
AV_CODEC_ID_V408,
|
|
||||||
AV_CODEC_ID_YUV4,
|
|
||||||
AV_CODEC_ID_AVRN,
|
|
||||||
AV_CODEC_ID_CPIA,
|
|
||||||
AV_CODEC_ID_XFACE,
|
|
||||||
AV_CODEC_ID_SNOW,
|
|
||||||
AV_CODEC_ID_SMVJPEG,
|
|
||||||
AV_CODEC_ID_APNG,
|
|
||||||
AV_CODEC_ID_DAALA,
|
|
||||||
AV_CODEC_ID_CFHD,
|
|
||||||
AV_CODEC_ID_TRUEMOTION2RT,
|
|
||||||
AV_CODEC_ID_M101,
|
|
||||||
AV_CODEC_ID_MAGICYUV,
|
|
||||||
AV_CODEC_ID_SHEERVIDEO,
|
|
||||||
AV_CODEC_ID_YLC,
|
|
||||||
AV_CODEC_ID_PSD,
|
|
||||||
AV_CODEC_ID_PIXLET,
|
|
||||||
AV_CODEC_ID_SPEEDHQ,
|
|
||||||
AV_CODEC_ID_FMVC,
|
|
||||||
AV_CODEC_ID_SCPR,
|
|
||||||
AV_CODEC_ID_CLEARVIDEO,
|
|
||||||
AV_CODEC_ID_XPM,
|
|
||||||
AV_CODEC_ID_AV1,
|
|
||||||
AV_CODEC_ID_BITPACKED,
|
|
||||||
AV_CODEC_ID_MSCC,
|
|
||||||
AV_CODEC_ID_SRGC,
|
|
||||||
AV_CODEC_ID_SVG,
|
|
||||||
AV_CODEC_ID_GDV,
|
|
||||||
AV_CODEC_ID_FITS,
|
|
||||||
AV_CODEC_ID_IMM4,
|
|
||||||
AV_CODEC_ID_PROSUMER,
|
|
||||||
AV_CODEC_ID_MWSC,
|
|
||||||
AV_CODEC_ID_WCMV,
|
|
||||||
AV_CODEC_ID_RASC,
|
|
||||||
AV_CODEC_ID_HYMT,
|
|
||||||
AV_CODEC_ID_ARBC,
|
|
||||||
AV_CODEC_ID_AGM,
|
|
||||||
AV_CODEC_ID_LSCR,
|
|
||||||
AV_CODEC_ID_VP4,
|
|
||||||
AV_CODEC_ID_IMM5,
|
|
||||||
AV_CODEC_ID_MVDV,
|
|
||||||
AV_CODEC_ID_MVHA,
|
|
||||||
AV_CODEC_ID_CDTOONS,
|
|
||||||
AV_CODEC_ID_MV30,
|
|
||||||
AV_CODEC_ID_NOTCHLC,
|
|
||||||
AV_CODEC_ID_PFM,
|
|
||||||
|
|
||||||
/* various PCM "codecs" */
|
|
||||||
AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs
|
|
||||||
AV_CODEC_ID_PCM_S16LE = 0x10000,
|
|
||||||
AV_CODEC_ID_PCM_S16BE,
|
|
||||||
AV_CODEC_ID_PCM_U16LE,
|
|
||||||
AV_CODEC_ID_PCM_U16BE,
|
|
||||||
AV_CODEC_ID_PCM_S8,
|
|
||||||
AV_CODEC_ID_PCM_U8,
|
|
||||||
AV_CODEC_ID_PCM_MULAW,
|
|
||||||
AV_CODEC_ID_PCM_ALAW,
|
|
||||||
AV_CODEC_ID_PCM_S32LE,
|
|
||||||
AV_CODEC_ID_PCM_S32BE,
|
|
||||||
AV_CODEC_ID_PCM_U32LE,
|
|
||||||
AV_CODEC_ID_PCM_U32BE,
|
|
||||||
AV_CODEC_ID_PCM_S24LE,
|
|
||||||
AV_CODEC_ID_PCM_S24BE,
|
|
||||||
AV_CODEC_ID_PCM_U24LE,
|
|
||||||
AV_CODEC_ID_PCM_U24BE,
|
|
||||||
AV_CODEC_ID_PCM_S24DAUD,
|
|
||||||
AV_CODEC_ID_PCM_ZORK,
|
|
||||||
AV_CODEC_ID_PCM_S16LE_PLANAR,
|
|
||||||
AV_CODEC_ID_PCM_DVD,
|
|
||||||
AV_CODEC_ID_PCM_F32BE,
|
|
||||||
AV_CODEC_ID_PCM_F32LE,
|
|
||||||
AV_CODEC_ID_PCM_F64BE,
|
|
||||||
AV_CODEC_ID_PCM_F64LE,
|
|
||||||
AV_CODEC_ID_PCM_BLURAY,
|
|
||||||
AV_CODEC_ID_PCM_LXF,
|
|
||||||
AV_CODEC_ID_S302M,
|
|
||||||
AV_CODEC_ID_PCM_S8_PLANAR,
|
|
||||||
AV_CODEC_ID_PCM_S24LE_PLANAR,
|
|
||||||
AV_CODEC_ID_PCM_S32LE_PLANAR,
|
|
||||||
AV_CODEC_ID_PCM_S16BE_PLANAR,
|
|
||||||
|
|
||||||
AV_CODEC_ID_PCM_S64LE = 0x10800,
|
|
||||||
AV_CODEC_ID_PCM_S64BE,
|
|
||||||
AV_CODEC_ID_PCM_F16LE,
|
|
||||||
AV_CODEC_ID_PCM_F24LE,
|
|
||||||
AV_CODEC_ID_PCM_VIDC,
|
|
||||||
|
|
||||||
/* various ADPCM codecs */
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_WAV,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_DK3,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_DK4,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_WS,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_SMJPEG,
|
|
||||||
AV_CODEC_ID_ADPCM_MS,
|
|
||||||
AV_CODEC_ID_ADPCM_4XM,
|
|
||||||
AV_CODEC_ID_ADPCM_XA,
|
|
||||||
AV_CODEC_ID_ADPCM_ADX,
|
|
||||||
AV_CODEC_ID_ADPCM_EA,
|
|
||||||
AV_CODEC_ID_ADPCM_G726,
|
|
||||||
AV_CODEC_ID_ADPCM_CT,
|
|
||||||
AV_CODEC_ID_ADPCM_SWF,
|
|
||||||
AV_CODEC_ID_ADPCM_YAMAHA,
|
|
||||||
AV_CODEC_ID_ADPCM_SBPRO_4,
|
|
||||||
AV_CODEC_ID_ADPCM_SBPRO_3,
|
|
||||||
AV_CODEC_ID_ADPCM_SBPRO_2,
|
|
||||||
AV_CODEC_ID_ADPCM_THP,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_AMV,
|
|
||||||
AV_CODEC_ID_ADPCM_EA_R1,
|
|
||||||
AV_CODEC_ID_ADPCM_EA_R3,
|
|
||||||
AV_CODEC_ID_ADPCM_EA_R2,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_EA_SEAD,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_EA_EACS,
|
|
||||||
AV_CODEC_ID_ADPCM_EA_XAS,
|
|
||||||
AV_CODEC_ID_ADPCM_EA_MAXIS_XA,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_ISS,
|
|
||||||
AV_CODEC_ID_ADPCM_G722,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_APC,
|
|
||||||
AV_CODEC_ID_ADPCM_VIMA,
|
|
||||||
|
|
||||||
AV_CODEC_ID_ADPCM_AFC = 0x11800,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_OKI,
|
|
||||||
AV_CODEC_ID_ADPCM_DTK,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_RAD,
|
|
||||||
AV_CODEC_ID_ADPCM_G726LE,
|
|
||||||
AV_CODEC_ID_ADPCM_THP_LE,
|
|
||||||
AV_CODEC_ID_ADPCM_PSX,
|
|
||||||
AV_CODEC_ID_ADPCM_AICA,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_DAT4,
|
|
||||||
AV_CODEC_ID_ADPCM_MTAF,
|
|
||||||
AV_CODEC_ID_ADPCM_AGM,
|
|
||||||
AV_CODEC_ID_ADPCM_ARGO,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_SSI,
|
|
||||||
AV_CODEC_ID_ADPCM_ZORK,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_APM,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_ALP,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_MTF,
|
|
||||||
AV_CODEC_ID_ADPCM_IMA_CUNNING,
|
|
||||||
|
|
||||||
/* AMR */
|
|
||||||
AV_CODEC_ID_AMR_NB = 0x12000,
|
|
||||||
AV_CODEC_ID_AMR_WB,
|
|
||||||
|
|
||||||
/* RealAudio codecs*/
|
|
||||||
AV_CODEC_ID_RA_144 = 0x13000,
|
|
||||||
AV_CODEC_ID_RA_288,
|
|
||||||
|
|
||||||
/* various DPCM codecs */
|
|
||||||
AV_CODEC_ID_ROQ_DPCM = 0x14000,
|
|
||||||
AV_CODEC_ID_INTERPLAY_DPCM,
|
|
||||||
AV_CODEC_ID_XAN_DPCM,
|
|
||||||
AV_CODEC_ID_SOL_DPCM,
|
|
||||||
|
|
||||||
AV_CODEC_ID_SDX2_DPCM = 0x14800,
|
|
||||||
AV_CODEC_ID_GREMLIN_DPCM,
|
|
||||||
AV_CODEC_ID_DERF_DPCM,
|
|
||||||
|
|
||||||
/* audio codecs */
|
|
||||||
AV_CODEC_ID_MP2 = 0x15000,
|
|
||||||
AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
|
|
||||||
AV_CODEC_ID_AAC,
|
|
||||||
AV_CODEC_ID_AC3,
|
|
||||||
AV_CODEC_ID_DTS,
|
|
||||||
AV_CODEC_ID_VORBIS,
|
|
||||||
AV_CODEC_ID_DVAUDIO,
|
|
||||||
AV_CODEC_ID_WMAV1,
|
|
||||||
AV_CODEC_ID_WMAV2,
|
|
||||||
AV_CODEC_ID_MACE3,
|
|
||||||
AV_CODEC_ID_MACE6,
|
|
||||||
AV_CODEC_ID_VMDAUDIO,
|
|
||||||
AV_CODEC_ID_FLAC,
|
|
||||||
AV_CODEC_ID_MP3ADU,
|
|
||||||
AV_CODEC_ID_MP3ON4,
|
|
||||||
AV_CODEC_ID_SHORTEN,
|
|
||||||
AV_CODEC_ID_ALAC,
|
|
||||||
AV_CODEC_ID_WESTWOOD_SND1,
|
|
||||||
AV_CODEC_ID_GSM, ///< as in Berlin toast format
|
|
||||||
AV_CODEC_ID_QDM2,
|
|
||||||
AV_CODEC_ID_COOK,
|
|
||||||
AV_CODEC_ID_TRUESPEECH,
|
|
||||||
AV_CODEC_ID_TTA,
|
|
||||||
AV_CODEC_ID_SMACKAUDIO,
|
|
||||||
AV_CODEC_ID_QCELP,
|
|
||||||
AV_CODEC_ID_WAVPACK,
|
|
||||||
AV_CODEC_ID_DSICINAUDIO,
|
|
||||||
AV_CODEC_ID_IMC,
|
|
||||||
AV_CODEC_ID_MUSEPACK7,
|
|
||||||
AV_CODEC_ID_MLP,
|
|
||||||
AV_CODEC_ID_GSM_MS, /* as found in WAV */
|
|
||||||
AV_CODEC_ID_ATRAC3,
|
|
||||||
AV_CODEC_ID_APE,
|
|
||||||
AV_CODEC_ID_NELLYMOSER,
|
|
||||||
AV_CODEC_ID_MUSEPACK8,
|
|
||||||
AV_CODEC_ID_SPEEX,
|
|
||||||
AV_CODEC_ID_WMAVOICE,
|
|
||||||
AV_CODEC_ID_WMAPRO,
|
|
||||||
AV_CODEC_ID_WMALOSSLESS,
|
|
||||||
AV_CODEC_ID_ATRAC3P,
|
|
||||||
AV_CODEC_ID_EAC3,
|
|
||||||
AV_CODEC_ID_SIPR,
|
|
||||||
AV_CODEC_ID_MP1,
|
|
||||||
AV_CODEC_ID_TWINVQ,
|
|
||||||
AV_CODEC_ID_TRUEHD,
|
|
||||||
AV_CODEC_ID_MP4ALS,
|
|
||||||
AV_CODEC_ID_ATRAC1,
|
|
||||||
AV_CODEC_ID_BINKAUDIO_RDFT,
|
|
||||||
AV_CODEC_ID_BINKAUDIO_DCT,
|
|
||||||
AV_CODEC_ID_AAC_LATM,
|
|
||||||
AV_CODEC_ID_QDMC,
|
|
||||||
AV_CODEC_ID_CELT,
|
|
||||||
AV_CODEC_ID_G723_1,
|
|
||||||
AV_CODEC_ID_G729,
|
|
||||||
AV_CODEC_ID_8SVX_EXP,
|
|
||||||
AV_CODEC_ID_8SVX_FIB,
|
|
||||||
AV_CODEC_ID_BMV_AUDIO,
|
|
||||||
AV_CODEC_ID_RALF,
|
|
||||||
AV_CODEC_ID_IAC,
|
|
||||||
AV_CODEC_ID_ILBC,
|
|
||||||
AV_CODEC_ID_OPUS,
|
|
||||||
AV_CODEC_ID_COMFORT_NOISE,
|
|
||||||
AV_CODEC_ID_TAK,
|
|
||||||
AV_CODEC_ID_METASOUND,
|
|
||||||
AV_CODEC_ID_PAF_AUDIO,
|
|
||||||
AV_CODEC_ID_ON2AVC,
|
|
||||||
AV_CODEC_ID_DSS_SP,
|
|
||||||
AV_CODEC_ID_CODEC2,
|
|
||||||
|
|
||||||
AV_CODEC_ID_FFWAVESYNTH = 0x15800,
|
|
||||||
AV_CODEC_ID_SONIC,
|
|
||||||
AV_CODEC_ID_SONIC_LS,
|
|
||||||
AV_CODEC_ID_EVRC,
|
|
||||||
AV_CODEC_ID_SMV,
|
|
||||||
AV_CODEC_ID_DSD_LSBF,
|
|
||||||
AV_CODEC_ID_DSD_MSBF,
|
|
||||||
AV_CODEC_ID_DSD_LSBF_PLANAR,
|
|
||||||
AV_CODEC_ID_DSD_MSBF_PLANAR,
|
|
||||||
AV_CODEC_ID_4GV,
|
|
||||||
AV_CODEC_ID_INTERPLAY_ACM,
|
|
||||||
AV_CODEC_ID_XMA1,
|
|
||||||
AV_CODEC_ID_XMA2,
|
|
||||||
AV_CODEC_ID_DST,
|
|
||||||
AV_CODEC_ID_ATRAC3AL,
|
|
||||||
AV_CODEC_ID_ATRAC3PAL,
|
|
||||||
AV_CODEC_ID_DOLBY_E,
|
|
||||||
AV_CODEC_ID_APTX,
|
|
||||||
AV_CODEC_ID_APTX_HD,
|
|
||||||
AV_CODEC_ID_SBC,
|
|
||||||
AV_CODEC_ID_ATRAC9,
|
|
||||||
AV_CODEC_ID_HCOM,
|
|
||||||
AV_CODEC_ID_ACELP_KELVIN,
|
|
||||||
AV_CODEC_ID_MPEGH_3D_AUDIO,
|
|
||||||
AV_CODEC_ID_SIREN,
|
|
||||||
AV_CODEC_ID_HCA,
|
|
||||||
|
|
||||||
/* subtitle codecs */
|
|
||||||
AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs.
|
|
||||||
AV_CODEC_ID_DVD_SUBTITLE = 0x17000,
|
|
||||||
AV_CODEC_ID_DVB_SUBTITLE,
|
|
||||||
AV_CODEC_ID_TEXT, ///< raw UTF-8 text
|
|
||||||
AV_CODEC_ID_XSUB,
|
|
||||||
AV_CODEC_ID_SSA,
|
|
||||||
AV_CODEC_ID_MOV_TEXT,
|
|
||||||
AV_CODEC_ID_HDMV_PGS_SUBTITLE,
|
|
||||||
AV_CODEC_ID_DVB_TELETEXT,
|
|
||||||
AV_CODEC_ID_SRT,
|
|
||||||
|
|
||||||
AV_CODEC_ID_MICRODVD = 0x17800,
|
|
||||||
AV_CODEC_ID_EIA_608,
|
|
||||||
AV_CODEC_ID_JACOSUB,
|
|
||||||
AV_CODEC_ID_SAMI,
|
|
||||||
AV_CODEC_ID_REALTEXT,
|
|
||||||
AV_CODEC_ID_STL,
|
|
||||||
AV_CODEC_ID_SUBVIEWER1,
|
|
||||||
AV_CODEC_ID_SUBVIEWER,
|
|
||||||
AV_CODEC_ID_SUBRIP,
|
|
||||||
AV_CODEC_ID_WEBVTT,
|
|
||||||
AV_CODEC_ID_MPL2,
|
|
||||||
AV_CODEC_ID_VPLAYER,
|
|
||||||
AV_CODEC_ID_PJS,
|
|
||||||
AV_CODEC_ID_ASS,
|
|
||||||
AV_CODEC_ID_HDMV_TEXT_SUBTITLE,
|
|
||||||
AV_CODEC_ID_TTML,
|
|
||||||
AV_CODEC_ID_ARIB_CAPTION,
|
|
||||||
|
|
||||||
/* other specific kind of codecs (generally used for attachments) */
|
|
||||||
AV_CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs.
|
|
||||||
AV_CODEC_ID_TTF = 0x18000,
|
|
||||||
|
|
||||||
AV_CODEC_ID_SCTE_35, ///< Contain timestamp estimated through PCR of program stream.
|
|
||||||
AV_CODEC_ID_EPG,
|
|
||||||
AV_CODEC_ID_BINTEXT = 0x18800,
|
|
||||||
AV_CODEC_ID_XBIN,
|
|
||||||
AV_CODEC_ID_IDF,
|
|
||||||
AV_CODEC_ID_OTF,
|
|
||||||
AV_CODEC_ID_SMPTE_KLV,
|
|
||||||
AV_CODEC_ID_DVD_NAV,
|
|
||||||
AV_CODEC_ID_TIMED_ID3,
|
|
||||||
AV_CODEC_ID_BIN_DATA,
|
|
||||||
|
|
||||||
|
|
||||||
AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it
|
|
||||||
|
|
||||||
AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
|
|
||||||
* stream (only used by libavformat) */
|
|
||||||
AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems
|
|
||||||
* stream (only used by libavformat) */
|
|
||||||
AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information.
|
|
||||||
AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the type of the given codec.
|
|
||||||
*/
|
|
||||||
enum AVMediaType avcodec_get_type(enum AVCodecID codec_id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the name of a codec.
|
|
||||||
* @return a static string identifying the codec; never NULL
|
|
||||||
*/
|
|
||||||
const char *avcodec_get_name(enum AVCodecID id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif // AVCODEC_CODEC_ID_H
|
|
||||||
@@ -1,229 +0,0 @@
|
|||||||
/*
|
|
||||||
* Codec parameters public API
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_CODEC_PAR_H
|
|
||||||
#define AVCODEC_CODEC_PAR_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "avutil.h"
|
|
||||||
#include "rational.h"
|
|
||||||
#include "pixfmt.h"
|
|
||||||
|
|
||||||
#include "codec_id.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavc_core
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum AVFieldOrder {
|
|
||||||
AV_FIELD_UNKNOWN,
|
|
||||||
AV_FIELD_PROGRESSIVE,
|
|
||||||
AV_FIELD_TT, //< Top coded_first, top displayed first
|
|
||||||
AV_FIELD_BB, //< Bottom coded first, bottom displayed first
|
|
||||||
AV_FIELD_TB, //< Top coded first, bottom displayed first
|
|
||||||
AV_FIELD_BT, //< Bottom coded first, top displayed first
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct describes the properties of an encoded stream.
|
|
||||||
*
|
|
||||||
* sizeof(AVCodecParameters) is not a part of the public ABI, this struct must
|
|
||||||
* be allocated with avcodec_parameters_alloc() and freed with
|
|
||||||
* avcodec_parameters_free().
|
|
||||||
*/
|
|
||||||
typedef struct AVCodecParameters {
|
|
||||||
/**
|
|
||||||
* General type of the encoded data.
|
|
||||||
*/
|
|
||||||
enum AVMediaType codec_type;
|
|
||||||
/**
|
|
||||||
* Specific type of the encoded data (the codec used).
|
|
||||||
*/
|
|
||||||
enum AVCodecID codec_id;
|
|
||||||
/**
|
|
||||||
* Additional information about the codec (corresponds to the AVI FOURCC).
|
|
||||||
*/
|
|
||||||
uint32_t codec_tag;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extra binary data needed for initializing the decoder, codec-dependent.
|
|
||||||
*
|
|
||||||
* Must be allocated with av_malloc() and will be freed by
|
|
||||||
* avcodec_parameters_free(). The allocated size of extradata must be at
|
|
||||||
* least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding
|
|
||||||
* bytes zeroed.
|
|
||||||
*/
|
|
||||||
uint8_t *extradata;
|
|
||||||
/**
|
|
||||||
* Size of the extradata content in bytes.
|
|
||||||
*/
|
|
||||||
int extradata_size;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* - video: the pixel format, the value corresponds to enum AVPixelFormat.
|
|
||||||
* - audio: the sample format, the value corresponds to enum AVSampleFormat.
|
|
||||||
*/
|
|
||||||
int format;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The average bitrate of the encoded data (in bits per second).
|
|
||||||
*/
|
|
||||||
int64_t bit_rate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of bits per sample in the codedwords.
|
|
||||||
*
|
|
||||||
* This is basically the bitrate per sample. It is mandatory for a bunch of
|
|
||||||
* formats to actually decode them. It's the number of bits for one sample in
|
|
||||||
* the actual coded bitstream.
|
|
||||||
*
|
|
||||||
* This could be for example 4 for ADPCM
|
|
||||||
* For PCM formats this matches bits_per_raw_sample
|
|
||||||
* Can be 0
|
|
||||||
*/
|
|
||||||
int bits_per_coded_sample;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is the number of valid bits in each output sample. If the
|
|
||||||
* sample format has more bits, the least significant bits are additional
|
|
||||||
* padding bits, which are always 0. Use right shifts to reduce the sample
|
|
||||||
* to its actual size. For example, audio formats with 24 bit samples will
|
|
||||||
* have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32.
|
|
||||||
* To get the original sample use "(int32_t)sample >> 8"."
|
|
||||||
*
|
|
||||||
* For ADPCM this might be 12 or 16 or similar
|
|
||||||
* Can be 0
|
|
||||||
*/
|
|
||||||
int bits_per_raw_sample;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Codec-specific bitstream restrictions that the stream conforms to.
|
|
||||||
*/
|
|
||||||
int profile;
|
|
||||||
int level;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Video only. The dimensions of the video frame in pixels.
|
|
||||||
*/
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Video only. The aspect ratio (width / height) which a single pixel
|
|
||||||
* should have when displayed.
|
|
||||||
*
|
|
||||||
* When the aspect ratio is unknown / undefined, the numerator should be
|
|
||||||
* set to 0 (the denominator may have any value).
|
|
||||||
*/
|
|
||||||
AVRational sample_aspect_ratio;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Video only. The order of the fields in interlaced video.
|
|
||||||
*/
|
|
||||||
enum AVFieldOrder field_order;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Video only. Additional colorspace characteristics.
|
|
||||||
*/
|
|
||||||
enum AVColorRange color_range;
|
|
||||||
enum AVColorPrimaries color_primaries;
|
|
||||||
enum AVColorTransferCharacteristic color_trc;
|
|
||||||
enum AVColorSpace color_space;
|
|
||||||
enum AVChromaLocation chroma_location;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Video only. Number of delayed frames.
|
|
||||||
*/
|
|
||||||
int video_delay;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Audio only. The channel layout bitmask. May be 0 if the channel layout is
|
|
||||||
* unknown or unspecified, otherwise the number of bits set must be equal to
|
|
||||||
* the channels field.
|
|
||||||
*/
|
|
||||||
uint64_t channel_layout;
|
|
||||||
/**
|
|
||||||
* Audio only. The number of audio channels.
|
|
||||||
*/
|
|
||||||
int channels;
|
|
||||||
/**
|
|
||||||
* Audio only. The number of audio samples per second.
|
|
||||||
*/
|
|
||||||
int sample_rate;
|
|
||||||
/**
|
|
||||||
* Audio only. The number of bytes per coded audio frame, required by some
|
|
||||||
* formats.
|
|
||||||
*
|
|
||||||
* Corresponds to nBlockAlign in WAVEFORMATEX.
|
|
||||||
*/
|
|
||||||
int block_align;
|
|
||||||
/**
|
|
||||||
* Audio only. Audio frame size, if known. Required by some formats to be static.
|
|
||||||
*/
|
|
||||||
int frame_size;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Audio only. The amount of padding (in samples) inserted by the encoder at
|
|
||||||
* the beginning of the audio. I.e. this number of leading decoded samples
|
|
||||||
* must be discarded by the caller to get the original audio without leading
|
|
||||||
* padding.
|
|
||||||
*/
|
|
||||||
int initial_padding;
|
|
||||||
/**
|
|
||||||
* Audio only. The amount of padding (in samples) appended by the encoder to
|
|
||||||
* the end of the audio. I.e. this number of decoded samples must be
|
|
||||||
* discarded by the caller from the end of the stream to get the original
|
|
||||||
* audio without any trailing padding.
|
|
||||||
*/
|
|
||||||
int trailing_padding;
|
|
||||||
/**
|
|
||||||
* Audio only. Number of samples to skip after a discontinuity.
|
|
||||||
*/
|
|
||||||
int seek_preroll;
|
|
||||||
} AVCodecParameters;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate a new AVCodecParameters and set its fields to default values
|
|
||||||
* (unknown/invalid/0). The returned struct must be freed with
|
|
||||||
* avcodec_parameters_free().
|
|
||||||
*/
|
|
||||||
AVCodecParameters *avcodec_parameters_alloc(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free an AVCodecParameters instance and everything associated with it and
|
|
||||||
* write NULL to the supplied pointer.
|
|
||||||
*/
|
|
||||||
void avcodec_parameters_free(AVCodecParameters **par);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy the contents of src to dst. Any allocated fields in dst are freed and
|
|
||||||
* replaced with newly allocated duplicates of the corresponding fields in src.
|
|
||||||
*
|
|
||||||
* @return >= 0 on success, a negative AVERROR code on failure.
|
|
||||||
*/
|
|
||||||
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif // AVCODEC_CODEC_PAR_H
|
|
||||||
@@ -1,112 +0,0 @@
|
|||||||
/*
|
|
||||||
* Direct3D11 HW acceleration
|
|
||||||
*
|
|
||||||
* copyright (c) 2009 Laurent Aimar
|
|
||||||
* copyright (c) 2015 Steve Lhomme
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_D3D11VA_H
|
|
||||||
#define AVCODEC_D3D11VA_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavc_codec_hwaccel_d3d11va
|
|
||||||
* Public libavcodec D3D11VA header.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602
|
|
||||||
#undef _WIN32_WINNT
|
|
||||||
#define _WIN32_WINNT 0x0602
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <d3d11.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavc_codec_hwaccel_d3d11va Direct3D11
|
|
||||||
* @ingroup lavc_codec_hwaccel
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for Direct3D11 and old UVD/UVD+ ATI video cards
|
|
||||||
#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 ///< Work around for Direct3D11 and old Intel GPUs with ClearVideo interface
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This structure is used to provides the necessary configurations and data
|
|
||||||
* to the Direct3D11 FFmpeg HWAccel implementation.
|
|
||||||
*
|
|
||||||
* The application must make it available as AVCodecContext.hwaccel_context.
|
|
||||||
*
|
|
||||||
* Use av_d3d11va_alloc_context() exclusively to allocate an AVD3D11VAContext.
|
|
||||||
*/
|
|
||||||
typedef struct AVD3D11VAContext {
|
|
||||||
/**
|
|
||||||
* D3D11 decoder object
|
|
||||||
*/
|
|
||||||
ID3D11VideoDecoder *decoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* D3D11 VideoContext
|
|
||||||
*/
|
|
||||||
ID3D11VideoContext *video_context;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* D3D11 configuration used to create the decoder
|
|
||||||
*/
|
|
||||||
D3D11_VIDEO_DECODER_CONFIG *cfg;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of surface in the surface array
|
|
||||||
*/
|
|
||||||
unsigned surface_count;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The array of Direct3D surfaces used to create the decoder
|
|
||||||
*/
|
|
||||||
ID3D11VideoDecoderOutputView **surface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A bit field configuring the workarounds needed for using the decoder
|
|
||||||
*/
|
|
||||||
uint64_t workaround;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Private to the FFmpeg AVHWAccel implementation
|
|
||||||
*/
|
|
||||||
unsigned report_id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mutex to access video_context
|
|
||||||
*/
|
|
||||||
HANDLE context_mutex;
|
|
||||||
} AVD3D11VAContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVD3D11VAContext.
|
|
||||||
*
|
|
||||||
* @return Newly-allocated AVD3D11VAContext or NULL on failure.
|
|
||||||
*/
|
|
||||||
AVD3D11VAContext *av_d3d11va_alloc_context(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVCODEC_D3D11VA_H */
|
|
||||||
@@ -1,131 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2007 Marco Gerards <marco@gnu.org>
|
|
||||||
* Copyright (C) 2009 David Conrad
|
|
||||||
* Copyright (C) 2011 Jordi Ortiz
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_DIRAC_H
|
|
||||||
#define AVCODEC_DIRAC_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* Interface to Dirac Decoder/Encoder
|
|
||||||
* @author Marco Gerards <marco@gnu.org>
|
|
||||||
* @author David Conrad
|
|
||||||
* @author Jordi Ortiz
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "avcodec.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The spec limits the number of wavelet decompositions to 4 for both
|
|
||||||
* level 1 (VC-2) and 128 (long-gop default).
|
|
||||||
* 5 decompositions is the maximum before >16-bit buffers are needed.
|
|
||||||
* Schroedinger allows this for DD 9,7 and 13,7 wavelets only, limiting
|
|
||||||
* the others to 4 decompositions (or 3 for the fidelity filter).
|
|
||||||
*
|
|
||||||
* We use this instead of MAX_DECOMPOSITIONS to save some memory.
|
|
||||||
*/
|
|
||||||
#define MAX_DWT_LEVELS 5
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse code values:
|
|
||||||
*
|
|
||||||
* Dirac Specification ->
|
|
||||||
* 9.6.1 Table 9.1
|
|
||||||
*
|
|
||||||
* VC-2 Specification ->
|
|
||||||
* 10.4.1 Table 10.1
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum DiracParseCodes {
|
|
||||||
DIRAC_PCODE_SEQ_HEADER = 0x00,
|
|
||||||
DIRAC_PCODE_END_SEQ = 0x10,
|
|
||||||
DIRAC_PCODE_AUX = 0x20,
|
|
||||||
DIRAC_PCODE_PAD = 0x30,
|
|
||||||
DIRAC_PCODE_PICTURE_CODED = 0x08,
|
|
||||||
DIRAC_PCODE_PICTURE_RAW = 0x48,
|
|
||||||
DIRAC_PCODE_PICTURE_LOW_DEL = 0xC8,
|
|
||||||
DIRAC_PCODE_PICTURE_HQ = 0xE8,
|
|
||||||
DIRAC_PCODE_INTER_NOREF_CO1 = 0x0A,
|
|
||||||
DIRAC_PCODE_INTER_NOREF_CO2 = 0x09,
|
|
||||||
DIRAC_PCODE_INTER_REF_CO1 = 0x0D,
|
|
||||||
DIRAC_PCODE_INTER_REF_CO2 = 0x0E,
|
|
||||||
DIRAC_PCODE_INTRA_REF_CO = 0x0C,
|
|
||||||
DIRAC_PCODE_INTRA_REF_RAW = 0x4C,
|
|
||||||
DIRAC_PCODE_INTRA_REF_PICT = 0xCC,
|
|
||||||
DIRAC_PCODE_MAGIC = 0x42424344,
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct DiracVersionInfo {
|
|
||||||
int major;
|
|
||||||
int minor;
|
|
||||||
} DiracVersionInfo;
|
|
||||||
|
|
||||||
typedef struct AVDiracSeqHeader {
|
|
||||||
unsigned width;
|
|
||||||
unsigned height;
|
|
||||||
uint8_t chroma_format; ///< 0: 444 1: 422 2: 420
|
|
||||||
|
|
||||||
uint8_t interlaced;
|
|
||||||
uint8_t top_field_first;
|
|
||||||
|
|
||||||
uint8_t frame_rate_index; ///< index into dirac_frame_rate[]
|
|
||||||
uint8_t aspect_ratio_index; ///< index into dirac_aspect_ratio[]
|
|
||||||
|
|
||||||
uint16_t clean_width;
|
|
||||||
uint16_t clean_height;
|
|
||||||
uint16_t clean_left_offset;
|
|
||||||
uint16_t clean_right_offset;
|
|
||||||
|
|
||||||
uint8_t pixel_range_index; ///< index into dirac_pixel_range_presets[]
|
|
||||||
uint8_t color_spec_index; ///< index into dirac_color_spec_presets[]
|
|
||||||
|
|
||||||
int profile;
|
|
||||||
int level;
|
|
||||||
|
|
||||||
AVRational framerate;
|
|
||||||
AVRational sample_aspect_ratio;
|
|
||||||
|
|
||||||
enum AVPixelFormat pix_fmt;
|
|
||||||
enum AVColorRange color_range;
|
|
||||||
enum AVColorPrimaries color_primaries;
|
|
||||||
enum AVColorTransferCharacteristic color_trc;
|
|
||||||
enum AVColorSpace colorspace;
|
|
||||||
|
|
||||||
DiracVersionInfo version;
|
|
||||||
int bit_depth;
|
|
||||||
} AVDiracSeqHeader;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse a Dirac sequence header.
|
|
||||||
*
|
|
||||||
* @param dsh this function will allocate and fill an AVDiracSeqHeader struct
|
|
||||||
* and write it into this pointer. The caller must free it with
|
|
||||||
* av_free().
|
|
||||||
* @param buf the data buffer
|
|
||||||
* @param buf_size the size of the data buffer in bytes
|
|
||||||
* @param log_ctx if non-NULL, this function will log errors here
|
|
||||||
* @return 0 on success, a negative AVERROR code on failure
|
|
||||||
*/
|
|
||||||
int av_dirac_parse_sequence_header(AVDiracSeqHeader **dsh,
|
|
||||||
const uint8_t *buf, size_t buf_size,
|
|
||||||
void *log_ctx);
|
|
||||||
|
|
||||||
#endif /* AVCODEC_DIRAC_H */
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 AVCODEC_DV_PROFILE_H
|
|
||||||
#define AVCODEC_DV_PROFILE_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "pixfmt.h"
|
|
||||||
#include "rational.h"
|
|
||||||
#include "avcodec.h"
|
|
||||||
|
|
||||||
/* minimum number of bytes to read from a DV stream in order to
|
|
||||||
* determine the profile */
|
|
||||||
#define DV_PROFILE_BYTES (6 * 80) /* 6 DIF blocks */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* AVDVProfile is used to express the differences between various
|
|
||||||
* DV flavors. For now it's primarily used for differentiating
|
|
||||||
* 525/60 and 625/50, but the plans are to use it for various
|
|
||||||
* DV specs as well (e.g. SMPTE314M vs. IEC 61834).
|
|
||||||
*/
|
|
||||||
typedef struct AVDVProfile {
|
|
||||||
int dsf; /* value of the dsf in the DV header */
|
|
||||||
int video_stype; /* stype for VAUX source pack */
|
|
||||||
int frame_size; /* total size of one frame in bytes */
|
|
||||||
int difseg_size; /* number of DIF segments per DIF channel */
|
|
||||||
int n_difchan; /* number of DIF channels per frame */
|
|
||||||
AVRational time_base; /* 1/framerate */
|
|
||||||
int ltc_divisor; /* FPS from the LTS standpoint */
|
|
||||||
int height; /* picture height in pixels */
|
|
||||||
int width; /* picture width in pixels */
|
|
||||||
AVRational sar[2]; /* sample aspect ratios for 4:3 and 16:9 */
|
|
||||||
enum AVPixelFormat pix_fmt; /* picture pixel format */
|
|
||||||
int bpm; /* blocks per macroblock */
|
|
||||||
const uint8_t *block_sizes; /* AC block sizes, in bits */
|
|
||||||
int audio_stride; /* size of audio_shuffle table */
|
|
||||||
int audio_min_samples[3]; /* min amount of audio samples */
|
|
||||||
/* for 48kHz, 44.1kHz and 32kHz */
|
|
||||||
int audio_samples_dist[5]; /* how many samples are supposed to be */
|
|
||||||
/* in each frame in a 5 frames window */
|
|
||||||
const uint8_t (*audio_shuffle)[9]; /* PCM shuffling table */
|
|
||||||
} AVDVProfile;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a DV profile for the provided compressed frame.
|
|
||||||
*
|
|
||||||
* @param sys the profile used for the previous frame, may be NULL
|
|
||||||
* @param frame the compressed data buffer
|
|
||||||
* @param buf_size size of the buffer in bytes
|
|
||||||
* @return the DV profile for the supplied data or NULL on failure
|
|
||||||
*/
|
|
||||||
const AVDVProfile *av_dv_frame_profile(const AVDVProfile *sys,
|
|
||||||
const uint8_t *frame, unsigned buf_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a DV profile for the provided stream parameters.
|
|
||||||
*/
|
|
||||||
const AVDVProfile *av_dv_codec_profile(int width, int height, enum AVPixelFormat pix_fmt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a DV profile for the provided stream parameters.
|
|
||||||
* The frame rate is used as a best-effort parameter.
|
|
||||||
*/
|
|
||||||
const AVDVProfile *av_dv_codec_profile2(int width, int height, enum AVPixelFormat pix_fmt, AVRational frame_rate);
|
|
||||||
|
|
||||||
#endif /* AVCODEC_DV_PROFILE_H */
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
/*
|
|
||||||
* DXVA2 HW acceleration
|
|
||||||
*
|
|
||||||
* copyright (c) 2009 Laurent Aimar
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_DXVA2_H
|
|
||||||
#define AVCODEC_DXVA2_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavc_codec_hwaccel_dxva2
|
|
||||||
* Public libavcodec DXVA2 header.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602
|
|
||||||
#undef _WIN32_WINNT
|
|
||||||
#define _WIN32_WINNT 0x0602
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <d3d9.h>
|
|
||||||
#include <dxva2api.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavc_codec_hwaccel_dxva2 DXVA2
|
|
||||||
* @ingroup lavc_codec_hwaccel
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for DXVA2 and old UVD/UVD+ ATI video cards
|
|
||||||
#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 ///< Work around for DXVA2 and old Intel GPUs with ClearVideo interface
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This structure is used to provides the necessary configurations and data
|
|
||||||
* to the DXVA2 FFmpeg HWAccel implementation.
|
|
||||||
*
|
|
||||||
* The application must make it available as AVCodecContext.hwaccel_context.
|
|
||||||
*/
|
|
||||||
struct dxva_context {
|
|
||||||
/**
|
|
||||||
* DXVA2 decoder object
|
|
||||||
*/
|
|
||||||
IDirectXVideoDecoder *decoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DXVA2 configuration used to create the decoder
|
|
||||||
*/
|
|
||||||
const DXVA2_ConfigPictureDecode *cfg;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of surface in the surface array
|
|
||||||
*/
|
|
||||||
unsigned surface_count;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The array of Direct3D surfaces used to create the decoder
|
|
||||||
*/
|
|
||||||
LPDIRECT3DSURFACE9 *surface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A bit field configuring the workarounds needed for using the decoder
|
|
||||||
*/
|
|
||||||
uint64_t workaround;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Private to the FFmpeg AVHWAccel implementation
|
|
||||||
*/
|
|
||||||
unsigned report_id;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVCODEC_DXVA2_H */
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
* JNI public API functions
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015-2016 Matthieu Bouron <matthieu.bouron stupeflix.com>
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_JNI_H
|
|
||||||
#define AVCODEC_JNI_H
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Manually set a Java virtual machine which will be used to retrieve the JNI
|
|
||||||
* environment. Once a Java VM is set it cannot be changed afterwards, meaning
|
|
||||||
* you can call multiple times av_jni_set_java_vm with the same Java VM pointer
|
|
||||||
* however it will error out if you try to set a different Java VM.
|
|
||||||
*
|
|
||||||
* @param vm Java virtual machine
|
|
||||||
* @param log_ctx context used for logging, can be NULL
|
|
||||||
* @return 0 on success, < 0 otherwise
|
|
||||||
*/
|
|
||||||
int av_jni_set_java_vm(void *vm, void *log_ctx);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get the Java virtual machine which has been set with av_jni_set_java_vm.
|
|
||||||
*
|
|
||||||
* @param vm Java virtual machine
|
|
||||||
* @return a pointer to the Java virtual machine
|
|
||||||
*/
|
|
||||||
void *av_jni_get_java_vm(void *log_ctx);
|
|
||||||
|
|
||||||
#endif /* AVCODEC_JNI_H */
|
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
/*
|
|
||||||
* Android MediaCodec public API
|
|
||||||
*
|
|
||||||
* Copyright (c) 2016 Matthieu Bouron <matthieu.bouron stupeflix.com>
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_MEDIACODEC_H
|
|
||||||
#define AVCODEC_MEDIACODEC_H
|
|
||||||
|
|
||||||
#include "avcodec.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This structure holds a reference to a android/view/Surface object that will
|
|
||||||
* be used as output by the decoder.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
typedef struct AVMediaCodecContext {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* android/view/Surface object reference.
|
|
||||||
*/
|
|
||||||
void *surface;
|
|
||||||
|
|
||||||
} AVMediaCodecContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate and initialize a MediaCodec context.
|
|
||||||
*
|
|
||||||
* When decoding with MediaCodec is finished, the caller must free the
|
|
||||||
* MediaCodec context with av_mediacodec_default_free.
|
|
||||||
*
|
|
||||||
* @return a pointer to a newly allocated AVMediaCodecContext on success, NULL otherwise
|
|
||||||
*/
|
|
||||||
AVMediaCodecContext *av_mediacodec_alloc_context(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convenience function that sets up the MediaCodec context.
|
|
||||||
*
|
|
||||||
* @param avctx codec context
|
|
||||||
* @param ctx MediaCodec context to initialize
|
|
||||||
* @param surface reference to an android/view/Surface
|
|
||||||
* @return 0 on success, < 0 otherwise
|
|
||||||
*/
|
|
||||||
int av_mediacodec_default_init(AVCodecContext *avctx, AVMediaCodecContext *ctx, void *surface);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function must be called to free the MediaCodec context initialized with
|
|
||||||
* av_mediacodec_default_init().
|
|
||||||
*
|
|
||||||
* @param avctx codec context
|
|
||||||
*/
|
|
||||||
void av_mediacodec_default_free(AVCodecContext *avctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Opaque structure representing a MediaCodec buffer to render.
|
|
||||||
*/
|
|
||||||
typedef struct MediaCodecBuffer AVMediaCodecBuffer;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Release a MediaCodec buffer and render it to the surface that is associated
|
|
||||||
* with the decoder. This function should only be called once on a given
|
|
||||||
* buffer, once released the underlying buffer returns to the codec, thus
|
|
||||||
* subsequent calls to this function will have no effect.
|
|
||||||
*
|
|
||||||
* @param buffer the buffer to render
|
|
||||||
* @param render 1 to release and render the buffer to the surface or 0 to
|
|
||||||
* discard the buffer
|
|
||||||
* @return 0 on success, < 0 otherwise
|
|
||||||
*/
|
|
||||||
int av_mediacodec_release_buffer(AVMediaCodecBuffer *buffer, int render);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Release a MediaCodec buffer and render it at the given time to the surface
|
|
||||||
* that is associated with the decoder. The timestamp must be within one second
|
|
||||||
* of the current java/lang/System#nanoTime() (which is implemented using
|
|
||||||
* CLOCK_MONOTONIC on Android). See the Android MediaCodec documentation
|
|
||||||
* of android/media/MediaCodec#releaseOutputBuffer(int,long) for more details.
|
|
||||||
*
|
|
||||||
* @param buffer the buffer to render
|
|
||||||
* @param time timestamp in nanoseconds of when to render the buffer
|
|
||||||
* @return 0 on success, < 0 otherwise
|
|
||||||
*/
|
|
||||||
int av_mediacodec_render_buffer_at_time(AVMediaCodecBuffer *buffer, int64_t time);
|
|
||||||
|
|
||||||
#endif /* AVCODEC_MEDIACODEC_H */
|
|
||||||
@@ -1,722 +0,0 @@
|
|||||||
/*
|
|
||||||
* AVPacket public API
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_PACKET_H
|
|
||||||
#define AVCODEC_PACKET_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "attributes.h"
|
|
||||||
#include "buffer.h"
|
|
||||||
#include "dict.h"
|
|
||||||
#include "rational.h"
|
|
||||||
|
|
||||||
#include "avcodecVersion.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavc_packet AVPacket
|
|
||||||
*
|
|
||||||
* Types and functions for working with AVPacket.
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
enum AVPacketSideDataType {
|
|
||||||
/**
|
|
||||||
* An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE
|
|
||||||
* bytes worth of palette. This side data signals that a new palette is
|
|
||||||
* present.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_PALETTE,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format
|
|
||||||
* that the extradata buffer was changed and the receiving side should
|
|
||||||
* act upon it appropriately. The new extradata is embedded in the side
|
|
||||||
* data buffer and should be immediately used for processing the current
|
|
||||||
* frame or packet.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_NEW_EXTRADATA,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
|
|
||||||
* @code
|
|
||||||
* u32le param_flags
|
|
||||||
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT)
|
|
||||||
* s32le channel_count
|
|
||||||
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT)
|
|
||||||
* u64le channel_layout
|
|
||||||
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE)
|
|
||||||
* s32le sample_rate
|
|
||||||
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS)
|
|
||||||
* s32le width
|
|
||||||
* s32le height
|
|
||||||
* @endcode
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_PARAM_CHANGE,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of
|
|
||||||
* structures with info about macroblocks relevant to splitting the
|
|
||||||
* packet into smaller packets on macroblock edges (e.g. as for RFC 2190).
|
|
||||||
* That is, it does not necessarily contain info about all macroblocks,
|
|
||||||
* as long as the distance between macroblocks in the info is smaller
|
|
||||||
* than the target payload size.
|
|
||||||
* Each MB info structure is 12 bytes, and is laid out as follows:
|
|
||||||
* @code
|
|
||||||
* u32le bit offset from the start of the packet
|
|
||||||
* u8 current quantizer at the start of the macroblock
|
|
||||||
* u8 GOB number
|
|
||||||
* u16le macroblock address within the GOB
|
|
||||||
* u8 horizontal MV predictor
|
|
||||||
* u8 vertical MV predictor
|
|
||||||
* u8 horizontal MV predictor for block number 3
|
|
||||||
* u8 vertical MV predictor for block number 3
|
|
||||||
* @endcode
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_H263_MB_INFO,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This side data should be associated with an audio stream and contains
|
|
||||||
* ReplayGain information in form of the AVReplayGain struct.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_REPLAYGAIN,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This side data contains a 3x3 transformation matrix describing an affine
|
|
||||||
* transformation that needs to be applied to the decoded video frames for
|
|
||||||
* correct presentation.
|
|
||||||
*
|
|
||||||
* See display.h for a detailed description of the data.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_DISPLAYMATRIX,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This side data should be associated with a video stream and contains
|
|
||||||
* Stereoscopic 3D information in form of the AVStereo3D struct.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_STEREO3D,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This side data should be associated with an audio stream and corresponds
|
|
||||||
* to enum AVAudioServiceType.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_AUDIO_SERVICE_TYPE,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This side data contains quality related information from the encoder.
|
|
||||||
* @code
|
|
||||||
* u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad).
|
|
||||||
* u8 picture type
|
|
||||||
* u8 error count
|
|
||||||
* u16 reserved
|
|
||||||
* u64le[error count] sum of squared differences between encoder in and output
|
|
||||||
* @endcode
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_QUALITY_STATS,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This side data contains an integer value representing the stream index
|
|
||||||
* of a "fallback" track. A fallback track indicates an alternate
|
|
||||||
* track to use when the current track can not be decoded for some reason.
|
|
||||||
* e.g. no decoder available for codec.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_FALLBACK_TRACK,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This side data corresponds to the AVCPBProperties struct.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_CPB_PROPERTIES,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Recommmends skipping the specified number of samples
|
|
||||||
* @code
|
|
||||||
* u32le number of samples to skip from start of this packet
|
|
||||||
* u32le number of samples to skip from end of this packet
|
|
||||||
* u8 reason for start skip
|
|
||||||
* u8 reason for end skip (0=padding silence, 1=convergence)
|
|
||||||
* @endcode
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_SKIP_SAMPLES,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An AV_PKT_DATA_JP_DUALMONO side data packet indicates that
|
|
||||||
* the packet may contain "dual mono" audio specific to Japanese DTV
|
|
||||||
* and if it is true, recommends only the selected channel to be used.
|
|
||||||
* @code
|
|
||||||
* u8 selected channels (0=mail/left, 1=sub/right, 2=both)
|
|
||||||
* @endcode
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_JP_DUALMONO,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A list of zero terminated key/value strings. There is no end marker for
|
|
||||||
* the list, so it is required to rely on the side data size to stop.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_STRINGS_METADATA,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Subtitle event position
|
|
||||||
* @code
|
|
||||||
* u32le x1
|
|
||||||
* u32le y1
|
|
||||||
* u32le x2
|
|
||||||
* u32le y2
|
|
||||||
* @endcode
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_SUBTITLE_POSITION,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Data found in BlockAdditional element of matroska container. There is
|
|
||||||
* no end marker for the data, so it is required to rely on the side data
|
|
||||||
* size to recognize the end. 8 byte id (as found in BlockAddId) followed
|
|
||||||
* by data.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The optional first identifier line of a WebVTT cue.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_WEBVTT_IDENTIFIER,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The optional settings (rendering instructions) that immediately
|
|
||||||
* follow the timestamp specifier of a WebVTT cue.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_WEBVTT_SETTINGS,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A list of zero terminated key/value strings. There is no end marker for
|
|
||||||
* the list, so it is required to rely on the side data size to stop. This
|
|
||||||
* side data includes updated metadata which appeared in the stream.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_METADATA_UPDATE,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* MPEGTS stream ID as uint8_t, this is required to pass the stream ID
|
|
||||||
* information from the demuxer to the corresponding muxer.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_MPEGTS_STREAM_ID,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mastering display metadata (based on SMPTE-2086:2014). This metadata
|
|
||||||
* should be associated with a video stream and contains data in the form
|
|
||||||
* of the AVMasteringDisplayMetadata struct.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This side data should be associated with a video stream and corresponds
|
|
||||||
* to the AVSphericalMapping structure.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_SPHERICAL,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Content light level (based on CTA-861.3). This metadata should be
|
|
||||||
* associated with a video stream and contains data in the form of the
|
|
||||||
* AVContentLightMetadata struct.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ATSC A53 Part 4 Closed Captions. This metadata should be associated with
|
|
||||||
* a video stream. A53 CC bitstream is stored as uint8_t in AVPacketSideData.data.
|
|
||||||
* The number of bytes of CC data is AVPacketSideData.size.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_A53_CC,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This side data is encryption initialization data.
|
|
||||||
* The format is not part of ABI, use av_encryption_init_info_* methods to
|
|
||||||
* access.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_ENCRYPTION_INIT_INFO,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This side data contains encryption info for how to decrypt the packet.
|
|
||||||
* The format is not part of ABI, use av_encryption_info_* methods to access.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_ENCRYPTION_INFO,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Active Format Description data consisting of a single byte as specified
|
|
||||||
* in ETSI TS 101 154 using AVActiveFormatDescription enum.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_AFD,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Producer Reference Time data corresponding to the AVProducerReferenceTime struct,
|
|
||||||
* usually exported by some encoders (on demand through the prft flag set in the
|
|
||||||
* AVCodecContext export_side_data field).
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_PRFT,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ICC profile data consisting of an opaque octet buffer following the
|
|
||||||
* format described by ISO 15076-1.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_ICC_PROFILE,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DOVI configuration
|
|
||||||
* ref:
|
|
||||||
* dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2, section 2.2
|
|
||||||
* dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2, section 3.3
|
|
||||||
* Tags are stored in struct AVDOVIDecoderConfigurationRecord.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_DOVI_CONF,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of side data types.
|
|
||||||
* This is not part of the public API/ABI in the sense that it may
|
|
||||||
* change when new side data types are added.
|
|
||||||
* This must stay the last enum value.
|
|
||||||
* If its value becomes huge, some code using it
|
|
||||||
* needs to be updated as it assumes it to be smaller than other limits.
|
|
||||||
*/
|
|
||||||
AV_PKT_DATA_NB
|
|
||||||
};
|
|
||||||
|
|
||||||
#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED
|
|
||||||
|
|
||||||
typedef struct AVPacketSideData {
|
|
||||||
uint8_t *data;
|
|
||||||
int size;
|
|
||||||
enum AVPacketSideDataType type;
|
|
||||||
} AVPacketSideData;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This structure stores compressed data. It is typically exported by demuxers
|
|
||||||
* and then passed as input to decoders, or received as output from encoders and
|
|
||||||
* then passed to muxers.
|
|
||||||
*
|
|
||||||
* For video, it should typically contain one compressed frame. For audio it may
|
|
||||||
* contain several compressed frames. Encoders are allowed to output empty
|
|
||||||
* packets, with no compressed data, containing only side data
|
|
||||||
* (e.g. to update some stream parameters at the end of encoding).
|
|
||||||
*
|
|
||||||
* AVPacket is one of the few structs in FFmpeg, whose size is a part of public
|
|
||||||
* ABI. Thus it may be allocated on stack and no new fields can be added to it
|
|
||||||
* without libavcodec and libavformat major bump.
|
|
||||||
*
|
|
||||||
* The semantics of data ownership depends on the buf field.
|
|
||||||
* If it is set, the packet data is dynamically allocated and is
|
|
||||||
* valid indefinitely until a call to av_packet_unref() reduces the
|
|
||||||
* reference count to 0.
|
|
||||||
*
|
|
||||||
* If the buf field is not set av_packet_ref() would make a copy instead
|
|
||||||
* of increasing the reference count.
|
|
||||||
*
|
|
||||||
* The side data is always allocated with av_malloc(), copied by
|
|
||||||
* av_packet_ref() and freed by av_packet_unref().
|
|
||||||
*
|
|
||||||
* @see av_packet_ref
|
|
||||||
* @see av_packet_unref
|
|
||||||
*/
|
|
||||||
typedef struct AVPacket {
|
|
||||||
/**
|
|
||||||
* A reference to the reference-counted buffer where the packet data is
|
|
||||||
* stored.
|
|
||||||
* May be NULL, then the packet data is not reference-counted.
|
|
||||||
*/
|
|
||||||
AVBufferRef *buf;
|
|
||||||
/**
|
|
||||||
* Presentation timestamp in AVStream->time_base units; the time at which
|
|
||||||
* the decompressed packet will be presented to the user.
|
|
||||||
* Can be AV_NOPTS_VALUE if it is not stored in the file.
|
|
||||||
* pts MUST be larger or equal to dts as presentation cannot happen before
|
|
||||||
* decompression, unless one wants to view hex dumps. Some formats misuse
|
|
||||||
* the terms dts and pts/cts to mean something different. Such timestamps
|
|
||||||
* must be converted to true pts/dts before they are stored in AVPacket.
|
|
||||||
*/
|
|
||||||
int64_t pts;
|
|
||||||
/**
|
|
||||||
* Decompression timestamp in AVStream->time_base units; the time at which
|
|
||||||
* the packet is decompressed.
|
|
||||||
* Can be AV_NOPTS_VALUE if it is not stored in the file.
|
|
||||||
*/
|
|
||||||
int64_t dts;
|
|
||||||
uint8_t *data;
|
|
||||||
int size;
|
|
||||||
int stream_index;
|
|
||||||
/**
|
|
||||||
* A combination of AV_PKT_FLAG values
|
|
||||||
*/
|
|
||||||
int flags;
|
|
||||||
/**
|
|
||||||
* Additional packet data that can be provided by the container.
|
|
||||||
* Packet can contain several types of side information.
|
|
||||||
*/
|
|
||||||
AVPacketSideData *side_data;
|
|
||||||
int side_data_elems;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Duration of this packet in AVStream->time_base units, 0 if unknown.
|
|
||||||
* Equals next_pts - this_pts in presentation order.
|
|
||||||
*/
|
|
||||||
int64_t duration;
|
|
||||||
|
|
||||||
int64_t pos; ///< byte position in stream, -1 if unknown
|
|
||||||
|
|
||||||
#if FF_API_CONVERGENCE_DURATION
|
|
||||||
/**
|
|
||||||
* @deprecated Same as the duration field, but as int64_t. This was required
|
|
||||||
* for Matroska subtitles, whose duration values could overflow when the
|
|
||||||
* duration field was still an int.
|
|
||||||
*/
|
|
||||||
attribute_deprecated
|
|
||||||
int64_t convergence_duration;
|
|
||||||
#endif
|
|
||||||
} AVPacket;
|
|
||||||
|
|
||||||
#define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe
|
|
||||||
#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted
|
|
||||||
/**
|
|
||||||
* Flag is used to discard packets which are required to maintain valid
|
|
||||||
* decoder state but are not required for output and should be dropped
|
|
||||||
* after decoding.
|
|
||||||
**/
|
|
||||||
#define AV_PKT_FLAG_DISCARD 0x0004
|
|
||||||
/**
|
|
||||||
* The packet comes from a trusted source.
|
|
||||||
*
|
|
||||||
* Otherwise-unsafe constructs such as arbitrary pointers to data
|
|
||||||
* outside the packet may be followed.
|
|
||||||
*/
|
|
||||||
#define AV_PKT_FLAG_TRUSTED 0x0008
|
|
||||||
/**
|
|
||||||
* Flag is used to indicate packets that contain frames that can
|
|
||||||
* be discarded by the decoder. I.e. Non-reference frames.
|
|
||||||
*/
|
|
||||||
#define AV_PKT_FLAG_DISPOSABLE 0x0010
|
|
||||||
|
|
||||||
enum AVSideDataParamChangeFlags {
|
|
||||||
AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001,
|
|
||||||
AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002,
|
|
||||||
AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004,
|
|
||||||
AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVPacket and set its fields to default values. The resulting
|
|
||||||
* struct must be freed using av_packet_free().
|
|
||||||
*
|
|
||||||
* @return An AVPacket filled with default values or NULL on failure.
|
|
||||||
*
|
|
||||||
* @note this only allocates the AVPacket itself, not the data buffers. Those
|
|
||||||
* must be allocated through other means such as av_new_packet.
|
|
||||||
*
|
|
||||||
* @see av_new_packet
|
|
||||||
*/
|
|
||||||
AVPacket *av_packet_alloc(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new packet that references the same data as src.
|
|
||||||
*
|
|
||||||
* This is a shortcut for av_packet_alloc()+av_packet_ref().
|
|
||||||
*
|
|
||||||
* @return newly created AVPacket on success, NULL on error.
|
|
||||||
*
|
|
||||||
* @see av_packet_alloc
|
|
||||||
* @see av_packet_ref
|
|
||||||
*/
|
|
||||||
AVPacket *av_packet_clone(const AVPacket *src);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free the packet, if the packet is reference counted, it will be
|
|
||||||
* unreferenced first.
|
|
||||||
*
|
|
||||||
* @param pkt packet to be freed. The pointer will be set to NULL.
|
|
||||||
* @note passing NULL is a no-op.
|
|
||||||
*/
|
|
||||||
void av_packet_free(AVPacket **pkt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize optional fields of a packet with default values.
|
|
||||||
*
|
|
||||||
* Note, this does not touch the data and size members, which have to be
|
|
||||||
* initialized separately.
|
|
||||||
*
|
|
||||||
* @param pkt packet
|
|
||||||
*/
|
|
||||||
void av_init_packet(AVPacket *pkt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate the payload of a packet and initialize its fields with
|
|
||||||
* default values.
|
|
||||||
*
|
|
||||||
* @param pkt packet
|
|
||||||
* @param size wanted payload size
|
|
||||||
* @return 0 if OK, AVERROR_xxx otherwise
|
|
||||||
*/
|
|
||||||
int av_new_packet(AVPacket *pkt, int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reduce packet size, correctly zeroing padding
|
|
||||||
*
|
|
||||||
* @param pkt packet
|
|
||||||
* @param size new size
|
|
||||||
*/
|
|
||||||
void av_shrink_packet(AVPacket *pkt, int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Increase packet size, correctly zeroing padding
|
|
||||||
*
|
|
||||||
* @param pkt packet
|
|
||||||
* @param grow_by number of bytes by which to increase the size of the packet
|
|
||||||
*/
|
|
||||||
int av_grow_packet(AVPacket *pkt, int grow_by);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize a reference-counted packet from av_malloc()ed data.
|
|
||||||
*
|
|
||||||
* @param pkt packet to be initialized. This function will set the data, size,
|
|
||||||
* and buf fields, all others are left untouched.
|
|
||||||
* @param data Data allocated by av_malloc() to be used as packet data. If this
|
|
||||||
* function returns successfully, the data is owned by the underlying AVBuffer.
|
|
||||||
* The caller may not access the data through other means.
|
|
||||||
* @param size size of data in bytes, without the padding. I.e. the full buffer
|
|
||||||
* size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE.
|
|
||||||
*
|
|
||||||
* @return 0 on success, a negative AVERROR on error
|
|
||||||
*/
|
|
||||||
int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size);
|
|
||||||
|
|
||||||
#if FF_API_AVPACKET_OLD_API
|
|
||||||
/**
|
|
||||||
* @warning This is a hack - the packet memory allocation stuff is broken. The
|
|
||||||
* packet is allocated if it was not really allocated.
|
|
||||||
*
|
|
||||||
* @deprecated Use av_packet_ref or av_packet_make_refcounted
|
|
||||||
*/
|
|
||||||
attribute_deprecated
|
|
||||||
int av_dup_packet(AVPacket *pkt);
|
|
||||||
/**
|
|
||||||
* Copy packet, including contents
|
|
||||||
*
|
|
||||||
* @return 0 on success, negative AVERROR on fail
|
|
||||||
*
|
|
||||||
* @deprecated Use av_packet_ref
|
|
||||||
*/
|
|
||||||
attribute_deprecated
|
|
||||||
int av_copy_packet(AVPacket *dst, const AVPacket *src);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy packet side data
|
|
||||||
*
|
|
||||||
* @return 0 on success, negative AVERROR on fail
|
|
||||||
*
|
|
||||||
* @deprecated Use av_packet_copy_props
|
|
||||||
*/
|
|
||||||
attribute_deprecated
|
|
||||||
int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free a packet.
|
|
||||||
*
|
|
||||||
* @deprecated Use av_packet_unref
|
|
||||||
*
|
|
||||||
* @param pkt packet to free
|
|
||||||
*/
|
|
||||||
attribute_deprecated
|
|
||||||
void av_free_packet(AVPacket *pkt);
|
|
||||||
#endif
|
|
||||||
/**
|
|
||||||
* Allocate new information of a packet.
|
|
||||||
*
|
|
||||||
* @param pkt packet
|
|
||||||
* @param type side information type
|
|
||||||
* @param size side information size
|
|
||||||
* @return pointer to fresh allocated data or NULL otherwise
|
|
||||||
*/
|
|
||||||
uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
|
||||||
int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wrap an existing array as a packet side data.
|
|
||||||
*
|
|
||||||
* @param pkt packet
|
|
||||||
* @param type side information type
|
|
||||||
* @param data the side data array. It must be allocated with the av_malloc()
|
|
||||||
* family of functions. The ownership of the data is transferred to
|
|
||||||
* pkt.
|
|
||||||
* @param size side information size
|
|
||||||
* @return a non-negative number on success, a negative AVERROR code on
|
|
||||||
* failure. On failure, the packet is unchanged and the data remains
|
|
||||||
* owned by the caller.
|
|
||||||
*/
|
|
||||||
int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
|
||||||
uint8_t *data, size_t size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Shrink the already allocated side data buffer
|
|
||||||
*
|
|
||||||
* @param pkt packet
|
|
||||||
* @param type side information type
|
|
||||||
* @param size new side information size
|
|
||||||
* @return 0 on success, < 0 on failure
|
|
||||||
*/
|
|
||||||
int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
|
||||||
int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get side information from packet.
|
|
||||||
*
|
|
||||||
* @param pkt packet
|
|
||||||
* @param type desired side information type
|
|
||||||
* @param size pointer for side information size to store (optional)
|
|
||||||
* @return pointer to data if present or NULL otherwise
|
|
||||||
*/
|
|
||||||
uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type,
|
|
||||||
int *size);
|
|
||||||
|
|
||||||
#if FF_API_MERGE_SD_API
|
|
||||||
attribute_deprecated
|
|
||||||
int av_packet_merge_side_data(AVPacket *pkt);
|
|
||||||
|
|
||||||
attribute_deprecated
|
|
||||||
int av_packet_split_side_data(AVPacket *pkt);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *av_packet_side_data_name(enum AVPacketSideDataType type);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Pack a dictionary for use in side_data.
|
|
||||||
*
|
|
||||||
* @param dict The dictionary to pack.
|
|
||||||
* @param size pointer to store the size of the returned data
|
|
||||||
* @return pointer to data if successful, NULL otherwise
|
|
||||||
*/
|
|
||||||
uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size);
|
|
||||||
/**
|
|
||||||
* Unpack a dictionary from side_data.
|
|
||||||
*
|
|
||||||
* @param data data from side_data
|
|
||||||
* @param size size of the data
|
|
||||||
* @param dict the metadata storage dictionary
|
|
||||||
* @return 0 on success, < 0 on failure
|
|
||||||
*/
|
|
||||||
int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convenience function to free all the side data stored.
|
|
||||||
* All the other fields stay untouched.
|
|
||||||
*
|
|
||||||
* @param pkt packet
|
|
||||||
*/
|
|
||||||
void av_packet_free_side_data(AVPacket *pkt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setup a new reference to the data described by a given packet
|
|
||||||
*
|
|
||||||
* If src is reference-counted, setup dst as a new reference to the
|
|
||||||
* buffer in src. Otherwise allocate a new buffer in dst and copy the
|
|
||||||
* data from src into it.
|
|
||||||
*
|
|
||||||
* All the other fields are copied from src.
|
|
||||||
*
|
|
||||||
* @see av_packet_unref
|
|
||||||
*
|
|
||||||
* @param dst Destination packet. Will be completely overwritten.
|
|
||||||
* @param src Source packet
|
|
||||||
*
|
|
||||||
* @return 0 on success, a negative AVERROR on error. On error, dst
|
|
||||||
* will be blank (as if returned by av_packet_alloc()).
|
|
||||||
*/
|
|
||||||
int av_packet_ref(AVPacket *dst, const AVPacket *src);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wipe the packet.
|
|
||||||
*
|
|
||||||
* Unreference the buffer referenced by the packet and reset the
|
|
||||||
* remaining packet fields to their default values.
|
|
||||||
*
|
|
||||||
* @param pkt The packet to be unreferenced.
|
|
||||||
*/
|
|
||||||
void av_packet_unref(AVPacket *pkt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Move every field in src to dst and reset src.
|
|
||||||
*
|
|
||||||
* @see av_packet_unref
|
|
||||||
*
|
|
||||||
* @param src Source packet, will be reset
|
|
||||||
* @param dst Destination packet
|
|
||||||
*/
|
|
||||||
void av_packet_move_ref(AVPacket *dst, AVPacket *src);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy only "properties" fields from src to dst.
|
|
||||||
*
|
|
||||||
* Properties for the purpose of this function are all the fields
|
|
||||||
* beside those related to the packet data (buf, data, size)
|
|
||||||
*
|
|
||||||
* @param dst Destination packet
|
|
||||||
* @param src Source packet
|
|
||||||
*
|
|
||||||
* @return 0 on success AVERROR on failure.
|
|
||||||
*/
|
|
||||||
int av_packet_copy_props(AVPacket *dst, const AVPacket *src);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ensure the data described by a given packet is reference counted.
|
|
||||||
*
|
|
||||||
* @note This function does not ensure that the reference will be writable.
|
|
||||||
* Use av_packet_make_writable instead for that purpose.
|
|
||||||
*
|
|
||||||
* @see av_packet_ref
|
|
||||||
* @see av_packet_make_writable
|
|
||||||
*
|
|
||||||
* @param pkt packet whose data should be made reference counted.
|
|
||||||
*
|
|
||||||
* @return 0 on success, a negative AVERROR on error. On failure, the
|
|
||||||
* packet is unchanged.
|
|
||||||
*/
|
|
||||||
int av_packet_make_refcounted(AVPacket *pkt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a writable reference for the data described by a given packet,
|
|
||||||
* avoiding data copy if possible.
|
|
||||||
*
|
|
||||||
* @param pkt Packet whose data should be made writable.
|
|
||||||
*
|
|
||||||
* @return 0 on success, a negative AVERROR on failure. On failure, the
|
|
||||||
* packet is unchanged.
|
|
||||||
*/
|
|
||||||
int av_packet_make_writable(AVPacket *pkt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert valid timing fields (timestamps / durations) in a packet from one
|
|
||||||
* timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be
|
|
||||||
* ignored.
|
|
||||||
*
|
|
||||||
* @param pkt packet on which the conversion will be performed
|
|
||||||
* @param tb_src source timebase, in which the timing fields in pkt are
|
|
||||||
* expressed
|
|
||||||
* @param tb_dst destination timebase, to which the timing fields will be
|
|
||||||
* converted
|
|
||||||
*/
|
|
||||||
void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif // AVCODEC_PACKET_H
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
/*
|
|
||||||
* Intel MediaSDK QSV public API
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_QSV_H
|
|
||||||
#define AVCODEC_QSV_H
|
|
||||||
|
|
||||||
#include <mfx/mfxvideo.h>
|
|
||||||
|
|
||||||
#include "buffer.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct is used for communicating QSV parameters between libavcodec and
|
|
||||||
* the caller. It is managed by the caller and must be assigned to
|
|
||||||
* AVCodecContext.hwaccel_context.
|
|
||||||
* - decoding: hwaccel_context must be set on return from the get_format()
|
|
||||||
* callback
|
|
||||||
* - encoding: hwaccel_context must be set before avcodec_open2()
|
|
||||||
*/
|
|
||||||
typedef struct AVQSVContext {
|
|
||||||
/**
|
|
||||||
* If non-NULL, the session to use for encoding or decoding.
|
|
||||||
* Otherwise, libavcodec will try to create an internal session.
|
|
||||||
*/
|
|
||||||
mfxSession session;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The IO pattern to use.
|
|
||||||
*/
|
|
||||||
int iopattern;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extra buffers to pass to encoder or decoder initialization.
|
|
||||||
*/
|
|
||||||
mfxExtBuffer **ext_buffers;
|
|
||||||
int nb_ext_buffers;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encoding only. If this field is set to non-zero by the caller, libavcodec
|
|
||||||
* will create an mfxExtOpaqueSurfaceAlloc extended buffer and pass it to
|
|
||||||
* the encoder initialization. This only makes sense if iopattern is also
|
|
||||||
* set to MFX_IOPATTERN_IN_OPAQUE_MEMORY.
|
|
||||||
*
|
|
||||||
* The number of allocated opaque surfaces will be the sum of the number
|
|
||||||
* required by the encoder and the user-provided value nb_opaque_surfaces.
|
|
||||||
* The array of the opaque surfaces will be exported to the caller through
|
|
||||||
* the opaque_surfaces field.
|
|
||||||
*/
|
|
||||||
int opaque_alloc;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encoding only, and only if opaque_alloc is set to non-zero. Before
|
|
||||||
* calling avcodec_open2(), the caller should set this field to the number
|
|
||||||
* of extra opaque surfaces to allocate beyond what is required by the
|
|
||||||
* encoder.
|
|
||||||
*
|
|
||||||
* On return from avcodec_open2(), this field will be set by libavcodec to
|
|
||||||
* the total number of allocated opaque surfaces.
|
|
||||||
*/
|
|
||||||
int nb_opaque_surfaces;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encoding only, and only if opaque_alloc is set to non-zero. On return
|
|
||||||
* from avcodec_open2(), this field will be used by libavcodec to export the
|
|
||||||
* array of the allocated opaque surfaces to the caller, so they can be
|
|
||||||
* passed to other parts of the pipeline.
|
|
||||||
*
|
|
||||||
* The buffer reference exported here is owned and managed by libavcodec,
|
|
||||||
* the callers should make their own reference with av_buffer_ref() and free
|
|
||||||
* it with av_buffer_unref() when it is no longer needed.
|
|
||||||
*
|
|
||||||
* The buffer data is an nb_opaque_surfaces-sized array of mfxFrameSurface1.
|
|
||||||
*/
|
|
||||||
AVBufferRef *opaque_surfaces;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encoding only, and only if opaque_alloc is set to non-zero. On return
|
|
||||||
* from avcodec_open2(), this field will be set to the surface type used in
|
|
||||||
* the opaque allocation request.
|
|
||||||
*/
|
|
||||||
int opaque_alloc_type;
|
|
||||||
} AVQSVContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate a new context.
|
|
||||||
*
|
|
||||||
* It must be freed by the caller with av_free().
|
|
||||||
*/
|
|
||||||
AVQSVContext *av_qsv_alloc_context(void);
|
|
||||||
|
|
||||||
#endif /* AVCODEC_QSV_H */
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
/*
|
|
||||||
* Video Acceleration API (shared data between FFmpeg and the video player)
|
|
||||||
* HW decode acceleration for MPEG-2, MPEG-4, H.264 and VC-1
|
|
||||||
*
|
|
||||||
* Copyright (C) 2008-2009 Splitted-Desktop Systems
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_VAAPI_H
|
|
||||||
#define AVCODEC_VAAPI_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavc_codec_hwaccel_vaapi
|
|
||||||
* Public libavcodec VA API header.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "attributes.h"
|
|
||||||
#include "avcodecVersion.h"
|
|
||||||
|
|
||||||
#if FF_API_STRUCT_VAAPI_CONTEXT
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavc_codec_hwaccel_vaapi VA API Decoding
|
|
||||||
* @ingroup lavc_codec_hwaccel
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This structure is used to share data between the FFmpeg library and
|
|
||||||
* the client video application.
|
|
||||||
* This shall be zero-allocated and available as
|
|
||||||
* AVCodecContext.hwaccel_context. All user members can be set once
|
|
||||||
* during initialization or through each AVCodecContext.get_buffer()
|
|
||||||
* function call. In any case, they must be valid prior to calling
|
|
||||||
* decoding functions.
|
|
||||||
*
|
|
||||||
* Deprecated: use AVCodecContext.hw_frames_ctx instead.
|
|
||||||
*/
|
|
||||||
struct attribute_deprecated vaapi_context {
|
|
||||||
/**
|
|
||||||
* Window system dependent data
|
|
||||||
*
|
|
||||||
* - encoding: unused
|
|
||||||
* - decoding: Set by user
|
|
||||||
*/
|
|
||||||
void *display;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Configuration ID
|
|
||||||
*
|
|
||||||
* - encoding: unused
|
|
||||||
* - decoding: Set by user
|
|
||||||
*/
|
|
||||||
uint32_t config_id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Context ID (video decode pipeline)
|
|
||||||
*
|
|
||||||
* - encoding: unused
|
|
||||||
* - decoding: Set by user
|
|
||||||
*/
|
|
||||||
uint32_t context_id;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* @} */
|
|
||||||
|
|
||||||
#endif /* FF_API_STRUCT_VAAPI_CONTEXT */
|
|
||||||
|
|
||||||
#endif /* AVCODEC_VAAPI_H */
|
|
||||||
@@ -1,176 +0,0 @@
|
|||||||
/*
|
|
||||||
* The Video Decode and Presentation API for UNIX (VDPAU) is used for
|
|
||||||
* hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2008 NVIDIA
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_VDPAU_H
|
|
||||||
#define AVCODEC_VDPAU_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavc_codec_hwaccel_vdpau
|
|
||||||
* Public libavcodec VDPAU header.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavc_codec_hwaccel_vdpau VDPAU Decoder and Renderer
|
|
||||||
* @ingroup lavc_codec_hwaccel
|
|
||||||
*
|
|
||||||
* VDPAU hardware acceleration has two modules
|
|
||||||
* - VDPAU decoding
|
|
||||||
* - VDPAU presentation
|
|
||||||
*
|
|
||||||
* The VDPAU decoding module parses all headers using FFmpeg
|
|
||||||
* parsing mechanisms and uses VDPAU for the actual decoding.
|
|
||||||
*
|
|
||||||
* As per the current implementation, the actual decoding
|
|
||||||
* and rendering (API calls) are done as part of the VDPAU
|
|
||||||
* presentation (vo_vdpau.c) module.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <vdpau/vdpau.h>
|
|
||||||
|
|
||||||
#include "avconfig.h"
|
|
||||||
#include "attributes.h"
|
|
||||||
|
|
||||||
#include "avcodec.h"
|
|
||||||
#include "avcodecVersion.h"
|
|
||||||
|
|
||||||
struct AVCodecContext;
|
|
||||||
struct AVFrame;
|
|
||||||
|
|
||||||
typedef int (*AVVDPAU_Render2)(struct AVCodecContext *, struct AVFrame *,
|
|
||||||
const VdpPictureInfo *, uint32_t,
|
|
||||||
const VdpBitstreamBuffer *);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This structure is used to share data between the libavcodec library and
|
|
||||||
* the client video application.
|
|
||||||
* The user shall allocate the structure via the av_alloc_vdpau_hwaccel
|
|
||||||
* function and make it available as
|
|
||||||
* AVCodecContext.hwaccel_context. Members can be set by the user once
|
|
||||||
* during initialization or through each AVCodecContext.get_buffer()
|
|
||||||
* function call. In any case, they must be valid prior to calling
|
|
||||||
* decoding functions.
|
|
||||||
*
|
|
||||||
* The size of this structure is not a part of the public ABI and must not
|
|
||||||
* be used outside of libavcodec. Use av_vdpau_alloc_context() to allocate an
|
|
||||||
* AVVDPAUContext.
|
|
||||||
*/
|
|
||||||
typedef struct AVVDPAUContext {
|
|
||||||
/**
|
|
||||||
* VDPAU decoder handle
|
|
||||||
*
|
|
||||||
* Set by user.
|
|
||||||
*/
|
|
||||||
VdpDecoder decoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VDPAU decoder render callback
|
|
||||||
*
|
|
||||||
* Set by the user.
|
|
||||||
*/
|
|
||||||
VdpDecoderRender *render;
|
|
||||||
|
|
||||||
AVVDPAU_Render2 render2;
|
|
||||||
} AVVDPAUContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief allocation function for AVVDPAUContext
|
|
||||||
*
|
|
||||||
* Allows extending the struct without breaking API/ABI
|
|
||||||
*/
|
|
||||||
AVVDPAUContext *av_alloc_vdpaucontext(void);
|
|
||||||
|
|
||||||
AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext *);
|
|
||||||
void av_vdpau_hwaccel_set_render2(AVVDPAUContext *, AVVDPAU_Render2);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Associate a VDPAU device with a codec context for hardware acceleration.
|
|
||||||
* This function is meant to be called from the get_format() codec callback,
|
|
||||||
* or earlier. It can also be called after avcodec_flush_buffers() to change
|
|
||||||
* the underlying VDPAU device mid-stream (e.g. to recover from non-transparent
|
|
||||||
* display preemption).
|
|
||||||
*
|
|
||||||
* @note get_format() must return AV_PIX_FMT_VDPAU if this function completes
|
|
||||||
* successfully.
|
|
||||||
*
|
|
||||||
* @param avctx decoding context whose get_format() callback is invoked
|
|
||||||
* @param device VDPAU device handle to use for hardware acceleration
|
|
||||||
* @param get_proc_address VDPAU device driver
|
|
||||||
* @param flags zero of more OR'd AV_HWACCEL_FLAG_* flags
|
|
||||||
*
|
|
||||||
* @return 0 on success, an AVERROR code on failure.
|
|
||||||
*/
|
|
||||||
int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device,
|
|
||||||
VdpGetProcAddress *get_proc_address, unsigned flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the parameters to create an adequate VDPAU video surface for the codec
|
|
||||||
* context using VDPAU hardware decoding acceleration.
|
|
||||||
*
|
|
||||||
* @note Behavior is undefined if the context was not successfully bound to a
|
|
||||||
* VDPAU device using av_vdpau_bind_context().
|
|
||||||
*
|
|
||||||
* @param avctx the codec context being used for decoding the stream
|
|
||||||
* @param type storage space for the VDPAU video surface chroma type
|
|
||||||
* (or NULL to ignore)
|
|
||||||
* @param width storage space for the VDPAU video surface pixel width
|
|
||||||
* (or NULL to ignore)
|
|
||||||
* @param height storage space for the VDPAU video surface pixel height
|
|
||||||
* (or NULL to ignore)
|
|
||||||
*
|
|
||||||
* @return 0 on success, a negative AVERROR code on failure.
|
|
||||||
*/
|
|
||||||
int av_vdpau_get_surface_parameters(AVCodecContext *avctx, VdpChromaType *type,
|
|
||||||
uint32_t *width, uint32_t *height);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVVDPAUContext.
|
|
||||||
*
|
|
||||||
* @return Newly-allocated AVVDPAUContext or NULL on failure.
|
|
||||||
*/
|
|
||||||
AVVDPAUContext *av_vdpau_alloc_context(void);
|
|
||||||
|
|
||||||
#if FF_API_VDPAU_PROFILE
|
|
||||||
/**
|
|
||||||
* Get a decoder profile that should be used for initializing a VDPAU decoder.
|
|
||||||
* Should be called from the AVCodecContext.get_format() callback.
|
|
||||||
*
|
|
||||||
* @deprecated Use av_vdpau_bind_context() instead.
|
|
||||||
*
|
|
||||||
* @param avctx the codec context being used for decoding the stream
|
|
||||||
* @param profile a pointer into which the result will be written on success.
|
|
||||||
* The contents of profile are undefined if this function returns
|
|
||||||
* an error.
|
|
||||||
*
|
|
||||||
* @return 0 on success (non-negative), a negative AVERROR on failure.
|
|
||||||
*/
|
|
||||||
attribute_deprecated
|
|
||||||
int av_vdpau_get_profile(AVCodecContext *avctx, VdpDecoderProfile *profile);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* @}*/
|
|
||||||
|
|
||||||
#endif /* AVCODEC_VDPAU_H */
|
|
||||||
@@ -1,127 +0,0 @@
|
|||||||
/*
|
|
||||||
* Videotoolbox hardware acceleration
|
|
||||||
*
|
|
||||||
* copyright (c) 2012 Sebastien Zwickert
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_VIDEOTOOLBOX_H
|
|
||||||
#define AVCODEC_VIDEOTOOLBOX_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavc_codec_hwaccel_videotoolbox
|
|
||||||
* Public libavcodec Videotoolbox header.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#define Picture QuickdrawPicture
|
|
||||||
#include <VideoToolbox/VideoToolbox.h>
|
|
||||||
#undef Picture
|
|
||||||
|
|
||||||
#include "avcodec.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct holds all the information that needs to be passed
|
|
||||||
* between the caller and libavcodec for initializing Videotoolbox decoding.
|
|
||||||
* Its size is not a part of the public ABI, it must be allocated with
|
|
||||||
* av_videotoolbox_alloc_context() and freed with av_free().
|
|
||||||
*/
|
|
||||||
typedef struct AVVideotoolboxContext {
|
|
||||||
/**
|
|
||||||
* Videotoolbox decompression session object.
|
|
||||||
* Created and freed the caller.
|
|
||||||
*/
|
|
||||||
VTDecompressionSessionRef session;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The output callback that must be passed to the session.
|
|
||||||
* Set by av_videottoolbox_default_init()
|
|
||||||
*/
|
|
||||||
VTDecompressionOutputCallback output_callback;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CVPixelBuffer Format Type that Videotoolbox will use for decoded frames.
|
|
||||||
* set by the caller. If this is set to 0, then no specific format is
|
|
||||||
* requested from the decoder, and its native format is output.
|
|
||||||
*/
|
|
||||||
OSType cv_pix_fmt_type;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CoreMedia Format Description that Videotoolbox will use to create the decompression session.
|
|
||||||
* Set by the caller.
|
|
||||||
*/
|
|
||||||
CMVideoFormatDescriptionRef cm_fmt_desc;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CoreMedia codec type that Videotoolbox will use to create the decompression session.
|
|
||||||
* Set by the caller.
|
|
||||||
*/
|
|
||||||
int cm_codec_type;
|
|
||||||
} AVVideotoolboxContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate and initialize a Videotoolbox context.
|
|
||||||
*
|
|
||||||
* This function should be called from the get_format() callback when the caller
|
|
||||||
* selects the AV_PIX_FMT_VIDETOOLBOX format. The caller must then create
|
|
||||||
* the decoder object (using the output callback provided by libavcodec) that
|
|
||||||
* will be used for Videotoolbox-accelerated decoding.
|
|
||||||
*
|
|
||||||
* When decoding with Videotoolbox is finished, the caller must destroy the decoder
|
|
||||||
* object and free the Videotoolbox context using av_free().
|
|
||||||
*
|
|
||||||
* @return the newly allocated context or NULL on failure
|
|
||||||
*/
|
|
||||||
AVVideotoolboxContext *av_videotoolbox_alloc_context(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is a convenience function that creates and sets up the Videotoolbox context using
|
|
||||||
* an internal implementation.
|
|
||||||
*
|
|
||||||
* @param avctx the corresponding codec context
|
|
||||||
*
|
|
||||||
* @return >= 0 on success, a negative AVERROR code on failure
|
|
||||||
*/
|
|
||||||
int av_videotoolbox_default_init(AVCodecContext *avctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is a convenience function that creates and sets up the Videotoolbox context using
|
|
||||||
* an internal implementation.
|
|
||||||
*
|
|
||||||
* @param avctx the corresponding codec context
|
|
||||||
* @param vtctx the Videotoolbox context to use
|
|
||||||
*
|
|
||||||
* @return >= 0 on success, a negative AVERROR code on failure
|
|
||||||
*/
|
|
||||||
int av_videotoolbox_default_init2(AVCodecContext *avctx, AVVideotoolboxContext *vtctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function must be called to free the Videotoolbox context initialized with
|
|
||||||
* av_videotoolbox_default_init().
|
|
||||||
*
|
|
||||||
* @param avctx the corresponding codec context
|
|
||||||
*/
|
|
||||||
void av_videotoolbox_default_free(AVCodecContext *avctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVCODEC_VIDEOTOOLBOX_H */
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* A public API for Vorbis parsing
|
|
||||||
*
|
|
||||||
* Determines the duration for each packet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVCODEC_VORBIS_PARSER_H
|
|
||||||
#define AVCODEC_VORBIS_PARSER_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
typedef struct AVVorbisParseContext AVVorbisParseContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate and initialize the Vorbis parser using headers in the extradata.
|
|
||||||
*/
|
|
||||||
AVVorbisParseContext *av_vorbis_parse_init(const uint8_t *extradata,
|
|
||||||
int extradata_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free the parser and everything associated with it.
|
|
||||||
*/
|
|
||||||
void av_vorbis_parse_free(AVVorbisParseContext **s);
|
|
||||||
|
|
||||||
#define VORBIS_FLAG_HEADER 0x00000001
|
|
||||||
#define VORBIS_FLAG_COMMENT 0x00000002
|
|
||||||
#define VORBIS_FLAG_SETUP 0x00000004
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the duration for a Vorbis packet.
|
|
||||||
*
|
|
||||||
* If @p flags is @c NULL,
|
|
||||||
* special frames are considered invalid.
|
|
||||||
*
|
|
||||||
* @param s Vorbis parser context
|
|
||||||
* @param buf buffer containing a Vorbis frame
|
|
||||||
* @param buf_size size of the buffer
|
|
||||||
* @param flags flags for special frames
|
|
||||||
*/
|
|
||||||
int av_vorbis_parse_frame_flags(AVVorbisParseContext *s, const uint8_t *buf,
|
|
||||||
int buf_size, int *flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the duration for a Vorbis packet.
|
|
||||||
*
|
|
||||||
* @param s Vorbis parser context
|
|
||||||
* @param buf buffer containing a Vorbis frame
|
|
||||||
* @param buf_size size of the buffer
|
|
||||||
*/
|
|
||||||
int av_vorbis_parse_frame(AVVorbisParseContext *s, const uint8_t *buf,
|
|
||||||
int buf_size);
|
|
||||||
|
|
||||||
void av_vorbis_parse_reset(AVVorbisParseContext *s);
|
|
||||||
|
|
||||||
#endif /* AVCODEC_VORBIS_PARSER_H */
|
|
||||||
@@ -1,170 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2003 Ivan Kalvachev
|
|
||||||
*
|
|
||||||
* 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 AVCODEC_XVMC_H
|
|
||||||
#define AVCODEC_XVMC_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavc_codec_hwaccel_xvmc
|
|
||||||
* Public libavcodec XvMC header.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <X11/extensions/XvMC.h>
|
|
||||||
|
|
||||||
#include "attributes.h"
|
|
||||||
#include "avcodecVersion.h"
|
|
||||||
#include "avcodec.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavc_codec_hwaccel_xvmc XvMC
|
|
||||||
* @ingroup lavc_codec_hwaccel
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct
|
|
||||||
the number is 1337 speak for the letters IDCT MCo (motion compensation) */
|
|
||||||
|
|
||||||
struct attribute_deprecated xvmc_pix_fmt {
|
|
||||||
/** The field contains the special constant value AV_XVMC_ID.
|
|
||||||
It is used as a test that the application correctly uses the API,
|
|
||||||
and that there is no corruption caused by pixel routines.
|
|
||||||
- application - set during initialization
|
|
||||||
- libavcodec - unchanged
|
|
||||||
*/
|
|
||||||
int xvmc_id;
|
|
||||||
|
|
||||||
/** Pointer to the block array allocated by XvMCCreateBlocks().
|
|
||||||
The array has to be freed by XvMCDestroyBlocks().
|
|
||||||
Each group of 64 values represents one data block of differential
|
|
||||||
pixel information (in MoCo mode) or coefficients for IDCT.
|
|
||||||
- application - set the pointer during initialization
|
|
||||||
- libavcodec - fills coefficients/pixel data into the array
|
|
||||||
*/
|
|
||||||
short* data_blocks;
|
|
||||||
|
|
||||||
/** Pointer to the macroblock description array allocated by
|
|
||||||
XvMCCreateMacroBlocks() and freed by XvMCDestroyMacroBlocks().
|
|
||||||
- application - set the pointer during initialization
|
|
||||||
- libavcodec - fills description data into the array
|
|
||||||
*/
|
|
||||||
XvMCMacroBlock* mv_blocks;
|
|
||||||
|
|
||||||
/** Number of macroblock descriptions that can be stored in the mv_blocks
|
|
||||||
array.
|
|
||||||
- application - set during initialization
|
|
||||||
- libavcodec - unchanged
|
|
||||||
*/
|
|
||||||
int allocated_mv_blocks;
|
|
||||||
|
|
||||||
/** Number of blocks that can be stored at once in the data_blocks array.
|
|
||||||
- application - set during initialization
|
|
||||||
- libavcodec - unchanged
|
|
||||||
*/
|
|
||||||
int allocated_data_blocks;
|
|
||||||
|
|
||||||
/** Indicate that the hardware would interpret data_blocks as IDCT
|
|
||||||
coefficients and perform IDCT on them.
|
|
||||||
- application - set during initialization
|
|
||||||
- libavcodec - unchanged
|
|
||||||
*/
|
|
||||||
int idct;
|
|
||||||
|
|
||||||
/** In MoCo mode it indicates that intra macroblocks are assumed to be in
|
|
||||||
unsigned format; same as the XVMC_INTRA_UNSIGNED flag.
|
|
||||||
- application - set during initialization
|
|
||||||
- libavcodec - unchanged
|
|
||||||
*/
|
|
||||||
int unsigned_intra;
|
|
||||||
|
|
||||||
/** Pointer to the surface allocated by XvMCCreateSurface().
|
|
||||||
It has to be freed by XvMCDestroySurface() on application exit.
|
|
||||||
It identifies the frame and its state on the video hardware.
|
|
||||||
- application - set during initialization
|
|
||||||
- libavcodec - unchanged
|
|
||||||
*/
|
|
||||||
XvMCSurface* p_surface;
|
|
||||||
|
|
||||||
/** Set by the decoder before calling ff_draw_horiz_band(),
|
|
||||||
needed by the XvMCRenderSurface function. */
|
|
||||||
//@{
|
|
||||||
/** Pointer to the surface used as past reference
|
|
||||||
- application - unchanged
|
|
||||||
- libavcodec - set
|
|
||||||
*/
|
|
||||||
XvMCSurface* p_past_surface;
|
|
||||||
|
|
||||||
/** Pointer to the surface used as future reference
|
|
||||||
- application - unchanged
|
|
||||||
- libavcodec - set
|
|
||||||
*/
|
|
||||||
XvMCSurface* p_future_surface;
|
|
||||||
|
|
||||||
/** top/bottom field or frame
|
|
||||||
- application - unchanged
|
|
||||||
- libavcodec - set
|
|
||||||
*/
|
|
||||||
unsigned int picture_structure;
|
|
||||||
|
|
||||||
/** XVMC_SECOND_FIELD - 1st or 2nd field in the sequence
|
|
||||||
- application - unchanged
|
|
||||||
- libavcodec - set
|
|
||||||
*/
|
|
||||||
unsigned int flags;
|
|
||||||
//}@
|
|
||||||
|
|
||||||
/** Number of macroblock descriptions in the mv_blocks array
|
|
||||||
that have already been passed to the hardware.
|
|
||||||
- application - zeroes it on get_buffer().
|
|
||||||
A successful ff_draw_horiz_band() may increment it
|
|
||||||
with filled_mb_block_num or zero both.
|
|
||||||
- libavcodec - unchanged
|
|
||||||
*/
|
|
||||||
int start_mv_blocks_num;
|
|
||||||
|
|
||||||
/** Number of new macroblock descriptions in the mv_blocks array (after
|
|
||||||
start_mv_blocks_num) that are filled by libavcodec and have to be
|
|
||||||
passed to the hardware.
|
|
||||||
- application - zeroes it on get_buffer() or after successful
|
|
||||||
ff_draw_horiz_band().
|
|
||||||
- libavcodec - increment with one of each stored MB
|
|
||||||
*/
|
|
||||||
int filled_mv_blocks_num;
|
|
||||||
|
|
||||||
/** Number of the next free data block; one data block consists of
|
|
||||||
64 short values in the data_blocks array.
|
|
||||||
All blocks before this one have already been claimed by placing their
|
|
||||||
position into the corresponding block description structure field,
|
|
||||||
that are part of the mv_blocks array.
|
|
||||||
- application - zeroes it on get_buffer().
|
|
||||||
A successful ff_draw_horiz_band() may zero it together
|
|
||||||
with start_mb_blocks_num.
|
|
||||||
- libavcodec - each decoded macroblock increases it by the number
|
|
||||||
of coded blocks it contains.
|
|
||||||
*/
|
|
||||||
int next_free_data_block_num;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVCODEC_XVMC_H */
|
|
||||||
@@ -1,514 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 AVDEVICE_AVDEVICE_H
|
|
||||||
#define AVDEVICE_AVDEVICE_H
|
|
||||||
|
|
||||||
#include "avdeviceVersion.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavd
|
|
||||||
* Main libavdevice API header
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavd libavdevice
|
|
||||||
* Special devices muxing/demuxing library.
|
|
||||||
*
|
|
||||||
* Libavdevice is a complementary library to @ref libavf "libavformat". It
|
|
||||||
* provides various "special" platform-specific muxers and demuxers, e.g. for
|
|
||||||
* grabbing devices, audio capture and playback etc. As a consequence, the
|
|
||||||
* (de)muxers in libavdevice are of the AVFMT_NOFILE type (they use their own
|
|
||||||
* I/O functions). The filename passed to avformat_open_input() often does not
|
|
||||||
* refer to an actually existing file, but has some special device-specific
|
|
||||||
* meaning - e.g. for xcbgrab it is the display name.
|
|
||||||
*
|
|
||||||
* To use libavdevice, simply call avdevice_register_all() to register all
|
|
||||||
* compiled muxers and demuxers. They all use standard libavformat API.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "log.h"
|
|
||||||
#include "opt.h"
|
|
||||||
#include "dict.h"
|
|
||||||
#include "avformat.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the LIBAVDEVICE_VERSION_INT constant.
|
|
||||||
*/
|
|
||||||
unsigned avdevice_version(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the libavdevice build-time configuration.
|
|
||||||
*/
|
|
||||||
const char *avdevice_configuration(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the libavdevice license.
|
|
||||||
*/
|
|
||||||
const char *avdevice_license(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize libavdevice and register all the input and output devices.
|
|
||||||
*/
|
|
||||||
void avdevice_register_all(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Audio input devices iterator.
|
|
||||||
*
|
|
||||||
* If d is NULL, returns the first registered input audio/video device,
|
|
||||||
* if d is non-NULL, returns the next registered input audio/video device after d
|
|
||||||
* or NULL if d is the last one.
|
|
||||||
*/
|
|
||||||
AVInputFormat *av_input_audio_device_next(AVInputFormat *d);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Video input devices iterator.
|
|
||||||
*
|
|
||||||
* If d is NULL, returns the first registered input audio/video device,
|
|
||||||
* if d is non-NULL, returns the next registered input audio/video device after d
|
|
||||||
* or NULL if d is the last one.
|
|
||||||
*/
|
|
||||||
AVInputFormat *av_input_video_device_next(AVInputFormat *d);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Audio output devices iterator.
|
|
||||||
*
|
|
||||||
* If d is NULL, returns the first registered output audio/video device,
|
|
||||||
* if d is non-NULL, returns the next registered output audio/video device after d
|
|
||||||
* or NULL if d is the last one.
|
|
||||||
*/
|
|
||||||
AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Video output devices iterator.
|
|
||||||
*
|
|
||||||
* If d is NULL, returns the first registered output audio/video device,
|
|
||||||
* if d is non-NULL, returns the next registered output audio/video device after d
|
|
||||||
* or NULL if d is the last one.
|
|
||||||
*/
|
|
||||||
AVOutputFormat *av_output_video_device_next(AVOutputFormat *d);
|
|
||||||
|
|
||||||
typedef struct AVDeviceRect {
|
|
||||||
int x; /**< x coordinate of top left corner */
|
|
||||||
int y; /**< y coordinate of top left corner */
|
|
||||||
int width; /**< width */
|
|
||||||
int height; /**< height */
|
|
||||||
} AVDeviceRect;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Message types used by avdevice_app_to_dev_control_message().
|
|
||||||
*/
|
|
||||||
enum AVAppToDevMessageType {
|
|
||||||
/**
|
|
||||||
* Dummy message.
|
|
||||||
*/
|
|
||||||
AV_APP_TO_DEV_NONE = MKBETAG('N','O','N','E'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Window size change message.
|
|
||||||
*
|
|
||||||
* Message is sent to the device every time the application changes the size
|
|
||||||
* of the window device renders to.
|
|
||||||
* Message should also be sent right after window is created.
|
|
||||||
*
|
|
||||||
* data: AVDeviceRect: new window size.
|
|
||||||
*/
|
|
||||||
AV_APP_TO_DEV_WINDOW_SIZE = MKBETAG('G','E','O','M'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Repaint request message.
|
|
||||||
*
|
|
||||||
* Message is sent to the device when window has to be repainted.
|
|
||||||
*
|
|
||||||
* data: AVDeviceRect: area required to be repainted.
|
|
||||||
* NULL: whole area is required to be repainted.
|
|
||||||
*/
|
|
||||||
AV_APP_TO_DEV_WINDOW_REPAINT = MKBETAG('R','E','P','A'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Request pause/play.
|
|
||||||
*
|
|
||||||
* Application requests pause/unpause playback.
|
|
||||||
* Mostly usable with devices that have internal buffer.
|
|
||||||
* By default devices are not paused.
|
|
||||||
*
|
|
||||||
* data: NULL
|
|
||||||
*/
|
|
||||||
AV_APP_TO_DEV_PAUSE = MKBETAG('P', 'A', 'U', ' '),
|
|
||||||
AV_APP_TO_DEV_PLAY = MKBETAG('P', 'L', 'A', 'Y'),
|
|
||||||
AV_APP_TO_DEV_TOGGLE_PAUSE = MKBETAG('P', 'A', 'U', 'T'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Volume control message.
|
|
||||||
*
|
|
||||||
* Set volume level. It may be device-dependent if volume
|
|
||||||
* is changed per stream or system wide. Per stream volume
|
|
||||||
* change is expected when possible.
|
|
||||||
*
|
|
||||||
* data: double: new volume with range of 0.0 - 1.0.
|
|
||||||
*/
|
|
||||||
AV_APP_TO_DEV_SET_VOLUME = MKBETAG('S', 'V', 'O', 'L'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mute control messages.
|
|
||||||
*
|
|
||||||
* Change mute state. It may be device-dependent if mute status
|
|
||||||
* is changed per stream or system wide. Per stream mute status
|
|
||||||
* change is expected when possible.
|
|
||||||
*
|
|
||||||
* data: NULL.
|
|
||||||
*/
|
|
||||||
AV_APP_TO_DEV_MUTE = MKBETAG(' ', 'M', 'U', 'T'),
|
|
||||||
AV_APP_TO_DEV_UNMUTE = MKBETAG('U', 'M', 'U', 'T'),
|
|
||||||
AV_APP_TO_DEV_TOGGLE_MUTE = MKBETAG('T', 'M', 'U', 'T'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get volume/mute messages.
|
|
||||||
*
|
|
||||||
* Force the device to send AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED or
|
|
||||||
* AV_DEV_TO_APP_MUTE_STATE_CHANGED command respectively.
|
|
||||||
*
|
|
||||||
* data: NULL.
|
|
||||||
*/
|
|
||||||
AV_APP_TO_DEV_GET_VOLUME = MKBETAG('G', 'V', 'O', 'L'),
|
|
||||||
AV_APP_TO_DEV_GET_MUTE = MKBETAG('G', 'M', 'U', 'T'),
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Message types used by avdevice_dev_to_app_control_message().
|
|
||||||
*/
|
|
||||||
enum AVDevToAppMessageType {
|
|
||||||
/**
|
|
||||||
* Dummy message.
|
|
||||||
*/
|
|
||||||
AV_DEV_TO_APP_NONE = MKBETAG('N','O','N','E'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create window buffer message.
|
|
||||||
*
|
|
||||||
* Device requests to create a window buffer. Exact meaning is device-
|
|
||||||
* and application-dependent. Message is sent before rendering first
|
|
||||||
* frame and all one-shot initializations should be done here.
|
|
||||||
* Application is allowed to ignore preferred window buffer size.
|
|
||||||
*
|
|
||||||
* @note: Application is obligated to inform about window buffer size
|
|
||||||
* with AV_APP_TO_DEV_WINDOW_SIZE message.
|
|
||||||
*
|
|
||||||
* data: AVDeviceRect: preferred size of the window buffer.
|
|
||||||
* NULL: no preferred size of the window buffer.
|
|
||||||
*/
|
|
||||||
AV_DEV_TO_APP_CREATE_WINDOW_BUFFER = MKBETAG('B','C','R','E'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prepare window buffer message.
|
|
||||||
*
|
|
||||||
* Device requests to prepare a window buffer for rendering.
|
|
||||||
* Exact meaning is device- and application-dependent.
|
|
||||||
* Message is sent before rendering of each frame.
|
|
||||||
*
|
|
||||||
* data: NULL.
|
|
||||||
*/
|
|
||||||
AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER = MKBETAG('B','P','R','E'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Display window buffer message.
|
|
||||||
*
|
|
||||||
* Device requests to display a window buffer.
|
|
||||||
* Message is sent when new frame is ready to be displayed.
|
|
||||||
* Usually buffers need to be swapped in handler of this message.
|
|
||||||
*
|
|
||||||
* data: NULL.
|
|
||||||
*/
|
|
||||||
AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER = MKBETAG('B','D','I','S'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroy window buffer message.
|
|
||||||
*
|
|
||||||
* Device requests to destroy a window buffer.
|
|
||||||
* Message is sent when device is about to be destroyed and window
|
|
||||||
* buffer is not required anymore.
|
|
||||||
*
|
|
||||||
* data: NULL.
|
|
||||||
*/
|
|
||||||
AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER = MKBETAG('B','D','E','S'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Buffer fullness status messages.
|
|
||||||
*
|
|
||||||
* Device signals buffer overflow/underflow.
|
|
||||||
*
|
|
||||||
* data: NULL.
|
|
||||||
*/
|
|
||||||
AV_DEV_TO_APP_BUFFER_OVERFLOW = MKBETAG('B','O','F','L'),
|
|
||||||
AV_DEV_TO_APP_BUFFER_UNDERFLOW = MKBETAG('B','U','F','L'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Buffer readable/writable.
|
|
||||||
*
|
|
||||||
* Device informs that buffer is readable/writable.
|
|
||||||
* When possible, device informs how many bytes can be read/write.
|
|
||||||
*
|
|
||||||
* @warning Device may not inform when number of bytes than can be read/write changes.
|
|
||||||
*
|
|
||||||
* data: int64_t: amount of bytes available to read/write.
|
|
||||||
* NULL: amount of bytes available to read/write is not known.
|
|
||||||
*/
|
|
||||||
AV_DEV_TO_APP_BUFFER_READABLE = MKBETAG('B','R','D',' '),
|
|
||||||
AV_DEV_TO_APP_BUFFER_WRITABLE = MKBETAG('B','W','R',' '),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mute state change message.
|
|
||||||
*
|
|
||||||
* Device informs that mute state has changed.
|
|
||||||
*
|
|
||||||
* data: int: 0 for not muted state, non-zero for muted state.
|
|
||||||
*/
|
|
||||||
AV_DEV_TO_APP_MUTE_STATE_CHANGED = MKBETAG('C','M','U','T'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Volume level change message.
|
|
||||||
*
|
|
||||||
* Device informs that volume level has changed.
|
|
||||||
*
|
|
||||||
* data: double: new volume with range of 0.0 - 1.0.
|
|
||||||
*/
|
|
||||||
AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED = MKBETAG('C','V','O','L'),
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Send control message from application to device.
|
|
||||||
*
|
|
||||||
* @param s device context.
|
|
||||||
* @param type message type.
|
|
||||||
* @param data message data. Exact type depends on message type.
|
|
||||||
* @param data_size size of message data.
|
|
||||||
* @return >= 0 on success, negative on error.
|
|
||||||
* AVERROR(ENOSYS) when device doesn't implement handler of the message.
|
|
||||||
*/
|
|
||||||
int avdevice_app_to_dev_control_message(struct AVFormatContext *s,
|
|
||||||
enum AVAppToDevMessageType type,
|
|
||||||
void *data, size_t data_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Send control message from device to application.
|
|
||||||
*
|
|
||||||
* @param s device context.
|
|
||||||
* @param type message type.
|
|
||||||
* @param data message data. Can be NULL.
|
|
||||||
* @param data_size size of message data.
|
|
||||||
* @return >= 0 on success, negative on error.
|
|
||||||
* AVERROR(ENOSYS) when application doesn't implement handler of the message.
|
|
||||||
*/
|
|
||||||
int avdevice_dev_to_app_control_message(struct AVFormatContext *s,
|
|
||||||
enum AVDevToAppMessageType type,
|
|
||||||
void *data, size_t data_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Following API allows user to probe device capabilities (supported codecs,
|
|
||||||
* pixel formats, sample formats, resolutions, channel counts, etc).
|
|
||||||
* It is build on top op AVOption API.
|
|
||||||
* Queried capabilities make it possible to set up converters of video or audio
|
|
||||||
* parameters that fit to the device.
|
|
||||||
*
|
|
||||||
* List of capabilities that can be queried:
|
|
||||||
* - Capabilities valid for both audio and video devices:
|
|
||||||
* - codec: supported audio/video codecs.
|
|
||||||
* type: AV_OPT_TYPE_INT (AVCodecID value)
|
|
||||||
* - Capabilities valid for audio devices:
|
|
||||||
* - sample_format: supported sample formats.
|
|
||||||
* type: AV_OPT_TYPE_INT (AVSampleFormat value)
|
|
||||||
* - sample_rate: supported sample rates.
|
|
||||||
* type: AV_OPT_TYPE_INT
|
|
||||||
* - channels: supported number of channels.
|
|
||||||
* type: AV_OPT_TYPE_INT
|
|
||||||
* - channel_layout: supported channel layouts.
|
|
||||||
* type: AV_OPT_TYPE_INT64
|
|
||||||
* - Capabilities valid for video devices:
|
|
||||||
* - pixel_format: supported pixel formats.
|
|
||||||
* type: AV_OPT_TYPE_INT (AVPixelFormat value)
|
|
||||||
* - window_size: supported window sizes (describes size of the window size presented to the user).
|
|
||||||
* type: AV_OPT_TYPE_IMAGE_SIZE
|
|
||||||
* - frame_size: supported frame sizes (describes size of provided video frames).
|
|
||||||
* type: AV_OPT_TYPE_IMAGE_SIZE
|
|
||||||
* - fps: supported fps values
|
|
||||||
* type: AV_OPT_TYPE_RATIONAL
|
|
||||||
*
|
|
||||||
* Value of the capability may be set by user using av_opt_set() function
|
|
||||||
* and AVDeviceCapabilitiesQuery object. Following queries will
|
|
||||||
* limit results to the values matching already set capabilities.
|
|
||||||
* For example, setting a codec may impact number of formats or fps values
|
|
||||||
* returned during next query. Setting invalid value may limit results to zero.
|
|
||||||
*
|
|
||||||
* Example of the usage basing on opengl output device:
|
|
||||||
*
|
|
||||||
* @code
|
|
||||||
* AVFormatContext *oc = NULL;
|
|
||||||
* AVDeviceCapabilitiesQuery *caps = NULL;
|
|
||||||
* AVOptionRanges *ranges;
|
|
||||||
* int ret;
|
|
||||||
*
|
|
||||||
* if ((ret = avformat_alloc_output_context2(&oc, NULL, "opengl", NULL)) < 0)
|
|
||||||
* goto fail;
|
|
||||||
* if (avdevice_capabilities_create(&caps, oc, NULL) < 0)
|
|
||||||
* goto fail;
|
|
||||||
*
|
|
||||||
* //query codecs
|
|
||||||
* if (av_opt_query_ranges(&ranges, caps, "codec", AV_OPT_MULTI_COMPONENT_RANGE)) < 0)
|
|
||||||
* goto fail;
|
|
||||||
* //pick codec here and set it
|
|
||||||
* av_opt_set(caps, "codec", AV_CODEC_ID_RAWVIDEO, 0);
|
|
||||||
*
|
|
||||||
* //query format
|
|
||||||
* if (av_opt_query_ranges(&ranges, caps, "pixel_format", AV_OPT_MULTI_COMPONENT_RANGE)) < 0)
|
|
||||||
* goto fail;
|
|
||||||
* //pick format here and set it
|
|
||||||
* av_opt_set(caps, "pixel_format", AV_PIX_FMT_YUV420P, 0);
|
|
||||||
*
|
|
||||||
* //query and set more capabilities
|
|
||||||
*
|
|
||||||
* fail:
|
|
||||||
* //clean up code
|
|
||||||
* avdevice_capabilities_free(&query, oc);
|
|
||||||
* avformat_free_context(oc);
|
|
||||||
* @endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Structure describes device capabilities.
|
|
||||||
*
|
|
||||||
* It is used by devices in conjunction with av_device_capabilities AVOption table
|
|
||||||
* to implement capabilities probing API based on AVOption API. Should not be used directly.
|
|
||||||
*/
|
|
||||||
typedef struct AVDeviceCapabilitiesQuery {
|
|
||||||
const AVClass *av_class;
|
|
||||||
AVFormatContext *device_context;
|
|
||||||
enum AVCodecID codec;
|
|
||||||
enum AVSampleFormat sample_format;
|
|
||||||
enum AVPixelFormat pixel_format;
|
|
||||||
int sample_rate;
|
|
||||||
int channels;
|
|
||||||
int64_t channel_layout;
|
|
||||||
int window_width;
|
|
||||||
int window_height;
|
|
||||||
int frame_width;
|
|
||||||
int frame_height;
|
|
||||||
AVRational fps;
|
|
||||||
} AVDeviceCapabilitiesQuery;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* AVOption table used by devices to implement device capabilities API. Should not be used by a user.
|
|
||||||
*/
|
|
||||||
extern const AVOption av_device_capabilities[];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize capabilities probing API based on AVOption API.
|
|
||||||
*
|
|
||||||
* avdevice_capabilities_free() must be called when query capabilities API is
|
|
||||||
* not used anymore.
|
|
||||||
*
|
|
||||||
* @param[out] caps Device capabilities data. Pointer to a NULL pointer must be passed.
|
|
||||||
* @param s Context of the device.
|
|
||||||
* @param device_options An AVDictionary filled with device-private options.
|
|
||||||
* On return this parameter will be destroyed and replaced with a dict
|
|
||||||
* containing options that were not found. May be NULL.
|
|
||||||
* The same options must be passed later to avformat_write_header() for output
|
|
||||||
* devices or avformat_open_input() for input devices, or at any other place
|
|
||||||
* that affects device-private options.
|
|
||||||
*
|
|
||||||
* @return >= 0 on success, negative otherwise.
|
|
||||||
*/
|
|
||||||
int avdevice_capabilities_create(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s,
|
|
||||||
AVDictionary **device_options);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free resources created by avdevice_capabilities_create()
|
|
||||||
*
|
|
||||||
* @param caps Device capabilities data to be freed.
|
|
||||||
* @param s Context of the device.
|
|
||||||
*/
|
|
||||||
void avdevice_capabilities_free(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Structure describes basic parameters of the device.
|
|
||||||
*/
|
|
||||||
typedef struct AVDeviceInfo {
|
|
||||||
char *device_name; /**< device name, format depends on device */
|
|
||||||
char *device_description; /**< human friendly name */
|
|
||||||
} AVDeviceInfo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of devices.
|
|
||||||
*/
|
|
||||||
typedef struct AVDeviceInfoList {
|
|
||||||
AVDeviceInfo **devices; /**< list of autodetected devices */
|
|
||||||
int nb_devices; /**< number of autodetected devices */
|
|
||||||
int default_device; /**< index of default device or -1 if no default */
|
|
||||||
} AVDeviceInfoList;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List devices.
|
|
||||||
*
|
|
||||||
* Returns available device names and their parameters.
|
|
||||||
*
|
|
||||||
* @note: Some devices may accept system-dependent device names that cannot be
|
|
||||||
* autodetected. The list returned by this function cannot be assumed to
|
|
||||||
* be always completed.
|
|
||||||
*
|
|
||||||
* @param s device context.
|
|
||||||
* @param[out] device_list list of autodetected devices.
|
|
||||||
* @return count of autodetected devices, negative on error.
|
|
||||||
*/
|
|
||||||
int avdevice_list_devices(struct AVFormatContext *s, AVDeviceInfoList **device_list);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convenient function to free result of avdevice_list_devices().
|
|
||||||
*
|
|
||||||
* @param devices device list to be freed.
|
|
||||||
*/
|
|
||||||
void avdevice_free_list_devices(AVDeviceInfoList **device_list);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List devices.
|
|
||||||
*
|
|
||||||
* Returns available device names and their parameters.
|
|
||||||
* These are convinient wrappers for avdevice_list_devices().
|
|
||||||
* Device context is allocated and deallocated internally.
|
|
||||||
*
|
|
||||||
* @param device device format. May be NULL if device name is set.
|
|
||||||
* @param device_name device name. May be NULL if device format is set.
|
|
||||||
* @param device_options An AVDictionary filled with device-private options. May be NULL.
|
|
||||||
* The same options must be passed later to avformat_write_header() for output
|
|
||||||
* devices or avformat_open_input() for input devices, or at any other place
|
|
||||||
* that affects device-private options.
|
|
||||||
* @param[out] device_list list of autodetected devices
|
|
||||||
* @return count of autodetected devices, negative on error.
|
|
||||||
* @note device argument takes precedence over device_name when both are set.
|
|
||||||
*/
|
|
||||||
int avdevice_list_input_sources(struct AVInputFormat *device, const char *device_name,
|
|
||||||
AVDictionary *device_options, AVDeviceInfoList **device_list);
|
|
||||||
int avdevice_list_output_sinks(struct AVOutputFormat *device, const char *device_name,
|
|
||||||
AVDictionary *device_options, AVDeviceInfoList **device_list);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVDEVICE_AVDEVICE_H */
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 AVDEVICE_VERSION_H
|
|
||||||
#define AVDEVICE_VERSION_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavd
|
|
||||||
* Libavdevice version macros
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "avutilVersion.h"
|
|
||||||
|
|
||||||
#define LIBAVDEVICE_VERSION_MAJOR 58
|
|
||||||
#define LIBAVDEVICE_VERSION_MINOR 10
|
|
||||||
#define LIBAVDEVICE_VERSION_MICRO 100
|
|
||||||
|
|
||||||
#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \
|
|
||||||
LIBAVDEVICE_VERSION_MINOR, \
|
|
||||||
LIBAVDEVICE_VERSION_MICRO)
|
|
||||||
#define LIBAVDEVICE_VERSION AV_VERSION(LIBAVDEVICE_VERSION_MAJOR, \
|
|
||||||
LIBAVDEVICE_VERSION_MINOR, \
|
|
||||||
LIBAVDEVICE_VERSION_MICRO)
|
|
||||||
#define LIBAVDEVICE_BUILD LIBAVDEVICE_VERSION_INT
|
|
||||||
|
|
||||||
#define LIBAVDEVICE_IDENT "Lavd" AV_STRINGIFY(LIBAVDEVICE_VERSION)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* FF_API_* defines may be placed below to indicate public API that will be
|
|
||||||
* dropped at a future version bump. The defines themselves are not part of
|
|
||||||
* the public API and may change, break or disappear at any time.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVDEVICE_VERSION_H */
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,69 +0,0 @@
|
|||||||
/*
|
|
||||||
* Version macros.
|
|
||||||
*
|
|
||||||
* 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 AVFILTER_VERSION_H
|
|
||||||
#define AVFILTER_VERSION_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavfi
|
|
||||||
* Libavfilter version macros
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "avutilVersion.h"
|
|
||||||
|
|
||||||
#define LIBAVFILTER_VERSION_MAJOR 7
|
|
||||||
#define LIBAVFILTER_VERSION_MINOR 85
|
|
||||||
#define LIBAVFILTER_VERSION_MICRO 100
|
|
||||||
|
|
||||||
|
|
||||||
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
|
||||||
LIBAVFILTER_VERSION_MINOR, \
|
|
||||||
LIBAVFILTER_VERSION_MICRO)
|
|
||||||
#define LIBAVFILTER_VERSION AV_VERSION(LIBAVFILTER_VERSION_MAJOR, \
|
|
||||||
LIBAVFILTER_VERSION_MINOR, \
|
|
||||||
LIBAVFILTER_VERSION_MICRO)
|
|
||||||
#define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT
|
|
||||||
|
|
||||||
#define LIBAVFILTER_IDENT "Lavfi" AV_STRINGIFY(LIBAVFILTER_VERSION)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* FF_API_* defines may be placed below to indicate public API that will be
|
|
||||||
* dropped at a future version bump. The defines themselves are not part of
|
|
||||||
* the public API and may change, break or disappear at any time.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef FF_API_OLD_FILTER_OPTS_ERROR
|
|
||||||
#define FF_API_OLD_FILTER_OPTS_ERROR (LIBAVFILTER_VERSION_MAJOR < 8)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_LAVR_OPTS
|
|
||||||
#define FF_API_LAVR_OPTS (LIBAVFILTER_VERSION_MAJOR < 8)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_FILTER_GET_SET
|
|
||||||
#define FF_API_FILTER_GET_SET (LIBAVFILTER_VERSION_MAJOR < 8)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_SWS_PARAM_OPTION
|
|
||||||
#define FF_API_SWS_PARAM_OPTION (LIBAVFILTER_VERSION_MAJOR < 8)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_NEXT
|
|
||||||
#define FF_API_NEXT (LIBAVFILTER_VERSION_MAJOR < 8)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* AVFILTER_VERSION_H */
|
|
||||||
@@ -1,169 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 AVFILTER_BUFFERSINK_H
|
|
||||||
#define AVFILTER_BUFFERSINK_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavfi_buffersink
|
|
||||||
* memory buffer sink API for audio and video
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "avfilter.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavfi_buffersink Buffer sink API
|
|
||||||
* @ingroup lavfi
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a frame with filtered data from sink and put it in frame.
|
|
||||||
*
|
|
||||||
* @param ctx pointer to a buffersink or abuffersink filter context.
|
|
||||||
* @param frame pointer to an allocated frame that will be filled with data.
|
|
||||||
* The data must be freed using av_frame_unref() / av_frame_free()
|
|
||||||
* @param flags a combination of AV_BUFFERSINK_FLAG_* flags
|
|
||||||
*
|
|
||||||
* @return >= 0 in for success, a negative AVERROR code for failure.
|
|
||||||
*/
|
|
||||||
int av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tell av_buffersink_get_buffer_ref() to read video/samples buffer
|
|
||||||
* reference, but not remove it from the buffer. This is useful if you
|
|
||||||
* need only to read a video/samples buffer, without to fetch it.
|
|
||||||
*/
|
|
||||||
#define AV_BUFFERSINK_FLAG_PEEK 1
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tell av_buffersink_get_buffer_ref() not to request a frame from its input.
|
|
||||||
* If a frame is already buffered, it is read (and removed from the buffer),
|
|
||||||
* but if no frame is present, return AVERROR(EAGAIN).
|
|
||||||
*/
|
|
||||||
#define AV_BUFFERSINK_FLAG_NO_REQUEST 2
|
|
||||||
|
|
||||||
#if FF_API_NEXT
|
|
||||||
/**
|
|
||||||
* Struct to use for initializing a buffersink context.
|
|
||||||
*/
|
|
||||||
typedef struct AVBufferSinkParams {
|
|
||||||
const enum AVPixelFormat *pixel_fmts; ///< list of allowed pixel formats, terminated by AV_PIX_FMT_NONE
|
|
||||||
} AVBufferSinkParams;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an AVBufferSinkParams structure.
|
|
||||||
*
|
|
||||||
* Must be freed with av_free().
|
|
||||||
*/
|
|
||||||
attribute_deprecated
|
|
||||||
AVBufferSinkParams *av_buffersink_params_alloc(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Struct to use for initializing an abuffersink context.
|
|
||||||
*/
|
|
||||||
typedef struct AVABufferSinkParams {
|
|
||||||
const enum AVSampleFormat *sample_fmts; ///< list of allowed sample formats, terminated by AV_SAMPLE_FMT_NONE
|
|
||||||
const int64_t *channel_layouts; ///< list of allowed channel layouts, terminated by -1
|
|
||||||
const int *channel_counts; ///< list of allowed channel counts, terminated by -1
|
|
||||||
int all_channel_counts; ///< if not 0, accept any channel count or layout
|
|
||||||
int *sample_rates; ///< list of allowed sample rates, terminated by -1
|
|
||||||
} AVABufferSinkParams;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an AVABufferSinkParams structure.
|
|
||||||
*
|
|
||||||
* Must be freed with av_free().
|
|
||||||
*/
|
|
||||||
attribute_deprecated
|
|
||||||
AVABufferSinkParams *av_abuffersink_params_alloc(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the frame size for an audio buffer sink.
|
|
||||||
*
|
|
||||||
* All calls to av_buffersink_get_buffer_ref will return a buffer with
|
|
||||||
* exactly the specified number of samples, or AVERROR(EAGAIN) if there is
|
|
||||||
* not enough. The last buffer at EOF will be padded with 0.
|
|
||||||
*/
|
|
||||||
void av_buffersink_set_frame_size(AVFilterContext *ctx, unsigned frame_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavfi_buffersink_accessors Buffer sink accessors
|
|
||||||
* Get the properties of the stream
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum AVMediaType av_buffersink_get_type (const AVFilterContext *ctx);
|
|
||||||
AVRational av_buffersink_get_time_base (const AVFilterContext *ctx);
|
|
||||||
int av_buffersink_get_format (const AVFilterContext *ctx);
|
|
||||||
|
|
||||||
AVRational av_buffersink_get_frame_rate (const AVFilterContext *ctx);
|
|
||||||
int av_buffersink_get_w (const AVFilterContext *ctx);
|
|
||||||
int av_buffersink_get_h (const AVFilterContext *ctx);
|
|
||||||
AVRational av_buffersink_get_sample_aspect_ratio (const AVFilterContext *ctx);
|
|
||||||
|
|
||||||
int av_buffersink_get_channels (const AVFilterContext *ctx);
|
|
||||||
uint64_t av_buffersink_get_channel_layout (const AVFilterContext *ctx);
|
|
||||||
int av_buffersink_get_sample_rate (const AVFilterContext *ctx);
|
|
||||||
|
|
||||||
AVBufferRef * av_buffersink_get_hw_frames_ctx (const AVFilterContext *ctx);
|
|
||||||
|
|
||||||
/** @} */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a frame with filtered data from sink and put it in frame.
|
|
||||||
*
|
|
||||||
* @param ctx pointer to a context of a buffersink or abuffersink AVFilter.
|
|
||||||
* @param frame pointer to an allocated frame that will be filled with data.
|
|
||||||
* The data must be freed using av_frame_unref() / av_frame_free()
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
* - >= 0 if a frame was successfully returned.
|
|
||||||
* - AVERROR(EAGAIN) if no frames are available at this point; more
|
|
||||||
* input frames must be added to the filtergraph to get more output.
|
|
||||||
* - AVERROR_EOF if there will be no more output frames on this sink.
|
|
||||||
* - A different negative AVERROR code in other failure cases.
|
|
||||||
*/
|
|
||||||
int av_buffersink_get_frame(AVFilterContext *ctx, AVFrame *frame);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Same as av_buffersink_get_frame(), but with the ability to specify the number
|
|
||||||
* of samples read. This function is less efficient than
|
|
||||||
* av_buffersink_get_frame(), because it copies the data around.
|
|
||||||
*
|
|
||||||
* @param ctx pointer to a context of the abuffersink AVFilter.
|
|
||||||
* @param frame pointer to an allocated frame that will be filled with data.
|
|
||||||
* The data must be freed using av_frame_unref() / av_frame_free()
|
|
||||||
* frame will contain exactly nb_samples audio samples, except at
|
|
||||||
* the end of stream, when it can contain less than nb_samples.
|
|
||||||
*
|
|
||||||
* @return The return codes have the same meaning as for
|
|
||||||
* av_buffersink_get_frame().
|
|
||||||
*
|
|
||||||
* @warning do not mix this function with av_buffersink_get_frame(). Use only one or
|
|
||||||
* the other with a single sink, not both.
|
|
||||||
*/
|
|
||||||
int av_buffersink_get_samples(AVFilterContext *ctx, AVFrame *frame, int nb_samples);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVFILTER_BUFFERSINK_H */
|
|
||||||
@@ -1,209 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 AVFILTER_BUFFERSRC_H
|
|
||||||
#define AVFILTER_BUFFERSRC_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavfi_buffersrc
|
|
||||||
* Memory buffer source API.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "avfilter.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavfi_buffersrc Buffer source API
|
|
||||||
* @ingroup lavfi
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Do not check for format changes.
|
|
||||||
*/
|
|
||||||
AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT = 1,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Immediately push the frame to the output.
|
|
||||||
*/
|
|
||||||
AV_BUFFERSRC_FLAG_PUSH = 4,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Keep a reference to the frame.
|
|
||||||
* If the frame if reference-counted, create a new reference; otherwise
|
|
||||||
* copy the frame data.
|
|
||||||
*/
|
|
||||||
AV_BUFFERSRC_FLAG_KEEP_REF = 8,
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the number of failed requests.
|
|
||||||
*
|
|
||||||
* A failed request is when the request_frame method is called while no
|
|
||||||
* frame is present in the buffer.
|
|
||||||
* The number is reset when a frame is added.
|
|
||||||
*/
|
|
||||||
unsigned av_buffersrc_get_nb_failed_requests(AVFilterContext *buffer_src);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This structure contains the parameters describing the frames that will be
|
|
||||||
* passed to this filter.
|
|
||||||
*
|
|
||||||
* It should be allocated with av_buffersrc_parameters_alloc() and freed with
|
|
||||||
* av_free(). All the allocated fields in it remain owned by the caller.
|
|
||||||
*/
|
|
||||||
typedef struct AVBufferSrcParameters {
|
|
||||||
/**
|
|
||||||
* video: the pixel format, value corresponds to enum AVPixelFormat
|
|
||||||
* audio: the sample format, value corresponds to enum AVSampleFormat
|
|
||||||
*/
|
|
||||||
int format;
|
|
||||||
/**
|
|
||||||
* The timebase to be used for the timestamps on the input frames.
|
|
||||||
*/
|
|
||||||
AVRational time_base;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Video only, the display dimensions of the input frames.
|
|
||||||
*/
|
|
||||||
int width, height;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Video only, the sample (pixel) aspect ratio.
|
|
||||||
*/
|
|
||||||
AVRational sample_aspect_ratio;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Video only, the frame rate of the input video. This field must only be
|
|
||||||
* set to a non-zero value if input stream has a known constant framerate
|
|
||||||
* and should be left at its initial value if the framerate is variable or
|
|
||||||
* unknown.
|
|
||||||
*/
|
|
||||||
AVRational frame_rate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Video with a hwaccel pixel format only. This should be a reference to an
|
|
||||||
* AVHWFramesContext instance describing the input frames.
|
|
||||||
*/
|
|
||||||
AVBufferRef *hw_frames_ctx;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Audio only, the audio sampling rate in samples per second.
|
|
||||||
*/
|
|
||||||
int sample_rate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Audio only, the audio channel layout
|
|
||||||
*/
|
|
||||||
uint64_t channel_layout;
|
|
||||||
} AVBufferSrcParameters;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate a new AVBufferSrcParameters instance. It should be freed by the
|
|
||||||
* caller with av_free().
|
|
||||||
*/
|
|
||||||
AVBufferSrcParameters *av_buffersrc_parameters_alloc(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize the buffersrc or abuffersrc filter with the provided parameters.
|
|
||||||
* This function may be called multiple times, the later calls override the
|
|
||||||
* previous ones. Some of the parameters may also be set through AVOptions, then
|
|
||||||
* whatever method is used last takes precedence.
|
|
||||||
*
|
|
||||||
* @param ctx an instance of the buffersrc or abuffersrc filter
|
|
||||||
* @param param the stream parameters. The frames later passed to this filter
|
|
||||||
* must conform to those parameters. All the allocated fields in
|
|
||||||
* param remain owned by the caller, libavfilter will make internal
|
|
||||||
* copies or references when necessary.
|
|
||||||
* @return 0 on success, a negative AVERROR code on failure.
|
|
||||||
*/
|
|
||||||
int av_buffersrc_parameters_set(AVFilterContext *ctx, AVBufferSrcParameters *param);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a frame to the buffer source.
|
|
||||||
*
|
|
||||||
* @param ctx an instance of the buffersrc filter
|
|
||||||
* @param frame frame to be added. If the frame is reference counted, this
|
|
||||||
* function will make a new reference to it. Otherwise the frame data will be
|
|
||||||
* copied.
|
|
||||||
*
|
|
||||||
* @return 0 on success, a negative AVERROR on error
|
|
||||||
*
|
|
||||||
* This function is equivalent to av_buffersrc_add_frame_flags() with the
|
|
||||||
* AV_BUFFERSRC_FLAG_KEEP_REF flag.
|
|
||||||
*/
|
|
||||||
av_warn_unused_result
|
|
||||||
int av_buffersrc_write_frame(AVFilterContext *ctx, const AVFrame *frame);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a frame to the buffer source.
|
|
||||||
*
|
|
||||||
* @param ctx an instance of the buffersrc filter
|
|
||||||
* @param frame frame to be added. If the frame is reference counted, this
|
|
||||||
* function will take ownership of the reference(s) and reset the frame.
|
|
||||||
* Otherwise the frame data will be copied. If this function returns an error,
|
|
||||||
* the input frame is not touched.
|
|
||||||
*
|
|
||||||
* @return 0 on success, a negative AVERROR on error.
|
|
||||||
*
|
|
||||||
* @note the difference between this function and av_buffersrc_write_frame() is
|
|
||||||
* that av_buffersrc_write_frame() creates a new reference to the input frame,
|
|
||||||
* while this function takes ownership of the reference passed to it.
|
|
||||||
*
|
|
||||||
* This function is equivalent to av_buffersrc_add_frame_flags() without the
|
|
||||||
* AV_BUFFERSRC_FLAG_KEEP_REF flag.
|
|
||||||
*/
|
|
||||||
av_warn_unused_result
|
|
||||||
int av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame *frame);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a frame to the buffer source.
|
|
||||||
*
|
|
||||||
* By default, if the frame is reference-counted, this function will take
|
|
||||||
* ownership of the reference(s) and reset the frame. This can be controlled
|
|
||||||
* using the flags.
|
|
||||||
*
|
|
||||||
* If this function returns an error, the input frame is not touched.
|
|
||||||
*
|
|
||||||
* @param buffer_src pointer to a buffer source context
|
|
||||||
* @param frame a frame, or NULL to mark EOF
|
|
||||||
* @param flags a combination of AV_BUFFERSRC_FLAG_*
|
|
||||||
* @return >= 0 in case of success, a negative AVERROR code
|
|
||||||
* in case of failure
|
|
||||||
*/
|
|
||||||
av_warn_unused_result
|
|
||||||
int av_buffersrc_add_frame_flags(AVFilterContext *buffer_src,
|
|
||||||
AVFrame *frame, int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Close the buffer source after EOF.
|
|
||||||
*
|
|
||||||
* This is similar to passing NULL to av_buffersrc_add_frame_flags()
|
|
||||||
* except it takes the timestamp of the EOF, i.e. the timestamp of the end
|
|
||||||
* of the last frame.
|
|
||||||
*/
|
|
||||||
int av_buffersrc_close(AVFilterContext *ctx, int64_t pts, unsigned flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVFILTER_BUFFERSRC_H */
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,114 +0,0 @@
|
|||||||
/*
|
|
||||||
* Version macros.
|
|
||||||
*
|
|
||||||
* 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 AVFORMAT_VERSION_H
|
|
||||||
#define AVFORMAT_VERSION_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup libavf
|
|
||||||
* Libavformat version macros
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "avutilVersion.h"
|
|
||||||
|
|
||||||
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
|
|
||||||
// Also please add any ticket numbers that you believe might be affected here
|
|
||||||
#define LIBAVFORMAT_VERSION_MAJOR 58
|
|
||||||
#define LIBAVFORMAT_VERSION_MINOR 45
|
|
||||||
#define LIBAVFORMAT_VERSION_MICRO 100
|
|
||||||
|
|
||||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
|
||||||
LIBAVFORMAT_VERSION_MINOR, \
|
|
||||||
LIBAVFORMAT_VERSION_MICRO)
|
|
||||||
#define LIBAVFORMAT_VERSION AV_VERSION(LIBAVFORMAT_VERSION_MAJOR, \
|
|
||||||
LIBAVFORMAT_VERSION_MINOR, \
|
|
||||||
LIBAVFORMAT_VERSION_MICRO)
|
|
||||||
#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT
|
|
||||||
|
|
||||||
#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* FF_API_* defines may be placed below to indicate public API that will be
|
|
||||||
* dropped at a future version bump. The defines themselves are not part of
|
|
||||||
* the public API and may change, break or disappear at any time.
|
|
||||||
*
|
|
||||||
* @note, when bumping the major version it is recommended to manually
|
|
||||||
* disable each FF_API_* in its own commit instead of disabling them all
|
|
||||||
* at once through the bump. This improves the git bisect-ability of the change.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#ifndef FF_API_COMPUTE_PKT_FIELDS2
|
|
||||||
#define FF_API_COMPUTE_PKT_FIELDS2 (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_OLD_OPEN_CALLBACKS
|
|
||||||
#define FF_API_OLD_OPEN_CALLBACKS (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_LAVF_AVCTX
|
|
||||||
#define FF_API_LAVF_AVCTX (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_HTTP_USER_AGENT
|
|
||||||
#define FF_API_HTTP_USER_AGENT (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_HLS_WRAP
|
|
||||||
#define FF_API_HLS_WRAP (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_HLS_USE_LOCALTIME
|
|
||||||
#define FF_API_HLS_USE_LOCALTIME (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_LAVF_KEEPSIDE_FLAG
|
|
||||||
#define FF_API_LAVF_KEEPSIDE_FLAG (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_OLD_ROTATE_API
|
|
||||||
#define FF_API_OLD_ROTATE_API (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_FORMAT_GET_SET
|
|
||||||
#define FF_API_FORMAT_GET_SET (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_OLD_AVIO_EOF_0
|
|
||||||
#define FF_API_OLD_AVIO_EOF_0 (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_LAVF_FFSERVER
|
|
||||||
#define FF_API_LAVF_FFSERVER (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_FORMAT_FILENAME
|
|
||||||
#define FF_API_FORMAT_FILENAME (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_OLD_RTSP_OPTIONS
|
|
||||||
#define FF_API_OLD_RTSP_OPTIONS (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_NEXT
|
|
||||||
#define FF_API_NEXT (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_DASH_MIN_SEG_DURATION
|
|
||||||
#define FF_API_DASH_MIN_SEG_DURATION (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_LAVF_MP4A_LATM
|
|
||||||
#define FF_API_LAVF_MP4A_LATM (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_AVIOFORMAT
|
|
||||||
#define FF_API_AVIOFORMAT (LIBAVFORMAT_VERSION_MAJOR < 59)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef FF_API_R_FRAME_RATE
|
|
||||||
#define FF_API_R_FRAME_RATE 1
|
|
||||||
#endif
|
|
||||||
#endif /* AVFORMAT_VERSION_H */
|
|
||||||
@@ -1,888 +0,0 @@
|
|||||||
/*
|
|
||||||
* copyright (c) 2001 Fabrice Bellard
|
|
||||||
*
|
|
||||||
* 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 AVFORMAT_AVIO_H
|
|
||||||
#define AVFORMAT_AVIO_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavf_io
|
|
||||||
* Buffered I/O operations
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
#include "dict.h"
|
|
||||||
#include "log.h"
|
|
||||||
|
|
||||||
#include "avformatVersion.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Seeking works like for a local file.
|
|
||||||
*/
|
|
||||||
#define AVIO_SEEKABLE_NORMAL (1 << 0)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Seeking by timestamp with avio_seek_time() is possible.
|
|
||||||
*/
|
|
||||||
#define AVIO_SEEKABLE_TIME (1 << 1)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Callback for checking whether to abort blocking functions.
|
|
||||||
* AVERROR_EXIT is returned in this case by the interrupted
|
|
||||||
* function. During blocking operations, callback is called with
|
|
||||||
* opaque as parameter. If the callback returns 1, the
|
|
||||||
* blocking operation will be aborted.
|
|
||||||
*
|
|
||||||
* No members can be added to this struct without a major bump, if
|
|
||||||
* new elements have been added after this struct in AVFormatContext
|
|
||||||
* or AVIOContext.
|
|
||||||
*/
|
|
||||||
typedef struct AVIOInterruptCB {
|
|
||||||
int (*callback)(void*);
|
|
||||||
void *opaque;
|
|
||||||
} AVIOInterruptCB;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Directory entry types.
|
|
||||||
*/
|
|
||||||
enum AVIODirEntryType {
|
|
||||||
AVIO_ENTRY_UNKNOWN,
|
|
||||||
AVIO_ENTRY_BLOCK_DEVICE,
|
|
||||||
AVIO_ENTRY_CHARACTER_DEVICE,
|
|
||||||
AVIO_ENTRY_DIRECTORY,
|
|
||||||
AVIO_ENTRY_NAMED_PIPE,
|
|
||||||
AVIO_ENTRY_SYMBOLIC_LINK,
|
|
||||||
AVIO_ENTRY_SOCKET,
|
|
||||||
AVIO_ENTRY_FILE,
|
|
||||||
AVIO_ENTRY_SERVER,
|
|
||||||
AVIO_ENTRY_SHARE,
|
|
||||||
AVIO_ENTRY_WORKGROUP,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Describes single entry of the directory.
|
|
||||||
*
|
|
||||||
* Only name and type fields are guaranteed be set.
|
|
||||||
* Rest of fields are protocol or/and platform dependent and might be unknown.
|
|
||||||
*/
|
|
||||||
typedef struct AVIODirEntry {
|
|
||||||
char *name; /**< Filename */
|
|
||||||
int type; /**< Type of the entry */
|
|
||||||
int utf8; /**< Set to 1 when name is encoded with UTF-8, 0 otherwise.
|
|
||||||
Name can be encoded with UTF-8 even though 0 is set. */
|
|
||||||
int64_t size; /**< File size in bytes, -1 if unknown. */
|
|
||||||
int64_t modification_timestamp; /**< Time of last modification in microseconds since unix
|
|
||||||
epoch, -1 if unknown. */
|
|
||||||
int64_t access_timestamp; /**< Time of last access in microseconds since unix epoch,
|
|
||||||
-1 if unknown. */
|
|
||||||
int64_t status_change_timestamp; /**< Time of last status change in microseconds since unix
|
|
||||||
epoch, -1 if unknown. */
|
|
||||||
int64_t user_id; /**< User ID of owner, -1 if unknown. */
|
|
||||||
int64_t group_id; /**< Group ID of owner, -1 if unknown. */
|
|
||||||
int64_t filemode; /**< Unix file mode, -1 if unknown. */
|
|
||||||
} AVIODirEntry;
|
|
||||||
|
|
||||||
typedef struct AVIODirContext {
|
|
||||||
struct URLContext *url_context;
|
|
||||||
} AVIODirContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Different data types that can be returned via the AVIO
|
|
||||||
* write_data_type callback.
|
|
||||||
*/
|
|
||||||
enum AVIODataMarkerType {
|
|
||||||
/**
|
|
||||||
* Header data; this needs to be present for the stream to be decodeable.
|
|
||||||
*/
|
|
||||||
AVIO_DATA_MARKER_HEADER,
|
|
||||||
/**
|
|
||||||
* A point in the output bytestream where a decoder can start decoding
|
|
||||||
* (i.e. a keyframe). A demuxer/decoder given the data flagged with
|
|
||||||
* AVIO_DATA_MARKER_HEADER, followed by any AVIO_DATA_MARKER_SYNC_POINT,
|
|
||||||
* should give decodeable results.
|
|
||||||
*/
|
|
||||||
AVIO_DATA_MARKER_SYNC_POINT,
|
|
||||||
/**
|
|
||||||
* A point in the output bytestream where a demuxer can start parsing
|
|
||||||
* (for non self synchronizing bytestream formats). That is, any
|
|
||||||
* non-keyframe packet start point.
|
|
||||||
*/
|
|
||||||
AVIO_DATA_MARKER_BOUNDARY_POINT,
|
|
||||||
/**
|
|
||||||
* This is any, unlabelled data. It can either be a muxer not marking
|
|
||||||
* any positions at all, it can be an actual boundary/sync point
|
|
||||||
* that the muxer chooses not to mark, or a later part of a packet/fragment
|
|
||||||
* that is cut into multiple write callbacks due to limited IO buffer size.
|
|
||||||
*/
|
|
||||||
AVIO_DATA_MARKER_UNKNOWN,
|
|
||||||
/**
|
|
||||||
* Trailer data, which doesn't contain actual content, but only for
|
|
||||||
* finalizing the output file.
|
|
||||||
*/
|
|
||||||
AVIO_DATA_MARKER_TRAILER,
|
|
||||||
/**
|
|
||||||
* A point in the output bytestream where the underlying AVIOContext might
|
|
||||||
* flush the buffer depending on latency or buffering requirements. Typically
|
|
||||||
* means the end of a packet.
|
|
||||||
*/
|
|
||||||
AVIO_DATA_MARKER_FLUSH_POINT,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Bytestream IO Context.
|
|
||||||
* New fields can be added to the end with minor version bumps.
|
|
||||||
* Removal, reordering and changes to existing fields require a major
|
|
||||||
* version bump.
|
|
||||||
* sizeof(AVIOContext) must not be used outside libav*.
|
|
||||||
*
|
|
||||||
* @note None of the function pointers in AVIOContext should be called
|
|
||||||
* directly, they should only be set by the client application
|
|
||||||
* when implementing custom I/O. Normally these are set to the
|
|
||||||
* function pointers specified in avio_alloc_context()
|
|
||||||
*/
|
|
||||||
typedef struct AVIOContext {
|
|
||||||
/**
|
|
||||||
* A class for private options.
|
|
||||||
*
|
|
||||||
* If this AVIOContext is created by avio_open2(), av_class is set and
|
|
||||||
* passes the options down to protocols.
|
|
||||||
*
|
|
||||||
* If this AVIOContext is manually allocated, then av_class may be set by
|
|
||||||
* the caller.
|
|
||||||
*
|
|
||||||
* warning -- this field can be NULL, be sure to not pass this AVIOContext
|
|
||||||
* to any av_opt_* functions in that case.
|
|
||||||
*/
|
|
||||||
const AVClass *av_class;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The following shows the relationship between buffer, buf_ptr,
|
|
||||||
* buf_ptr_max, buf_end, buf_size, and pos, when reading and when writing
|
|
||||||
* (since AVIOContext is used for both):
|
|
||||||
*
|
|
||||||
**********************************************************************************
|
|
||||||
* READING
|
|
||||||
**********************************************************************************
|
|
||||||
*
|
|
||||||
* | buffer_size |
|
|
||||||
* |---------------------------------------|
|
|
||||||
* | |
|
|
||||||
*
|
|
||||||
* buffer buf_ptr buf_end
|
|
||||||
* +---------------+-----------------------+
|
|
||||||
* |/ / / / / / / /|/ / / / / / /| |
|
|
||||||
* read buffer: |/ / consumed / | to be read /| |
|
|
||||||
* |/ / / / / / / /|/ / / / / / /| |
|
|
||||||
* +---------------+-----------------------+
|
|
||||||
*
|
|
||||||
* pos
|
|
||||||
* +-------------------------------------------+-----------------+
|
|
||||||
* input file: | | |
|
|
||||||
* +-------------------------------------------+-----------------+
|
|
||||||
*
|
|
||||||
*
|
|
||||||
**********************************************************************************
|
|
||||||
* WRITING
|
|
||||||
**********************************************************************************
|
|
||||||
*
|
|
||||||
* | buffer_size |
|
|
||||||
* |--------------------------------------|
|
|
||||||
* | |
|
|
||||||
*
|
|
||||||
* buf_ptr_max
|
|
||||||
* buffer (buf_ptr) buf_end
|
|
||||||
* +-----------------------+--------------+
|
|
||||||
* |/ / / / / / / / / / / /| |
|
|
||||||
* write buffer: | / / to be flushed / / | |
|
|
||||||
* |/ / / / / / / / / / / /| |
|
|
||||||
* +-----------------------+--------------+
|
|
||||||
* buf_ptr can be in this
|
|
||||||
* due to a backward seek
|
|
||||||
*
|
|
||||||
* pos
|
|
||||||
* +-------------+----------------------------------------------+
|
|
||||||
* output file: | | |
|
|
||||||
* +-------------+----------------------------------------------+
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
unsigned char *buffer; /**< Start of the buffer. */
|
|
||||||
int buffer_size; /**< Maximum buffer size */
|
|
||||||
unsigned char *buf_ptr; /**< Current position in the buffer */
|
|
||||||
unsigned char *buf_end; /**< End of the data, may be less than
|
|
||||||
buffer+buffer_size if the read function returned
|
|
||||||
less data than requested, e.g. for streams where
|
|
||||||
no more data has been received yet. */
|
|
||||||
void *opaque; /**< A private pointer, passed to the read/write/seek/...
|
|
||||||
functions. */
|
|
||||||
int (*read_packet)(void *opaque, uint8_t *buf, int buf_size);
|
|
||||||
int (*write_packet)(void *opaque, uint8_t *buf, int buf_size);
|
|
||||||
int64_t (*seek)(void *opaque, int64_t offset, int whence);
|
|
||||||
int64_t pos; /**< position in the file of the current buffer */
|
|
||||||
int eof_reached; /**< true if was unable to read due to error or eof */
|
|
||||||
int write_flag; /**< true if open for writing */
|
|
||||||
int max_packet_size;
|
|
||||||
unsigned long checksum;
|
|
||||||
unsigned char *checksum_ptr;
|
|
||||||
unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size);
|
|
||||||
int error; /**< contains the error code or 0 if no error happened */
|
|
||||||
/**
|
|
||||||
* Pause or resume playback for network streaming protocols - e.g. MMS.
|
|
||||||
*/
|
|
||||||
int (*read_pause)(void *opaque, int pause);
|
|
||||||
/**
|
|
||||||
* Seek to a given timestamp in stream with the specified stream_index.
|
|
||||||
* Needed for some network streaming protocols which don't support seeking
|
|
||||||
* to byte position.
|
|
||||||
*/
|
|
||||||
int64_t (*read_seek)(void *opaque, int stream_index,
|
|
||||||
int64_t timestamp, int flags);
|
|
||||||
/**
|
|
||||||
* A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
|
|
||||||
*/
|
|
||||||
int seekable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* max filesize, used to limit allocations
|
|
||||||
* This field is internal to libavformat and access from outside is not allowed.
|
|
||||||
*/
|
|
||||||
int64_t maxsize;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* avio_read and avio_write should if possible be satisfied directly
|
|
||||||
* instead of going through a buffer, and avio_seek will always
|
|
||||||
* call the underlying seek function directly.
|
|
||||||
*/
|
|
||||||
int direct;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Bytes read statistic
|
|
||||||
* This field is internal to libavformat and access from outside is not allowed.
|
|
||||||
*/
|
|
||||||
int64_t bytes_read;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* seek statistic
|
|
||||||
* This field is internal to libavformat and access from outside is not allowed.
|
|
||||||
*/
|
|
||||||
int seek_count;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* writeout statistic
|
|
||||||
* This field is internal to libavformat and access from outside is not allowed.
|
|
||||||
*/
|
|
||||||
int writeout_count;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Original buffer size
|
|
||||||
* used internally after probing and ensure seekback to reset the buffer size
|
|
||||||
* This field is internal to libavformat and access from outside is not allowed.
|
|
||||||
*/
|
|
||||||
int orig_buffer_size;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Threshold to favor readahead over seek.
|
|
||||||
* This is current internal only, do not use from outside.
|
|
||||||
*/
|
|
||||||
int short_seek_threshold;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ',' separated list of allowed protocols.
|
|
||||||
*/
|
|
||||||
const char *protocol_whitelist;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ',' separated list of disallowed protocols.
|
|
||||||
*/
|
|
||||||
const char *protocol_blacklist;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A callback that is used instead of write_packet.
|
|
||||||
*/
|
|
||||||
int (*write_data_type)(void *opaque, uint8_t *buf, int buf_size,
|
|
||||||
enum AVIODataMarkerType type, int64_t time);
|
|
||||||
/**
|
|
||||||
* If set, don't call write_data_type separately for AVIO_DATA_MARKER_BOUNDARY_POINT,
|
|
||||||
* but ignore them and treat them as AVIO_DATA_MARKER_UNKNOWN (to avoid needlessly
|
|
||||||
* small chunks of data returned from the callback).
|
|
||||||
*/
|
|
||||||
int ignore_boundary_point;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Internal, not meant to be used from outside of AVIOContext.
|
|
||||||
*/
|
|
||||||
enum AVIODataMarkerType current_type;
|
|
||||||
int64_t last_time;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A callback that is used instead of short_seek_threshold.
|
|
||||||
* This is current internal only, do not use from outside.
|
|
||||||
*/
|
|
||||||
int (*short_seek_get)(void *opaque);
|
|
||||||
|
|
||||||
int64_t written;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Maximum reached position before a backward seek in the write buffer,
|
|
||||||
* used keeping track of already written data for a later flush.
|
|
||||||
*/
|
|
||||||
unsigned char *buf_ptr_max;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Try to buffer at least this amount of data before flushing it
|
|
||||||
*/
|
|
||||||
int min_packet_size;
|
|
||||||
} AVIOContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the name of the protocol that will handle the passed URL.
|
|
||||||
*
|
|
||||||
* NULL is returned if no protocol could be found for the given URL.
|
|
||||||
*
|
|
||||||
* @return Name of the protocol or NULL.
|
|
||||||
*/
|
|
||||||
const char *avio_find_protocol_name(const char *url);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return AVIO_FLAG_* access flags corresponding to the access permissions
|
|
||||||
* of the resource in url, or a negative value corresponding to an
|
|
||||||
* AVERROR code in case of failure. The returned access flags are
|
|
||||||
* masked by the value in flags.
|
|
||||||
*
|
|
||||||
* @note This function is intrinsically unsafe, in the sense that the
|
|
||||||
* checked resource may change its existence or permission status from
|
|
||||||
* one call to another. Thus you should not trust the returned value,
|
|
||||||
* unless you are sure that no other processes are accessing the
|
|
||||||
* checked resource.
|
|
||||||
*/
|
|
||||||
int avio_check(const char *url, int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Move or rename a resource.
|
|
||||||
*
|
|
||||||
* @note url_src and url_dst should share the same protocol and authority.
|
|
||||||
*
|
|
||||||
* @param url_src url to resource to be moved
|
|
||||||
* @param url_dst new url to resource if the operation succeeded
|
|
||||||
* @return >=0 on success or negative on error.
|
|
||||||
*/
|
|
||||||
int avpriv_io_move(const char *url_src, const char *url_dst);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete a resource.
|
|
||||||
*
|
|
||||||
* @param url resource to be deleted.
|
|
||||||
* @return >=0 on success or negative on error.
|
|
||||||
*/
|
|
||||||
int avpriv_io_delete(const char *url);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Open directory for reading.
|
|
||||||
*
|
|
||||||
* @param s directory read context. Pointer to a NULL pointer must be passed.
|
|
||||||
* @param url directory to be listed.
|
|
||||||
* @param options A dictionary filled with protocol-private options. On return
|
|
||||||
* this parameter will be destroyed and replaced with a dictionary
|
|
||||||
* containing options that were not found. May be NULL.
|
|
||||||
* @return >=0 on success or negative on error.
|
|
||||||
*/
|
|
||||||
int avio_open_dir(AVIODirContext **s, const char *url, AVDictionary **options);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get next directory entry.
|
|
||||||
*
|
|
||||||
* Returned entry must be freed with avio_free_directory_entry(). In particular
|
|
||||||
* it may outlive AVIODirContext.
|
|
||||||
*
|
|
||||||
* @param s directory read context.
|
|
||||||
* @param[out] next next entry or NULL when no more entries.
|
|
||||||
* @return >=0 on success or negative on error. End of list is not considered an
|
|
||||||
* error.
|
|
||||||
*/
|
|
||||||
int avio_read_dir(AVIODirContext *s, AVIODirEntry **next);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Close directory.
|
|
||||||
*
|
|
||||||
* @note Entries created using avio_read_dir() are not deleted and must be
|
|
||||||
* freeded with avio_free_directory_entry().
|
|
||||||
*
|
|
||||||
* @param s directory read context.
|
|
||||||
* @return >=0 on success or negative on error.
|
|
||||||
*/
|
|
||||||
int avio_close_dir(AVIODirContext **s);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free entry allocated by avio_read_dir().
|
|
||||||
*
|
|
||||||
* @param entry entry to be freed.
|
|
||||||
*/
|
|
||||||
void avio_free_directory_entry(AVIODirEntry **entry);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate and initialize an AVIOContext for buffered I/O. It must be later
|
|
||||||
* freed with avio_context_free().
|
|
||||||
*
|
|
||||||
* @param buffer Memory block for input/output operations via AVIOContext.
|
|
||||||
* The buffer must be allocated with av_malloc() and friends.
|
|
||||||
* It may be freed and replaced with a new buffer by libavformat.
|
|
||||||
* AVIOContext.buffer holds the buffer currently in use,
|
|
||||||
* which must be later freed with av_free().
|
|
||||||
* @param buffer_size The buffer size is very important for performance.
|
|
||||||
* For protocols with fixed blocksize it should be set to this blocksize.
|
|
||||||
* For others a typical size is a cache page, e.g. 4kb.
|
|
||||||
* @param write_flag Set to 1 if the buffer should be writable, 0 otherwise.
|
|
||||||
* @param opaque An opaque pointer to user-specific data.
|
|
||||||
* @param read_packet A function for refilling the buffer, may be NULL.
|
|
||||||
* For stream protocols, must never return 0 but rather
|
|
||||||
* a proper AVERROR code.
|
|
||||||
* @param write_packet A function for writing the buffer contents, may be NULL.
|
|
||||||
* The function may not change the input buffers content.
|
|
||||||
* @param seek A function for seeking to specified byte position, may be NULL.
|
|
||||||
*
|
|
||||||
* @return Allocated AVIOContext or NULL on failure.
|
|
||||||
*/
|
|
||||||
AVIOContext *avio_alloc_context(
|
|
||||||
unsigned char *buffer,
|
|
||||||
int buffer_size,
|
|
||||||
int write_flag,
|
|
||||||
void *opaque,
|
|
||||||
int (*read_packet)(void *opaque, uint8_t *buf, int buf_size),
|
|
||||||
int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
|
|
||||||
int64_t (*seek)(void *opaque, int64_t offset, int whence));
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free the supplied IO context and everything associated with it.
|
|
||||||
*
|
|
||||||
* @param s Double pointer to the IO context. This function will write NULL
|
|
||||||
* into s.
|
|
||||||
*/
|
|
||||||
void avio_context_free(AVIOContext **s);
|
|
||||||
|
|
||||||
void avio_w8(AVIOContext *s, int b);
|
|
||||||
void avio_write(AVIOContext *s, const unsigned char *buf, int size);
|
|
||||||
void avio_wl64(AVIOContext *s, uint64_t val);
|
|
||||||
void avio_wb64(AVIOContext *s, uint64_t val);
|
|
||||||
void avio_wl32(AVIOContext *s, unsigned int val);
|
|
||||||
void avio_wb32(AVIOContext *s, unsigned int val);
|
|
||||||
void avio_wl24(AVIOContext *s, unsigned int val);
|
|
||||||
void avio_wb24(AVIOContext *s, unsigned int val);
|
|
||||||
void avio_wl16(AVIOContext *s, unsigned int val);
|
|
||||||
void avio_wb16(AVIOContext *s, unsigned int val);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Write a NULL-terminated string.
|
|
||||||
* @return number of bytes written.
|
|
||||||
*/
|
|
||||||
int avio_put_str(AVIOContext *s, const char *str);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert an UTF-8 string to UTF-16LE and write it.
|
|
||||||
* @param s the AVIOContext
|
|
||||||
* @param str NULL-terminated UTF-8 string
|
|
||||||
*
|
|
||||||
* @return number of bytes written.
|
|
||||||
*/
|
|
||||||
int avio_put_str16le(AVIOContext *s, const char *str);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert an UTF-8 string to UTF-16BE and write it.
|
|
||||||
* @param s the AVIOContext
|
|
||||||
* @param str NULL-terminated UTF-8 string
|
|
||||||
*
|
|
||||||
* @return number of bytes written.
|
|
||||||
*/
|
|
||||||
int avio_put_str16be(AVIOContext *s, const char *str);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mark the written bytestream as a specific type.
|
|
||||||
*
|
|
||||||
* Zero-length ranges are omitted from the output.
|
|
||||||
*
|
|
||||||
* @param time the stream time the current bytestream pos corresponds to
|
|
||||||
* (in AV_TIME_BASE units), or AV_NOPTS_VALUE if unknown or not
|
|
||||||
* applicable
|
|
||||||
* @param type the kind of data written starting at the current pos
|
|
||||||
*/
|
|
||||||
void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ORing this as the "whence" parameter to a seek function causes it to
|
|
||||||
* return the filesize without seeking anywhere. Supporting this is optional.
|
|
||||||
* If it is not supported then the seek function will return <0.
|
|
||||||
*/
|
|
||||||
#define AVSEEK_SIZE 0x10000
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Passing this flag as the "whence" parameter to a seek function causes it to
|
|
||||||
* seek by any means (like reopening and linear reading) or other normally unreasonable
|
|
||||||
* means that can be extremely slow.
|
|
||||||
* This may be ignored by the seek code.
|
|
||||||
*/
|
|
||||||
#define AVSEEK_FORCE 0x20000
|
|
||||||
|
|
||||||
/**
|
|
||||||
* fseek() equivalent for AVIOContext.
|
|
||||||
* @return new position or AVERROR.
|
|
||||||
*/
|
|
||||||
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Skip given number of bytes forward
|
|
||||||
* @return new position or AVERROR.
|
|
||||||
*/
|
|
||||||
int64_t avio_skip(AVIOContext *s, int64_t offset);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ftell() equivalent for AVIOContext.
|
|
||||||
* @return position or AVERROR.
|
|
||||||
*/
|
|
||||||
static av_always_inline int64_t avio_tell(AVIOContext *s)
|
|
||||||
{
|
|
||||||
return avio_seek(s, 0, SEEK_CUR);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the filesize.
|
|
||||||
* @return filesize or AVERROR
|
|
||||||
*/
|
|
||||||
int64_t avio_size(AVIOContext *s);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Similar to feof() but also returns nonzero on read errors.
|
|
||||||
* @return non zero if and only if at end of file or a read error happened when reading.
|
|
||||||
*/
|
|
||||||
int avio_feof(AVIOContext *s);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes a formatted string to the context.
|
|
||||||
* @return number of bytes written, < 0 on error.
|
|
||||||
*/
|
|
||||||
int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Write a NULL terminated array of strings to the context.
|
|
||||||
* Usually you don't need to use this function directly but its macro wrapper,
|
|
||||||
* avio_print.
|
|
||||||
*/
|
|
||||||
void avio_print_string_array(AVIOContext *s, const char *strings[]);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Write strings (const char *) to the context.
|
|
||||||
* This is a convenience macro around avio_print_string_array and it
|
|
||||||
* automatically creates the string array from the variable argument list.
|
|
||||||
* For simple string concatenations this function is more performant than using
|
|
||||||
* avio_printf since it does not need a temporary buffer.
|
|
||||||
*/
|
|
||||||
#define avio_print(s, ...) \
|
|
||||||
avio_print_string_array(s, (const char*[]){__VA_ARGS__, NULL})
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Force flushing of buffered data.
|
|
||||||
*
|
|
||||||
* For write streams, force the buffered data to be immediately written to the output,
|
|
||||||
* without to wait to fill the internal buffer.
|
|
||||||
*
|
|
||||||
* For read streams, discard all currently buffered data, and advance the
|
|
||||||
* reported file position to that of the underlying stream. This does not
|
|
||||||
* read new data, and does not perform any seeks.
|
|
||||||
*/
|
|
||||||
void avio_flush(AVIOContext *s);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read size bytes from AVIOContext into buf.
|
|
||||||
* @return number of bytes read or AVERROR
|
|
||||||
*/
|
|
||||||
int avio_read(AVIOContext *s, unsigned char *buf, int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read size bytes from AVIOContext into buf. Unlike avio_read(), this is allowed
|
|
||||||
* to read fewer bytes than requested. The missing bytes can be read in the next
|
|
||||||
* call. This always tries to read at least 1 byte.
|
|
||||||
* Useful to reduce latency in certain cases.
|
|
||||||
* @return number of bytes read or AVERROR
|
|
||||||
*/
|
|
||||||
int avio_read_partial(AVIOContext *s, unsigned char *buf, int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @name Functions for reading from AVIOContext
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @note return 0 if EOF, so you cannot use it if EOF handling is
|
|
||||||
* necessary
|
|
||||||
*/
|
|
||||||
int avio_r8 (AVIOContext *s);
|
|
||||||
unsigned int avio_rl16(AVIOContext *s);
|
|
||||||
unsigned int avio_rl24(AVIOContext *s);
|
|
||||||
unsigned int avio_rl32(AVIOContext *s);
|
|
||||||
uint64_t avio_rl64(AVIOContext *s);
|
|
||||||
unsigned int avio_rb16(AVIOContext *s);
|
|
||||||
unsigned int avio_rb24(AVIOContext *s);
|
|
||||||
unsigned int avio_rb32(AVIOContext *s);
|
|
||||||
uint64_t avio_rb64(AVIOContext *s);
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read a string from pb into buf. The reading will terminate when either
|
|
||||||
* a NULL character was encountered, maxlen bytes have been read, or nothing
|
|
||||||
* more can be read from pb. The result is guaranteed to be NULL-terminated, it
|
|
||||||
* will be truncated if buf is too small.
|
|
||||||
* Note that the string is not interpreted or validated in any way, it
|
|
||||||
* might get truncated in the middle of a sequence for multi-byte encodings.
|
|
||||||
*
|
|
||||||
* @return number of bytes read (is always <= maxlen).
|
|
||||||
* If reading ends on EOF or error, the return value will be one more than
|
|
||||||
* bytes actually read.
|
|
||||||
*/
|
|
||||||
int avio_get_str(AVIOContext *pb, int maxlen, char *buf, int buflen);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read a UTF-16 string from pb and convert it to UTF-8.
|
|
||||||
* The reading will terminate when either a null or invalid character was
|
|
||||||
* encountered or maxlen bytes have been read.
|
|
||||||
* @return number of bytes read (is always <= maxlen)
|
|
||||||
*/
|
|
||||||
int avio_get_str16le(AVIOContext *pb, int maxlen, char *buf, int buflen);
|
|
||||||
int avio_get_str16be(AVIOContext *pb, int maxlen, char *buf, int buflen);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @name URL open modes
|
|
||||||
* The flags argument to avio_open must be one of the following
|
|
||||||
* constants, optionally ORed with other flags.
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define AVIO_FLAG_READ 1 /**< read-only */
|
|
||||||
#define AVIO_FLAG_WRITE 2 /**< write-only */
|
|
||||||
#define AVIO_FLAG_READ_WRITE (AVIO_FLAG_READ|AVIO_FLAG_WRITE) /**< read-write pseudo flag */
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Use non-blocking mode.
|
|
||||||
* If this flag is set, operations on the context will return
|
|
||||||
* AVERROR(EAGAIN) if they can not be performed immediately.
|
|
||||||
* If this flag is not set, operations on the context will never return
|
|
||||||
* AVERROR(EAGAIN).
|
|
||||||
* Note that this flag does not affect the opening/connecting of the
|
|
||||||
* context. Connecting a protocol will always block if necessary (e.g. on
|
|
||||||
* network protocols) but never hang (e.g. on busy devices).
|
|
||||||
* Warning: non-blocking protocols is work-in-progress; this flag may be
|
|
||||||
* silently ignored.
|
|
||||||
*/
|
|
||||||
#define AVIO_FLAG_NONBLOCK 8
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Use direct mode.
|
|
||||||
* avio_read and avio_write should if possible be satisfied directly
|
|
||||||
* instead of going through a buffer, and avio_seek will always
|
|
||||||
* call the underlying seek function directly.
|
|
||||||
*/
|
|
||||||
#define AVIO_FLAG_DIRECT 0x8000
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create and initialize a AVIOContext for accessing the
|
|
||||||
* resource indicated by url.
|
|
||||||
* @note When the resource indicated by url has been opened in
|
|
||||||
* read+write mode, the AVIOContext can be used only for writing.
|
|
||||||
*
|
|
||||||
* @param s Used to return the pointer to the created AVIOContext.
|
|
||||||
* In case of failure the pointed to value is set to NULL.
|
|
||||||
* @param url resource to access
|
|
||||||
* @param flags flags which control how the resource indicated by url
|
|
||||||
* is to be opened
|
|
||||||
* @return >= 0 in case of success, a negative value corresponding to an
|
|
||||||
* AVERROR code in case of failure
|
|
||||||
*/
|
|
||||||
int avio_open(AVIOContext **s, const char *url, int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create and initialize a AVIOContext for accessing the
|
|
||||||
* resource indicated by url.
|
|
||||||
* @note When the resource indicated by url has been opened in
|
|
||||||
* read+write mode, the AVIOContext can be used only for writing.
|
|
||||||
*
|
|
||||||
* @param s Used to return the pointer to the created AVIOContext.
|
|
||||||
* In case of failure the pointed to value is set to NULL.
|
|
||||||
* @param url resource to access
|
|
||||||
* @param flags flags which control how the resource indicated by url
|
|
||||||
* is to be opened
|
|
||||||
* @param int_cb an interrupt callback to be used at the protocols level
|
|
||||||
* @param options A dictionary filled with protocol-private options. On return
|
|
||||||
* this parameter will be destroyed and replaced with a dict containing options
|
|
||||||
* that were not found. May be NULL.
|
|
||||||
* @return >= 0 in case of success, a negative value corresponding to an
|
|
||||||
* AVERROR code in case of failure
|
|
||||||
*/
|
|
||||||
int avio_open2(AVIOContext **s, const char *url, int flags,
|
|
||||||
const AVIOInterruptCB *int_cb, AVDictionary **options);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Close the resource accessed by the AVIOContext s and free it.
|
|
||||||
* This function can only be used if s was opened by avio_open().
|
|
||||||
*
|
|
||||||
* The internal buffer is automatically flushed before closing the
|
|
||||||
* resource.
|
|
||||||
*
|
|
||||||
* @return 0 on success, an AVERROR < 0 on error.
|
|
||||||
* @see avio_closep
|
|
||||||
*/
|
|
||||||
int avio_close(AVIOContext *s);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Close the resource accessed by the AVIOContext *s, free it
|
|
||||||
* and set the pointer pointing to it to NULL.
|
|
||||||
* This function can only be used if s was opened by avio_open().
|
|
||||||
*
|
|
||||||
* The internal buffer is automatically flushed before closing the
|
|
||||||
* resource.
|
|
||||||
*
|
|
||||||
* @return 0 on success, an AVERROR < 0 on error.
|
|
||||||
* @see avio_close
|
|
||||||
*/
|
|
||||||
int avio_closep(AVIOContext **s);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Open a write only memory stream.
|
|
||||||
*
|
|
||||||
* @param s new IO context
|
|
||||||
* @return zero if no error.
|
|
||||||
*/
|
|
||||||
int avio_open_dyn_buf(AVIOContext **s);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the written size and a pointer to the buffer.
|
|
||||||
* The AVIOContext stream is left intact.
|
|
||||||
* The buffer must NOT be freed.
|
|
||||||
* No padding is added to the buffer.
|
|
||||||
*
|
|
||||||
* @param s IO context
|
|
||||||
* @param pbuffer pointer to a byte buffer
|
|
||||||
* @return the length of the byte buffer
|
|
||||||
*/
|
|
||||||
int avio_get_dyn_buf(AVIOContext *s, uint8_t **pbuffer);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the written size and a pointer to the buffer. The buffer
|
|
||||||
* must be freed with av_free().
|
|
||||||
* Padding of AV_INPUT_BUFFER_PADDING_SIZE is added to the buffer.
|
|
||||||
*
|
|
||||||
* @param s IO context
|
|
||||||
* @param pbuffer pointer to a byte buffer
|
|
||||||
* @return the length of the byte buffer
|
|
||||||
*/
|
|
||||||
int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Iterate through names of available protocols.
|
|
||||||
*
|
|
||||||
* @param opaque A private pointer representing current protocol.
|
|
||||||
* It must be a pointer to NULL on first iteration and will
|
|
||||||
* be updated by successive calls to avio_enum_protocols.
|
|
||||||
* @param output If set to 1, iterate over output protocols,
|
|
||||||
* otherwise over input protocols.
|
|
||||||
*
|
|
||||||
* @return A static string containing the name of current protocol or NULL
|
|
||||||
*/
|
|
||||||
const char *avio_enum_protocols(void **opaque, int output);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get AVClass by names of available protocols.
|
|
||||||
*
|
|
||||||
* @return A AVClass of input protocol name or NULL
|
|
||||||
*/
|
|
||||||
const AVClass *avio_protocol_get_class(const char *name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Pause and resume playing - only meaningful if using a network streaming
|
|
||||||
* protocol (e.g. MMS).
|
|
||||||
*
|
|
||||||
* @param h IO context from which to call the read_pause function pointer
|
|
||||||
* @param pause 1 for pause, 0 for resume
|
|
||||||
*/
|
|
||||||
int avio_pause(AVIOContext *h, int pause);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Seek to a given timestamp relative to some component stream.
|
|
||||||
* Only meaningful if using a network streaming protocol (e.g. MMS.).
|
|
||||||
*
|
|
||||||
* @param h IO context from which to call the seek function pointers
|
|
||||||
* @param stream_index The stream index that the timestamp is relative to.
|
|
||||||
* If stream_index is (-1) the timestamp should be in AV_TIME_BASE
|
|
||||||
* units from the beginning of the presentation.
|
|
||||||
* If a stream_index >= 0 is used and the protocol does not support
|
|
||||||
* seeking based on component streams, the call will fail.
|
|
||||||
* @param timestamp timestamp in AVStream.time_base units
|
|
||||||
* or if there is no stream specified then in AV_TIME_BASE units.
|
|
||||||
* @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE
|
|
||||||
* and AVSEEK_FLAG_ANY. The protocol may silently ignore
|
|
||||||
* AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will
|
|
||||||
* fail if used and not supported.
|
|
||||||
* @return >= 0 on success
|
|
||||||
* @see AVInputFormat::read_seek
|
|
||||||
*/
|
|
||||||
int64_t avio_seek_time(AVIOContext *h, int stream_index,
|
|
||||||
int64_t timestamp, int flags);
|
|
||||||
|
|
||||||
/* Avoid a warning. The header can not be included because it breaks c++. */
|
|
||||||
struct AVBPrint;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read contents of h into print buffer, up to max_size bytes, or up to EOF.
|
|
||||||
*
|
|
||||||
* @return 0 for success (max_size bytes read or EOF reached), negative error
|
|
||||||
* code otherwise
|
|
||||||
*/
|
|
||||||
int avio_read_to_bprint(AVIOContext *h, struct AVBPrint *pb, size_t max_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Accept and allocate a client context on a server context.
|
|
||||||
* @param s the server context
|
|
||||||
* @param c the client context, must be unallocated
|
|
||||||
* @return >= 0 on success or a negative value corresponding
|
|
||||||
* to an AVERROR on failure
|
|
||||||
*/
|
|
||||||
int avio_accept(AVIOContext *s, AVIOContext **c);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Perform one step of the protocol handshake to accept a new client.
|
|
||||||
* This function must be called on a client returned by avio_accept() before
|
|
||||||
* using it as a read/write context.
|
|
||||||
* It is separate from avio_accept() because it may block.
|
|
||||||
* A step of the handshake is defined by places where the application may
|
|
||||||
* decide to change the proceedings.
|
|
||||||
* For example, on a protocol with a request header and a reply header, each
|
|
||||||
* one can constitute a step because the application may use the parameters
|
|
||||||
* from the request to change parameters in the reply; or each individual
|
|
||||||
* chunk of the request can constitute a step.
|
|
||||||
* If the handshake is already finished, avio_handshake() does nothing and
|
|
||||||
* returns 0 immediately.
|
|
||||||
*
|
|
||||||
* @param c the client context to perform the handshake on
|
|
||||||
* @return 0 on a complete and successful handshake
|
|
||||||
* > 0 if the handshake progressed, but is not complete
|
|
||||||
* < 0 for an AVERROR code
|
|
||||||
*/
|
|
||||||
int avio_handshake(AVIOContext *c);
|
|
||||||
#endif /* AVFORMAT_AVIO_H */
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
* copyright (c) 2006 Mans Rullgard
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavu_adler32
|
|
||||||
* Public header for Adler-32 hash function implementation.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_ADLER32_H
|
|
||||||
#define AVUTIL_ADLER32_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "attributes.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_adler32 Adler-32
|
|
||||||
* @ingroup lavu_hash
|
|
||||||
* Adler-32 hash function implementation.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate the Adler32 checksum of a buffer.
|
|
||||||
*
|
|
||||||
* Passing the return value to a subsequent av_adler32_update() call
|
|
||||||
* allows the checksum of multiple buffers to be calculated as though
|
|
||||||
* they were concatenated.
|
|
||||||
*
|
|
||||||
* @param adler initial checksum value
|
|
||||||
* @param buf pointer to input buffer
|
|
||||||
* @param len size of input buffer
|
|
||||||
* @return updated checksum
|
|
||||||
*/
|
|
||||||
unsigned long av_adler32_update(unsigned long adler, const uint8_t *buf,
|
|
||||||
unsigned int len) av_pure;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_ADLER32_H */
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
/*
|
|
||||||
* copyright (c) 2007 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_AES_H
|
|
||||||
#define AVUTIL_AES_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "attributes.h"
|
|
||||||
#include "avutilVersion.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_aes AES
|
|
||||||
* @ingroup lavu_crypto
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
extern const int av_aes_size;
|
|
||||||
|
|
||||||
struct AVAES;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVAES context.
|
|
||||||
*/
|
|
||||||
struct AVAES *av_aes_alloc(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize an AVAES context.
|
|
||||||
* @param key_bits 128, 192 or 256
|
|
||||||
* @param decrypt 0 for encryption, 1 for decryption
|
|
||||||
*/
|
|
||||||
int av_aes_init(struct AVAES *a, const uint8_t *key, int key_bits, int decrypt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encrypt or decrypt a buffer using a previously initialized context.
|
|
||||||
* @param count number of 16 byte blocks
|
|
||||||
* @param dst destination array, can be equal to src
|
|
||||||
* @param src source array, can be equal to dst
|
|
||||||
* @param iv initialization vector for CBC mode, if NULL then ECB will be used
|
|
||||||
* @param decrypt 0 for encryption, 1 for decryption
|
|
||||||
*/
|
|
||||||
void av_aes_crypt(struct AVAES *a, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_AES_H */
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
/*
|
|
||||||
* AES-CTR cipher
|
|
||||||
* Copyright (c) 2015 Eran Kornblau <erankor at gmail dot com>
|
|
||||||
*
|
|
||||||
* 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_AES_CTR_H
|
|
||||||
#define AVUTIL_AES_CTR_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "attributes.h"
|
|
||||||
#include "avutilVersion.h"
|
|
||||||
|
|
||||||
#define AES_CTR_KEY_SIZE (16)
|
|
||||||
#define AES_CTR_IV_SIZE (8)
|
|
||||||
|
|
||||||
struct AVAESCTR;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVAESCTR context.
|
|
||||||
*/
|
|
||||||
struct AVAESCTR *av_aes_ctr_alloc(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize an AVAESCTR context.
|
|
||||||
* @param key encryption key, must have a length of AES_CTR_KEY_SIZE
|
|
||||||
*/
|
|
||||||
int av_aes_ctr_init(struct AVAESCTR *a, const uint8_t *key);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Release an AVAESCTR context.
|
|
||||||
*/
|
|
||||||
void av_aes_ctr_free(struct AVAESCTR *a);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Process a buffer using a previously initialized context.
|
|
||||||
* @param dst destination array, can be equal to src
|
|
||||||
* @param src source array, can be equal to dst
|
|
||||||
* @param size the size of src and dst
|
|
||||||
*/
|
|
||||||
void av_aes_ctr_crypt(struct AVAESCTR *a, uint8_t *dst, const uint8_t *src, int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the current iv
|
|
||||||
*/
|
|
||||||
const uint8_t* av_aes_ctr_get_iv(struct AVAESCTR *a);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate a random iv
|
|
||||||
*/
|
|
||||||
void av_aes_ctr_set_random_iv(struct AVAESCTR *a);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Forcefully change the 8-byte iv
|
|
||||||
*/
|
|
||||||
void av_aes_ctr_set_iv(struct AVAESCTR *a, const uint8_t* iv);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Forcefully change the "full" 16-byte iv, including the counter
|
|
||||||
*/
|
|
||||||
void av_aes_ctr_set_full_iv(struct AVAESCTR *a, const uint8_t* iv);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Increment the top 64 bit of the iv (performed after each frame)
|
|
||||||
*/
|
|
||||||
void av_aes_ctr_increment_iv(struct AVAESCTR *a);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_AES_CTR_H */
|
|
||||||
@@ -1,173 +0,0 @@
|
|||||||
/*
|
|
||||||
* copyright (c) 2006 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* Macro definitions for various function/variable attributes
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_ATTRIBUTES_H
|
|
||||||
#define AVUTIL_ATTRIBUTES_H
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
# define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y))
|
|
||||||
# define AV_GCC_VERSION_AT_MOST(x,y) (__GNUC__ < (x) || __GNUC__ == (x) && __GNUC_MINOR__ <= (y))
|
|
||||||
#else
|
|
||||||
# define AV_GCC_VERSION_AT_LEAST(x,y) 0
|
|
||||||
# define AV_GCC_VERSION_AT_MOST(x,y) 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __has_builtin
|
|
||||||
# define AV_HAS_BUILTIN(x) __has_builtin(x)
|
|
||||||
#else
|
|
||||||
# define AV_HAS_BUILTIN(x) 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef av_always_inline
|
|
||||||
#if AV_GCC_VERSION_AT_LEAST(3,1)
|
|
||||||
# define av_always_inline __attribute__((always_inline)) inline
|
|
||||||
#elif defined(_MSC_VER)
|
|
||||||
# define av_always_inline __forceinline
|
|
||||||
#else
|
|
||||||
# define av_always_inline inline
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef av_extern_inline
|
|
||||||
#if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__)
|
|
||||||
# define av_extern_inline extern inline
|
|
||||||
#else
|
|
||||||
# define av_extern_inline inline
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if AV_GCC_VERSION_AT_LEAST(3,4)
|
|
||||||
# define av_warn_unused_result __attribute__((warn_unused_result))
|
|
||||||
#else
|
|
||||||
# define av_warn_unused_result
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if AV_GCC_VERSION_AT_LEAST(3,1)
|
|
||||||
# define av_noinline __attribute__((noinline))
|
|
||||||
#elif defined(_MSC_VER)
|
|
||||||
# define av_noinline __declspec(noinline)
|
|
||||||
#else
|
|
||||||
# define av_noinline
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__)
|
|
||||||
# define av_pure __attribute__((pure))
|
|
||||||
#else
|
|
||||||
# define av_pure
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if AV_GCC_VERSION_AT_LEAST(2,6) || defined(__clang__)
|
|
||||||
# define av_const __attribute__((const))
|
|
||||||
#else
|
|
||||||
# define av_const
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if AV_GCC_VERSION_AT_LEAST(4,3) || defined(__clang__)
|
|
||||||
# define av_cold __attribute__((cold))
|
|
||||||
#else
|
|
||||||
# define av_cold
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if AV_GCC_VERSION_AT_LEAST(4,1) && !defined(__llvm__)
|
|
||||||
# define av_flatten __attribute__((flatten))
|
|
||||||
#else
|
|
||||||
# define av_flatten
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if AV_GCC_VERSION_AT_LEAST(3,1)
|
|
||||||
# define attribute_deprecated __attribute__((deprecated))
|
|
||||||
#elif defined(_MSC_VER)
|
|
||||||
# define attribute_deprecated __declspec(deprecated)
|
|
||||||
#else
|
|
||||||
# define attribute_deprecated
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Disable warnings about deprecated features
|
|
||||||
* This is useful for sections of code kept for backward compatibility and
|
|
||||||
* scheduled for removal.
|
|
||||||
*/
|
|
||||||
#ifndef AV_NOWARN_DEPRECATED
|
|
||||||
#if AV_GCC_VERSION_AT_LEAST(4,6)
|
|
||||||
# define AV_NOWARN_DEPRECATED(code) \
|
|
||||||
_Pragma("GCC diagnostic push") \
|
|
||||||
_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \
|
|
||||||
code \
|
|
||||||
_Pragma("GCC diagnostic pop")
|
|
||||||
#elif defined(_MSC_VER)
|
|
||||||
# define AV_NOWARN_DEPRECATED(code) \
|
|
||||||
__pragma(warning(push)) \
|
|
||||||
__pragma(warning(disable : 4996)) \
|
|
||||||
code; \
|
|
||||||
__pragma(warning(pop))
|
|
||||||
#else
|
|
||||||
# define AV_NOWARN_DEPRECATED(code) code
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__GNUC__) || defined(__clang__)
|
|
||||||
# define av_unused __attribute__((unused))
|
|
||||||
#else
|
|
||||||
# define av_unused
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mark a variable as used and prevent the compiler from optimizing it
|
|
||||||
* away. This is useful for variables accessed only from inline
|
|
||||||
* assembler without the compiler being aware.
|
|
||||||
*/
|
|
||||||
#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__)
|
|
||||||
# define av_used __attribute__((used))
|
|
||||||
#else
|
|
||||||
# define av_used
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if AV_GCC_VERSION_AT_LEAST(3,3) || defined(__clang__)
|
|
||||||
# define av_alias __attribute__((may_alias))
|
|
||||||
#else
|
|
||||||
# define av_alias
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__INTEL_COMPILER)
|
|
||||||
# define av_uninit(x) x=x
|
|
||||||
#else
|
|
||||||
# define av_uninit(x) x
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__GNUC__) || defined(__clang__)
|
|
||||||
# define av_builtin_constant_p __builtin_constant_p
|
|
||||||
# define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos)))
|
|
||||||
#else
|
|
||||||
# define av_builtin_constant_p(x) 0
|
|
||||||
# define av_printf_format(fmtpos, attrpos)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if AV_GCC_VERSION_AT_LEAST(2,5) || defined(__clang__)
|
|
||||||
# define av_noreturn __attribute__((noreturn))
|
|
||||||
#else
|
|
||||||
# define av_noreturn
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* AVUTIL_ATTRIBUTES_H */
|
|
||||||
@@ -1,187 +0,0 @@
|
|||||||
/*
|
|
||||||
* Audio FIFO
|
|
||||||
* Copyright (c) 2012 Justin Ruggles <justin.ruggles@gmail.com>
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* Audio FIFO Buffer
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_AUDIO_FIFO_H
|
|
||||||
#define AVUTIL_AUDIO_FIFO_H
|
|
||||||
|
|
||||||
#include "avutil.h"
|
|
||||||
#include "fifo.h"
|
|
||||||
#include "samplefmt.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavu_audio
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @defgroup lavu_audiofifo Audio FIFO Buffer
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Context for an Audio FIFO Buffer.
|
|
||||||
*
|
|
||||||
* - Operates at the sample level rather than the byte level.
|
|
||||||
* - Supports multiple channels with either planar or packed sample format.
|
|
||||||
* - Automatic reallocation when writing to a full buffer.
|
|
||||||
*/
|
|
||||||
typedef struct AVAudioFifo AVAudioFifo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free an AVAudioFifo.
|
|
||||||
*
|
|
||||||
* @param af AVAudioFifo to free
|
|
||||||
*/
|
|
||||||
void av_audio_fifo_free(AVAudioFifo *af);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVAudioFifo.
|
|
||||||
*
|
|
||||||
* @param sample_fmt sample format
|
|
||||||
* @param channels number of channels
|
|
||||||
* @param nb_samples initial allocation size, in samples
|
|
||||||
* @return newly allocated AVAudioFifo, or NULL on error
|
|
||||||
*/
|
|
||||||
AVAudioFifo *av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels,
|
|
||||||
int nb_samples);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reallocate an AVAudioFifo.
|
|
||||||
*
|
|
||||||
* @param af AVAudioFifo to reallocate
|
|
||||||
* @param nb_samples new allocation size, in samples
|
|
||||||
* @return 0 if OK, or negative AVERROR code on failure
|
|
||||||
*/
|
|
||||||
av_warn_unused_result
|
|
||||||
int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Write data to an AVAudioFifo.
|
|
||||||
*
|
|
||||||
* The AVAudioFifo will be reallocated automatically if the available space
|
|
||||||
* is less than nb_samples.
|
|
||||||
*
|
|
||||||
* @see enum AVSampleFormat
|
|
||||||
* The documentation for AVSampleFormat describes the data layout.
|
|
||||||
*
|
|
||||||
* @param af AVAudioFifo to write to
|
|
||||||
* @param data audio data plane pointers
|
|
||||||
* @param nb_samples number of samples to write
|
|
||||||
* @return number of samples actually written, or negative AVERROR
|
|
||||||
* code on failure. If successful, the number of samples
|
|
||||||
* actually written will always be nb_samples.
|
|
||||||
*/
|
|
||||||
int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Peek data from an AVAudioFifo.
|
|
||||||
*
|
|
||||||
* @see enum AVSampleFormat
|
|
||||||
* The documentation for AVSampleFormat describes the data layout.
|
|
||||||
*
|
|
||||||
* @param af AVAudioFifo to read from
|
|
||||||
* @param data audio data plane pointers
|
|
||||||
* @param nb_samples number of samples to peek
|
|
||||||
* @return number of samples actually peek, or negative AVERROR code
|
|
||||||
* on failure. The number of samples actually peek will not
|
|
||||||
* be greater than nb_samples, and will only be less than
|
|
||||||
* nb_samples if av_audio_fifo_size is less than nb_samples.
|
|
||||||
*/
|
|
||||||
int av_audio_fifo_peek(AVAudioFifo *af, void **data, int nb_samples);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Peek data from an AVAudioFifo.
|
|
||||||
*
|
|
||||||
* @see enum AVSampleFormat
|
|
||||||
* The documentation for AVSampleFormat describes the data layout.
|
|
||||||
*
|
|
||||||
* @param af AVAudioFifo to read from
|
|
||||||
* @param data audio data plane pointers
|
|
||||||
* @param nb_samples number of samples to peek
|
|
||||||
* @param offset offset from current read position
|
|
||||||
* @return number of samples actually peek, or negative AVERROR code
|
|
||||||
* on failure. The number of samples actually peek will not
|
|
||||||
* be greater than nb_samples, and will only be less than
|
|
||||||
* nb_samples if av_audio_fifo_size is less than nb_samples.
|
|
||||||
*/
|
|
||||||
int av_audio_fifo_peek_at(AVAudioFifo *af, void **data, int nb_samples, int offset);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read data from an AVAudioFifo.
|
|
||||||
*
|
|
||||||
* @see enum AVSampleFormat
|
|
||||||
* The documentation for AVSampleFormat describes the data layout.
|
|
||||||
*
|
|
||||||
* @param af AVAudioFifo to read from
|
|
||||||
* @param data audio data plane pointers
|
|
||||||
* @param nb_samples number of samples to read
|
|
||||||
* @return number of samples actually read, or negative AVERROR code
|
|
||||||
* on failure. The number of samples actually read will not
|
|
||||||
* be greater than nb_samples, and will only be less than
|
|
||||||
* nb_samples if av_audio_fifo_size is less than nb_samples.
|
|
||||||
*/
|
|
||||||
int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Drain data from an AVAudioFifo.
|
|
||||||
*
|
|
||||||
* Removes the data without reading it.
|
|
||||||
*
|
|
||||||
* @param af AVAudioFifo to drain
|
|
||||||
* @param nb_samples number of samples to drain
|
|
||||||
* @return 0 if OK, or negative AVERROR code on failure
|
|
||||||
*/
|
|
||||||
int av_audio_fifo_drain(AVAudioFifo *af, int nb_samples);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset the AVAudioFifo buffer.
|
|
||||||
*
|
|
||||||
* This empties all data in the buffer.
|
|
||||||
*
|
|
||||||
* @param af AVAudioFifo to reset
|
|
||||||
*/
|
|
||||||
void av_audio_fifo_reset(AVAudioFifo *af);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the current number of samples in the AVAudioFifo available for reading.
|
|
||||||
*
|
|
||||||
* @param af the AVAudioFifo to query
|
|
||||||
* @return number of samples available for reading
|
|
||||||
*/
|
|
||||||
int av_audio_fifo_size(AVAudioFifo *af);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the current number of samples in the AVAudioFifo available for writing.
|
|
||||||
*
|
|
||||||
* @param af the AVAudioFifo to query
|
|
||||||
* @return number of samples available for writing
|
|
||||||
*/
|
|
||||||
int av_audio_fifo_space(AVAudioFifo *af);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_AUDIO_FIFO_H */
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
* copyright (c) 2010 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* simple assert() macros that are a bit more flexible than ISO C assert().
|
|
||||||
* @author Michael Niedermayer <michaelni@gmx.at>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_AVASSERT_H
|
|
||||||
#define AVUTIL_AVASSERT_H
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "avutil.h"
|
|
||||||
#include "log.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* assert() equivalent, that is always enabled.
|
|
||||||
*/
|
|
||||||
#define av_assert0(cond) do { \
|
|
||||||
if (!(cond)) { \
|
|
||||||
av_log(NULL, AV_LOG_PANIC, "Assertion %s failed at %s:%d\n", \
|
|
||||||
AV_STRINGIFY(cond), __FILE__, __LINE__); \
|
|
||||||
abort(); \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* assert() equivalent, that does not lie in speed critical code.
|
|
||||||
* These asserts() thus can be enabled without fearing speed loss.
|
|
||||||
*/
|
|
||||||
#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 0
|
|
||||||
#define av_assert1(cond) av_assert0(cond)
|
|
||||||
#else
|
|
||||||
#define av_assert1(cond) ((void)0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* assert() equivalent, that does lie in speed critical code.
|
|
||||||
*/
|
|
||||||
#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1
|
|
||||||
#define av_assert2(cond) av_assert0(cond)
|
|
||||||
#define av_assert2_fpu() av_assert0_fpu()
|
|
||||||
#else
|
|
||||||
#define av_assert2(cond) ((void)0)
|
|
||||||
#define av_assert2_fpu() ((void)0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Assert that floating point operations can be executed.
|
|
||||||
*
|
|
||||||
* This will av_assert0() that the cpu is not in MMX state on X86
|
|
||||||
*/
|
|
||||||
void av_assert0_fpu(void);
|
|
||||||
|
|
||||||
#endif /* AVUTIL_AVASSERT_H */
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
/* Generated by ffmpeg configure */
|
|
||||||
#ifndef AVUTIL_AVCONFIG_H
|
|
||||||
#define AVUTIL_AVCONFIG_H
|
|
||||||
#define AV_HAVE_BIGENDIAN 0
|
|
||||||
#define AV_HAVE_FAST_UNALIGNED 1
|
|
||||||
#endif /* AVUTIL_AVCONFIG_H */
|
|
||||||
@@ -1,418 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2007 Mans Rullgard
|
|
||||||
*
|
|
||||||
* 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_AVSTRING_H
|
|
||||||
#define AVUTIL_AVSTRING_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "attributes.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavu_string
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return non-zero if pfx is a prefix of str. If it is, *ptr is set to
|
|
||||||
* the address of the first character in str after the prefix.
|
|
||||||
*
|
|
||||||
* @param str input string
|
|
||||||
* @param pfx prefix to test
|
|
||||||
* @param ptr updated if the prefix is matched inside str
|
|
||||||
* @return non-zero if the prefix matches, zero otherwise
|
|
||||||
*/
|
|
||||||
int av_strstart(const char *str, const char *pfx, const char **ptr);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return non-zero if pfx is a prefix of str independent of case. If
|
|
||||||
* it is, *ptr is set to the address of the first character in str
|
|
||||||
* after the prefix.
|
|
||||||
*
|
|
||||||
* @param str input string
|
|
||||||
* @param pfx prefix to test
|
|
||||||
* @param ptr updated if the prefix is matched inside str
|
|
||||||
* @return non-zero if the prefix matches, zero otherwise
|
|
||||||
*/
|
|
||||||
int av_stristart(const char *str, const char *pfx, const char **ptr);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Locate the first case-independent occurrence in the string haystack
|
|
||||||
* of the string needle. A zero-length string needle is considered to
|
|
||||||
* match at the start of haystack.
|
|
||||||
*
|
|
||||||
* This function is a case-insensitive version of the standard strstr().
|
|
||||||
*
|
|
||||||
* @param haystack string to search in
|
|
||||||
* @param needle string to search for
|
|
||||||
* @return pointer to the located match within haystack
|
|
||||||
* or a null pointer if no match
|
|
||||||
*/
|
|
||||||
char *av_stristr(const char *haystack, const char *needle);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Locate the first occurrence of the string needle in the string haystack
|
|
||||||
* where not more than hay_length characters are searched. A zero-length
|
|
||||||
* string needle is considered to match at the start of haystack.
|
|
||||||
*
|
|
||||||
* This function is a length-limited version of the standard strstr().
|
|
||||||
*
|
|
||||||
* @param haystack string to search in
|
|
||||||
* @param needle string to search for
|
|
||||||
* @param hay_length length of string to search in
|
|
||||||
* @return pointer to the located match within haystack
|
|
||||||
* or a null pointer if no match
|
|
||||||
*/
|
|
||||||
char *av_strnstr(const char *haystack, const char *needle, size_t hay_length);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy the string src to dst, but no more than size - 1 bytes, and
|
|
||||||
* null-terminate dst.
|
|
||||||
*
|
|
||||||
* This function is the same as BSD strlcpy().
|
|
||||||
*
|
|
||||||
* @param dst destination buffer
|
|
||||||
* @param src source string
|
|
||||||
* @param size size of destination buffer
|
|
||||||
* @return the length of src
|
|
||||||
*
|
|
||||||
* @warning since the return value is the length of src, src absolutely
|
|
||||||
* _must_ be a properly 0-terminated string, otherwise this will read beyond
|
|
||||||
* the end of the buffer and possibly crash.
|
|
||||||
*/
|
|
||||||
size_t av_strlcpy(char *dst, const char *src, size_t size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Append the string src to the string dst, but to a total length of
|
|
||||||
* no more than size - 1 bytes, and null-terminate dst.
|
|
||||||
*
|
|
||||||
* This function is similar to BSD strlcat(), but differs when
|
|
||||||
* size <= strlen(dst).
|
|
||||||
*
|
|
||||||
* @param dst destination buffer
|
|
||||||
* @param src source string
|
|
||||||
* @param size size of destination buffer
|
|
||||||
* @return the total length of src and dst
|
|
||||||
*
|
|
||||||
* @warning since the return value use the length of src and dst, these
|
|
||||||
* absolutely _must_ be a properly 0-terminated strings, otherwise this
|
|
||||||
* will read beyond the end of the buffer and possibly crash.
|
|
||||||
*/
|
|
||||||
size_t av_strlcat(char *dst, const char *src, size_t size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Append output to a string, according to a format. Never write out of
|
|
||||||
* the destination buffer, and always put a terminating 0 within
|
|
||||||
* the buffer.
|
|
||||||
* @param dst destination buffer (string to which the output is
|
|
||||||
* appended)
|
|
||||||
* @param size total size of the destination buffer
|
|
||||||
* @param fmt printf-compatible format string, specifying how the
|
|
||||||
* following parameters are used
|
|
||||||
* @return the length of the string that would have been generated
|
|
||||||
* if enough space had been available
|
|
||||||
*/
|
|
||||||
size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) av_printf_format(3, 4);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the count of continuous non zero chars starting from the beginning.
|
|
||||||
*
|
|
||||||
* @param len maximum number of characters to check in the string, that
|
|
||||||
* is the maximum value which is returned by the function
|
|
||||||
*/
|
|
||||||
static inline size_t av_strnlen(const char *s, size_t len)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
for (i = 0; i < len && s[i]; i++)
|
|
||||||
;
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print arguments following specified format into a large enough auto
|
|
||||||
* allocated buffer. It is similar to GNU asprintf().
|
|
||||||
* @param fmt printf-compatible format string, specifying how the
|
|
||||||
* following parameters are used.
|
|
||||||
* @return the allocated string
|
|
||||||
* @note You have to free the string yourself with av_free().
|
|
||||||
*/
|
|
||||||
char *av_asprintf(const char *fmt, ...) av_printf_format(1, 2);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert a number to an av_malloced string.
|
|
||||||
*/
|
|
||||||
char *av_d2str(double d);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unescape the given string until a non escaped terminating char,
|
|
||||||
* and return the token corresponding to the unescaped string.
|
|
||||||
*
|
|
||||||
* The normal \ and ' escaping is supported. Leading and trailing
|
|
||||||
* whitespaces are removed, unless they are escaped with '\' or are
|
|
||||||
* enclosed between ''.
|
|
||||||
*
|
|
||||||
* @param buf the buffer to parse, buf will be updated to point to the
|
|
||||||
* terminating char
|
|
||||||
* @param term a 0-terminated list of terminating chars
|
|
||||||
* @return the malloced unescaped string, which must be av_freed by
|
|
||||||
* the user, NULL in case of allocation failure
|
|
||||||
*/
|
|
||||||
char *av_get_token(const char **buf, const char *term);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Split the string into several tokens which can be accessed by
|
|
||||||
* successive calls to av_strtok().
|
|
||||||
*
|
|
||||||
* A token is defined as a sequence of characters not belonging to the
|
|
||||||
* set specified in delim.
|
|
||||||
*
|
|
||||||
* On the first call to av_strtok(), s should point to the string to
|
|
||||||
* parse, and the value of saveptr is ignored. In subsequent calls, s
|
|
||||||
* should be NULL, and saveptr should be unchanged since the previous
|
|
||||||
* call.
|
|
||||||
*
|
|
||||||
* This function is similar to strtok_r() defined in POSIX.1.
|
|
||||||
*
|
|
||||||
* @param s the string to parse, may be NULL
|
|
||||||
* @param delim 0-terminated list of token delimiters, must be non-NULL
|
|
||||||
* @param saveptr user-provided pointer which points to stored
|
|
||||||
* information necessary for av_strtok() to continue scanning the same
|
|
||||||
* string. saveptr is updated to point to the next character after the
|
|
||||||
* first delimiter found, or to NULL if the string was terminated
|
|
||||||
* @return the found token, or NULL when no token is found
|
|
||||||
*/
|
|
||||||
char *av_strtok(char *s, const char *delim, char **saveptr);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale-independent conversion of ASCII isdigit.
|
|
||||||
*/
|
|
||||||
static inline av_const int av_isdigit(int c)
|
|
||||||
{
|
|
||||||
return c >= '0' && c <= '9';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale-independent conversion of ASCII isgraph.
|
|
||||||
*/
|
|
||||||
static inline av_const int av_isgraph(int c)
|
|
||||||
{
|
|
||||||
return c > 32 && c < 127;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale-independent conversion of ASCII isspace.
|
|
||||||
*/
|
|
||||||
static inline av_const int av_isspace(int c)
|
|
||||||
{
|
|
||||||
return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' ||
|
|
||||||
c == '\v';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale-independent conversion of ASCII characters to uppercase.
|
|
||||||
*/
|
|
||||||
static inline av_const int av_toupper(int c)
|
|
||||||
{
|
|
||||||
if (c >= 'a' && c <= 'z')
|
|
||||||
c ^= 0x20;
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale-independent conversion of ASCII characters to lowercase.
|
|
||||||
*/
|
|
||||||
static inline av_const int av_tolower(int c)
|
|
||||||
{
|
|
||||||
if (c >= 'A' && c <= 'Z')
|
|
||||||
c ^= 0x20;
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale-independent conversion of ASCII isxdigit.
|
|
||||||
*/
|
|
||||||
static inline av_const int av_isxdigit(int c)
|
|
||||||
{
|
|
||||||
c = av_tolower(c);
|
|
||||||
return av_isdigit(c) || (c >= 'a' && c <= 'f');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale-independent case-insensitive compare.
|
|
||||||
* @note This means only ASCII-range characters are case-insensitive
|
|
||||||
*/
|
|
||||||
int av_strcasecmp(const char *a, const char *b);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale-independent case-insensitive compare.
|
|
||||||
* @note This means only ASCII-range characters are case-insensitive
|
|
||||||
*/
|
|
||||||
int av_strncasecmp(const char *a, const char *b, size_t n);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale-independent strings replace.
|
|
||||||
* @note This means only ASCII-range characters are replace
|
|
||||||
*/
|
|
||||||
char *av_strireplace(const char *str, const char *from, const char *to);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Thread safe basename.
|
|
||||||
* @param path the string to parse, on DOS both \ and / are considered separators.
|
|
||||||
* @return pointer to the basename substring.
|
|
||||||
* If path does not contain a slash, the function returns a copy of path.
|
|
||||||
* If path is a NULL pointer or points to an empty string, a pointer
|
|
||||||
* to a string "." is returned.
|
|
||||||
*/
|
|
||||||
const char *av_basename(const char *path);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Thread safe dirname.
|
|
||||||
* @param path the string to parse, on DOS both \ and / are considered separators.
|
|
||||||
* @return A pointer to a string that's the parent directory of path.
|
|
||||||
* If path is a NULL pointer or points to an empty string, a pointer
|
|
||||||
* to a string "." is returned.
|
|
||||||
* @note the function may modify the contents of the path, so copies should be passed.
|
|
||||||
*/
|
|
||||||
const char *av_dirname(char *path);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Match instances of a name in a comma-separated list of names.
|
|
||||||
* List entries are checked from the start to the end of the names list,
|
|
||||||
* the first match ends further processing. If an entry prefixed with '-'
|
|
||||||
* matches, then 0 is returned. The "ALL" list entry is considered to
|
|
||||||
* match all names.
|
|
||||||
*
|
|
||||||
* @param name Name to look for.
|
|
||||||
* @param names List of names.
|
|
||||||
* @return 1 on match, 0 otherwise.
|
|
||||||
*/
|
|
||||||
int av_match_name(const char *name, const char *names);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Append path component to the existing path.
|
|
||||||
* Path separator '/' is placed between when needed.
|
|
||||||
* Resulting string have to be freed with av_free().
|
|
||||||
* @param path base path
|
|
||||||
* @param component component to be appended
|
|
||||||
* @return new path or NULL on error.
|
|
||||||
*/
|
|
||||||
char *av_append_path_component(const char *path, const char *component);
|
|
||||||
|
|
||||||
enum AVEscapeMode {
|
|
||||||
AV_ESCAPE_MODE_AUTO, ///< Use auto-selected escaping mode.
|
|
||||||
AV_ESCAPE_MODE_BACKSLASH, ///< Use backslash escaping.
|
|
||||||
AV_ESCAPE_MODE_QUOTE, ///< Use single-quote escaping.
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Consider spaces special and escape them even in the middle of the
|
|
||||||
* string.
|
|
||||||
*
|
|
||||||
* This is equivalent to adding the whitespace characters to the special
|
|
||||||
* characters lists, except it is guaranteed to use the exact same list
|
|
||||||
* of whitespace characters as the rest of libavutil.
|
|
||||||
*/
|
|
||||||
#define AV_ESCAPE_FLAG_WHITESPACE (1 << 0)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Escape only specified special characters.
|
|
||||||
* Without this flag, escape also any characters that may be considered
|
|
||||||
* special by av_get_token(), such as the single quote.
|
|
||||||
*/
|
|
||||||
#define AV_ESCAPE_FLAG_STRICT (1 << 1)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Escape string in src, and put the escaped string in an allocated
|
|
||||||
* string in *dst, which must be freed with av_free().
|
|
||||||
*
|
|
||||||
* @param dst pointer where an allocated string is put
|
|
||||||
* @param src string to escape, must be non-NULL
|
|
||||||
* @param special_chars string containing the special characters which
|
|
||||||
* need to be escaped, can be NULL
|
|
||||||
* @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros.
|
|
||||||
* Any unknown value for mode will be considered equivalent to
|
|
||||||
* AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without
|
|
||||||
* notice.
|
|
||||||
* @param flags flags which control how to escape, see AV_ESCAPE_FLAG_ macros
|
|
||||||
* @return the length of the allocated string, or a negative error code in case of error
|
|
||||||
* @see av_bprint_escape()
|
|
||||||
*/
|
|
||||||
av_warn_unused_result
|
|
||||||
int av_escape(char **dst, const char *src, const char *special_chars,
|
|
||||||
enum AVEscapeMode mode, int flags);
|
|
||||||
|
|
||||||
#define AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES 1 ///< accept codepoints over 0x10FFFF
|
|
||||||
#define AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS 2 ///< accept non-characters - 0xFFFE and 0xFFFF
|
|
||||||
#define AV_UTF8_FLAG_ACCEPT_SURROGATES 4 ///< accept UTF-16 surrogates codes
|
|
||||||
#define AV_UTF8_FLAG_EXCLUDE_XML_INVALID_CONTROL_CODES 8 ///< exclude control codes not accepted by XML
|
|
||||||
|
|
||||||
#define AV_UTF8_FLAG_ACCEPT_ALL \
|
|
||||||
AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES|AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS|AV_UTF8_FLAG_ACCEPT_SURROGATES
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read and decode a single UTF-8 code point (character) from the
|
|
||||||
* buffer in *buf, and update *buf to point to the next byte to
|
|
||||||
* decode.
|
|
||||||
*
|
|
||||||
* In case of an invalid byte sequence, the pointer will be updated to
|
|
||||||
* the next byte after the invalid sequence and the function will
|
|
||||||
* return an error code.
|
|
||||||
*
|
|
||||||
* Depending on the specified flags, the function will also fail in
|
|
||||||
* case the decoded code point does not belong to a valid range.
|
|
||||||
*
|
|
||||||
* @note For speed-relevant code a carefully implemented use of
|
|
||||||
* GET_UTF8() may be preferred.
|
|
||||||
*
|
|
||||||
* @param codep pointer used to return the parsed code in case of success.
|
|
||||||
* The value in *codep is set even in case the range check fails.
|
|
||||||
* @param bufp pointer to the address the first byte of the sequence
|
|
||||||
* to decode, updated by the function to point to the
|
|
||||||
* byte next after the decoded sequence
|
|
||||||
* @param buf_end pointer to the end of the buffer, points to the next
|
|
||||||
* byte past the last in the buffer. This is used to
|
|
||||||
* avoid buffer overreads (in case of an unfinished
|
|
||||||
* UTF-8 sequence towards the end of the buffer).
|
|
||||||
* @param flags a collection of AV_UTF8_FLAG_* flags
|
|
||||||
* @return >= 0 in case a sequence was successfully read, a negative
|
|
||||||
* value in case of invalid sequence
|
|
||||||
*/
|
|
||||||
av_warn_unused_result
|
|
||||||
int av_utf8_decode(int32_t *codep, const uint8_t **bufp, const uint8_t *buf_end,
|
|
||||||
unsigned int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if a name is in a list.
|
|
||||||
* @returns 0 if not found, or the 1 based index where it has been found in the
|
|
||||||
* list.
|
|
||||||
*/
|
|
||||||
int av_match_list(const char *name, const char *list, char separator);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* See libc sscanf manual for more information.
|
|
||||||
* Locale-independent sscanf implementation.
|
|
||||||
*/
|
|
||||||
int av_sscanf(const char *string, const char *format, ...);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_AVSTRING_H */
|
|
||||||
@@ -1,365 +0,0 @@
|
|||||||
/*
|
|
||||||
* copyright (c) 2006 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_AVUTIL_H
|
|
||||||
#define AVUTIL_AVUTIL_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavu
|
|
||||||
* Convenience header that includes @ref lavu "libavutil"'s core.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @mainpage
|
|
||||||
*
|
|
||||||
* @section ffmpeg_intro Introduction
|
|
||||||
*
|
|
||||||
* This document describes the usage of the different libraries
|
|
||||||
* provided by FFmpeg.
|
|
||||||
*
|
|
||||||
* @li @ref libavc "libavcodec" encoding/decoding library
|
|
||||||
* @li @ref lavfi "libavfilter" graph-based frame editing library
|
|
||||||
* @li @ref libavf "libavformat" I/O and muxing/demuxing library
|
|
||||||
* @li @ref lavd "libavdevice" special devices muxing/demuxing library
|
|
||||||
* @li @ref lavu "libavutil" common utility library
|
|
||||||
* @li @ref lswr "libswresample" audio resampling, format conversion and mixing
|
|
||||||
* @li @ref lpp "libpostproc" post processing library
|
|
||||||
* @li @ref libsws "libswscale" color conversion and scaling library
|
|
||||||
*
|
|
||||||
* @section ffmpeg_versioning Versioning and compatibility
|
|
||||||
*
|
|
||||||
* Each of the FFmpeg libraries contains a version.h header, which defines a
|
|
||||||
* major, minor and micro version number with the
|
|
||||||
* <em>LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO}</em> macros. The major version
|
|
||||||
* number is incremented with backward incompatible changes - e.g. removing
|
|
||||||
* parts of the public API, reordering public struct members, etc. The minor
|
|
||||||
* version number is incremented for backward compatible API changes or major
|
|
||||||
* new features - e.g. adding a new public function or a new decoder. The micro
|
|
||||||
* version number is incremented for smaller changes that a calling program
|
|
||||||
* might still want to check for - e.g. changing behavior in a previously
|
|
||||||
* unspecified situation.
|
|
||||||
*
|
|
||||||
* FFmpeg guarantees backward API and ABI compatibility for each library as long
|
|
||||||
* as its major version number is unchanged. This means that no public symbols
|
|
||||||
* will be removed or renamed. Types and names of the public struct members and
|
|
||||||
* values of public macros and enums will remain the same (unless they were
|
|
||||||
* explicitly declared as not part of the public API). Documented behavior will
|
|
||||||
* not change.
|
|
||||||
*
|
|
||||||
* In other words, any correct program that works with a given FFmpeg snapshot
|
|
||||||
* should work just as well without any changes with any later snapshot with the
|
|
||||||
* same major versions. This applies to both rebuilding the program against new
|
|
||||||
* FFmpeg versions or to replacing the dynamic FFmpeg libraries that a program
|
|
||||||
* links against.
|
|
||||||
*
|
|
||||||
* However, new public symbols may be added and new members may be appended to
|
|
||||||
* public structs whose size is not part of public ABI (most public structs in
|
|
||||||
* FFmpeg). New macros and enum values may be added. Behavior in undocumented
|
|
||||||
* situations may change slightly (and be documented). All those are accompanied
|
|
||||||
* by an entry in doc/APIchanges and incrementing either the minor or micro
|
|
||||||
* version number.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu libavutil
|
|
||||||
* Common code shared across all FFmpeg libraries.
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* libavutil is designed to be modular. In most cases, in order to use the
|
|
||||||
* functions provided by one component of libavutil you must explicitly include
|
|
||||||
* the specific header containing that feature. If you are only using
|
|
||||||
* media-related components, you could simply include avutil.h, which
|
|
||||||
* brings in most of the "core" components.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @defgroup lavu_crypto Crypto and Hashing
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
* @}
|
|
||||||
*
|
|
||||||
* @defgroup lavu_math Mathematics
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @}
|
|
||||||
*
|
|
||||||
* @defgroup lavu_string String Manipulation
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @}
|
|
||||||
*
|
|
||||||
* @defgroup lavu_mem Memory Management
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @}
|
|
||||||
*
|
|
||||||
* @defgroup lavu_data Data Structures
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @}
|
|
||||||
*
|
|
||||||
* @defgroup lavu_video Video related
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @}
|
|
||||||
*
|
|
||||||
* @defgroup lavu_audio Audio related
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @}
|
|
||||||
*
|
|
||||||
* @defgroup lavu_error Error Codes
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @}
|
|
||||||
*
|
|
||||||
* @defgroup lavu_log Logging Facility
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @}
|
|
||||||
*
|
|
||||||
* @defgroup lavu_misc Other
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @defgroup preproc_misc Preprocessor String Macros
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @}
|
|
||||||
*
|
|
||||||
* @defgroup version_utils Library Version Macros
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavu_ver
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the LIBAVUTIL_VERSION_INT constant.
|
|
||||||
*/
|
|
||||||
unsigned avutil_version(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return an informative version string. This usually is the actual release
|
|
||||||
* version number or a git commit description. This string has no fixed format
|
|
||||||
* and can change any time. It should never be parsed by code.
|
|
||||||
*/
|
|
||||||
const char *av_version_info(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the libavutil build-time configuration.
|
|
||||||
*/
|
|
||||||
const char *avutil_configuration(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the libavutil license.
|
|
||||||
*/
|
|
||||||
const char *avutil_license(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavu_media Media Type
|
|
||||||
* @brief Media Type
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum AVMediaType {
|
|
||||||
AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA
|
|
||||||
AVMEDIA_TYPE_VIDEO,
|
|
||||||
AVMEDIA_TYPE_AUDIO,
|
|
||||||
AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous
|
|
||||||
AVMEDIA_TYPE_SUBTITLE,
|
|
||||||
AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse
|
|
||||||
AVMEDIA_TYPE_NB
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return a string describing the media_type enum, NULL if media_type
|
|
||||||
* is unknown.
|
|
||||||
*/
|
|
||||||
const char *av_get_media_type_string(enum AVMediaType media_type);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_const Constants
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @defgroup lavu_enc Encoding specific
|
|
||||||
*
|
|
||||||
* @note those definition should move to avcodec
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define FF_LAMBDA_SHIFT 7
|
|
||||||
#define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT)
|
|
||||||
#define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda
|
|
||||||
#define FF_LAMBDA_MAX (256*128-1)
|
|
||||||
|
|
||||||
#define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
* @defgroup lavu_time Timestamp specific
|
|
||||||
*
|
|
||||||
* FFmpeg internal timebase and timestamp definitions
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Undefined timestamp value
|
|
||||||
*
|
|
||||||
* Usually reported by demuxer that work on containers that do not provide
|
|
||||||
* either pts or dts.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define AV_NOPTS_VALUE ((int64_t)UINT64_C(0x8000000000000000))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Internal time base represented as integer
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define AV_TIME_BASE 1000000
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Internal time base represented as fractional value
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
* @}
|
|
||||||
* @defgroup lavu_picture Image related
|
|
||||||
*
|
|
||||||
* AVPicture types, pixel formats and basic image planes manipulation.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum AVPictureType {
|
|
||||||
AV_PICTURE_TYPE_NONE = 0, ///< Undefined
|
|
||||||
AV_PICTURE_TYPE_I, ///< Intra
|
|
||||||
AV_PICTURE_TYPE_P, ///< Predicted
|
|
||||||
AV_PICTURE_TYPE_B, ///< Bi-dir predicted
|
|
||||||
AV_PICTURE_TYPE_S, ///< S(GMC)-VOP MPEG-4
|
|
||||||
AV_PICTURE_TYPE_SI, ///< Switching Intra
|
|
||||||
AV_PICTURE_TYPE_SP, ///< Switching Predicted
|
|
||||||
AV_PICTURE_TYPE_BI, ///< BI type
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return a single letter to describe the given picture type
|
|
||||||
* pict_type.
|
|
||||||
*
|
|
||||||
* @param[in] pict_type the picture type @return a single character
|
|
||||||
* representing the picture type, '?' if pict_type is unknown
|
|
||||||
*/
|
|
||||||
char av_get_picture_type_char(enum AVPictureType pict_type);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
#include "error.h"
|
|
||||||
#include "rational.h"
|
|
||||||
#include "avutilVersion.h"
|
|
||||||
#include "macros.h"
|
|
||||||
#include "mathematics.h"
|
|
||||||
#include "log.h"
|
|
||||||
#include "pixfmt.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return x default pointer in case p is NULL.
|
|
||||||
*/
|
|
||||||
static inline void *av_x_if_null(const void *p, const void *x)
|
|
||||||
{
|
|
||||||
return (void *)(intptr_t)(p ? p : x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Compute the length of an integer list.
|
|
||||||
*
|
|
||||||
* @param elsize size in bytes of each list element (only 1, 2, 4 or 8)
|
|
||||||
* @param term list terminator (usually 0 or -1)
|
|
||||||
* @param list pointer to the list
|
|
||||||
* @return length of the list, in elements, not counting the terminator
|
|
||||||
*/
|
|
||||||
unsigned av_int_list_length_for_size(unsigned elsize,
|
|
||||||
const void *list, uint64_t term) av_pure;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Compute the length of an integer list.
|
|
||||||
*
|
|
||||||
* @param term list terminator (usually 0 or -1)
|
|
||||||
* @param list pointer to the list
|
|
||||||
* @return length of the list, in elements, not counting the terminator
|
|
||||||
*/
|
|
||||||
#define av_int_list_length(list, term) \
|
|
||||||
av_int_list_length_for_size(sizeof(*(list)), list, term)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Open a file using a UTF-8 filename.
|
|
||||||
* The API of this function matches POSIX fopen(), errors are returned through
|
|
||||||
* errno.
|
|
||||||
*/
|
|
||||||
FILE *av_fopen_utf8(const char *path, const char *mode);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the fractional representation of the internal time base.
|
|
||||||
*/
|
|
||||||
AVRational av_get_time_base_q(void);
|
|
||||||
|
|
||||||
#define AV_FOURCC_MAX_STRING_SIZE 32
|
|
||||||
|
|
||||||
#define av_fourcc2str(fourcc) av_fourcc_make_string((char[AV_FOURCC_MAX_STRING_SIZE]){0}, fourcc)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fill the provided buffer with a string containing a FourCC (four-character
|
|
||||||
* code) representation.
|
|
||||||
*
|
|
||||||
* @param buf a buffer with size in bytes of at least AV_FOURCC_MAX_STRING_SIZE
|
|
||||||
* @param fourcc the fourcc to represent
|
|
||||||
* @return the buffer in input
|
|
||||||
*/
|
|
||||||
char *av_fourcc_make_string(char *buf, uint32_t fourcc);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_AVUTIL_H */
|
|
||||||
@@ -1,139 +0,0 @@
|
|||||||
/*
|
|
||||||
* copyright (c) 2003 Fabrice Bellard
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavu
|
|
||||||
* Libavutil version macros
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_VERSION_H
|
|
||||||
#define AVUTIL_VERSION_H
|
|
||||||
|
|
||||||
#include "macros.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup version_utils
|
|
||||||
*
|
|
||||||
* Useful to check and match library version in order to maintain
|
|
||||||
* backward compatibility.
|
|
||||||
*
|
|
||||||
* The FFmpeg libraries follow a versioning sheme very similar to
|
|
||||||
* Semantic Versioning (http://semver.org/)
|
|
||||||
* The difference is that the component called PATCH is called MICRO in FFmpeg
|
|
||||||
* and its value is reset to 100 instead of 0 to keep it above or equal to 100.
|
|
||||||
* Also we do not increase MICRO for every bugfix or change in git master.
|
|
||||||
*
|
|
||||||
* Prior to FFmpeg 3.2 point releases did not change any lib version number to
|
|
||||||
* avoid aliassing different git master checkouts.
|
|
||||||
* Starting with FFmpeg 3.2, the released library versions will occupy
|
|
||||||
* a separate MAJOR.MINOR that is not used on the master development branch.
|
|
||||||
* That is if we branch a release of master 55.10.123 we will bump to 55.11.100
|
|
||||||
* for the release and master will continue at 55.12.100 after it. Each new
|
|
||||||
* point release will then bump the MICRO improving the usefulness of the lib
|
|
||||||
* versions.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define AV_VERSION_INT(a, b, c) ((a)<<16 | (b)<<8 | (c))
|
|
||||||
#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c
|
|
||||||
#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extract version components from the full ::AV_VERSION_INT int as returned
|
|
||||||
* by functions like ::avformat_version() and ::avcodec_version()
|
|
||||||
*/
|
|
||||||
#define AV_VERSION_MAJOR(a) ((a) >> 16)
|
|
||||||
#define AV_VERSION_MINOR(a) (((a) & 0x00FF00) >> 8)
|
|
||||||
#define AV_VERSION_MICRO(a) ((a) & 0xFF)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_ver Version and Build diagnostics
|
|
||||||
*
|
|
||||||
* Macros and function useful to check at compiletime and at runtime
|
|
||||||
* which version of libavutil is in use.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define LIBAVUTIL_VERSION_MAJOR 56
|
|
||||||
#define LIBAVUTIL_VERSION_MINOR 51
|
|
||||||
#define LIBAVUTIL_VERSION_MICRO 100
|
|
||||||
|
|
||||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
|
||||||
LIBAVUTIL_VERSION_MINOR, \
|
|
||||||
LIBAVUTIL_VERSION_MICRO)
|
|
||||||
#define LIBAVUTIL_VERSION AV_VERSION(LIBAVUTIL_VERSION_MAJOR, \
|
|
||||||
LIBAVUTIL_VERSION_MINOR, \
|
|
||||||
LIBAVUTIL_VERSION_MICRO)
|
|
||||||
#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT
|
|
||||||
|
|
||||||
#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_depr_guards Deprecation Guards
|
|
||||||
* FF_API_* defines may be placed below to indicate public API that will be
|
|
||||||
* dropped at a future version bump. The defines themselves are not part of
|
|
||||||
* the public API and may change, break or disappear at any time.
|
|
||||||
*
|
|
||||||
* @note, when bumping the major version it is recommended to manually
|
|
||||||
* disable each FF_API_* in its own commit instead of disabling them all
|
|
||||||
* at once through the bump. This improves the git bisect-ability of the change.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef FF_API_VAAPI
|
|
||||||
#define FF_API_VAAPI (LIBAVUTIL_VERSION_MAJOR < 57)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_FRAME_QP
|
|
||||||
#define FF_API_FRAME_QP (LIBAVUTIL_VERSION_MAJOR < 57)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_PLUS1_MINUS1
|
|
||||||
#define FF_API_PLUS1_MINUS1 (LIBAVUTIL_VERSION_MAJOR < 57)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_ERROR_FRAME
|
|
||||||
#define FF_API_ERROR_FRAME (LIBAVUTIL_VERSION_MAJOR < 57)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_PKT_PTS
|
|
||||||
#define FF_API_PKT_PTS (LIBAVUTIL_VERSION_MAJOR < 57)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_CRYPTO_SIZE_T
|
|
||||||
#define FF_API_CRYPTO_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_FRAME_GET_SET
|
|
||||||
#define FF_API_FRAME_GET_SET (LIBAVUTIL_VERSION_MAJOR < 57)
|
|
||||||
#endif
|
|
||||||
#ifndef FF_API_PSEUDOPAL
|
|
||||||
#define FF_API_PSEUDOPAL (LIBAVUTIL_VERSION_MAJOR < 57)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_VERSION_H */
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2006 Ryan Martell. (rdm4@martellventures.com)
|
|
||||||
*
|
|
||||||
* 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_BASE64_H
|
|
||||||
#define AVUTIL_BASE64_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_base64 Base64
|
|
||||||
* @ingroup lavu_crypto
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decode a base64-encoded string.
|
|
||||||
*
|
|
||||||
* @param out buffer for decoded data
|
|
||||||
* @param in null-terminated input string
|
|
||||||
* @param out_size size in bytes of the out buffer, must be at
|
|
||||||
* least 3/4 of the length of in, that is AV_BASE64_DECODE_SIZE(strlen(in))
|
|
||||||
* @return number of bytes written, or a negative value in case of
|
|
||||||
* invalid input
|
|
||||||
*/
|
|
||||||
int av_base64_decode(uint8_t *out, const char *in, int out_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate the output size in bytes needed to decode a base64 string
|
|
||||||
* with length x to a data buffer.
|
|
||||||
*/
|
|
||||||
#define AV_BASE64_DECODE_SIZE(x) ((x) * 3LL / 4)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encode data to base64 and null-terminate.
|
|
||||||
*
|
|
||||||
* @param out buffer for encoded data
|
|
||||||
* @param out_size size in bytes of the out buffer (including the
|
|
||||||
* null terminator), must be at least AV_BASE64_SIZE(in_size)
|
|
||||||
* @param in input buffer containing the data to encode
|
|
||||||
* @param in_size size in bytes of the in buffer
|
|
||||||
* @return out or NULL in case of error
|
|
||||||
*/
|
|
||||||
char *av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate the output size needed to base64-encode x bytes to a
|
|
||||||
* null-terminated string.
|
|
||||||
*/
|
|
||||||
#define AV_BASE64_SIZE(x) (((x)+2) / 3 * 4 + 1)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_BASE64_H */
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
/*
|
|
||||||
* Blowfish algorithm
|
|
||||||
* Copyright (c) 2012 Samuel Pitoiset
|
|
||||||
*
|
|
||||||
* 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_BLOWFISH_H
|
|
||||||
#define AVUTIL_BLOWFISH_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_blowfish Blowfish
|
|
||||||
* @ingroup lavu_crypto
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define AV_BF_ROUNDS 16
|
|
||||||
|
|
||||||
typedef struct AVBlowfish {
|
|
||||||
uint32_t p[AV_BF_ROUNDS + 2];
|
|
||||||
uint32_t s[4][256];
|
|
||||||
} AVBlowfish;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVBlowfish context.
|
|
||||||
*/
|
|
||||||
AVBlowfish *av_blowfish_alloc(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize an AVBlowfish context.
|
|
||||||
*
|
|
||||||
* @param ctx an AVBlowfish context
|
|
||||||
* @param key a key
|
|
||||||
* @param key_len length of the key
|
|
||||||
*/
|
|
||||||
void av_blowfish_init(struct AVBlowfish *ctx, const uint8_t *key, int key_len);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encrypt or decrypt a buffer using a previously initialized context.
|
|
||||||
*
|
|
||||||
* @param ctx an AVBlowfish context
|
|
||||||
* @param xl left four bytes halves of input to be encrypted
|
|
||||||
* @param xr right four bytes halves of input to be encrypted
|
|
||||||
* @param decrypt 0 for encryption, 1 for decryption
|
|
||||||
*/
|
|
||||||
void av_blowfish_crypt_ecb(struct AVBlowfish *ctx, uint32_t *xl, uint32_t *xr,
|
|
||||||
int decrypt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encrypt or decrypt a buffer using a previously initialized context.
|
|
||||||
*
|
|
||||||
* @param ctx an AVBlowfish context
|
|
||||||
* @param dst destination array, can be equal to src
|
|
||||||
* @param src source array, can be equal to dst
|
|
||||||
* @param count number of 8 byte blocks
|
|
||||||
* @param iv initialization vector for CBC mode, if NULL ECB will be used
|
|
||||||
* @param decrypt 0 for encryption, 1 for decryption
|
|
||||||
*/
|
|
||||||
void av_blowfish_crypt(struct AVBlowfish *ctx, uint8_t *dst, const uint8_t *src,
|
|
||||||
int count, uint8_t *iv, int decrypt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_BLOWFISH_H */
|
|
||||||
@@ -1,219 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2012 Nicolas George
|
|
||||||
*
|
|
||||||
* 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_BPRINT_H
|
|
||||||
#define AVUTIL_BPRINT_H
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
|
||||||
|
|
||||||
#include "attributes.h"
|
|
||||||
#include "avstring.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define a structure with extra padding to a fixed size
|
|
||||||
* This helps ensuring binary compatibility with future versions.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define FF_PAD_STRUCTURE(name, size, ...) \
|
|
||||||
struct ff_pad_helper_##name { __VA_ARGS__ }; \
|
|
||||||
typedef struct name { \
|
|
||||||
__VA_ARGS__ \
|
|
||||||
char reserved_padding[size - sizeof(struct ff_pad_helper_##name)]; \
|
|
||||||
} name;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Buffer to print data progressively
|
|
||||||
*
|
|
||||||
* The string buffer grows as necessary and is always 0-terminated.
|
|
||||||
* The content of the string is never accessed, and thus is
|
|
||||||
* encoding-agnostic and can even hold binary data.
|
|
||||||
*
|
|
||||||
* Small buffers are kept in the structure itself, and thus require no
|
|
||||||
* memory allocation at all (unless the contents of the buffer is needed
|
|
||||||
* after the structure goes out of scope). This is almost as lightweight as
|
|
||||||
* declaring a local "char buf[512]".
|
|
||||||
*
|
|
||||||
* The length of the string can go beyond the allocated size: the buffer is
|
|
||||||
* then truncated, but the functions still keep account of the actual total
|
|
||||||
* length.
|
|
||||||
*
|
|
||||||
* In other words, buf->len can be greater than buf->size and records the
|
|
||||||
* total length of what would have been to the buffer if there had been
|
|
||||||
* enough memory.
|
|
||||||
*
|
|
||||||
* Append operations do not need to be tested for failure: if a memory
|
|
||||||
* allocation fails, data stop being appended to the buffer, but the length
|
|
||||||
* is still updated. This situation can be tested with
|
|
||||||
* av_bprint_is_complete().
|
|
||||||
*
|
|
||||||
* The size_max field determines several possible behaviours:
|
|
||||||
*
|
|
||||||
* size_max = -1 (= UINT_MAX) or any large value will let the buffer be
|
|
||||||
* reallocated as necessary, with an amortized linear cost.
|
|
||||||
*
|
|
||||||
* size_max = 0 prevents writing anything to the buffer: only the total
|
|
||||||
* length is computed. The write operations can then possibly be repeated in
|
|
||||||
* a buffer with exactly the necessary size
|
|
||||||
* (using size_init = size_max = len + 1).
|
|
||||||
*
|
|
||||||
* size_max = 1 is automatically replaced by the exact size available in the
|
|
||||||
* structure itself, thus ensuring no dynamic memory allocation. The
|
|
||||||
* internal buffer is large enough to hold a reasonable paragraph of text,
|
|
||||||
* such as the current paragraph.
|
|
||||||
*/
|
|
||||||
|
|
||||||
FF_PAD_STRUCTURE(AVBPrint, 1024,
|
|
||||||
char *str; /**< string so far */
|
|
||||||
unsigned len; /**< length so far */
|
|
||||||
unsigned size; /**< allocated memory */
|
|
||||||
unsigned size_max; /**< maximum allocated memory */
|
|
||||||
char reserved_internal_buffer[1];
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convenience macros for special values for av_bprint_init() size_max
|
|
||||||
* parameter.
|
|
||||||
*/
|
|
||||||
#define AV_BPRINT_SIZE_UNLIMITED ((unsigned)-1)
|
|
||||||
#define AV_BPRINT_SIZE_AUTOMATIC 1
|
|
||||||
#define AV_BPRINT_SIZE_COUNT_ONLY 0
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Init a print buffer.
|
|
||||||
*
|
|
||||||
* @param buf buffer to init
|
|
||||||
* @param size_init initial size (including the final 0)
|
|
||||||
* @param size_max maximum size;
|
|
||||||
* 0 means do not write anything, just count the length;
|
|
||||||
* 1 is replaced by the maximum value for automatic storage;
|
|
||||||
* any large value means that the internal buffer will be
|
|
||||||
* reallocated as needed up to that limit; -1 is converted to
|
|
||||||
* UINT_MAX, the largest limit possible.
|
|
||||||
* Check also AV_BPRINT_SIZE_* macros.
|
|
||||||
*/
|
|
||||||
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Init a print buffer using a pre-existing buffer.
|
|
||||||
*
|
|
||||||
* The buffer will not be reallocated.
|
|
||||||
*
|
|
||||||
* @param buf buffer structure to init
|
|
||||||
* @param buffer byte buffer to use for the string data
|
|
||||||
* @param size size of buffer
|
|
||||||
*/
|
|
||||||
void av_bprint_init_for_buffer(AVBPrint *buf, char *buffer, unsigned size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Append a formatted string to a print buffer.
|
|
||||||
*/
|
|
||||||
void av_bprintf(AVBPrint *buf, const char *fmt, ...) av_printf_format(2, 3);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Append a formatted string to a print buffer.
|
|
||||||
*/
|
|
||||||
void av_vbprintf(AVBPrint *buf, const char *fmt, va_list vl_arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Append char c n times to a print buffer.
|
|
||||||
*/
|
|
||||||
void av_bprint_chars(AVBPrint *buf, char c, unsigned n);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Append data to a print buffer.
|
|
||||||
*
|
|
||||||
* param buf bprint buffer to use
|
|
||||||
* param data pointer to data
|
|
||||||
* param size size of data
|
|
||||||
*/
|
|
||||||
void av_bprint_append_data(AVBPrint *buf, const char *data, unsigned size);
|
|
||||||
|
|
||||||
struct tm;
|
|
||||||
/**
|
|
||||||
* Append a formatted date and time to a print buffer.
|
|
||||||
*
|
|
||||||
* param buf bprint buffer to use
|
|
||||||
* param fmt date and time format string, see strftime()
|
|
||||||
* param tm broken-down time structure to translate
|
|
||||||
*
|
|
||||||
* @note due to poor design of the standard strftime function, it may
|
|
||||||
* produce poor results if the format string expands to a very long text and
|
|
||||||
* the bprint buffer is near the limit stated by the size_max option.
|
|
||||||
*/
|
|
||||||
void av_bprint_strftime(AVBPrint *buf, const char *fmt, const struct tm *tm);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate bytes in the buffer for external use.
|
|
||||||
*
|
|
||||||
* @param[in] buf buffer structure
|
|
||||||
* @param[in] size required size
|
|
||||||
* @param[out] mem pointer to the memory area
|
|
||||||
* @param[out] actual_size size of the memory area after allocation;
|
|
||||||
* can be larger or smaller than size
|
|
||||||
*/
|
|
||||||
void av_bprint_get_buffer(AVBPrint *buf, unsigned size,
|
|
||||||
unsigned char **mem, unsigned *actual_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset the string to "" but keep internal allocated data.
|
|
||||||
*/
|
|
||||||
void av_bprint_clear(AVBPrint *buf);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test if the print buffer is complete (not truncated).
|
|
||||||
*
|
|
||||||
* It may have been truncated due to a memory allocation failure
|
|
||||||
* or the size_max limit (compare size and size_max if necessary).
|
|
||||||
*/
|
|
||||||
static inline int av_bprint_is_complete(const AVBPrint *buf)
|
|
||||||
{
|
|
||||||
return buf->len < buf->size;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finalize a print buffer.
|
|
||||||
*
|
|
||||||
* The print buffer can no longer be used afterwards,
|
|
||||||
* but the len and size fields are still valid.
|
|
||||||
*
|
|
||||||
* @arg[out] ret_str if not NULL, used to return a permanent copy of the
|
|
||||||
* buffer contents, or NULL if memory allocation fails;
|
|
||||||
* if NULL, the buffer is discarded and freed
|
|
||||||
* @return 0 for success or error code (probably AVERROR(ENOMEM))
|
|
||||||
*/
|
|
||||||
int av_bprint_finalize(AVBPrint *buf, char **ret_str);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Escape the content in src and append it to dstbuf.
|
|
||||||
*
|
|
||||||
* @param dstbuf already inited destination bprint buffer
|
|
||||||
* @param src string containing the text to escape
|
|
||||||
* @param special_chars string containing the special characters which
|
|
||||||
* need to be escaped, can be NULL
|
|
||||||
* @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros.
|
|
||||||
* Any unknown value for mode will be considered equivalent to
|
|
||||||
* AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without
|
|
||||||
* notice.
|
|
||||||
* @param flags flags which control how to escape, see AV_ESCAPE_FLAG_* macros
|
|
||||||
*/
|
|
||||||
void av_bprint_escape(AVBPrint *dstbuf, const char *src, const char *special_chars,
|
|
||||||
enum AVEscapeMode mode, int flags);
|
|
||||||
|
|
||||||
#endif /* AVUTIL_BPRINT_H */
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
/*
|
|
||||||
* copyright (c) 2006 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* byte swapping routines
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_BSWAP_H
|
|
||||||
#define AVUTIL_BSWAP_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "avconfig.h"
|
|
||||||
#include "attributes.h"
|
|
||||||
|
|
||||||
#ifdef HAVE_AV_CONFIG_H
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#if ARCH_AARCH64
|
|
||||||
# include "aarch64/bswap.h"
|
|
||||||
#elif ARCH_ARM
|
|
||||||
# include "arm/bswap.h"
|
|
||||||
#elif ARCH_AVR32
|
|
||||||
# include "avr32/bswap.h"
|
|
||||||
#elif ARCH_SH4
|
|
||||||
# include "sh4/bswap.h"
|
|
||||||
#elif ARCH_X86
|
|
||||||
# include "x86/bswap.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* HAVE_AV_CONFIG_H */
|
|
||||||
|
|
||||||
#define AV_BSWAP16C(x) (((x) << 8 & 0xff00) | ((x) >> 8 & 0x00ff))
|
|
||||||
#define AV_BSWAP32C(x) (AV_BSWAP16C(x) << 16 | AV_BSWAP16C((x) >> 16))
|
|
||||||
#define AV_BSWAP64C(x) (AV_BSWAP32C(x) << 32 | AV_BSWAP32C((x) >> 32))
|
|
||||||
|
|
||||||
#define AV_BSWAPC(s, x) AV_BSWAP##s##C(x)
|
|
||||||
|
|
||||||
#ifndef av_bswap16
|
|
||||||
static av_always_inline av_const uint16_t av_bswap16(uint16_t x)
|
|
||||||
{
|
|
||||||
x= (x>>8) | (x<<8);
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef av_bswap32
|
|
||||||
static av_always_inline av_const uint32_t av_bswap32(uint32_t x)
|
|
||||||
{
|
|
||||||
return AV_BSWAP32C(x);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef av_bswap64
|
|
||||||
static inline uint64_t av_const av_bswap64(uint64_t x)
|
|
||||||
{
|
|
||||||
return (uint64_t)av_bswap32(x) << 32 | av_bswap32(x >> 32);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// be2ne ... big-endian to native-endian
|
|
||||||
// le2ne ... little-endian to native-endian
|
|
||||||
|
|
||||||
#if AV_HAVE_BIGENDIAN
|
|
||||||
#define av_be2ne16(x) (x)
|
|
||||||
#define av_be2ne32(x) (x)
|
|
||||||
#define av_be2ne64(x) (x)
|
|
||||||
#define av_le2ne16(x) av_bswap16(x)
|
|
||||||
#define av_le2ne32(x) av_bswap32(x)
|
|
||||||
#define av_le2ne64(x) av_bswap64(x)
|
|
||||||
#define AV_BE2NEC(s, x) (x)
|
|
||||||
#define AV_LE2NEC(s, x) AV_BSWAPC(s, x)
|
|
||||||
#else
|
|
||||||
#define av_be2ne16(x) av_bswap16(x)
|
|
||||||
#define av_be2ne32(x) av_bswap32(x)
|
|
||||||
#define av_be2ne64(x) av_bswap64(x)
|
|
||||||
#define av_le2ne16(x) (x)
|
|
||||||
#define av_le2ne32(x) (x)
|
|
||||||
#define av_le2ne64(x) (x)
|
|
||||||
#define AV_BE2NEC(s, x) AV_BSWAPC(s, x)
|
|
||||||
#define AV_LE2NEC(s, x) (x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define AV_BE2NE16C(x) AV_BE2NEC(16, x)
|
|
||||||
#define AV_BE2NE32C(x) AV_BE2NEC(32, x)
|
|
||||||
#define AV_BE2NE64C(x) AV_BE2NEC(64, x)
|
|
||||||
#define AV_LE2NE16C(x) AV_LE2NEC(16, x)
|
|
||||||
#define AV_LE2NE32C(x) AV_LE2NEC(32, x)
|
|
||||||
#define AV_LE2NE64C(x) AV_LE2NEC(64, x)
|
|
||||||
|
|
||||||
#endif /* AVUTIL_BSWAP_H */
|
|
||||||
@@ -1,305 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavu_buffer
|
|
||||||
* refcounted data buffer API
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_BUFFER_H
|
|
||||||
#define AVUTIL_BUFFER_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_buffer AVBuffer
|
|
||||||
* @ingroup lavu_data
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
* AVBuffer is an API for reference-counted data buffers.
|
|
||||||
*
|
|
||||||
* There are two core objects in this API -- AVBuffer and AVBufferRef. AVBuffer
|
|
||||||
* represents the data buffer itself; it is opaque and not meant to be accessed
|
|
||||||
* by the caller directly, but only through AVBufferRef. However, the caller may
|
|
||||||
* e.g. compare two AVBuffer pointers to check whether two different references
|
|
||||||
* are describing the same data buffer. AVBufferRef represents a single
|
|
||||||
* reference to an AVBuffer and it is the object that may be manipulated by the
|
|
||||||
* caller directly.
|
|
||||||
*
|
|
||||||
* There are two functions provided for creating a new AVBuffer with a single
|
|
||||||
* reference -- av_buffer_alloc() to just allocate a new buffer, and
|
|
||||||
* av_buffer_create() to wrap an existing array in an AVBuffer. From an existing
|
|
||||||
* reference, additional references may be created with av_buffer_ref().
|
|
||||||
* Use av_buffer_unref() to free a reference (this will automatically free the
|
|
||||||
* data once all the references are freed).
|
|
||||||
*
|
|
||||||
* The convention throughout this API and the rest of FFmpeg is such that the
|
|
||||||
* buffer is considered writable if there exists only one reference to it (and
|
|
||||||
* it has not been marked as read-only). The av_buffer_is_writable() function is
|
|
||||||
* provided to check whether this is true and av_buffer_make_writable() will
|
|
||||||
* automatically create a new writable buffer when necessary.
|
|
||||||
* Of course nothing prevents the calling code from violating this convention,
|
|
||||||
* however that is safe only when all the existing references are under its
|
|
||||||
* control.
|
|
||||||
*
|
|
||||||
* @note Referencing and unreferencing the buffers is thread-safe and thus
|
|
||||||
* may be done from multiple threads simultaneously without any need for
|
|
||||||
* additional locking.
|
|
||||||
*
|
|
||||||
* @note Two different references to the same buffer can point to different
|
|
||||||
* parts of the buffer (i.e. their AVBufferRef.data will not be equal).
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A reference counted buffer type. It is opaque and is meant to be used through
|
|
||||||
* references (AVBufferRef).
|
|
||||||
*/
|
|
||||||
typedef struct AVBuffer AVBuffer;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A reference to a data buffer.
|
|
||||||
*
|
|
||||||
* The size of this struct is not a part of the public ABI and it is not meant
|
|
||||||
* to be allocated directly.
|
|
||||||
*/
|
|
||||||
typedef struct AVBufferRef {
|
|
||||||
AVBuffer *buffer;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The data buffer. It is considered writable if and only if
|
|
||||||
* this is the only reference to the buffer, in which case
|
|
||||||
* av_buffer_is_writable() returns 1.
|
|
||||||
*/
|
|
||||||
uint8_t *data;
|
|
||||||
/**
|
|
||||||
* Size of data in bytes.
|
|
||||||
*/
|
|
||||||
int size;
|
|
||||||
} AVBufferRef;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVBuffer of the given size using av_malloc().
|
|
||||||
*
|
|
||||||
* @return an AVBufferRef of given size or NULL when out of memory
|
|
||||||
*/
|
|
||||||
AVBufferRef *av_buffer_alloc(int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Same as av_buffer_alloc(), except the returned buffer will be initialized
|
|
||||||
* to zero.
|
|
||||||
*/
|
|
||||||
AVBufferRef *av_buffer_allocz(int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Always treat the buffer as read-only, even when it has only one
|
|
||||||
* reference.
|
|
||||||
*/
|
|
||||||
#define AV_BUFFER_FLAG_READONLY (1 << 0)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an AVBuffer from an existing array.
|
|
||||||
*
|
|
||||||
* If this function is successful, data is owned by the AVBuffer. The caller may
|
|
||||||
* only access data through the returned AVBufferRef and references derived from
|
|
||||||
* it.
|
|
||||||
* If this function fails, data is left untouched.
|
|
||||||
* @param data data array
|
|
||||||
* @param size size of data in bytes
|
|
||||||
* @param free a callback for freeing this buffer's data
|
|
||||||
* @param opaque parameter to be got for processing or passed to free
|
|
||||||
* @param flags a combination of AV_BUFFER_FLAG_*
|
|
||||||
*
|
|
||||||
* @return an AVBufferRef referring to data on success, NULL on failure.
|
|
||||||
*/
|
|
||||||
AVBufferRef *av_buffer_create(uint8_t *data, int size,
|
|
||||||
void (*free)(void *opaque, uint8_t *data),
|
|
||||||
void *opaque, int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Default free callback, which calls av_free() on the buffer data.
|
|
||||||
* This function is meant to be passed to av_buffer_create(), not called
|
|
||||||
* directly.
|
|
||||||
*/
|
|
||||||
void av_buffer_default_free(void *opaque, uint8_t *data);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new reference to an AVBuffer.
|
|
||||||
*
|
|
||||||
* @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on
|
|
||||||
* failure.
|
|
||||||
*/
|
|
||||||
AVBufferRef *av_buffer_ref(AVBufferRef *buf);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free a given reference and automatically free the buffer if there are no more
|
|
||||||
* references to it.
|
|
||||||
*
|
|
||||||
* @param buf the reference to be freed. The pointer is set to NULL on return.
|
|
||||||
*/
|
|
||||||
void av_buffer_unref(AVBufferRef **buf);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return 1 if the caller may write to the data referred to by buf (which is
|
|
||||||
* true if and only if buf is the only reference to the underlying AVBuffer).
|
|
||||||
* Return 0 otherwise.
|
|
||||||
* A positive answer is valid until av_buffer_ref() is called on buf.
|
|
||||||
*/
|
|
||||||
int av_buffer_is_writable(const AVBufferRef *buf);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the opaque parameter set by av_buffer_create.
|
|
||||||
*/
|
|
||||||
void *av_buffer_get_opaque(const AVBufferRef *buf);
|
|
||||||
|
|
||||||
int av_buffer_get_ref_count(const AVBufferRef *buf);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a writable reference from a given buffer reference, avoiding data copy
|
|
||||||
* if possible.
|
|
||||||
*
|
|
||||||
* @param buf buffer reference to make writable. On success, buf is either left
|
|
||||||
* untouched, or it is unreferenced and a new writable AVBufferRef is
|
|
||||||
* written in its place. On failure, buf is left untouched.
|
|
||||||
* @return 0 on success, a negative AVERROR on failure.
|
|
||||||
*/
|
|
||||||
int av_buffer_make_writable(AVBufferRef **buf);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reallocate a given buffer.
|
|
||||||
*
|
|
||||||
* @param buf a buffer reference to reallocate. On success, buf will be
|
|
||||||
* unreferenced and a new reference with the required size will be
|
|
||||||
* written in its place. On failure buf will be left untouched. *buf
|
|
||||||
* may be NULL, then a new buffer is allocated.
|
|
||||||
* @param size required new buffer size.
|
|
||||||
* @return 0 on success, a negative AVERROR on failure.
|
|
||||||
*
|
|
||||||
* @note the buffer is actually reallocated with av_realloc() only if it was
|
|
||||||
* initially allocated through av_buffer_realloc(NULL) and there is only one
|
|
||||||
* reference to it (i.e. the one passed to this function). In all other cases
|
|
||||||
* a new buffer is allocated and the data is copied.
|
|
||||||
*/
|
|
||||||
int av_buffer_realloc(AVBufferRef **buf, int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_bufferpool AVBufferPool
|
|
||||||
* @ingroup lavu_data
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
* AVBufferPool is an API for a lock-free thread-safe pool of AVBuffers.
|
|
||||||
*
|
|
||||||
* Frequently allocating and freeing large buffers may be slow. AVBufferPool is
|
|
||||||
* meant to solve this in cases when the caller needs a set of buffers of the
|
|
||||||
* same size (the most obvious use case being buffers for raw video or audio
|
|
||||||
* frames).
|
|
||||||
*
|
|
||||||
* At the beginning, the user must call av_buffer_pool_init() to create the
|
|
||||||
* buffer pool. Then whenever a buffer is needed, call av_buffer_pool_get() to
|
|
||||||
* get a reference to a new buffer, similar to av_buffer_alloc(). This new
|
|
||||||
* reference works in all aspects the same way as the one created by
|
|
||||||
* av_buffer_alloc(). However, when the last reference to this buffer is
|
|
||||||
* unreferenced, it is returned to the pool instead of being freed and will be
|
|
||||||
* reused for subsequent av_buffer_pool_get() calls.
|
|
||||||
*
|
|
||||||
* When the caller is done with the pool and no longer needs to allocate any new
|
|
||||||
* buffers, av_buffer_pool_uninit() must be called to mark the pool as freeable.
|
|
||||||
* Once all the buffers are released, it will automatically be freed.
|
|
||||||
*
|
|
||||||
* Allocating and releasing buffers with this API is thread-safe as long as
|
|
||||||
* either the default alloc callback is used, or the user-supplied one is
|
|
||||||
* thread-safe.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The buffer pool. This structure is opaque and not meant to be accessed
|
|
||||||
* directly. It is allocated with av_buffer_pool_init() and freed with
|
|
||||||
* av_buffer_pool_uninit().
|
|
||||||
*/
|
|
||||||
typedef struct AVBufferPool AVBufferPool;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate and initialize a buffer pool.
|
|
||||||
*
|
|
||||||
* @param size size of each buffer in this pool
|
|
||||||
* @param alloc a function that will be used to allocate new buffers when the
|
|
||||||
* pool is empty. May be NULL, then the default allocator will be used
|
|
||||||
* (av_buffer_alloc()).
|
|
||||||
* @return newly created buffer pool on success, NULL on error.
|
|
||||||
*/
|
|
||||||
AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size));
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate and initialize a buffer pool with a more complex allocator.
|
|
||||||
*
|
|
||||||
* @param size size of each buffer in this pool
|
|
||||||
* @param opaque arbitrary user data used by the allocator
|
|
||||||
* @param alloc a function that will be used to allocate new buffers when the
|
|
||||||
* pool is empty. May be NULL, then the default allocator will be
|
|
||||||
* used (av_buffer_alloc()).
|
|
||||||
* @param pool_free a function that will be called immediately before the pool
|
|
||||||
* is freed. I.e. after av_buffer_pool_uninit() is called
|
|
||||||
* by the caller and all the frames are returned to the pool
|
|
||||||
* and freed. It is intended to uninitialize the user opaque
|
|
||||||
* data. May be NULL.
|
|
||||||
* @return newly created buffer pool on success, NULL on error.
|
|
||||||
*/
|
|
||||||
AVBufferPool *av_buffer_pool_init2(int size, void *opaque,
|
|
||||||
AVBufferRef* (*alloc)(void *opaque, int size),
|
|
||||||
void (*pool_free)(void *opaque));
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mark the pool as being available for freeing. It will actually be freed only
|
|
||||||
* once all the allocated buffers associated with the pool are released. Thus it
|
|
||||||
* is safe to call this function while some of the allocated buffers are still
|
|
||||||
* in use.
|
|
||||||
*
|
|
||||||
* @param pool pointer to the pool to be freed. It will be set to NULL.
|
|
||||||
*/
|
|
||||||
void av_buffer_pool_uninit(AVBufferPool **pool);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate a new AVBuffer, reusing an old buffer from the pool when available.
|
|
||||||
* This function may be called simultaneously from multiple threads.
|
|
||||||
*
|
|
||||||
* @return a reference to the new buffer on success, NULL on error.
|
|
||||||
*/
|
|
||||||
AVBufferRef *av_buffer_pool_get(AVBufferPool *pool);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Query the original opaque parameter of an allocated buffer in the pool.
|
|
||||||
*
|
|
||||||
* @param ref a buffer reference to a buffer returned by av_buffer_pool_get.
|
|
||||||
* @return the opaque parameter set by the buffer allocator function of the
|
|
||||||
* buffer pool.
|
|
||||||
*
|
|
||||||
* @note the opaque parameter of ref is used by the buffer pool implementation,
|
|
||||||
* therefore you have to use this function to access the original opaque
|
|
||||||
* parameter of an allocated buffer.
|
|
||||||
*/
|
|
||||||
void *av_buffer_pool_buffer_get_opaque(AVBufferRef *ref);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_BUFFER_H */
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
/*
|
|
||||||
* An implementation of the CAMELLIA algorithm as mentioned in RFC3713
|
|
||||||
* Copyright (c) 2014 Supraja Meedinti
|
|
||||||
*
|
|
||||||
* 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_CAMELLIA_H
|
|
||||||
#define AVUTIL_CAMELLIA_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @brief Public header for libavutil CAMELLIA algorithm
|
|
||||||
* @defgroup lavu_camellia CAMELLIA
|
|
||||||
* @ingroup lavu_crypto
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
extern const int av_camellia_size;
|
|
||||||
|
|
||||||
struct AVCAMELLIA;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVCAMELLIA context
|
|
||||||
* To free the struct: av_free(ptr)
|
|
||||||
*/
|
|
||||||
struct AVCAMELLIA *av_camellia_alloc(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize an AVCAMELLIA context.
|
|
||||||
*
|
|
||||||
* @param ctx an AVCAMELLIA context
|
|
||||||
* @param key a key of 16, 24, 32 bytes used for encryption/decryption
|
|
||||||
* @param key_bits number of keybits: possible are 128, 192, 256
|
|
||||||
*/
|
|
||||||
int av_camellia_init(struct AVCAMELLIA *ctx, const uint8_t *key, int key_bits);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encrypt or decrypt a buffer using a previously initialized context
|
|
||||||
*
|
|
||||||
* @param ctx an AVCAMELLIA context
|
|
||||||
* @param dst destination array, can be equal to src
|
|
||||||
* @param src source array, can be equal to dst
|
|
||||||
* @param count number of 16 byte blocks
|
|
||||||
* @paran iv initialization vector for CBC mode, NULL for ECB mode
|
|
||||||
* @param decrypt 0 for encryption, 1 for decryption
|
|
||||||
*/
|
|
||||||
void av_camellia_crypt(struct AVCAMELLIA *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t* iv, int decrypt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
#endif /* AVUTIL_CAMELLIA_H */
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
/*
|
|
||||||
* An implementation of the CAST128 algorithm as mentioned in RFC2144
|
|
||||||
* Copyright (c) 2014 Supraja Meedinti
|
|
||||||
*
|
|
||||||
* 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_CAST5_H
|
|
||||||
#define AVUTIL_CAST5_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @brief Public header for libavutil CAST5 algorithm
|
|
||||||
* @defgroup lavu_cast5 CAST5
|
|
||||||
* @ingroup lavu_crypto
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
extern const int av_cast5_size;
|
|
||||||
|
|
||||||
struct AVCAST5;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVCAST5 context
|
|
||||||
* To free the struct: av_free(ptr)
|
|
||||||
*/
|
|
||||||
struct AVCAST5 *av_cast5_alloc(void);
|
|
||||||
/**
|
|
||||||
* Initialize an AVCAST5 context.
|
|
||||||
*
|
|
||||||
* @param ctx an AVCAST5 context
|
|
||||||
* @param key a key of 5,6,...16 bytes used for encryption/decryption
|
|
||||||
* @param key_bits number of keybits: possible are 40,48,...,128
|
|
||||||
* @return 0 on success, less than 0 on failure
|
|
||||||
*/
|
|
||||||
int av_cast5_init(struct AVCAST5 *ctx, const uint8_t *key, int key_bits);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encrypt or decrypt a buffer using a previously initialized context, ECB mode only
|
|
||||||
*
|
|
||||||
* @param ctx an AVCAST5 context
|
|
||||||
* @param dst destination array, can be equal to src
|
|
||||||
* @param src source array, can be equal to dst
|
|
||||||
* @param count number of 8 byte blocks
|
|
||||||
* @param decrypt 0 for encryption, 1 for decryption
|
|
||||||
*/
|
|
||||||
void av_cast5_crypt(struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, int decrypt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encrypt or decrypt a buffer using a previously initialized context
|
|
||||||
*
|
|
||||||
* @param ctx an AVCAST5 context
|
|
||||||
* @param dst destination array, can be equal to src
|
|
||||||
* @param src source array, can be equal to dst
|
|
||||||
* @param count number of 8 byte blocks
|
|
||||||
* @param iv initialization vector for CBC mode, NULL for ECB mode
|
|
||||||
* @param decrypt 0 for encryption, 1 for decryption
|
|
||||||
*/
|
|
||||||
void av_cast5_crypt2(struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt);
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
#endif /* AVUTIL_CAST5_H */
|
|
||||||
@@ -1,232 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
|
|
||||||
* Copyright (c) 2008 Peter Ross
|
|
||||||
*
|
|
||||||
* 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_CHANNEL_LAYOUT_H
|
|
||||||
#define AVUTIL_CHANNEL_LAYOUT_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* audio channel layout utility functions
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavu_audio
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup channel_masks Audio channel masks
|
|
||||||
*
|
|
||||||
* A channel layout is a 64-bits integer with a bit set for every channel.
|
|
||||||
* The number of bits set must be equal to the number of channels.
|
|
||||||
* The value 0 means that the channel layout is not known.
|
|
||||||
* @note this data structure is not powerful enough to handle channels
|
|
||||||
* combinations that have the same channel multiple times, such as
|
|
||||||
* dual-mono.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define AV_CH_FRONT_LEFT 0x00000001
|
|
||||||
#define AV_CH_FRONT_RIGHT 0x00000002
|
|
||||||
#define AV_CH_FRONT_CENTER 0x00000004
|
|
||||||
#define AV_CH_LOW_FREQUENCY 0x00000008
|
|
||||||
#define AV_CH_BACK_LEFT 0x00000010
|
|
||||||
#define AV_CH_BACK_RIGHT 0x00000020
|
|
||||||
#define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040
|
|
||||||
#define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080
|
|
||||||
#define AV_CH_BACK_CENTER 0x00000100
|
|
||||||
#define AV_CH_SIDE_LEFT 0x00000200
|
|
||||||
#define AV_CH_SIDE_RIGHT 0x00000400
|
|
||||||
#define AV_CH_TOP_CENTER 0x00000800
|
|
||||||
#define AV_CH_TOP_FRONT_LEFT 0x00001000
|
|
||||||
#define AV_CH_TOP_FRONT_CENTER 0x00002000
|
|
||||||
#define AV_CH_TOP_FRONT_RIGHT 0x00004000
|
|
||||||
#define AV_CH_TOP_BACK_LEFT 0x00008000
|
|
||||||
#define AV_CH_TOP_BACK_CENTER 0x00010000
|
|
||||||
#define AV_CH_TOP_BACK_RIGHT 0x00020000
|
|
||||||
#define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix.
|
|
||||||
#define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT.
|
|
||||||
#define AV_CH_WIDE_LEFT 0x0000000080000000ULL
|
|
||||||
#define AV_CH_WIDE_RIGHT 0x0000000100000000ULL
|
|
||||||
#define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL
|
|
||||||
#define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL
|
|
||||||
#define AV_CH_LOW_FREQUENCY_2 0x0000000800000000ULL
|
|
||||||
|
|
||||||
/** Channel mask value used for AVCodecContext.request_channel_layout
|
|
||||||
to indicate that the user requests the channel order of the decoder output
|
|
||||||
to be the native codec channel order. */
|
|
||||||
#define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
* @defgroup channel_mask_c Audio channel layouts
|
|
||||||
* @{
|
|
||||||
* */
|
|
||||||
#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER)
|
|
||||||
#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT)
|
|
||||||
#define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY)
|
|
||||||
#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER)
|
|
||||||
#define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER)
|
|
||||||
#define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY)
|
|
||||||
#define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER)
|
|
||||||
#define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY)
|
|
||||||
#define AV_CH_LAYOUT_2_2 (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
|
|
||||||
#define AV_CH_LAYOUT_QUAD (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
|
|
||||||
#define AV_CH_LAYOUT_5POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
|
|
||||||
#define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY)
|
|
||||||
#define AV_CH_LAYOUT_5POINT0_BACK (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
|
|
||||||
#define AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY)
|
|
||||||
#define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER)
|
|
||||||
#define AV_CH_LAYOUT_6POINT0_FRONT (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
|
|
||||||
#define AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER)
|
|
||||||
#define AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER)
|
|
||||||
#define AV_CH_LAYOUT_6POINT1_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER)
|
|
||||||
#define AV_CH_LAYOUT_6POINT1_FRONT (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY)
|
|
||||||
#define AV_CH_LAYOUT_7POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
|
|
||||||
#define AV_CH_LAYOUT_7POINT0_FRONT (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
|
|
||||||
#define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
|
|
||||||
#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
|
|
||||||
#define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
|
|
||||||
#define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT)
|
|
||||||
#define AV_CH_LAYOUT_HEXADECAGONAL (AV_CH_LAYOUT_OCTAGONAL|AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT)
|
|
||||||
#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT)
|
|
||||||
|
|
||||||
enum AVMatrixEncoding {
|
|
||||||
AV_MATRIX_ENCODING_NONE,
|
|
||||||
AV_MATRIX_ENCODING_DOLBY,
|
|
||||||
AV_MATRIX_ENCODING_DPLII,
|
|
||||||
AV_MATRIX_ENCODING_DPLIIX,
|
|
||||||
AV_MATRIX_ENCODING_DPLIIZ,
|
|
||||||
AV_MATRIX_ENCODING_DOLBYEX,
|
|
||||||
AV_MATRIX_ENCODING_DOLBYHEADPHONE,
|
|
||||||
AV_MATRIX_ENCODING_NB
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return a channel layout id that matches name, or 0 if no match is found.
|
|
||||||
*
|
|
||||||
* name can be one or several of the following notations,
|
|
||||||
* separated by '+' or '|':
|
|
||||||
* - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0,
|
|
||||||
* 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix);
|
|
||||||
* - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC,
|
|
||||||
* SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR);
|
|
||||||
* - a number of channels, in decimal, followed by 'c', yielding
|
|
||||||
* the default channel layout for that number of channels (@see
|
|
||||||
* av_get_default_channel_layout);
|
|
||||||
* - a channel layout mask, in hexadecimal starting with "0x" (see the
|
|
||||||
* AV_CH_* macros).
|
|
||||||
*
|
|
||||||
* Example: "stereo+FC" = "2c+FC" = "2c+1c" = "0x7"
|
|
||||||
*/
|
|
||||||
uint64_t av_get_channel_layout(const char *name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return a channel layout and the number of channels based on the specified name.
|
|
||||||
*
|
|
||||||
* This function is similar to (@see av_get_channel_layout), but can also parse
|
|
||||||
* unknown channel layout specifications.
|
|
||||||
*
|
|
||||||
* @param[in] name channel layout specification string
|
|
||||||
* @param[out] channel_layout parsed channel layout (0 if unknown)
|
|
||||||
* @param[out] nb_channels number of channels
|
|
||||||
*
|
|
||||||
* @return 0 on success, AVERROR(EINVAL) if the parsing fails.
|
|
||||||
*/
|
|
||||||
int av_get_extended_channel_layout(const char *name, uint64_t* channel_layout, int* nb_channels);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return a description of a channel layout.
|
|
||||||
* If nb_channels is <= 0, it is guessed from the channel_layout.
|
|
||||||
*
|
|
||||||
* @param buf put here the string containing the channel layout
|
|
||||||
* @param buf_size size in bytes of the buffer
|
|
||||||
*/
|
|
||||||
void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout);
|
|
||||||
|
|
||||||
struct AVBPrint;
|
|
||||||
/**
|
|
||||||
* Append a description of a channel layout to a bprint buffer.
|
|
||||||
*/
|
|
||||||
void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the number of channels in the channel layout.
|
|
||||||
*/
|
|
||||||
int av_get_channel_layout_nb_channels(uint64_t channel_layout);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return default channel layout for a given number of channels.
|
|
||||||
*/
|
|
||||||
int64_t av_get_default_channel_layout(int nb_channels);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the index of a channel in channel_layout.
|
|
||||||
*
|
|
||||||
* @param channel a channel layout describing exactly one channel which must be
|
|
||||||
* present in channel_layout.
|
|
||||||
*
|
|
||||||
* @return index of channel in channel_layout on success, a negative AVERROR
|
|
||||||
* on error.
|
|
||||||
*/
|
|
||||||
int av_get_channel_layout_channel_index(uint64_t channel_layout,
|
|
||||||
uint64_t channel);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the channel with the given index in channel_layout.
|
|
||||||
*/
|
|
||||||
uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the name of a given channel.
|
|
||||||
*
|
|
||||||
* @return channel name on success, NULL on error.
|
|
||||||
*/
|
|
||||||
const char *av_get_channel_name(uint64_t channel);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the description of a given channel.
|
|
||||||
*
|
|
||||||
* @param channel a channel layout with a single channel
|
|
||||||
* @return channel description on success, NULL on error
|
|
||||||
*/
|
|
||||||
const char *av_get_channel_description(uint64_t channel);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the value and name of a standard channel layout.
|
|
||||||
*
|
|
||||||
* @param[in] index index in an internal list, starting at 0
|
|
||||||
* @param[out] layout channel layout mask
|
|
||||||
* @param[out] name name of the layout
|
|
||||||
* @return 0 if the layout exists,
|
|
||||||
* <0 if index is beyond the limits
|
|
||||||
*/
|
|
||||||
int av_get_standard_channel_layout(unsigned index, uint64_t *layout,
|
|
||||||
const char **name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_CHANNEL_LAYOUT_H */
|
|
||||||
@@ -1,608 +0,0 @@
|
|||||||
/*
|
|
||||||
* copyright (c) 2006 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* common internal and external API header
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_COMMON_H
|
|
||||||
#define AVUTIL_COMMON_H
|
|
||||||
|
|
||||||
#if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) && !defined(UINT64_C)
|
|
||||||
#error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <inttypes.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "attributes.h"
|
|
||||||
#include "macros.h"
|
|
||||||
#include "avutilVersion.h"
|
|
||||||
#include "avconfig.h"
|
|
||||||
|
|
||||||
#if AV_HAVE_BIGENDIAN
|
|
||||||
# define AV_NE(be, le) (be)
|
|
||||||
#else
|
|
||||||
# define AV_NE(be, le) (le)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//rounded division & shift
|
|
||||||
#define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b))
|
|
||||||
/* assume b>0 */
|
|
||||||
#define ROUNDED_DIV(a,b) (((a)>=0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b))
|
|
||||||
/* Fast a/(1<<b) rounded toward +inf. Assume a>=0 and b>=0 */
|
|
||||||
#define AV_CEIL_RSHIFT(a,b) (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) \
|
|
||||||
: ((a) + (1<<(b)) - 1) >> (b))
|
|
||||||
/* Backwards compat. */
|
|
||||||
#define FF_CEIL_RSHIFT AV_CEIL_RSHIFT
|
|
||||||
|
|
||||||
#define FFUDIV(a,b) (((a)>0 ?(a):(a)-(b)+1) / (b))
|
|
||||||
#define FFUMOD(a,b) ((a)-(b)*FFUDIV(a,b))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they
|
|
||||||
* are not representable as absolute values of their type. This is the same
|
|
||||||
* as with *abs()
|
|
||||||
* @see FFNABS()
|
|
||||||
*/
|
|
||||||
#define FFABS(a) ((a) >= 0 ? (a) : (-(a)))
|
|
||||||
#define FFSIGN(a) ((a) > 0 ? 1 : -1)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Negative Absolute value.
|
|
||||||
* this works for all integers of all types.
|
|
||||||
* As with many macros, this evaluates its argument twice, it thus must not have
|
|
||||||
* a sideeffect, that is FFNABS(x++) has undefined behavior.
|
|
||||||
*/
|
|
||||||
#define FFNABS(a) ((a) <= 0 ? (a) : (-(a)))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Comparator.
|
|
||||||
* For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0
|
|
||||||
* if x == y. This is useful for instance in a qsort comparator callback.
|
|
||||||
* Furthermore, compilers are able to optimize this to branchless code, and
|
|
||||||
* there is no risk of overflow with signed types.
|
|
||||||
* As with many macros, this evaluates its argument multiple times, it thus
|
|
||||||
* must not have a side-effect.
|
|
||||||
*/
|
|
||||||
#define FFDIFFSIGN(x,y) (((x)>(y)) - ((x)<(y)))
|
|
||||||
|
|
||||||
#define FFMAX(a,b) ((a) > (b) ? (a) : (b))
|
|
||||||
#define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c)
|
|
||||||
#define FFMIN(a,b) ((a) > (b) ? (b) : (a))
|
|
||||||
#define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c)
|
|
||||||
|
|
||||||
#define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0)
|
|
||||||
#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0]))
|
|
||||||
|
|
||||||
/* misc math functions */
|
|
||||||
|
|
||||||
#ifdef HAVE_AV_CONFIG_H
|
|
||||||
# include "config.h"
|
|
||||||
# include "intmath.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Pull in unguarded fallback defines at the end of this file. */
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
#ifndef av_log2
|
|
||||||
av_const int av_log2(unsigned v);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef av_log2_16bit
|
|
||||||
av_const int av_log2_16bit(unsigned v);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clip a signed integer value into the amin-amax range.
|
|
||||||
* @param a value to clip
|
|
||||||
* @param amin minimum value of the clip range
|
|
||||||
* @param amax maximum value of the clip range
|
|
||||||
* @return clipped value
|
|
||||||
*/
|
|
||||||
static av_always_inline av_const int av_clip_c(int a, int amin, int amax)
|
|
||||||
{
|
|
||||||
#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
|
|
||||||
if (amin > amax) abort();
|
|
||||||
#endif
|
|
||||||
if (a < amin) return amin;
|
|
||||||
else if (a > amax) return amax;
|
|
||||||
else return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clip a signed 64bit integer value into the amin-amax range.
|
|
||||||
* @param a value to clip
|
|
||||||
* @param amin minimum value of the clip range
|
|
||||||
* @param amax maximum value of the clip range
|
|
||||||
* @return clipped value
|
|
||||||
*/
|
|
||||||
static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax)
|
|
||||||
{
|
|
||||||
#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
|
|
||||||
if (amin > amax) abort();
|
|
||||||
#endif
|
|
||||||
if (a < amin) return amin;
|
|
||||||
else if (a > amax) return amax;
|
|
||||||
else return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clip a signed integer value into the 0-255 range.
|
|
||||||
* @param a value to clip
|
|
||||||
* @return clipped value
|
|
||||||
*/
|
|
||||||
static av_always_inline av_const uint8_t av_clip_uint8_c(int a)
|
|
||||||
{
|
|
||||||
if (a&(~0xFF)) return (~a)>>31;
|
|
||||||
else return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clip a signed integer value into the -128,127 range.
|
|
||||||
* @param a value to clip
|
|
||||||
* @return clipped value
|
|
||||||
*/
|
|
||||||
static av_always_inline av_const int8_t av_clip_int8_c(int a)
|
|
||||||
{
|
|
||||||
if ((a+0x80U) & ~0xFF) return (a>>31) ^ 0x7F;
|
|
||||||
else return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clip a signed integer value into the 0-65535 range.
|
|
||||||
* @param a value to clip
|
|
||||||
* @return clipped value
|
|
||||||
*/
|
|
||||||
static av_always_inline av_const uint16_t av_clip_uint16_c(int a)
|
|
||||||
{
|
|
||||||
if (a&(~0xFFFF)) return (~a)>>31;
|
|
||||||
else return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clip a signed integer value into the -32768,32767 range.
|
|
||||||
* @param a value to clip
|
|
||||||
* @return clipped value
|
|
||||||
*/
|
|
||||||
static av_always_inline av_const int16_t av_clip_int16_c(int a)
|
|
||||||
{
|
|
||||||
if ((a+0x8000U) & ~0xFFFF) return (a>>31) ^ 0x7FFF;
|
|
||||||
else return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clip a signed 64-bit integer value into the -2147483648,2147483647 range.
|
|
||||||
* @param a value to clip
|
|
||||||
* @return clipped value
|
|
||||||
*/
|
|
||||||
static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a)
|
|
||||||
{
|
|
||||||
if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF);
|
|
||||||
else return (int32_t)a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clip a signed integer into the -(2^p),(2^p-1) range.
|
|
||||||
* @param a value to clip
|
|
||||||
* @param p bit position to clip at
|
|
||||||
* @return clipped value
|
|
||||||
*/
|
|
||||||
static av_always_inline av_const int av_clip_intp2_c(int a, int p)
|
|
||||||
{
|
|
||||||
if (((unsigned)a + (1 << p)) & ~((2 << p) - 1))
|
|
||||||
return (a >> 31) ^ ((1 << p) - 1);
|
|
||||||
else
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clip a signed integer to an unsigned power of two range.
|
|
||||||
* @param a value to clip
|
|
||||||
* @param p bit position to clip at
|
|
||||||
* @return clipped value
|
|
||||||
*/
|
|
||||||
static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p)
|
|
||||||
{
|
|
||||||
if (a & ~((1<<p) - 1)) return (~a) >> 31 & ((1<<p) - 1);
|
|
||||||
else return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear high bits from an unsigned integer starting with specific bit position
|
|
||||||
* @param a value to clip
|
|
||||||
* @param p bit position to clip at
|
|
||||||
* @return clipped value
|
|
||||||
*/
|
|
||||||
static av_always_inline av_const unsigned av_mod_uintp2_c(unsigned a, unsigned p)
|
|
||||||
{
|
|
||||||
return a & ((1U << p) - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add two signed 32-bit values with saturation.
|
|
||||||
*
|
|
||||||
* @param a one value
|
|
||||||
* @param b another value
|
|
||||||
* @return sum with signed saturation
|
|
||||||
*/
|
|
||||||
static av_always_inline int av_sat_add32_c(int a, int b)
|
|
||||||
{
|
|
||||||
return av_clipl_int32((int64_t)a + b);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a doubled value to another value with saturation at both stages.
|
|
||||||
*
|
|
||||||
* @param a first value
|
|
||||||
* @param b value doubled and added to a
|
|
||||||
* @return sum sat(a + sat(2*b)) with signed saturation
|
|
||||||
*/
|
|
||||||
static av_always_inline int av_sat_dadd32_c(int a, int b)
|
|
||||||
{
|
|
||||||
return av_sat_add32(a, av_sat_add32(b, b));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Subtract two signed 32-bit values with saturation.
|
|
||||||
*
|
|
||||||
* @param a one value
|
|
||||||
* @param b another value
|
|
||||||
* @return difference with signed saturation
|
|
||||||
*/
|
|
||||||
static av_always_inline int av_sat_sub32_c(int a, int b)
|
|
||||||
{
|
|
||||||
return av_clipl_int32((int64_t)a - b);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Subtract a doubled value from another value with saturation at both stages.
|
|
||||||
*
|
|
||||||
* @param a first value
|
|
||||||
* @param b value doubled and subtracted from a
|
|
||||||
* @return difference sat(a - sat(2*b)) with signed saturation
|
|
||||||
*/
|
|
||||||
static av_always_inline int av_sat_dsub32_c(int a, int b)
|
|
||||||
{
|
|
||||||
return av_sat_sub32(a, av_sat_add32(b, b));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add two signed 64-bit values with saturation.
|
|
||||||
*
|
|
||||||
* @param a one value
|
|
||||||
* @param b another value
|
|
||||||
* @return sum with signed saturation
|
|
||||||
*/
|
|
||||||
static av_always_inline int64_t av_sat_add64_c(int64_t a, int64_t b) {
|
|
||||||
#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5,1)) || AV_HAS_BUILTIN(__builtin_add_overflow)
|
|
||||||
int64_t tmp;
|
|
||||||
return !__builtin_add_overflow(a, b, &tmp) ? tmp : (tmp < 0 ? INT64_MAX : INT64_MIN);
|
|
||||||
#else
|
|
||||||
if (b >= 0 && a >= INT64_MAX - b)
|
|
||||||
return INT64_MAX;
|
|
||||||
if (b <= 0 && a <= INT64_MIN - b)
|
|
||||||
return INT64_MIN;
|
|
||||||
return a + b;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Subtract two signed 64-bit values with saturation.
|
|
||||||
*
|
|
||||||
* @param a one value
|
|
||||||
* @param b another value
|
|
||||||
* @return difference with signed saturation
|
|
||||||
*/
|
|
||||||
static av_always_inline int64_t av_sat_sub64_c(int64_t a, int64_t b) {
|
|
||||||
#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5,1)) || AV_HAS_BUILTIN(__builtin_sub_overflow)
|
|
||||||
int64_t tmp;
|
|
||||||
return !__builtin_sub_overflow(a, b, &tmp) ? tmp : (tmp < 0 ? INT64_MAX : INT64_MIN);
|
|
||||||
#else
|
|
||||||
if (b <= 0 && a >= INT64_MAX + b)
|
|
||||||
return INT64_MAX;
|
|
||||||
if (b >= 0 && a <= INT64_MIN + b)
|
|
||||||
return INT64_MIN;
|
|
||||||
return a - b;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clip a float value into the amin-amax range.
|
|
||||||
* @param a value to clip
|
|
||||||
* @param amin minimum value of the clip range
|
|
||||||
* @param amax maximum value of the clip range
|
|
||||||
* @return clipped value
|
|
||||||
*/
|
|
||||||
static av_always_inline av_const float av_clipf_c(float a, float amin, float amax)
|
|
||||||
{
|
|
||||||
#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
|
|
||||||
if (amin > amax) abort();
|
|
||||||
#endif
|
|
||||||
if (a < amin) return amin;
|
|
||||||
else if (a > amax) return amax;
|
|
||||||
else return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clip a double value into the amin-amax range.
|
|
||||||
* @param a value to clip
|
|
||||||
* @param amin minimum value of the clip range
|
|
||||||
* @param amax maximum value of the clip range
|
|
||||||
* @return clipped value
|
|
||||||
*/
|
|
||||||
static av_always_inline av_const double av_clipd_c(double a, double amin, double amax)
|
|
||||||
{
|
|
||||||
#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
|
|
||||||
if (amin > amax) abort();
|
|
||||||
#endif
|
|
||||||
if (a < amin) return amin;
|
|
||||||
else if (a > amax) return amax;
|
|
||||||
else return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Compute ceil(log2(x)).
|
|
||||||
* @param x value used to compute ceil(log2(x))
|
|
||||||
* @return computed ceiling of log2(x)
|
|
||||||
*/
|
|
||||||
static av_always_inline av_const int av_ceil_log2_c(int x)
|
|
||||||
{
|
|
||||||
return av_log2((x - 1U) << 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Count number of bits set to one in x
|
|
||||||
* @param x value to count bits of
|
|
||||||
* @return the number of bits set to one in x
|
|
||||||
*/
|
|
||||||
static av_always_inline av_const int av_popcount_c(uint32_t x)
|
|
||||||
{
|
|
||||||
x -= (x >> 1) & 0x55555555;
|
|
||||||
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
|
|
||||||
x = (x + (x >> 4)) & 0x0F0F0F0F;
|
|
||||||
x += x >> 8;
|
|
||||||
return (x + (x >> 16)) & 0x3F;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Count number of bits set to one in x
|
|
||||||
* @param x value to count bits of
|
|
||||||
* @return the number of bits set to one in x
|
|
||||||
*/
|
|
||||||
static av_always_inline av_const int av_popcount64_c(uint64_t x)
|
|
||||||
{
|
|
||||||
return av_popcount((uint32_t)x) + av_popcount((uint32_t)(x >> 32));
|
|
||||||
}
|
|
||||||
|
|
||||||
static av_always_inline av_const int av_parity_c(uint32_t v)
|
|
||||||
{
|
|
||||||
return av_popcount(v) & 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
|
|
||||||
#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
|
|
||||||
*
|
|
||||||
* @param val Output value, must be an lvalue of type uint32_t.
|
|
||||||
* @param GET_BYTE Expression reading one byte from the input.
|
|
||||||
* Evaluated up to 7 times (4 for the currently
|
|
||||||
* assigned Unicode range). With a memory buffer
|
|
||||||
* input, this could be *ptr++, or if you want to make sure
|
|
||||||
* that *ptr stops at the end of a NULL terminated string then
|
|
||||||
* *ptr ? *ptr++ : 0
|
|
||||||
* @param ERROR Expression to be evaluated on invalid input,
|
|
||||||
* typically a goto statement.
|
|
||||||
*
|
|
||||||
* @warning ERROR should not contain a loop control statement which
|
|
||||||
* could interact with the internal while loop, and should force an
|
|
||||||
* exit from the macro code (e.g. through a goto or a return) in order
|
|
||||||
* to prevent undefined results.
|
|
||||||
*/
|
|
||||||
#define GET_UTF8(val, GET_BYTE, ERROR)\
|
|
||||||
val= (GET_BYTE);\
|
|
||||||
{\
|
|
||||||
uint32_t top = (val & 128) >> 1;\
|
|
||||||
if ((val & 0xc0) == 0x80 || val >= 0xFE)\
|
|
||||||
{ERROR}\
|
|
||||||
while (val & top) {\
|
|
||||||
unsigned int tmp = (GET_BYTE) - 128;\
|
|
||||||
if(tmp>>6)\
|
|
||||||
{ERROR}\
|
|
||||||
val= (val<<6) + tmp;\
|
|
||||||
top <<= 5;\
|
|
||||||
}\
|
|
||||||
val &= (top << 1) - 1;\
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form.
|
|
||||||
*
|
|
||||||
* @param val Output value, must be an lvalue of type uint32_t.
|
|
||||||
* @param GET_16BIT Expression returning two bytes of UTF-16 data converted
|
|
||||||
* to native byte order. Evaluated one or two times.
|
|
||||||
* @param ERROR Expression to be evaluated on invalid input,
|
|
||||||
* typically a goto statement.
|
|
||||||
*/
|
|
||||||
#define GET_UTF16(val, GET_16BIT, ERROR)\
|
|
||||||
val = (GET_16BIT);\
|
|
||||||
{\
|
|
||||||
unsigned int hi = val - 0xD800;\
|
|
||||||
if (hi < 0x800) {\
|
|
||||||
val = (GET_16BIT) - 0xDC00;\
|
|
||||||
if (val > 0x3FFU || hi > 0x3FFU)\
|
|
||||||
{ERROR}\
|
|
||||||
val += (hi<<10) + 0x10000;\
|
|
||||||
}\
|
|
||||||
}\
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @def PUT_UTF8(val, tmp, PUT_BYTE)
|
|
||||||
* Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long).
|
|
||||||
* @param val is an input-only argument and should be of type uint32_t. It holds
|
|
||||||
* a UCS-4 encoded Unicode character that is to be converted to UTF-8. If
|
|
||||||
* val is given as a function it is executed only once.
|
|
||||||
* @param tmp is a temporary variable and should be of type uint8_t. It
|
|
||||||
* represents an intermediate value during conversion that is to be
|
|
||||||
* output by PUT_BYTE.
|
|
||||||
* @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination.
|
|
||||||
* It could be a function or a statement, and uses tmp as the input byte.
|
|
||||||
* For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be
|
|
||||||
* executed up to 4 times for values in the valid UTF-8 range and up to
|
|
||||||
* 7 times in the general case, depending on the length of the converted
|
|
||||||
* Unicode character.
|
|
||||||
*/
|
|
||||||
#define PUT_UTF8(val, tmp, PUT_BYTE)\
|
|
||||||
{\
|
|
||||||
int bytes, shift;\
|
|
||||||
uint32_t in = val;\
|
|
||||||
if (in < 0x80) {\
|
|
||||||
tmp = in;\
|
|
||||||
PUT_BYTE\
|
|
||||||
} else {\
|
|
||||||
bytes = (av_log2(in) + 4) / 5;\
|
|
||||||
shift = (bytes - 1) * 6;\
|
|
||||||
tmp = (256 - (256 >> bytes)) | (in >> shift);\
|
|
||||||
PUT_BYTE\
|
|
||||||
while (shift >= 6) {\
|
|
||||||
shift -= 6;\
|
|
||||||
tmp = 0x80 | ((in >> shift) & 0x3f);\
|
|
||||||
PUT_BYTE\
|
|
||||||
}\
|
|
||||||
}\
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @def PUT_UTF16(val, tmp, PUT_16BIT)
|
|
||||||
* Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes).
|
|
||||||
* @param val is an input-only argument and should be of type uint32_t. It holds
|
|
||||||
* a UCS-4 encoded Unicode character that is to be converted to UTF-16. If
|
|
||||||
* val is given as a function it is executed only once.
|
|
||||||
* @param tmp is a temporary variable and should be of type uint16_t. It
|
|
||||||
* represents an intermediate value during conversion that is to be
|
|
||||||
* output by PUT_16BIT.
|
|
||||||
* @param PUT_16BIT writes the converted UTF-16 data to any proper destination
|
|
||||||
* in desired endianness. It could be a function or a statement, and uses tmp
|
|
||||||
* as the input byte. For example, PUT_BYTE could be "*output++ = tmp;"
|
|
||||||
* PUT_BYTE will be executed 1 or 2 times depending on input character.
|
|
||||||
*/
|
|
||||||
#define PUT_UTF16(val, tmp, PUT_16BIT)\
|
|
||||||
{\
|
|
||||||
uint32_t in = val;\
|
|
||||||
if (in < 0x10000) {\
|
|
||||||
tmp = in;\
|
|
||||||
PUT_16BIT\
|
|
||||||
} else {\
|
|
||||||
tmp = 0xD800 | ((in - 0x10000) >> 10);\
|
|
||||||
PUT_16BIT\
|
|
||||||
tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\
|
|
||||||
PUT_16BIT\
|
|
||||||
}\
|
|
||||||
}\
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "mem.h"
|
|
||||||
|
|
||||||
#ifdef HAVE_AV_CONFIG_H
|
|
||||||
# include "internal.h"
|
|
||||||
#endif /* HAVE_AV_CONFIG_H */
|
|
||||||
|
|
||||||
#endif /* AVUTIL_COMMON_H */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The following definitions are outside the multiple inclusion guard
|
|
||||||
* to ensure they are immediately available in intmath.h.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef av_ceil_log2
|
|
||||||
# define av_ceil_log2 av_ceil_log2_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_clip
|
|
||||||
# define av_clip av_clip_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_clip64
|
|
||||||
# define av_clip64 av_clip64_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_clip_uint8
|
|
||||||
# define av_clip_uint8 av_clip_uint8_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_clip_int8
|
|
||||||
# define av_clip_int8 av_clip_int8_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_clip_uint16
|
|
||||||
# define av_clip_uint16 av_clip_uint16_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_clip_int16
|
|
||||||
# define av_clip_int16 av_clip_int16_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_clipl_int32
|
|
||||||
# define av_clipl_int32 av_clipl_int32_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_clip_intp2
|
|
||||||
# define av_clip_intp2 av_clip_intp2_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_clip_uintp2
|
|
||||||
# define av_clip_uintp2 av_clip_uintp2_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_mod_uintp2
|
|
||||||
# define av_mod_uintp2 av_mod_uintp2_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_sat_add32
|
|
||||||
# define av_sat_add32 av_sat_add32_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_sat_dadd32
|
|
||||||
# define av_sat_dadd32 av_sat_dadd32_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_sat_sub32
|
|
||||||
# define av_sat_sub32 av_sat_sub32_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_sat_dsub32
|
|
||||||
# define av_sat_dsub32 av_sat_dsub32_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_sat_add64
|
|
||||||
# define av_sat_add64 av_sat_add64_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_sat_sub64
|
|
||||||
# define av_sat_sub64 av_sat_sub64_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_clipf
|
|
||||||
# define av_clipf av_clipf_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_clipd
|
|
||||||
# define av_clipd av_clipd_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_popcount
|
|
||||||
# define av_popcount av_popcount_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_popcount64
|
|
||||||
# define av_popcount64 av_popcount64_c
|
|
||||||
#endif
|
|
||||||
#ifndef av_parity
|
|
||||||
# define av_parity av_parity_c
|
|
||||||
#endif
|
|
||||||
@@ -1,130 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 2001, 2002 Fabrice Bellard
|
|
||||||
*
|
|
||||||
* 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_CPU_H
|
|
||||||
#define AVUTIL_CPU_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
#include "attributes.h"
|
|
||||||
|
|
||||||
#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */
|
|
||||||
|
|
||||||
/* lower 16 bits - CPU features */
|
|
||||||
#define AV_CPU_FLAG_MMX 0x0001 ///< standard MMX
|
|
||||||
#define AV_CPU_FLAG_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext
|
|
||||||
#define AV_CPU_FLAG_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext
|
|
||||||
#define AV_CPU_FLAG_3DNOW 0x0004 ///< AMD 3DNOW
|
|
||||||
#define AV_CPU_FLAG_SSE 0x0008 ///< SSE functions
|
|
||||||
#define AV_CPU_FLAG_SSE2 0x0010 ///< PIV SSE2 functions
|
|
||||||
#define AV_CPU_FLAG_SSE2SLOW 0x40000000 ///< SSE2 supported, but usually not faster
|
|
||||||
///< than regular MMX/SSE (e.g. Core1)
|
|
||||||
#define AV_CPU_FLAG_3DNOWEXT 0x0020 ///< AMD 3DNowExt
|
|
||||||
#define AV_CPU_FLAG_SSE3 0x0040 ///< Prescott SSE3 functions
|
|
||||||
#define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster
|
|
||||||
///< than regular MMX/SSE (e.g. Core1)
|
|
||||||
#define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions
|
|
||||||
#define AV_CPU_FLAG_SSSE3SLOW 0x4000000 ///< SSSE3 supported, but usually not faster
|
|
||||||
#define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower
|
|
||||||
#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions
|
|
||||||
#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions
|
|
||||||
#define AV_CPU_FLAG_AESNI 0x80000 ///< Advanced Encryption Standard functions
|
|
||||||
#define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used
|
|
||||||
#define AV_CPU_FLAG_AVXSLOW 0x8000000 ///< AVX supported, but slow when using YMM registers (e.g. Bulldozer)
|
|
||||||
#define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions
|
|
||||||
#define AV_CPU_FLAG_FMA4 0x0800 ///< Bulldozer FMA4 functions
|
|
||||||
#define AV_CPU_FLAG_CMOV 0x1000 ///< supports cmov instruction
|
|
||||||
#define AV_CPU_FLAG_AVX2 0x8000 ///< AVX2 functions: requires OS support even if YMM registers aren't used
|
|
||||||
#define AV_CPU_FLAG_FMA3 0x10000 ///< Haswell FMA3 functions
|
|
||||||
#define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1
|
|
||||||
#define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2
|
|
||||||
#define AV_CPU_FLAG_AVX512 0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM registers aren't used
|
|
||||||
|
|
||||||
#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard
|
|
||||||
#define AV_CPU_FLAG_VSX 0x0002 ///< ISA 2.06
|
|
||||||
#define AV_CPU_FLAG_POWER8 0x0004 ///< ISA 2.07
|
|
||||||
|
|
||||||
#define AV_CPU_FLAG_ARMV5TE (1 << 0)
|
|
||||||
#define AV_CPU_FLAG_ARMV6 (1 << 1)
|
|
||||||
#define AV_CPU_FLAG_ARMV6T2 (1 << 2)
|
|
||||||
#define AV_CPU_FLAG_VFP (1 << 3)
|
|
||||||
#define AV_CPU_FLAG_VFPV3 (1 << 4)
|
|
||||||
#define AV_CPU_FLAG_NEON (1 << 5)
|
|
||||||
#define AV_CPU_FLAG_ARMV8 (1 << 6)
|
|
||||||
#define AV_CPU_FLAG_VFP_VM (1 << 7) ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations
|
|
||||||
#define AV_CPU_FLAG_SETEND (1 <<16)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the flags which specify extensions supported by the CPU.
|
|
||||||
* The returned value is affected by av_force_cpu_flags() if that was used
|
|
||||||
* before. So av_get_cpu_flags() can easily be used in an application to
|
|
||||||
* detect the enabled cpu flags.
|
|
||||||
*/
|
|
||||||
int av_get_cpu_flags(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Disables cpu detection and forces the specified flags.
|
|
||||||
* -1 is a special case that disables forcing of specific flags.
|
|
||||||
*/
|
|
||||||
void av_force_cpu_flags(int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set a mask on flags returned by av_get_cpu_flags().
|
|
||||||
* This function is mainly useful for testing.
|
|
||||||
* Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible
|
|
||||||
*/
|
|
||||||
attribute_deprecated void av_set_cpu_flags_mask(int mask);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse CPU flags from a string.
|
|
||||||
*
|
|
||||||
* The returned flags contain the specified flags as well as related unspecified flags.
|
|
||||||
*
|
|
||||||
* This function exists only for compatibility with libav.
|
|
||||||
* Please use av_parse_cpu_caps() when possible.
|
|
||||||
* @return a combination of AV_CPU_* flags, negative on error.
|
|
||||||
*/
|
|
||||||
attribute_deprecated
|
|
||||||
int av_parse_cpu_flags(const char *s);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse CPU caps from a string and update the given AV_CPU_* flags based on that.
|
|
||||||
*
|
|
||||||
* @return negative on error.
|
|
||||||
*/
|
|
||||||
int av_parse_cpu_caps(unsigned *flags, const char *s);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the number of logical CPU cores present.
|
|
||||||
*/
|
|
||||||
int av_cpu_count(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the maximum data alignment that may be required by FFmpeg.
|
|
||||||
*
|
|
||||||
* Note that this is affected by the build configuration and the CPU flags mask,
|
|
||||||
* so e.g. if the CPU supports AVX, but libavutil has been built with
|
|
||||||
* --disable-avx or the AV_CPU_FLAG_AVX flag has been disabled through
|
|
||||||
* av_set_cpu_flags_mask(), then this function will behave as if AVX is not
|
|
||||||
* present.
|
|
||||||
*/
|
|
||||||
size_t av_cpu_max_align(void);
|
|
||||||
|
|
||||||
#endif /* AVUTIL_CPU_H */
|
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
/*
|
|
||||||
* copyright (c) 2006 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavu_crc32
|
|
||||||
* Public header for CRC hash function implementation.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_CRC_H
|
|
||||||
#define AVUTIL_CRC_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include "attributes.h"
|
|
||||||
#include "avutilVersion.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_crc32 CRC
|
|
||||||
* @ingroup lavu_hash
|
|
||||||
* CRC (Cyclic Redundancy Check) hash function implementation.
|
|
||||||
*
|
|
||||||
* This module supports numerous CRC polynomials, in addition to the most
|
|
||||||
* widely used CRC-32-IEEE. See @ref AVCRCId for a list of available
|
|
||||||
* polynomials.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef uint32_t AVCRC;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
AV_CRC_8_ATM,
|
|
||||||
AV_CRC_16_ANSI,
|
|
||||||
AV_CRC_16_CCITT,
|
|
||||||
AV_CRC_32_IEEE,
|
|
||||||
AV_CRC_32_IEEE_LE, /*< reversed bitorder version of AV_CRC_32_IEEE */
|
|
||||||
AV_CRC_16_ANSI_LE, /*< reversed bitorder version of AV_CRC_16_ANSI */
|
|
||||||
AV_CRC_24_IEEE,
|
|
||||||
AV_CRC_8_EBU,
|
|
||||||
AV_CRC_MAX, /*< Not part of public API! Do not use outside libavutil. */
|
|
||||||
}AVCRCId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize a CRC table.
|
|
||||||
* @param ctx must be an array of size sizeof(AVCRC)*257 or sizeof(AVCRC)*1024
|
|
||||||
* @param le If 1, the lowest bit represents the coefficient for the highest
|
|
||||||
* exponent of the corresponding polynomial (both for poly and
|
|
||||||
* actual CRC).
|
|
||||||
* If 0, you must swap the CRC parameter and the result of av_crc
|
|
||||||
* if you need the standard representation (can be simplified in
|
|
||||||
* most cases to e.g. bswap16):
|
|
||||||
* av_bswap32(crc << (32-bits))
|
|
||||||
* @param bits number of bits for the CRC
|
|
||||||
* @param poly generator polynomial without the x**bits coefficient, in the
|
|
||||||
* representation as specified by le
|
|
||||||
* @param ctx_size size of ctx in bytes
|
|
||||||
* @return <0 on failure
|
|
||||||
*/
|
|
||||||
int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get an initialized standard CRC table.
|
|
||||||
* @param crc_id ID of a standard CRC
|
|
||||||
* @return a pointer to the CRC table or NULL on failure
|
|
||||||
*/
|
|
||||||
const AVCRC *av_crc_get_table(AVCRCId crc_id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate the CRC of a block.
|
|
||||||
* @param crc CRC of previous blocks if any or initial value for CRC
|
|
||||||
* @return CRC updated with the data from the given block
|
|
||||||
*
|
|
||||||
* @see av_crc_init() "le" parameter
|
|
||||||
*/
|
|
||||||
uint32_t av_crc(const AVCRC *ctx, uint32_t crc,
|
|
||||||
const uint8_t *buffer, size_t length) av_pure;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_CRC_H */
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
/*
|
|
||||||
* DES encryption/decryption
|
|
||||||
* Copyright (c) 2007 Reimar Doeffinger
|
|
||||||
*
|
|
||||||
* 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_DES_H
|
|
||||||
#define AVUTIL_DES_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_des DES
|
|
||||||
* @ingroup lavu_crypto
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct AVDES {
|
|
||||||
uint64_t round_keys[3][16];
|
|
||||||
int triple_des;
|
|
||||||
} AVDES;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVDES context.
|
|
||||||
*/
|
|
||||||
AVDES *av_des_alloc(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Initializes an AVDES context.
|
|
||||||
*
|
|
||||||
* @param key_bits must be 64 or 192
|
|
||||||
* @param decrypt 0 for encryption/CBC-MAC, 1 for decryption
|
|
||||||
* @return zero on success, negative value otherwise
|
|
||||||
*/
|
|
||||||
int av_des_init(struct AVDES *d, const uint8_t *key, int key_bits, int decrypt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Encrypts / decrypts using the DES algorithm.
|
|
||||||
*
|
|
||||||
* @param count number of 8 byte blocks
|
|
||||||
* @param dst destination array, can be equal to src, must be 8-byte aligned
|
|
||||||
* @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL
|
|
||||||
* @param iv initialization vector for CBC mode, if NULL then ECB will be used,
|
|
||||||
* must be 8-byte aligned
|
|
||||||
* @param decrypt 0 for encryption, 1 for decryption
|
|
||||||
*/
|
|
||||||
void av_des_crypt(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Calculates CBC-MAC using the DES algorithm.
|
|
||||||
*
|
|
||||||
* @param count number of 8 byte blocks
|
|
||||||
* @param dst destination array, can be equal to src, must be 8-byte aligned
|
|
||||||
* @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL
|
|
||||||
*/
|
|
||||||
void av_des_mac(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_DES_H */
|
|
||||||
@@ -1,200 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* Public dictionary API.
|
|
||||||
* @deprecated
|
|
||||||
* AVDictionary is provided for compatibility with libav. It is both in
|
|
||||||
* implementation as well as API inefficient. It does not scale and is
|
|
||||||
* extremely slow with large dictionaries.
|
|
||||||
* It is recommended that new code uses our tree container from tree.c/h
|
|
||||||
* where applicable, which uses AVL trees to achieve O(log n) performance.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_DICT_H
|
|
||||||
#define AVUTIL_DICT_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "avutilVersion.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavu_dict AVDictionary
|
|
||||||
* @ingroup lavu_data
|
|
||||||
*
|
|
||||||
* @brief Simple key:value store
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
* Dictionaries are used for storing key:value pairs. To create
|
|
||||||
* an AVDictionary, simply pass an address of a NULL pointer to
|
|
||||||
* av_dict_set(). NULL can be used as an empty dictionary wherever
|
|
||||||
* a pointer to an AVDictionary is required.
|
|
||||||
* Use av_dict_get() to retrieve an entry or iterate over all
|
|
||||||
* entries and finally av_dict_free() to free the dictionary
|
|
||||||
* and all its contents.
|
|
||||||
*
|
|
||||||
@code
|
|
||||||
AVDictionary *d = NULL; // "create" an empty dictionary
|
|
||||||
AVDictionaryEntry *t = NULL;
|
|
||||||
|
|
||||||
av_dict_set(&d, "foo", "bar", 0); // add an entry
|
|
||||||
|
|
||||||
char *k = av_strdup("key"); // if your strings are already allocated,
|
|
||||||
char *v = av_strdup("value"); // you can avoid copying them like this
|
|
||||||
av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL);
|
|
||||||
|
|
||||||
while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) {
|
|
||||||
<....> // iterate over all entries in d
|
|
||||||
}
|
|
||||||
av_dict_free(&d);
|
|
||||||
@endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define AV_DICT_MATCH_CASE 1 /**< Only get an entry with exact-case key match. Only relevant in av_dict_get(). */
|
|
||||||
#define AV_DICT_IGNORE_SUFFIX 2 /**< Return first entry in a dictionary whose first part corresponds to the search key,
|
|
||||||
ignoring the suffix of the found key string. Only relevant in av_dict_get(). */
|
|
||||||
#define AV_DICT_DONT_STRDUP_KEY 4 /**< Take ownership of a key that's been
|
|
||||||
allocated with av_malloc() or another memory allocation function. */
|
|
||||||
#define AV_DICT_DONT_STRDUP_VAL 8 /**< Take ownership of a value that's been
|
|
||||||
allocated with av_malloc() or another memory allocation function. */
|
|
||||||
#define AV_DICT_DONT_OVERWRITE 16 ///< Don't overwrite existing entries.
|
|
||||||
#define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no
|
|
||||||
delimiter is added, the strings are simply concatenated. */
|
|
||||||
#define AV_DICT_MULTIKEY 64 /**< Allow to store several equal keys in the dictionary */
|
|
||||||
|
|
||||||
typedef struct AVDictionaryEntry {
|
|
||||||
char *key;
|
|
||||||
char *value;
|
|
||||||
} AVDictionaryEntry;
|
|
||||||
|
|
||||||
typedef struct AVDictionary AVDictionary;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a dictionary entry with matching key.
|
|
||||||
*
|
|
||||||
* The returned entry key or value must not be changed, or it will
|
|
||||||
* cause undefined behavior.
|
|
||||||
*
|
|
||||||
* To iterate through all the dictionary entries, you can set the matching key
|
|
||||||
* to the null string "" and set the AV_DICT_IGNORE_SUFFIX flag.
|
|
||||||
*
|
|
||||||
* @param prev Set to the previous matching element to find the next.
|
|
||||||
* If set to NULL the first matching element is returned.
|
|
||||||
* @param key matching key
|
|
||||||
* @param flags a collection of AV_DICT_* flags controlling how the entry is retrieved
|
|
||||||
* @return found entry or NULL in case no matching entry was found in the dictionary
|
|
||||||
*/
|
|
||||||
AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key,
|
|
||||||
const AVDictionaryEntry *prev, int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get number of entries in dictionary.
|
|
||||||
*
|
|
||||||
* @param m dictionary
|
|
||||||
* @return number of entries in dictionary
|
|
||||||
*/
|
|
||||||
int av_dict_count(const AVDictionary *m);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the given entry in *pm, overwriting an existing entry.
|
|
||||||
*
|
|
||||||
* Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set,
|
|
||||||
* these arguments will be freed on error.
|
|
||||||
*
|
|
||||||
* Warning: Adding a new entry to a dictionary invalidates all existing entries
|
|
||||||
* previously returned with av_dict_get.
|
|
||||||
*
|
|
||||||
* @param pm pointer to a pointer to a dictionary struct. If *pm is NULL
|
|
||||||
* a dictionary struct is allocated and put in *pm.
|
|
||||||
* @param key entry key to add to *pm (will either be av_strduped or added as a new key depending on flags)
|
|
||||||
* @param value entry value to add to *pm (will be av_strduped or added as a new key depending on flags).
|
|
||||||
* Passing a NULL value will cause an existing entry to be deleted.
|
|
||||||
* @return >= 0 on success otherwise an error code <0
|
|
||||||
*/
|
|
||||||
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convenience wrapper for av_dict_set that converts the value to a string
|
|
||||||
* and stores it.
|
|
||||||
*
|
|
||||||
* Note: If AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error.
|
|
||||||
*/
|
|
||||||
int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse the key/value pairs list and add the parsed entries to a dictionary.
|
|
||||||
*
|
|
||||||
* In case of failure, all the successfully set entries are stored in
|
|
||||||
* *pm. You may need to manually free the created dictionary.
|
|
||||||
*
|
|
||||||
* @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
|
|
||||||
* @param flags flags to use when adding to dictionary.
|
|
||||||
* AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL
|
|
||||||
* are ignored since the key/value tokens will always
|
|
||||||
* be duplicated.
|
|
||||||
* @return 0 on success, negative AVERROR code on failure
|
|
||||||
*/
|
|
||||||
int av_dict_parse_string(AVDictionary **pm, const char *str,
|
|
||||||
const char *key_val_sep, const char *pairs_sep,
|
|
||||||
int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy entries from one AVDictionary struct into another.
|
|
||||||
* @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL,
|
|
||||||
* this function will allocate a struct for you and put it in *dst
|
|
||||||
* @param src pointer to source AVDictionary struct
|
|
||||||
* @param flags flags to use when setting entries in *dst
|
|
||||||
* @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag
|
|
||||||
* @return 0 on success, negative AVERROR code on failure. If dst was allocated
|
|
||||||
* by this function, callers should free the associated memory.
|
|
||||||
*/
|
|
||||||
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free all the memory allocated for an AVDictionary struct
|
|
||||||
* and all keys and values.
|
|
||||||
*/
|
|
||||||
void av_dict_free(AVDictionary **m);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get dictionary entries as a string.
|
|
||||||
*
|
|
||||||
* Create a string containing dictionary's entries.
|
|
||||||
* Such string may be passed back to av_dict_parse_string().
|
|
||||||
* @note String is escaped with backslashes ('\').
|
|
||||||
*
|
|
||||||
* @param[in] m dictionary
|
|
||||||
* @param[out] buffer Pointer to buffer that will be allocated with string containg entries.
|
|
||||||
* Buffer must be freed by the caller when is no longer needed.
|
|
||||||
* @param[in] key_val_sep character used to separate key from value
|
|
||||||
* @param[in] pairs_sep character used to separate two pairs from each other
|
|
||||||
* @return >= 0 on success, negative on error
|
|
||||||
* @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same.
|
|
||||||
*/
|
|
||||||
int av_dict_get_string(const AVDictionary *m, char **buffer,
|
|
||||||
const char key_val_sep, const char pairs_sep);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_DICT_H */
|
|
||||||
@@ -1,114 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2014 Vittorio Giovara <vittorio.giovara@gmail.com>
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* Display matrix
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_DISPLAY_H
|
|
||||||
#define AVUTIL_DISPLAY_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavu_video
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @defgroup lavu_video_display Display transformation matrix functions
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavu_video_display
|
|
||||||
* The display transformation matrix specifies an affine transformation that
|
|
||||||
* should be applied to video frames for correct presentation. It is compatible
|
|
||||||
* with the matrices stored in the ISO/IEC 14496-12 container format.
|
|
||||||
*
|
|
||||||
* The data is a 3x3 matrix represented as a 9-element array:
|
|
||||||
*
|
|
||||||
* @code{.unparsed}
|
|
||||||
* | a b u |
|
|
||||||
* (a, b, u, c, d, v, x, y, w) -> | c d v |
|
|
||||||
* | x y w |
|
|
||||||
* @endcode
|
|
||||||
*
|
|
||||||
* All numbers are stored in native endianness, as 16.16 fixed-point values,
|
|
||||||
* except for u, v and w, which are stored as 2.30 fixed-point values.
|
|
||||||
*
|
|
||||||
* The transformation maps a point (p, q) in the source (pre-transformation)
|
|
||||||
* frame to the point (p', q') in the destination (post-transformation) frame as
|
|
||||||
* follows:
|
|
||||||
*
|
|
||||||
* @code{.unparsed}
|
|
||||||
* | a b u |
|
|
||||||
* (p, q, 1) . | c d v | = z * (p', q', 1)
|
|
||||||
* | x y w |
|
|
||||||
* @endcode
|
|
||||||
*
|
|
||||||
* The transformation can also be more explicitly written in components as
|
|
||||||
* follows:
|
|
||||||
*
|
|
||||||
* @code{.unparsed}
|
|
||||||
* p' = (a * p + c * q + x) / z;
|
|
||||||
* q' = (b * p + d * q + y) / z;
|
|
||||||
* z = u * p + v * q + w
|
|
||||||
* @endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extract the rotation component of the transformation matrix.
|
|
||||||
*
|
|
||||||
* @param matrix the transformation matrix
|
|
||||||
* @return the angle (in degrees) by which the transformation rotates the frame
|
|
||||||
* counterclockwise. The angle will be in range [-180.0, 180.0],
|
|
||||||
* or NaN if the matrix is singular.
|
|
||||||
*
|
|
||||||
* @note floating point numbers are inherently inexact, so callers are
|
|
||||||
* recommended to round the return value to nearest integer before use.
|
|
||||||
*/
|
|
||||||
double av_display_rotation_get(const int32_t matrix[9]);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize a transformation matrix describing a pure counterclockwise
|
|
||||||
* rotation by the specified angle (in degrees).
|
|
||||||
*
|
|
||||||
* @param matrix an allocated transformation matrix (will be fully overwritten
|
|
||||||
* by this function)
|
|
||||||
* @param angle rotation angle in degrees.
|
|
||||||
*/
|
|
||||||
void av_display_rotation_set(int32_t matrix[9], double angle);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Flip the input matrix horizontally and/or vertically.
|
|
||||||
*
|
|
||||||
* @param matrix an allocated transformation matrix
|
|
||||||
* @param hflip whether the matrix should be flipped horizontally
|
|
||||||
* @param vflip whether the matrix should be flipped vertically
|
|
||||||
*/
|
|
||||||
void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_DISPLAY_H */
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2020 Vacing Fang <vacingfang@tencent.com>
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* DOVI configuration
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef AVUTIL_DOVI_META_H
|
|
||||||
#define AVUTIL_DOVI_META_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* DOVI configuration
|
|
||||||
* ref: dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2
|
|
||||||
dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2
|
|
||||||
* @code
|
|
||||||
* uint8_t dv_version_major, the major version number that the stream complies with
|
|
||||||
* uint8_t dv_version_minor, the minor version number that the stream complies with
|
|
||||||
* uint8_t dv_profile, the Dolby Vision profile
|
|
||||||
* uint8_t dv_level, the Dolby Vision level
|
|
||||||
* uint8_t rpu_present_flag
|
|
||||||
* uint8_t el_present_flag
|
|
||||||
* uint8_t bl_present_flag
|
|
||||||
* uint8_t dv_bl_signal_compatibility_id
|
|
||||||
* @endcode
|
|
||||||
*
|
|
||||||
* @note The struct must be allocated with av_dovi_alloc() and
|
|
||||||
* its size is not a part of the public ABI.
|
|
||||||
*/
|
|
||||||
typedef struct AVDOVIDecoderConfigurationRecord {
|
|
||||||
uint8_t dv_version_major;
|
|
||||||
uint8_t dv_version_minor;
|
|
||||||
uint8_t dv_profile;
|
|
||||||
uint8_t dv_level;
|
|
||||||
uint8_t rpu_present_flag;
|
|
||||||
uint8_t el_present_flag;
|
|
||||||
uint8_t bl_present_flag;
|
|
||||||
uint8_t dv_bl_signal_compatibility_id;
|
|
||||||
} AVDOVIDecoderConfigurationRecord;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate a AVDOVIDecoderConfigurationRecord structure and initialize its
|
|
||||||
* fields to default values.
|
|
||||||
*
|
|
||||||
* @return the newly allocated struct or NULL on failure
|
|
||||||
*/
|
|
||||||
AVDOVIDecoderConfigurationRecord *av_dovi_alloc(size_t *size);
|
|
||||||
|
|
||||||
#endif /* AVUTIL_DOVI_META_H */
|
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2014 Tim Walker <tdskywalker@gmail.com>
|
|
||||||
*
|
|
||||||
* 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_DOWNMIX_INFO_H
|
|
||||||
#define AVUTIL_DOWNMIX_INFO_H
|
|
||||||
|
|
||||||
#include "frame.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* audio downmix medatata
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavu_audio
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup downmix_info Audio downmix metadata
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Possible downmix types.
|
|
||||||
*/
|
|
||||||
enum AVDownmixType {
|
|
||||||
AV_DOWNMIX_TYPE_UNKNOWN, /**< Not indicated. */
|
|
||||||
AV_DOWNMIX_TYPE_LORO, /**< Lo/Ro 2-channel downmix (Stereo). */
|
|
||||||
AV_DOWNMIX_TYPE_LTRT, /**< Lt/Rt 2-channel downmix, Dolby Surround compatible. */
|
|
||||||
AV_DOWNMIX_TYPE_DPLII, /**< Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible. */
|
|
||||||
AV_DOWNMIX_TYPE_NB /**< Number of downmix types. Not part of ABI. */
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This structure describes optional metadata relevant to a downmix procedure.
|
|
||||||
*
|
|
||||||
* All fields are set by the decoder to the value indicated in the audio
|
|
||||||
* bitstream (if present), or to a "sane" default otherwise.
|
|
||||||
*/
|
|
||||||
typedef struct AVDownmixInfo {
|
|
||||||
/**
|
|
||||||
* Type of downmix preferred by the mastering engineer.
|
|
||||||
*/
|
|
||||||
enum AVDownmixType preferred_downmix_type;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Absolute scale factor representing the nominal level of the center
|
|
||||||
* channel during a regular downmix.
|
|
||||||
*/
|
|
||||||
double center_mix_level;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Absolute scale factor representing the nominal level of the center
|
|
||||||
* channel during an Lt/Rt compatible downmix.
|
|
||||||
*/
|
|
||||||
double center_mix_level_ltrt;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Absolute scale factor representing the nominal level of the surround
|
|
||||||
* channels during a regular downmix.
|
|
||||||
*/
|
|
||||||
double surround_mix_level;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Absolute scale factor representing the nominal level of the surround
|
|
||||||
* channels during an Lt/Rt compatible downmix.
|
|
||||||
*/
|
|
||||||
double surround_mix_level_ltrt;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Absolute scale factor representing the level at which the LFE data is
|
|
||||||
* mixed into L/R channels during downmixing.
|
|
||||||
*/
|
|
||||||
double lfe_mix_level;
|
|
||||||
} AVDownmixInfo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing.
|
|
||||||
*
|
|
||||||
* If the side data is absent, it is created and added to the frame.
|
|
||||||
*
|
|
||||||
* @param frame the frame for which the side data is to be obtained or created
|
|
||||||
*
|
|
||||||
* @return the AVDownmixInfo structure to be edited by the caller, or NULL if
|
|
||||||
* the structure cannot be allocated.
|
|
||||||
*/
|
|
||||||
AVDownmixInfo *av_downmix_info_update_side_data(AVFrame *frame);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_DOWNMIX_INFO_H */
|
|
||||||
@@ -1,205 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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_ENCRYPTION_INFO_H
|
|
||||||
#define AVUTIL_ENCRYPTION_INFO_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
typedef struct AVSubsampleEncryptionInfo {
|
|
||||||
/** The number of bytes that are clear. */
|
|
||||||
unsigned int bytes_of_clear_data;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of bytes that are protected. If using pattern encryption,
|
|
||||||
* the pattern applies to only the protected bytes; if not using pattern
|
|
||||||
* encryption, all these bytes are encrypted.
|
|
||||||
*/
|
|
||||||
unsigned int bytes_of_protected_data;
|
|
||||||
} AVSubsampleEncryptionInfo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This describes encryption info for a packet. This contains frame-specific
|
|
||||||
* info for how to decrypt the packet before passing it to the decoder.
|
|
||||||
*
|
|
||||||
* The size of this struct is not part of the public ABI.
|
|
||||||
*/
|
|
||||||
typedef struct AVEncryptionInfo {
|
|
||||||
/** The fourcc encryption scheme, in big-endian byte order. */
|
|
||||||
uint32_t scheme;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Only used for pattern encryption. This is the number of 16-byte blocks
|
|
||||||
* that are encrypted.
|
|
||||||
*/
|
|
||||||
uint32_t crypt_byte_block;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Only used for pattern encryption. This is the number of 16-byte blocks
|
|
||||||
* that are clear.
|
|
||||||
*/
|
|
||||||
uint32_t skip_byte_block;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The ID of the key used to encrypt the packet. This should always be
|
|
||||||
* 16 bytes long, but may be changed in the future.
|
|
||||||
*/
|
|
||||||
uint8_t *key_id;
|
|
||||||
uint32_t key_id_size;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The initialization vector. This may have been zero-filled to be the
|
|
||||||
* correct block size. This should always be 16 bytes long, but may be
|
|
||||||
* changed in the future.
|
|
||||||
*/
|
|
||||||
uint8_t *iv;
|
|
||||||
uint32_t iv_size;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An array of subsample encryption info specifying how parts of the sample
|
|
||||||
* are encrypted. If there are no subsamples, then the whole sample is
|
|
||||||
* encrypted.
|
|
||||||
*/
|
|
||||||
AVSubsampleEncryptionInfo *subsamples;
|
|
||||||
uint32_t subsample_count;
|
|
||||||
} AVEncryptionInfo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This describes info used to initialize an encryption key system.
|
|
||||||
*
|
|
||||||
* The size of this struct is not part of the public ABI.
|
|
||||||
*/
|
|
||||||
typedef struct AVEncryptionInitInfo {
|
|
||||||
/**
|
|
||||||
* A unique identifier for the key system this is for, can be NULL if it
|
|
||||||
* is not known. This should always be 16 bytes, but may change in the
|
|
||||||
* future.
|
|
||||||
*/
|
|
||||||
uint8_t* system_id;
|
|
||||||
uint32_t system_id_size;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An array of key IDs this initialization data is for. All IDs are the
|
|
||||||
* same length. Can be NULL if there are no known key IDs.
|
|
||||||
*/
|
|
||||||
uint8_t** key_ids;
|
|
||||||
/** The number of key IDs. */
|
|
||||||
uint32_t num_key_ids;
|
|
||||||
/**
|
|
||||||
* The number of bytes in each key ID. This should always be 16, but may
|
|
||||||
* change in the future.
|
|
||||||
*/
|
|
||||||
uint32_t key_id_size;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Key-system specific initialization data. This data is copied directly
|
|
||||||
* from the file and the format depends on the specific key system. This
|
|
||||||
* can be NULL if there is no initialization data; in that case, there
|
|
||||||
* will be at least one key ID.
|
|
||||||
*/
|
|
||||||
uint8_t* data;
|
|
||||||
uint32_t data_size;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An optional pointer to the next initialization info in the list.
|
|
||||||
*/
|
|
||||||
struct AVEncryptionInitInfo *next;
|
|
||||||
} AVEncryptionInitInfo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocates an AVEncryptionInfo structure and sub-pointers to hold the given
|
|
||||||
* number of subsamples. This will allocate pointers for the key ID, IV,
|
|
||||||
* and subsample entries, set the size members, and zero-initialize the rest.
|
|
||||||
*
|
|
||||||
* @param subsample_count The number of subsamples.
|
|
||||||
* @param key_id_size The number of bytes in the key ID, should be 16.
|
|
||||||
* @param iv_size The number of bytes in the IV, should be 16.
|
|
||||||
*
|
|
||||||
* @return The new AVEncryptionInfo structure, or NULL on error.
|
|
||||||
*/
|
|
||||||
AVEncryptionInfo *av_encryption_info_alloc(uint32_t subsample_count, uint32_t key_id_size, uint32_t iv_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocates an AVEncryptionInfo structure with a copy of the given data.
|
|
||||||
* @return The new AVEncryptionInfo structure, or NULL on error.
|
|
||||||
*/
|
|
||||||
AVEncryptionInfo *av_encryption_info_clone(const AVEncryptionInfo *info);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Frees the given encryption info object. This MUST NOT be used to free the
|
|
||||||
* side-data data pointer, that should use normal side-data methods.
|
|
||||||
*/
|
|
||||||
void av_encryption_info_free(AVEncryptionInfo *info);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a copy of the AVEncryptionInfo that is contained in the given side
|
|
||||||
* data. The resulting object should be passed to av_encryption_info_free()
|
|
||||||
* when done.
|
|
||||||
*
|
|
||||||
* @return The new AVEncryptionInfo structure, or NULL on error.
|
|
||||||
*/
|
|
||||||
AVEncryptionInfo *av_encryption_info_get_side_data(const uint8_t *side_data, size_t side_data_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocates and initializes side data that holds a copy of the given encryption
|
|
||||||
* info. The resulting pointer should be either freed using av_free or given
|
|
||||||
* to av_packet_add_side_data().
|
|
||||||
*
|
|
||||||
* @return The new side-data pointer, or NULL.
|
|
||||||
*/
|
|
||||||
uint8_t *av_encryption_info_add_side_data(
|
|
||||||
const AVEncryptionInfo *info, size_t *side_data_size);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocates an AVEncryptionInitInfo structure and sub-pointers to hold the
|
|
||||||
* given sizes. This will allocate pointers and set all the fields.
|
|
||||||
*
|
|
||||||
* @return The new AVEncryptionInitInfo structure, or NULL on error.
|
|
||||||
*/
|
|
||||||
AVEncryptionInitInfo *av_encryption_init_info_alloc(
|
|
||||||
uint32_t system_id_size, uint32_t num_key_ids, uint32_t key_id_size, uint32_t data_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Frees the given encryption init info object. This MUST NOT be used to free
|
|
||||||
* the side-data data pointer, that should use normal side-data methods.
|
|
||||||
*/
|
|
||||||
void av_encryption_init_info_free(AVEncryptionInitInfo* info);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a copy of the AVEncryptionInitInfo that is contained in the given
|
|
||||||
* side data. The resulting object should be passed to
|
|
||||||
* av_encryption_init_info_free() when done.
|
|
||||||
*
|
|
||||||
* @return The new AVEncryptionInitInfo structure, or NULL on error.
|
|
||||||
*/
|
|
||||||
AVEncryptionInitInfo *av_encryption_init_info_get_side_data(
|
|
||||||
const uint8_t* side_data, size_t side_data_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocates and initializes side data that holds a copy of the given encryption
|
|
||||||
* init info. The resulting pointer should be either freed using av_free or
|
|
||||||
* given to av_packet_add_side_data().
|
|
||||||
*
|
|
||||||
* @return The new side-data pointer, or NULL.
|
|
||||||
*/
|
|
||||||
uint8_t *av_encryption_init_info_add_side_data(
|
|
||||||
const AVEncryptionInitInfo *info, size_t *side_data_size);
|
|
||||||
|
|
||||||
#endif /* AVUTIL_ENCRYPTION_INFO_H */
|
|
||||||
@@ -1,126 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* error code definitions
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_ERROR_H
|
|
||||||
#define AVUTIL_ERROR_H
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavu_error
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* error handling */
|
|
||||||
#if EDOM > 0
|
|
||||||
#define AVERROR(e) (-(e)) ///< Returns a negative error code from a POSIX error code, to return from library functions.
|
|
||||||
#define AVUNERROR(e) (-(e)) ///< Returns a POSIX error code from a library function error return value.
|
|
||||||
#else
|
|
||||||
/* Some platforms have E* and errno already negated. */
|
|
||||||
#define AVERROR(e) (e)
|
|
||||||
#define AVUNERROR(e) (e)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d))
|
|
||||||
|
|
||||||
#define AVERROR_BSF_NOT_FOUND FFERRTAG(0xF8,'B','S','F') ///< Bitstream filter not found
|
|
||||||
#define AVERROR_BUG FFERRTAG( 'B','U','G','!') ///< Internal bug, also see AVERROR_BUG2
|
|
||||||
#define AVERROR_BUFFER_TOO_SMALL FFERRTAG( 'B','U','F','S') ///< Buffer too small
|
|
||||||
#define AVERROR_DECODER_NOT_FOUND FFERRTAG(0xF8,'D','E','C') ///< Decoder not found
|
|
||||||
#define AVERROR_DEMUXER_NOT_FOUND FFERRTAG(0xF8,'D','E','M') ///< Demuxer not found
|
|
||||||
#define AVERROR_ENCODER_NOT_FOUND FFERRTAG(0xF8,'E','N','C') ///< Encoder not found
|
|
||||||
#define AVERROR_EOF FFERRTAG( 'E','O','F',' ') ///< End of file
|
|
||||||
#define AVERROR_EXIT FFERRTAG( 'E','X','I','T') ///< Immediate exit was requested; the called function should not be restarted
|
|
||||||
#define AVERROR_EXTERNAL FFERRTAG( 'E','X','T',' ') ///< Generic error in an external library
|
|
||||||
#define AVERROR_FILTER_NOT_FOUND FFERRTAG(0xF8,'F','I','L') ///< Filter not found
|
|
||||||
#define AVERROR_INVALIDDATA FFERRTAG( 'I','N','D','A') ///< Invalid data found when processing input
|
|
||||||
#define AVERROR_MUXER_NOT_FOUND FFERRTAG(0xF8,'M','U','X') ///< Muxer not found
|
|
||||||
#define AVERROR_OPTION_NOT_FOUND FFERRTAG(0xF8,'O','P','T') ///< Option not found
|
|
||||||
#define AVERROR_PATCHWELCOME FFERRTAG( 'P','A','W','E') ///< Not yet implemented in FFmpeg, patches welcome
|
|
||||||
#define AVERROR_PROTOCOL_NOT_FOUND FFERRTAG(0xF8,'P','R','O') ///< Protocol not found
|
|
||||||
|
|
||||||
#define AVERROR_STREAM_NOT_FOUND FFERRTAG(0xF8,'S','T','R') ///< Stream not found
|
|
||||||
/**
|
|
||||||
* This is semantically identical to AVERROR_BUG
|
|
||||||
* it has been introduced in Libav after our AVERROR_BUG and with a modified value.
|
|
||||||
*/
|
|
||||||
#define AVERROR_BUG2 FFERRTAG( 'B','U','G',' ')
|
|
||||||
#define AVERROR_UNKNOWN FFERRTAG( 'U','N','K','N') ///< Unknown error, typically from an external library
|
|
||||||
#define AVERROR_EXPERIMENTAL (-0x2bb2afa8) ///< Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it.
|
|
||||||
#define AVERROR_INPUT_CHANGED (-0x636e6701) ///< Input changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_OUTPUT_CHANGED)
|
|
||||||
#define AVERROR_OUTPUT_CHANGED (-0x636e6702) ///< Output changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_INPUT_CHANGED)
|
|
||||||
/* HTTP & RTSP errors */
|
|
||||||
#define AVERROR_HTTP_BAD_REQUEST FFERRTAG(0xF8,'4','0','0')
|
|
||||||
#define AVERROR_HTTP_UNAUTHORIZED FFERRTAG(0xF8,'4','0','1')
|
|
||||||
#define AVERROR_HTTP_FORBIDDEN FFERRTAG(0xF8,'4','0','3')
|
|
||||||
#define AVERROR_HTTP_NOT_FOUND FFERRTAG(0xF8,'4','0','4')
|
|
||||||
#define AVERROR_HTTP_OTHER_4XX FFERRTAG(0xF8,'4','X','X')
|
|
||||||
#define AVERROR_HTTP_SERVER_ERROR FFERRTAG(0xF8,'5','X','X')
|
|
||||||
|
|
||||||
#define AV_ERROR_MAX_STRING_SIZE 64
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Put a description of the AVERROR code errnum in errbuf.
|
|
||||||
* In case of failure the global variable errno is set to indicate the
|
|
||||||
* error. Even in case of failure av_strerror() will print a generic
|
|
||||||
* error message indicating the errnum provided to errbuf.
|
|
||||||
*
|
|
||||||
* @param errnum error code to describe
|
|
||||||
* @param errbuf buffer to which description is written
|
|
||||||
* @param errbuf_size the size in bytes of errbuf
|
|
||||||
* @return 0 on success, a negative value if a description for errnum
|
|
||||||
* cannot be found
|
|
||||||
*/
|
|
||||||
int av_strerror(int errnum, char *errbuf, size_t errbuf_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fill the provided buffer with a string containing an error string
|
|
||||||
* corresponding to the AVERROR code errnum.
|
|
||||||
*
|
|
||||||
* @param errbuf a buffer
|
|
||||||
* @param errbuf_size size in bytes of errbuf
|
|
||||||
* @param errnum error code to describe
|
|
||||||
* @return the buffer in input, filled with the error description
|
|
||||||
* @see av_strerror()
|
|
||||||
*/
|
|
||||||
static inline char *av_make_error_string(char *errbuf, size_t errbuf_size, int errnum)
|
|
||||||
{
|
|
||||||
av_strerror(errnum, errbuf, errbuf_size);
|
|
||||||
return errbuf;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convenience macro, the return value should be used only directly in
|
|
||||||
* function arguments but never stand-alone.
|
|
||||||
*/
|
|
||||||
#define av_err2str(errnum) \
|
|
||||||
av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_ERROR_H */
|
|
||||||
@@ -1,137 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2002 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* simple arithmetic expression evaluator
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_EVAL_H
|
|
||||||
#define AVUTIL_EVAL_H
|
|
||||||
|
|
||||||
#include "avutil.h"
|
|
||||||
|
|
||||||
typedef struct AVExpr AVExpr;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse and evaluate an expression.
|
|
||||||
* Note, this is significantly slower than av_expr_eval().
|
|
||||||
*
|
|
||||||
* @param res a pointer to a double where is put the result value of
|
|
||||||
* the expression, or NAN in case of error
|
|
||||||
* @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)"
|
|
||||||
* @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0}
|
|
||||||
* @param const_values a zero terminated array of values for the identifiers from const_names
|
|
||||||
* @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers
|
|
||||||
* @param funcs1 NULL terminated array of function pointers for functions which take 1 argument
|
|
||||||
* @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers
|
|
||||||
* @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments
|
|
||||||
* @param opaque a pointer which will be passed to all functions from funcs1 and funcs2
|
|
||||||
* @param log_ctx parent logging context
|
|
||||||
* @return >= 0 in case of success, a negative value corresponding to an
|
|
||||||
* AVERROR code otherwise
|
|
||||||
*/
|
|
||||||
int av_expr_parse_and_eval(double *res, const char *s,
|
|
||||||
const char * const *const_names, const double *const_values,
|
|
||||||
const char * const *func1_names, double (* const *funcs1)(void *, double),
|
|
||||||
const char * const *func2_names, double (* const *funcs2)(void *, double, double),
|
|
||||||
void *opaque, int log_offset, void *log_ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse an expression.
|
|
||||||
*
|
|
||||||
* @param expr a pointer where is put an AVExpr containing the parsed
|
|
||||||
* value in case of successful parsing, or NULL otherwise.
|
|
||||||
* The pointed to AVExpr must be freed with av_expr_free() by the user
|
|
||||||
* when it is not needed anymore.
|
|
||||||
* @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)"
|
|
||||||
* @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0}
|
|
||||||
* @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers
|
|
||||||
* @param funcs1 NULL terminated array of function pointers for functions which take 1 argument
|
|
||||||
* @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers
|
|
||||||
* @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments
|
|
||||||
* @param log_ctx parent logging context
|
|
||||||
* @return >= 0 in case of success, a negative value corresponding to an
|
|
||||||
* AVERROR code otherwise
|
|
||||||
*/
|
|
||||||
int av_expr_parse(AVExpr **expr, const char *s,
|
|
||||||
const char * const *const_names,
|
|
||||||
const char * const *func1_names, double (* const *funcs1)(void *, double),
|
|
||||||
const char * const *func2_names, double (* const *funcs2)(void *, double, double),
|
|
||||||
int log_offset, void *log_ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Evaluate a previously parsed expression.
|
|
||||||
*
|
|
||||||
* @param const_values a zero terminated array of values for the identifiers from av_expr_parse() const_names
|
|
||||||
* @param opaque a pointer which will be passed to all functions from funcs1 and funcs2
|
|
||||||
* @return the value of the expression
|
|
||||||
*/
|
|
||||||
double av_expr_eval(AVExpr *e, const double *const_values, void *opaque);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Track the presence of variables and their number of occurrences in a parsed expression
|
|
||||||
*
|
|
||||||
* @param counter a zero-initialized array where the count of each variable will be stored
|
|
||||||
* @param size size of array
|
|
||||||
* @return 0 on success, a negative value indicates that no expression or array was passed
|
|
||||||
* or size was zero
|
|
||||||
*/
|
|
||||||
int av_expr_count_vars(AVExpr *e, unsigned *counter, int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Track the presence of user provided functions and their number of occurrences
|
|
||||||
* in a parsed expression.
|
|
||||||
*
|
|
||||||
* @param counter a zero-initialized array where the count of each function will be stored
|
|
||||||
* if you passed 5 functions with 2 arguments to av_expr_parse()
|
|
||||||
* then for arg=2 this will use upto 5 entries.
|
|
||||||
* @param size size of array
|
|
||||||
* @param arg number of arguments the counted functions have
|
|
||||||
* @return 0 on success, a negative value indicates that no expression or array was passed
|
|
||||||
* or size was zero
|
|
||||||
*/
|
|
||||||
int av_expr_count_func(AVExpr *e, unsigned *counter, int size, int arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free a parsed expression previously created with av_expr_parse().
|
|
||||||
*/
|
|
||||||
void av_expr_free(AVExpr *e);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse the string in numstr and return its value as a double. If
|
|
||||||
* the string is empty, contains only whitespaces, or does not contain
|
|
||||||
* an initial substring that has the expected syntax for a
|
|
||||||
* floating-point number, no conversion is performed. In this case,
|
|
||||||
* returns a value of zero and the value returned in tail is the value
|
|
||||||
* of numstr.
|
|
||||||
*
|
|
||||||
* @param numstr a string representing a number, may contain one of
|
|
||||||
* the International System number postfixes, for example 'K', 'M',
|
|
||||||
* 'G'. If 'i' is appended after the postfix, powers of 2 are used
|
|
||||||
* instead of powers of 10. The 'B' postfix multiplies the value by
|
|
||||||
* 8, and can be appended after another postfix or used alone. This
|
|
||||||
* allows using for example 'KB', 'MiB', 'G' and 'B' as postfix.
|
|
||||||
* @param tail if non-NULL puts here the pointer to the char next
|
|
||||||
* after the last parsed character
|
|
||||||
*/
|
|
||||||
double av_strtod(const char *numstr, char **tail);
|
|
||||||
|
|
||||||
#endif /* AVUTIL_EVAL_H */
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000-2003 Fabrice Bellard
|
|
||||||
*
|
|
||||||
* 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_TIME_H
|
|
||||||
#define AVUTIL_TIME_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the current time in microseconds.
|
|
||||||
*/
|
|
||||||
int64_t av_gettime(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the current time in microseconds since some unspecified starting point.
|
|
||||||
* On platforms that support it, the time comes from a monotonic clock
|
|
||||||
* This property makes this time source ideal for measuring relative time.
|
|
||||||
* The returned values may not be monotonic on platforms where a monotonic
|
|
||||||
* clock is not available.
|
|
||||||
*/
|
|
||||||
int64_t av_gettime_relative(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates with a boolean result if the av_gettime_relative() time source
|
|
||||||
* is monotonic.
|
|
||||||
*/
|
|
||||||
int av_gettime_relative_is_monotonic(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sleep for a period of time. Although the duration is expressed in
|
|
||||||
* microseconds, the actual delay may be rounded to the precision of the
|
|
||||||
* system timer.
|
|
||||||
*
|
|
||||||
* @param usec Number of microseconds to sleep.
|
|
||||||
* @return zero on success or (negative) error code.
|
|
||||||
*/
|
|
||||||
int av_usleep(unsigned usec);
|
|
||||||
|
|
||||||
#endif /* AVUTIL_TIME_H */
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
/* Automatically generated by version.sh, do not manually edit! */
|
|
||||||
#ifndef AVUTIL_FFVERSION_H
|
|
||||||
#define AVUTIL_FFVERSION_H
|
|
||||||
#define FFMPEG_VERSION "4.3.1"
|
|
||||||
#endif /* AVUTIL_FFVERSION_H */
|
|
||||||
@@ -1,179 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* a very simple circular buffer FIFO implementation
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_FIFO_H
|
|
||||||
#define AVUTIL_FIFO_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "avutil.h"
|
|
||||||
#include "attributes.h"
|
|
||||||
|
|
||||||
typedef struct AVFifoBuffer {
|
|
||||||
uint8_t *buffer;
|
|
||||||
uint8_t *rptr, *wptr, *end;
|
|
||||||
uint32_t rndx, wndx;
|
|
||||||
} AVFifoBuffer;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize an AVFifoBuffer.
|
|
||||||
* @param size of FIFO
|
|
||||||
* @return AVFifoBuffer or NULL in case of memory allocation failure
|
|
||||||
*/
|
|
||||||
AVFifoBuffer *av_fifo_alloc(unsigned int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize an AVFifoBuffer.
|
|
||||||
* @param nmemb number of elements
|
|
||||||
* @param size size of the single element
|
|
||||||
* @return AVFifoBuffer or NULL in case of memory allocation failure
|
|
||||||
*/
|
|
||||||
AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free an AVFifoBuffer.
|
|
||||||
* @param f AVFifoBuffer to free
|
|
||||||
*/
|
|
||||||
void av_fifo_free(AVFifoBuffer *f);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free an AVFifoBuffer and reset pointer to NULL.
|
|
||||||
* @param f AVFifoBuffer to free
|
|
||||||
*/
|
|
||||||
void av_fifo_freep(AVFifoBuffer **f);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied.
|
|
||||||
* @param f AVFifoBuffer to reset
|
|
||||||
*/
|
|
||||||
void av_fifo_reset(AVFifoBuffer *f);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the amount of data in bytes in the AVFifoBuffer, that is the
|
|
||||||
* amount of data you can read from it.
|
|
||||||
* @param f AVFifoBuffer to read from
|
|
||||||
* @return size
|
|
||||||
*/
|
|
||||||
int av_fifo_size(const AVFifoBuffer *f);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the amount of space in bytes in the AVFifoBuffer, that is the
|
|
||||||
* amount of data you can write into it.
|
|
||||||
* @param f AVFifoBuffer to write into
|
|
||||||
* @return size
|
|
||||||
*/
|
|
||||||
int av_fifo_space(const AVFifoBuffer *f);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Feed data at specific position from an AVFifoBuffer to a user-supplied callback.
|
|
||||||
* Similar as av_fifo_gereric_read but without discarding data.
|
|
||||||
* @param f AVFifoBuffer to read from
|
|
||||||
* @param offset offset from current read position
|
|
||||||
* @param buf_size number of bytes to read
|
|
||||||
* @param func generic read function
|
|
||||||
* @param dest data destination
|
|
||||||
*/
|
|
||||||
int av_fifo_generic_peek_at(AVFifoBuffer *f, void *dest, int offset, int buf_size, void (*func)(void*, void*, int));
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Feed data from an AVFifoBuffer to a user-supplied callback.
|
|
||||||
* Similar as av_fifo_gereric_read but without discarding data.
|
|
||||||
* @param f AVFifoBuffer to read from
|
|
||||||
* @param buf_size number of bytes to read
|
|
||||||
* @param func generic read function
|
|
||||||
* @param dest data destination
|
|
||||||
*/
|
|
||||||
int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int));
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Feed data from an AVFifoBuffer to a user-supplied callback.
|
|
||||||
* @param f AVFifoBuffer to read from
|
|
||||||
* @param buf_size number of bytes to read
|
|
||||||
* @param func generic read function
|
|
||||||
* @param dest data destination
|
|
||||||
*/
|
|
||||||
int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int));
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Feed data from a user-supplied callback to an AVFifoBuffer.
|
|
||||||
* @param f AVFifoBuffer to write to
|
|
||||||
* @param src data source; non-const since it may be used as a
|
|
||||||
* modifiable context by the function defined in func
|
|
||||||
* @param size number of bytes to write
|
|
||||||
* @param func generic write function; the first parameter is src,
|
|
||||||
* the second is dest_buf, the third is dest_buf_size.
|
|
||||||
* func must return the number of bytes written to dest_buf, or <= 0 to
|
|
||||||
* indicate no more data available to write.
|
|
||||||
* If func is NULL, src is interpreted as a simple byte array for source data.
|
|
||||||
* @return the number of bytes written to the FIFO
|
|
||||||
*/
|
|
||||||
int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int));
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resize an AVFifoBuffer.
|
|
||||||
* In case of reallocation failure, the old FIFO is kept unchanged.
|
|
||||||
*
|
|
||||||
* @param f AVFifoBuffer to resize
|
|
||||||
* @param size new AVFifoBuffer size in bytes
|
|
||||||
* @return <0 for failure, >=0 otherwise
|
|
||||||
*/
|
|
||||||
int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Enlarge an AVFifoBuffer.
|
|
||||||
* In case of reallocation failure, the old FIFO is kept unchanged.
|
|
||||||
* The new fifo size may be larger than the requested size.
|
|
||||||
*
|
|
||||||
* @param f AVFifoBuffer to resize
|
|
||||||
* @param additional_space the amount of space in bytes to allocate in addition to av_fifo_size()
|
|
||||||
* @return <0 for failure, >=0 otherwise
|
|
||||||
*/
|
|
||||||
int av_fifo_grow(AVFifoBuffer *f, unsigned int additional_space);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read and discard the specified amount of data from an AVFifoBuffer.
|
|
||||||
* @param f AVFifoBuffer to read from
|
|
||||||
* @param size amount of data to read in bytes
|
|
||||||
*/
|
|
||||||
void av_fifo_drain(AVFifoBuffer *f, int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return a pointer to the data stored in a FIFO buffer at a certain offset.
|
|
||||||
* The FIFO buffer is not modified.
|
|
||||||
*
|
|
||||||
* @param f AVFifoBuffer to peek at, f must be non-NULL
|
|
||||||
* @param offs an offset in bytes, its absolute value must be less
|
|
||||||
* than the used buffer size or the returned pointer will
|
|
||||||
* point outside to the buffer data.
|
|
||||||
* The used buffer size can be checked with av_fifo_size().
|
|
||||||
*/
|
|
||||||
static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs)
|
|
||||||
{
|
|
||||||
uint8_t *ptr = f->rptr + offs;
|
|
||||||
if (ptr >= f->end)
|
|
||||||
ptr = f->buffer + (ptr - f->end);
|
|
||||||
else if (ptr < f->buffer)
|
|
||||||
ptr = f->end - (f->buffer - ptr);
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* AVUTIL_FIFO_H */
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_FILE_H
|
|
||||||
#define AVUTIL_FILE_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "avutil.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* Misc file utilities.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read the file with name filename, and put its content in a newly
|
|
||||||
* allocated buffer or map it with mmap() when available.
|
|
||||||
* In case of success set *bufptr to the read or mmapped buffer, and
|
|
||||||
* *size to the size in bytes of the buffer in *bufptr.
|
|
||||||
* Unlike mmap this function succeeds with zero sized files, in this
|
|
||||||
* case *bufptr will be set to NULL and *size will be set to 0.
|
|
||||||
* The returned buffer must be released with av_file_unmap().
|
|
||||||
*
|
|
||||||
* @param log_offset loglevel offset used for logging
|
|
||||||
* @param log_ctx context used for logging
|
|
||||||
* @return a non negative number in case of success, a negative value
|
|
||||||
* corresponding to an AVERROR error code in case of failure
|
|
||||||
*/
|
|
||||||
av_warn_unused_result
|
|
||||||
int av_file_map(const char *filename, uint8_t **bufptr, size_t *size,
|
|
||||||
int log_offset, void *log_ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unmap or free the buffer bufptr created by av_file_map().
|
|
||||||
*
|
|
||||||
* @param size size in bytes of bufptr, must be the same as returned
|
|
||||||
* by av_file_map()
|
|
||||||
*/
|
|
||||||
void av_file_unmap(uint8_t *bufptr, size_t size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wrapper to work around the lack of mkstemp() on mingw.
|
|
||||||
* Also, tries to create file in /tmp first, if possible.
|
|
||||||
* *prefix can be a character constant; *filename will be allocated internally.
|
|
||||||
* @return file descriptor of opened file (or negative value corresponding to an
|
|
||||||
* AVERROR code on error)
|
|
||||||
* and opened file name in **filename.
|
|
||||||
* @note On very old libcs it is necessary to set a secure umask before
|
|
||||||
* calling this, av_tempfile() can't call umask itself as it is used in
|
|
||||||
* libraries and could interfere with the calling application.
|
|
||||||
* @deprecated as fd numbers cannot be passed saftely between libs on some platforms
|
|
||||||
*/
|
|
||||||
int av_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx);
|
|
||||||
|
|
||||||
#endif /* AVUTIL_FILE_H */
|
|
||||||
@@ -1,975 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavu_frame
|
|
||||||
* reference-counted frame API
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_FRAME_H
|
|
||||||
#define AVUTIL_FRAME_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "avutil.h"
|
|
||||||
#include "buffer.h"
|
|
||||||
#include "dict.h"
|
|
||||||
#include "rational.h"
|
|
||||||
#include "samplefmt.h"
|
|
||||||
#include "pixfmt.h"
|
|
||||||
#include "avutilVersion.h"
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_frame AVFrame
|
|
||||||
* @ingroup lavu_data
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
* AVFrame is an abstraction for reference-counted raw multimedia data.
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum AVFrameSideDataType {
|
|
||||||
/**
|
|
||||||
* The data is the AVPanScan struct defined in libavcodec.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_PANSCAN,
|
|
||||||
/**
|
|
||||||
* ATSC A53 Part 4 Closed Captions.
|
|
||||||
* A53 CC bitstream is stored as uint8_t in AVFrameSideData.data.
|
|
||||||
* The number of bytes of CC data is AVFrameSideData.size.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_A53_CC,
|
|
||||||
/**
|
|
||||||
* Stereoscopic 3d metadata.
|
|
||||||
* The data is the AVStereo3D struct defined in stereo3d.h.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_STEREO3D,
|
|
||||||
/**
|
|
||||||
* The data is the AVMatrixEncoding enum defined in channel_layout.h.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_MATRIXENCODING,
|
|
||||||
/**
|
|
||||||
* Metadata relevant to a downmix procedure.
|
|
||||||
* The data is the AVDownmixInfo struct defined in downmix_info.h.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_DOWNMIX_INFO,
|
|
||||||
/**
|
|
||||||
* ReplayGain information in the form of the AVReplayGain struct.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_REPLAYGAIN,
|
|
||||||
/**
|
|
||||||
* This side data contains a 3x3 transformation matrix describing an affine
|
|
||||||
* transformation that needs to be applied to the frame for correct
|
|
||||||
* presentation.
|
|
||||||
*
|
|
||||||
* See display.h for a detailed description of the data.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_DISPLAYMATRIX,
|
|
||||||
/**
|
|
||||||
* Active Format Description data consisting of a single byte as specified
|
|
||||||
* in ETSI TS 101 154 using AVActiveFormatDescription enum.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_AFD,
|
|
||||||
/**
|
|
||||||
* Motion vectors exported by some codecs (on demand through the export_mvs
|
|
||||||
* flag set in the libavcodec AVCodecContext flags2 option).
|
|
||||||
* The data is the AVMotionVector struct defined in
|
|
||||||
* motion_vector.h.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_MOTION_VECTORS,
|
|
||||||
/**
|
|
||||||
* Recommmends skipping the specified number of samples. This is exported
|
|
||||||
* only if the "skip_manual" AVOption is set in libavcodec.
|
|
||||||
* This has the same format as AV_PKT_DATA_SKIP_SAMPLES.
|
|
||||||
* @code
|
|
||||||
* u32le number of samples to skip from start of this packet
|
|
||||||
* u32le number of samples to skip from end of this packet
|
|
||||||
* u8 reason for start skip
|
|
||||||
* u8 reason for end skip (0=padding silence, 1=convergence)
|
|
||||||
* @endcode
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_SKIP_SAMPLES,
|
|
||||||
/**
|
|
||||||
* This side data must be associated with an audio frame and corresponds to
|
|
||||||
* enum AVAudioServiceType defined in avcodec.h.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_AUDIO_SERVICE_TYPE,
|
|
||||||
/**
|
|
||||||
* Mastering display metadata associated with a video frame. The payload is
|
|
||||||
* an AVMasteringDisplayMetadata type and contains information about the
|
|
||||||
* mastering display color volume.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_MASTERING_DISPLAY_METADATA,
|
|
||||||
/**
|
|
||||||
* The GOP timecode in 25 bit timecode format. Data format is 64-bit integer.
|
|
||||||
* This is set on the first frame of a GOP that has a temporal reference of 0.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_GOP_TIMECODE,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The data represents the AVSphericalMapping structure defined in
|
|
||||||
* spherical.h.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_SPHERICAL,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Content light level (based on CTA-861.3). This payload contains data in
|
|
||||||
* the form of the AVContentLightMetadata struct.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_CONTENT_LIGHT_LEVEL,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The data contains an ICC profile as an opaque octet buffer following the
|
|
||||||
* format described by ISO 15076-1 with an optional name defined in the
|
|
||||||
* metadata key entry "name".
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_ICC_PROFILE,
|
|
||||||
|
|
||||||
#if FF_API_FRAME_QP
|
|
||||||
/**
|
|
||||||
* Implementation-specific description of the format of AV_FRAME_QP_TABLE_DATA.
|
|
||||||
* The contents of this side data are undocumented and internal; use
|
|
||||||
* av_frame_set_qp_table() and av_frame_get_qp_table() to access this in a
|
|
||||||
* meaningful way instead.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_QP_TABLE_PROPERTIES,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Raw QP table data. Its format is described by
|
|
||||||
* AV_FRAME_DATA_QP_TABLE_PROPERTIES. Use av_frame_set_qp_table() and
|
|
||||||
* av_frame_get_qp_table() to access this instead.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_QP_TABLE_DATA,
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 uint32_t
|
|
||||||
* where the first uint32_t describes how many (1-3) of the other timecodes are used.
|
|
||||||
* The timecode format is described in the av_timecode_get_smpte_from_framenum()
|
|
||||||
* function in timecode.c.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_S12M_TIMECODE,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* HDR dynamic metadata associated with a video frame. The payload is
|
|
||||||
* an AVDynamicHDRPlus type and contains information for color
|
|
||||||
* volume transform - application 4 of SMPTE 2094-40:2016 standard.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_DYNAMIC_HDR_PLUS,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Regions Of Interest, the data is an array of AVRegionOfInterest type, the number of
|
|
||||||
* array element is implied by AVFrameSideData.size / AVRegionOfInterest.self_size.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_REGIONS_OF_INTEREST,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encoding parameters for a video frame, as described by AVVideoEncParams.
|
|
||||||
*/
|
|
||||||
AV_FRAME_DATA_VIDEO_ENC_PARAMS,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum AVActiveFormatDescription {
|
|
||||||
AV_AFD_SAME = 8,
|
|
||||||
AV_AFD_4_3 = 9,
|
|
||||||
AV_AFD_16_9 = 10,
|
|
||||||
AV_AFD_14_9 = 11,
|
|
||||||
AV_AFD_4_3_SP_14_9 = 13,
|
|
||||||
AV_AFD_16_9_SP_14_9 = 14,
|
|
||||||
AV_AFD_SP_4_3 = 15,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Structure to hold side data for an AVFrame.
|
|
||||||
*
|
|
||||||
* sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be added
|
|
||||||
* to the end with a minor bump.
|
|
||||||
*/
|
|
||||||
typedef struct AVFrameSideData {
|
|
||||||
enum AVFrameSideDataType type;
|
|
||||||
uint8_t *data;
|
|
||||||
int size;
|
|
||||||
AVDictionary *metadata;
|
|
||||||
AVBufferRef *buf;
|
|
||||||
} AVFrameSideData;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Structure describing a single Region Of Interest.
|
|
||||||
*
|
|
||||||
* When multiple regions are defined in a single side-data block, they
|
|
||||||
* should be ordered from most to least important - some encoders are only
|
|
||||||
* capable of supporting a limited number of distinct regions, so will have
|
|
||||||
* to truncate the list.
|
|
||||||
*
|
|
||||||
* When overlapping regions are defined, the first region containing a given
|
|
||||||
* area of the frame applies.
|
|
||||||
*/
|
|
||||||
typedef struct AVRegionOfInterest {
|
|
||||||
/**
|
|
||||||
* Must be set to the size of this data structure (that is,
|
|
||||||
* sizeof(AVRegionOfInterest)).
|
|
||||||
*/
|
|
||||||
uint32_t self_size;
|
|
||||||
/**
|
|
||||||
* Distance in pixels from the top edge of the frame to the top and
|
|
||||||
* bottom edges and from the left edge of the frame to the left and
|
|
||||||
* right edges of the rectangle defining this region of interest.
|
|
||||||
*
|
|
||||||
* The constraints on a region are encoder dependent, so the region
|
|
||||||
* actually affected may be slightly larger for alignment or other
|
|
||||||
* reasons.
|
|
||||||
*/
|
|
||||||
int top;
|
|
||||||
int bottom;
|
|
||||||
int left;
|
|
||||||
int right;
|
|
||||||
/**
|
|
||||||
* Quantisation offset.
|
|
||||||
*
|
|
||||||
* Must be in the range -1 to +1. A value of zero indicates no quality
|
|
||||||
* change. A negative value asks for better quality (less quantisation),
|
|
||||||
* while a positive value asks for worse quality (greater quantisation).
|
|
||||||
*
|
|
||||||
* The range is calibrated so that the extreme values indicate the
|
|
||||||
* largest possible offset - if the rest of the frame is encoded with the
|
|
||||||
* worst possible quality, an offset of -1 indicates that this region
|
|
||||||
* should be encoded with the best possible quality anyway. Intermediate
|
|
||||||
* values are then interpolated in some codec-dependent way.
|
|
||||||
*
|
|
||||||
* For example, in 10-bit H.264 the quantisation parameter varies between
|
|
||||||
* -12 and 51. A typical qoffset value of -1/10 therefore indicates that
|
|
||||||
* this region should be encoded with a QP around one-tenth of the full
|
|
||||||
* range better than the rest of the frame. So, if most of the frame
|
|
||||||
* were to be encoded with a QP of around 30, this region would get a QP
|
|
||||||
* of around 24 (an offset of approximately -1/10 * (51 - -12) = -6.3).
|
|
||||||
* An extreme value of -1 would indicate that this region should be
|
|
||||||
* encoded with the best possible quality regardless of the treatment of
|
|
||||||
* the rest of the frame - that is, should be encoded at a QP of -12.
|
|
||||||
*/
|
|
||||||
AVRational qoffset;
|
|
||||||
} AVRegionOfInterest;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This structure describes decoded (raw) audio or video data.
|
|
||||||
*
|
|
||||||
* AVFrame must be allocated using av_frame_alloc(). Note that this only
|
|
||||||
* allocates the AVFrame itself, the buffers for the data must be managed
|
|
||||||
* through other means (see below).
|
|
||||||
* AVFrame must be freed with av_frame_free().
|
|
||||||
*
|
|
||||||
* AVFrame is typically allocated once and then reused multiple times to hold
|
|
||||||
* different data (e.g. a single AVFrame to hold frames received from a
|
|
||||||
* decoder). In such a case, av_frame_unref() will free any references held by
|
|
||||||
* the frame and reset it to its original clean state before it
|
|
||||||
* is reused again.
|
|
||||||
*
|
|
||||||
* The data described by an AVFrame is usually reference counted through the
|
|
||||||
* AVBuffer API. The underlying buffer references are stored in AVFrame.buf /
|
|
||||||
* AVFrame.extended_buf. An AVFrame is considered to be reference counted if at
|
|
||||||
* least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case,
|
|
||||||
* every single data plane must be contained in one of the buffers in
|
|
||||||
* AVFrame.buf or AVFrame.extended_buf.
|
|
||||||
* There may be a single buffer for all the data, or one separate buffer for
|
|
||||||
* each plane, or anything in between.
|
|
||||||
*
|
|
||||||
* sizeof(AVFrame) is not a part of the public ABI, so new fields may be added
|
|
||||||
* to the end with a minor bump.
|
|
||||||
*
|
|
||||||
* Fields can be accessed through AVOptions, the name string used, matches the
|
|
||||||
* C structure field name for fields accessible through AVOptions. The AVClass
|
|
||||||
* for AVFrame can be obtained from avcodec_get_frame_class()
|
|
||||||
*/
|
|
||||||
typedef struct AVFrame {
|
|
||||||
#define AV_NUM_DATA_POINTERS 8
|
|
||||||
/**
|
|
||||||
* pointer to the picture/channel planes.
|
|
||||||
* This might be different from the first allocated byte
|
|
||||||
*
|
|
||||||
* Some decoders access areas outside 0,0 - width,height, please
|
|
||||||
* see avcodec_align_dimensions2(). Some filters and swscale can read
|
|
||||||
* up to 16 bytes beyond the planes, if these filters are to be used,
|
|
||||||
* then 16 extra bytes must be allocated.
|
|
||||||
*
|
|
||||||
* NOTE: Except for hwaccel formats, pointers not needed by the format
|
|
||||||
* MUST be set to NULL.
|
|
||||||
*/
|
|
||||||
uint8_t *data[AV_NUM_DATA_POINTERS];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* For video, size in bytes of each picture line.
|
|
||||||
* For audio, size in bytes of each plane.
|
|
||||||
*
|
|
||||||
* For audio, only linesize[0] may be set. For planar audio, each channel
|
|
||||||
* plane must be the same size.
|
|
||||||
*
|
|
||||||
* For video the linesizes should be multiples of the CPUs alignment
|
|
||||||
* preference, this is 16 or 32 for modern desktop CPUs.
|
|
||||||
* Some code requires such alignment other code can be slower without
|
|
||||||
* correct alignment, for yet other it makes no difference.
|
|
||||||
*
|
|
||||||
* @note The linesize may be larger than the size of usable data -- there
|
|
||||||
* may be extra padding present for performance reasons.
|
|
||||||
*/
|
|
||||||
int linesize[AV_NUM_DATA_POINTERS];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* pointers to the data planes/channels.
|
|
||||||
*
|
|
||||||
* For video, this should simply point to data[].
|
|
||||||
*
|
|
||||||
* For planar audio, each channel has a separate data pointer, and
|
|
||||||
* linesize[0] contains the size of each channel buffer.
|
|
||||||
* For packed audio, there is just one data pointer, and linesize[0]
|
|
||||||
* contains the total size of the buffer for all channels.
|
|
||||||
*
|
|
||||||
* Note: Both data and extended_data should always be set in a valid frame,
|
|
||||||
* but for planar audio with more channels that can fit in data,
|
|
||||||
* extended_data must be used in order to access all channels.
|
|
||||||
*/
|
|
||||||
uint8_t **extended_data;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @name Video dimensions
|
|
||||||
* Video frames only. The coded dimensions (in pixels) of the video frame,
|
|
||||||
* i.e. the size of the rectangle that contains some well-defined values.
|
|
||||||
*
|
|
||||||
* @note The part of the frame intended for display/presentation is further
|
|
||||||
* restricted by the @ref cropping "Cropping rectangle".
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
int width, height;
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* number of audio samples (per channel) described by this frame
|
|
||||||
*/
|
|
||||||
int nb_samples;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* format of the frame, -1 if unknown or unset
|
|
||||||
* Values correspond to enum AVPixelFormat for video frames,
|
|
||||||
* enum AVSampleFormat for audio)
|
|
||||||
*/
|
|
||||||
int format;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1 -> keyframe, 0-> not
|
|
||||||
*/
|
|
||||||
int key_frame;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Picture type of the frame.
|
|
||||||
*/
|
|
||||||
enum AVPictureType pict_type;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
|
|
||||||
*/
|
|
||||||
AVRational sample_aspect_ratio;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Presentation timestamp in time_base units (time when frame should be shown to user).
|
|
||||||
*/
|
|
||||||
int64_t pts;
|
|
||||||
|
|
||||||
#if FF_API_PKT_PTS
|
|
||||||
/**
|
|
||||||
* PTS copied from the AVPacket that was decoded to produce this frame.
|
|
||||||
* @deprecated use the pts field instead
|
|
||||||
*/
|
|
||||||
attribute_deprecated
|
|
||||||
int64_t pkt_pts;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used)
|
|
||||||
* This is also the Presentation time of this AVFrame calculated from
|
|
||||||
* only AVPacket.dts values without pts values.
|
|
||||||
*/
|
|
||||||
int64_t pkt_dts;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* picture number in bitstream order
|
|
||||||
*/
|
|
||||||
int coded_picture_number;
|
|
||||||
/**
|
|
||||||
* picture number in display order
|
|
||||||
*/
|
|
||||||
int display_picture_number;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* quality (between 1 (good) and FF_LAMBDA_MAX (bad))
|
|
||||||
*/
|
|
||||||
int quality;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* for some private data of the user
|
|
||||||
*/
|
|
||||||
void *opaque;
|
|
||||||
|
|
||||||
#if FF_API_ERROR_FRAME
|
|
||||||
/**
|
|
||||||
* @deprecated unused
|
|
||||||
*/
|
|
||||||
attribute_deprecated
|
|
||||||
uint64_t error[AV_NUM_DATA_POINTERS];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* When decoding, this signals how much the picture must be delayed.
|
|
||||||
* extra_delay = repeat_pict / (2*fps)
|
|
||||||
*/
|
|
||||||
int repeat_pict;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The content of the picture is interlaced.
|
|
||||||
*/
|
|
||||||
int interlaced_frame;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If the content is interlaced, is top field displayed first.
|
|
||||||
*/
|
|
||||||
int top_field_first;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tell user application that palette has changed from previous frame.
|
|
||||||
*/
|
|
||||||
int palette_has_changed;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* reordered opaque 64 bits (generally an integer or a double precision float
|
|
||||||
* PTS but can be anything).
|
|
||||||
* The user sets AVCodecContext.reordered_opaque to represent the input at
|
|
||||||
* that time,
|
|
||||||
* the decoder reorders values as needed and sets AVFrame.reordered_opaque
|
|
||||||
* to exactly one of the values provided by the user through AVCodecContext.reordered_opaque
|
|
||||||
*/
|
|
||||||
int64_t reordered_opaque;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sample rate of the audio data.
|
|
||||||
*/
|
|
||||||
int sample_rate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Channel layout of the audio data.
|
|
||||||
*/
|
|
||||||
uint64_t channel_layout;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* AVBuffer references backing the data for this frame. If all elements of
|
|
||||||
* this array are NULL, then this frame is not reference counted. This array
|
|
||||||
* must be filled contiguously -- if buf[i] is non-NULL then buf[j] must
|
|
||||||
* also be non-NULL for all j < i.
|
|
||||||
*
|
|
||||||
* There may be at most one AVBuffer per data plane, so for video this array
|
|
||||||
* always contains all the references. For planar audio with more than
|
|
||||||
* AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in
|
|
||||||
* this array. Then the extra AVBufferRef pointers are stored in the
|
|
||||||
* extended_buf array.
|
|
||||||
*/
|
|
||||||
AVBufferRef *buf[AV_NUM_DATA_POINTERS];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* For planar audio which requires more than AV_NUM_DATA_POINTERS
|
|
||||||
* AVBufferRef pointers, this array will hold all the references which
|
|
||||||
* cannot fit into AVFrame.buf.
|
|
||||||
*
|
|
||||||
* Note that this is different from AVFrame.extended_data, which always
|
|
||||||
* contains all the pointers. This array only contains the extra pointers,
|
|
||||||
* which cannot fit into AVFrame.buf.
|
|
||||||
*
|
|
||||||
* This array is always allocated using av_malloc() by whoever constructs
|
|
||||||
* the frame. It is freed in av_frame_unref().
|
|
||||||
*/
|
|
||||||
AVBufferRef **extended_buf;
|
|
||||||
/**
|
|
||||||
* Number of elements in extended_buf.
|
|
||||||
*/
|
|
||||||
int nb_extended_buf;
|
|
||||||
|
|
||||||
AVFrameSideData **side_data;
|
|
||||||
int nb_side_data;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_frame_flags AV_FRAME_FLAGS
|
|
||||||
* @ingroup lavu_frame
|
|
||||||
* Flags describing additional frame properties.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The frame data may be corrupted, e.g. due to decoding errors.
|
|
||||||
*/
|
|
||||||
#define AV_FRAME_FLAG_CORRUPT (1 << 0)
|
|
||||||
/**
|
|
||||||
* A flag to mark the frames which need to be decoded, but shouldn't be output.
|
|
||||||
*/
|
|
||||||
#define AV_FRAME_FLAG_DISCARD (1 << 2)
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Frame flags, a combination of @ref lavu_frame_flags
|
|
||||||
*/
|
|
||||||
int flags;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* MPEG vs JPEG YUV range.
|
|
||||||
* - encoding: Set by user
|
|
||||||
* - decoding: Set by libavcodec
|
|
||||||
*/
|
|
||||||
enum AVColorRange color_range;
|
|
||||||
|
|
||||||
enum AVColorPrimaries color_primaries;
|
|
||||||
|
|
||||||
enum AVColorTransferCharacteristic color_trc;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* YUV colorspace type.
|
|
||||||
* - encoding: Set by user
|
|
||||||
* - decoding: Set by libavcodec
|
|
||||||
*/
|
|
||||||
enum AVColorSpace colorspace;
|
|
||||||
|
|
||||||
enum AVChromaLocation chroma_location;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* frame timestamp estimated using various heuristics, in stream time base
|
|
||||||
* - encoding: unused
|
|
||||||
* - decoding: set by libavcodec, read by user.
|
|
||||||
*/
|
|
||||||
int64_t best_effort_timestamp;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* reordered pos from the last AVPacket that has been input into the decoder
|
|
||||||
* - encoding: unused
|
|
||||||
* - decoding: Read by user.
|
|
||||||
*/
|
|
||||||
int64_t pkt_pos;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* duration of the corresponding packet, expressed in
|
|
||||||
* AVStream->time_base units, 0 if unknown.
|
|
||||||
* - encoding: unused
|
|
||||||
* - decoding: Read by user.
|
|
||||||
*/
|
|
||||||
int64_t pkt_duration;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* metadata.
|
|
||||||
* - encoding: Set by user.
|
|
||||||
* - decoding: Set by libavcodec.
|
|
||||||
*/
|
|
||||||
AVDictionary *metadata;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* decode error flags of the frame, set to a combination of
|
|
||||||
* FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there
|
|
||||||
* were errors during the decoding.
|
|
||||||
* - encoding: unused
|
|
||||||
* - decoding: set by libavcodec, read by user.
|
|
||||||
*/
|
|
||||||
int decode_error_flags;
|
|
||||||
#define FF_DECODE_ERROR_INVALID_BITSTREAM 1
|
|
||||||
#define FF_DECODE_ERROR_MISSING_REFERENCE 2
|
|
||||||
#define FF_DECODE_ERROR_CONCEALMENT_ACTIVE 4
|
|
||||||
#define FF_DECODE_ERROR_DECODE_SLICES 8
|
|
||||||
|
|
||||||
/**
|
|
||||||
* number of audio channels, only used for audio.
|
|
||||||
* - encoding: unused
|
|
||||||
* - decoding: Read by user.
|
|
||||||
*/
|
|
||||||
int channels;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* size of the corresponding packet containing the compressed
|
|
||||||
* frame.
|
|
||||||
* It is set to a negative value if unknown.
|
|
||||||
* - encoding: unused
|
|
||||||
* - decoding: set by libavcodec, read by user.
|
|
||||||
*/
|
|
||||||
int pkt_size;
|
|
||||||
|
|
||||||
#if FF_API_FRAME_QP
|
|
||||||
/**
|
|
||||||
* QP table
|
|
||||||
*/
|
|
||||||
attribute_deprecated
|
|
||||||
int8_t *qscale_table;
|
|
||||||
/**
|
|
||||||
* QP store stride
|
|
||||||
*/
|
|
||||||
attribute_deprecated
|
|
||||||
int qstride;
|
|
||||||
|
|
||||||
attribute_deprecated
|
|
||||||
int qscale_type;
|
|
||||||
|
|
||||||
attribute_deprecated
|
|
||||||
AVBufferRef *qp_table_buf;
|
|
||||||
#endif
|
|
||||||
/**
|
|
||||||
* For hwaccel-format frames, this should be a reference to the
|
|
||||||
* AVHWFramesContext describing the frame.
|
|
||||||
*/
|
|
||||||
AVBufferRef *hw_frames_ctx;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* AVBufferRef for free use by the API user. FFmpeg will never check the
|
|
||||||
* contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when
|
|
||||||
* the frame is unreferenced. av_frame_copy_props() calls create a new
|
|
||||||
* reference with av_buffer_ref() for the target frame's opaque_ref field.
|
|
||||||
*
|
|
||||||
* This is unrelated to the opaque field, although it serves a similar
|
|
||||||
* purpose.
|
|
||||||
*/
|
|
||||||
AVBufferRef *opaque_ref;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @anchor cropping
|
|
||||||
* @name Cropping
|
|
||||||
* Video frames only. The number of pixels to discard from the the
|
|
||||||
* top/bottom/left/right border of the frame to obtain the sub-rectangle of
|
|
||||||
* the frame intended for presentation.
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
size_t crop_top;
|
|
||||||
size_t crop_bottom;
|
|
||||||
size_t crop_left;
|
|
||||||
size_t crop_right;
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* AVBufferRef for internal use by a single libav* library.
|
|
||||||
* Must not be used to transfer data between libraries.
|
|
||||||
* Has to be NULL when ownership of the frame leaves the respective library.
|
|
||||||
*
|
|
||||||
* Code outside the FFmpeg libs should never check or change the contents of the buffer ref.
|
|
||||||
*
|
|
||||||
* FFmpeg calls av_buffer_unref() on it when the frame is unreferenced.
|
|
||||||
* av_frame_copy_props() calls create a new reference with av_buffer_ref()
|
|
||||||
* for the target frame's private_ref field.
|
|
||||||
*/
|
|
||||||
AVBufferRef *private_ref;
|
|
||||||
} AVFrame;
|
|
||||||
|
|
||||||
#if FF_API_FRAME_GET_SET
|
|
||||||
/**
|
|
||||||
* Accessors for some AVFrame fields. These used to be provided for ABI
|
|
||||||
* compatibility, and do not need to be used anymore.
|
|
||||||
*/
|
|
||||||
attribute_deprecated
|
|
||||||
int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame);
|
|
||||||
attribute_deprecated
|
|
||||||
void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val);
|
|
||||||
attribute_deprecated
|
|
||||||
int64_t av_frame_get_pkt_duration (const AVFrame *frame);
|
|
||||||
attribute_deprecated
|
|
||||||
void av_frame_set_pkt_duration (AVFrame *frame, int64_t val);
|
|
||||||
attribute_deprecated
|
|
||||||
int64_t av_frame_get_pkt_pos (const AVFrame *frame);
|
|
||||||
attribute_deprecated
|
|
||||||
void av_frame_set_pkt_pos (AVFrame *frame, int64_t val);
|
|
||||||
attribute_deprecated
|
|
||||||
int64_t av_frame_get_channel_layout (const AVFrame *frame);
|
|
||||||
attribute_deprecated
|
|
||||||
void av_frame_set_channel_layout (AVFrame *frame, int64_t val);
|
|
||||||
attribute_deprecated
|
|
||||||
int av_frame_get_channels (const AVFrame *frame);
|
|
||||||
attribute_deprecated
|
|
||||||
void av_frame_set_channels (AVFrame *frame, int val);
|
|
||||||
attribute_deprecated
|
|
||||||
int av_frame_get_sample_rate (const AVFrame *frame);
|
|
||||||
attribute_deprecated
|
|
||||||
void av_frame_set_sample_rate (AVFrame *frame, int val);
|
|
||||||
attribute_deprecated
|
|
||||||
AVDictionary *av_frame_get_metadata (const AVFrame *frame);
|
|
||||||
attribute_deprecated
|
|
||||||
void av_frame_set_metadata (AVFrame *frame, AVDictionary *val);
|
|
||||||
attribute_deprecated
|
|
||||||
int av_frame_get_decode_error_flags (const AVFrame *frame);
|
|
||||||
attribute_deprecated
|
|
||||||
void av_frame_set_decode_error_flags (AVFrame *frame, int val);
|
|
||||||
attribute_deprecated
|
|
||||||
int av_frame_get_pkt_size(const AVFrame *frame);
|
|
||||||
attribute_deprecated
|
|
||||||
void av_frame_set_pkt_size(AVFrame *frame, int val);
|
|
||||||
#if FF_API_FRAME_QP
|
|
||||||
attribute_deprecated
|
|
||||||
int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type);
|
|
||||||
attribute_deprecated
|
|
||||||
int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type);
|
|
||||||
#endif
|
|
||||||
attribute_deprecated
|
|
||||||
enum AVColorSpace av_frame_get_colorspace(const AVFrame *frame);
|
|
||||||
attribute_deprecated
|
|
||||||
void av_frame_set_colorspace(AVFrame *frame, enum AVColorSpace val);
|
|
||||||
attribute_deprecated
|
|
||||||
enum AVColorRange av_frame_get_color_range(const AVFrame *frame);
|
|
||||||
attribute_deprecated
|
|
||||||
void av_frame_set_color_range(AVFrame *frame, enum AVColorRange val);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the name of a colorspace.
|
|
||||||
* @return a static string identifying the colorspace; can be NULL.
|
|
||||||
*/
|
|
||||||
const char *av_get_colorspace_name(enum AVColorSpace val);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVFrame and set its fields to default values. The resulting
|
|
||||||
* struct must be freed using av_frame_free().
|
|
||||||
*
|
|
||||||
* @return An AVFrame filled with default values or NULL on failure.
|
|
||||||
*
|
|
||||||
* @note this only allocates the AVFrame itself, not the data buffers. Those
|
|
||||||
* must be allocated through other means, e.g. with av_frame_get_buffer() or
|
|
||||||
* manually.
|
|
||||||
*/
|
|
||||||
AVFrame *av_frame_alloc(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free the frame and any dynamically allocated objects in it,
|
|
||||||
* e.g. extended_data. If the frame is reference counted, it will be
|
|
||||||
* unreferenced first.
|
|
||||||
*
|
|
||||||
* @param frame frame to be freed. The pointer will be set to NULL.
|
|
||||||
*/
|
|
||||||
void av_frame_free(AVFrame **frame);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set up a new reference to the data described by the source frame.
|
|
||||||
*
|
|
||||||
* Copy frame properties from src to dst and create a new reference for each
|
|
||||||
* AVBufferRef from src.
|
|
||||||
*
|
|
||||||
* If src is not reference counted, new buffers are allocated and the data is
|
|
||||||
* copied.
|
|
||||||
*
|
|
||||||
* @warning: dst MUST have been either unreferenced with av_frame_unref(dst),
|
|
||||||
* or newly allocated with av_frame_alloc() before calling this
|
|
||||||
* function, or undefined behavior will occur.
|
|
||||||
*
|
|
||||||
* @return 0 on success, a negative AVERROR on error
|
|
||||||
*/
|
|
||||||
int av_frame_ref(AVFrame *dst, const AVFrame *src);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new frame that references the same data as src.
|
|
||||||
*
|
|
||||||
* This is a shortcut for av_frame_alloc()+av_frame_ref().
|
|
||||||
*
|
|
||||||
* @return newly created AVFrame on success, NULL on error.
|
|
||||||
*/
|
|
||||||
AVFrame *av_frame_clone(const AVFrame *src);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unreference all the buffers referenced by frame and reset the frame fields.
|
|
||||||
*/
|
|
||||||
void av_frame_unref(AVFrame *frame);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Move everything contained in src to dst and reset src.
|
|
||||||
*
|
|
||||||
* @warning: dst is not unreferenced, but directly overwritten without reading
|
|
||||||
* or deallocating its contents. Call av_frame_unref(dst) manually
|
|
||||||
* before calling this function to ensure that no memory is leaked.
|
|
||||||
*/
|
|
||||||
void av_frame_move_ref(AVFrame *dst, AVFrame *src);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate new buffer(s) for audio or video data.
|
|
||||||
*
|
|
||||||
* The following fields must be set on frame before calling this function:
|
|
||||||
* - format (pixel format for video, sample format for audio)
|
|
||||||
* - width and height for video
|
|
||||||
* - nb_samples and channel_layout for audio
|
|
||||||
*
|
|
||||||
* This function will fill AVFrame.data and AVFrame.buf arrays and, if
|
|
||||||
* necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf.
|
|
||||||
* For planar formats, one buffer will be allocated for each plane.
|
|
||||||
*
|
|
||||||
* @warning: if frame already has been allocated, calling this function will
|
|
||||||
* leak memory. In addition, undefined behavior can occur in certain
|
|
||||||
* cases.
|
|
||||||
*
|
|
||||||
* @param frame frame in which to store the new buffers.
|
|
||||||
* @param align Required buffer size alignment. If equal to 0, alignment will be
|
|
||||||
* chosen automatically for the current CPU. It is highly
|
|
||||||
* recommended to pass 0 here unless you know what you are doing.
|
|
||||||
*
|
|
||||||
* @return 0 on success, a negative AVERROR on error.
|
|
||||||
*/
|
|
||||||
int av_frame_get_buffer(AVFrame *frame, int align);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if the frame data is writable.
|
|
||||||
*
|
|
||||||
* @return A positive value if the frame data is writable (which is true if and
|
|
||||||
* only if each of the underlying buffers has only one reference, namely the one
|
|
||||||
* stored in this frame). Return 0 otherwise.
|
|
||||||
*
|
|
||||||
* If 1 is returned the answer is valid until av_buffer_ref() is called on any
|
|
||||||
* of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly).
|
|
||||||
*
|
|
||||||
* @see av_frame_make_writable(), av_buffer_is_writable()
|
|
||||||
*/
|
|
||||||
int av_frame_is_writable(AVFrame *frame);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ensure that the frame data is writable, avoiding data copy if possible.
|
|
||||||
*
|
|
||||||
* Do nothing if the frame is writable, allocate new buffers and copy the data
|
|
||||||
* if it is not.
|
|
||||||
*
|
|
||||||
* @return 0 on success, a negative AVERROR on error.
|
|
||||||
*
|
|
||||||
* @see av_frame_is_writable(), av_buffer_is_writable(),
|
|
||||||
* av_buffer_make_writable()
|
|
||||||
*/
|
|
||||||
int av_frame_make_writable(AVFrame *frame);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy the frame data from src to dst.
|
|
||||||
*
|
|
||||||
* This function does not allocate anything, dst must be already initialized and
|
|
||||||
* allocated with the same parameters as src.
|
|
||||||
*
|
|
||||||
* This function only copies the frame data (i.e. the contents of the data /
|
|
||||||
* extended data arrays), not any other properties.
|
|
||||||
*
|
|
||||||
* @return >= 0 on success, a negative AVERROR on error.
|
|
||||||
*/
|
|
||||||
int av_frame_copy(AVFrame *dst, const AVFrame *src);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy only "metadata" fields from src to dst.
|
|
||||||
*
|
|
||||||
* Metadata for the purpose of this function are those fields that do not affect
|
|
||||||
* the data layout in the buffers. E.g. pts, sample rate (for audio) or sample
|
|
||||||
* aspect ratio (for video), but not width/height or channel layout.
|
|
||||||
* Side data is also copied.
|
|
||||||
*/
|
|
||||||
int av_frame_copy_props(AVFrame *dst, const AVFrame *src);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the buffer reference a given data plane is stored in.
|
|
||||||
*
|
|
||||||
* @param plane index of the data plane of interest in frame->extended_data.
|
|
||||||
*
|
|
||||||
* @return the buffer reference that contains the plane or NULL if the input
|
|
||||||
* frame is not valid.
|
|
||||||
*/
|
|
||||||
AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a new side data to a frame.
|
|
||||||
*
|
|
||||||
* @param frame a frame to which the side data should be added
|
|
||||||
* @param type type of the added side data
|
|
||||||
* @param size size of the side data
|
|
||||||
*
|
|
||||||
* @return newly added side data on success, NULL on error
|
|
||||||
*/
|
|
||||||
AVFrameSideData *av_frame_new_side_data(AVFrame *frame,
|
|
||||||
enum AVFrameSideDataType type,
|
|
||||||
int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a new side data to a frame from an existing AVBufferRef
|
|
||||||
*
|
|
||||||
* @param frame a frame to which the side data should be added
|
|
||||||
* @param type the type of the added side data
|
|
||||||
* @param buf an AVBufferRef to add as side data. The ownership of
|
|
||||||
* the reference is transferred to the frame.
|
|
||||||
*
|
|
||||||
* @return newly added side data on success, NULL on error. On failure
|
|
||||||
* the frame is unchanged and the AVBufferRef remains owned by
|
|
||||||
* the caller.
|
|
||||||
*/
|
|
||||||
AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame,
|
|
||||||
enum AVFrameSideDataType type,
|
|
||||||
AVBufferRef *buf);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return a pointer to the side data of a given type on success, NULL if there
|
|
||||||
* is no side data with such type in this frame.
|
|
||||||
*/
|
|
||||||
AVFrameSideData *av_frame_get_side_data(const AVFrame *frame,
|
|
||||||
enum AVFrameSideDataType type);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove and free all side data instances of the given type.
|
|
||||||
*/
|
|
||||||
void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Flags for frame cropping.
|
|
||||||
*/
|
|
||||||
enum {
|
|
||||||
/**
|
|
||||||
* Apply the maximum possible cropping, even if it requires setting the
|
|
||||||
* AVFrame.data[] entries to unaligned pointers. Passing unaligned data
|
|
||||||
* to FFmpeg API is generally not allowed, and causes undefined behavior
|
|
||||||
* (such as crashes). You can pass unaligned data only to FFmpeg APIs that
|
|
||||||
* are explicitly documented to accept it. Use this flag only if you
|
|
||||||
* absolutely know what you are doing.
|
|
||||||
*/
|
|
||||||
AV_FRAME_CROP_UNALIGNED = 1 << 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Crop the given video AVFrame according to its crop_left/crop_top/crop_right/
|
|
||||||
* crop_bottom fields. If cropping is successful, the function will adjust the
|
|
||||||
* data pointers and the width/height fields, and set the crop fields to 0.
|
|
||||||
*
|
|
||||||
* In all cases, the cropping boundaries will be rounded to the inherent
|
|
||||||
* alignment of the pixel format. In some cases, such as for opaque hwaccel
|
|
||||||
* formats, the left/top cropping is ignored. The crop fields are set to 0 even
|
|
||||||
* if the cropping was rounded or ignored.
|
|
||||||
*
|
|
||||||
* @param frame the frame which should be cropped
|
|
||||||
* @param flags Some combination of AV_FRAME_CROP_* flags, or 0.
|
|
||||||
*
|
|
||||||
* @return >= 0 on success, a negative AVERROR on error. If the cropping fields
|
|
||||||
* were invalid, AVERROR(ERANGE) is returned, and nothing is changed.
|
|
||||||
*/
|
|
||||||
int av_frame_apply_cropping(AVFrame *frame, int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return a string identifying the side data type
|
|
||||||
*/
|
|
||||||
const char *av_frame_side_data_name(enum AVFrameSideDataType type);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_FRAME_H */
|
|
||||||
@@ -1,269 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2013 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavu_hash_generic
|
|
||||||
* Generic hashing API
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_HASH_H
|
|
||||||
#define AVUTIL_HASH_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "avutilVersion.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_hash Hash Functions
|
|
||||||
* @ingroup lavu_crypto
|
|
||||||
* Hash functions useful in multimedia.
|
|
||||||
*
|
|
||||||
* Hash functions are widely used in multimedia, from error checking and
|
|
||||||
* concealment to internal regression testing. libavutil has efficient
|
|
||||||
* implementations of a variety of hash functions that may be useful for
|
|
||||||
* FFmpeg and other multimedia applications.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @defgroup lavu_hash_generic Generic Hashing API
|
|
||||||
* An abstraction layer for all hash functions supported by libavutil.
|
|
||||||
*
|
|
||||||
* If your application needs to support a wide range of different hash
|
|
||||||
* functions, then the Generic Hashing API is for you. It provides a generic,
|
|
||||||
* reusable API for @ref lavu_hash "all hash functions" implemented in libavutil.
|
|
||||||
* If you just need to use one particular hash function, use the @ref lavu_hash
|
|
||||||
* "individual hash" directly.
|
|
||||||
*
|
|
||||||
* @section Sample Code
|
|
||||||
*
|
|
||||||
* A basic template for using the Generic Hashing API follows:
|
|
||||||
*
|
|
||||||
* @code
|
|
||||||
* struct AVHashContext *ctx = NULL;
|
|
||||||
* const char *hash_name = NULL;
|
|
||||||
* uint8_t *output_buf = NULL;
|
|
||||||
*
|
|
||||||
* // Select from a string returned by av_hash_names()
|
|
||||||
* hash_name = ...;
|
|
||||||
*
|
|
||||||
* // Allocate a hash context
|
|
||||||
* ret = av_hash_alloc(&ctx, hash_name);
|
|
||||||
* if (ret < 0)
|
|
||||||
* return ret;
|
|
||||||
*
|
|
||||||
* // Initialize the hash context
|
|
||||||
* av_hash_init(ctx);
|
|
||||||
*
|
|
||||||
* // Update the hash context with data
|
|
||||||
* while (data_left) {
|
|
||||||
* av_hash_update(ctx, data, size);
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
* // Now we have no more data, so it is time to finalize the hash and get the
|
|
||||||
* // output. But we need to first allocate an output buffer. Note that you can
|
|
||||||
* // use any memory allocation function, including malloc(), not just
|
|
||||||
* // av_malloc().
|
|
||||||
* output_buf = av_malloc(av_hash_get_size(ctx));
|
|
||||||
* if (!output_buf)
|
|
||||||
* return AVERROR(ENOMEM);
|
|
||||||
*
|
|
||||||
* // Finalize the hash context.
|
|
||||||
* // You can use any of the av_hash_final*() functions provided, for other
|
|
||||||
* // output formats. If you do so, be sure to adjust the memory allocation
|
|
||||||
* // above. See the function documentation below for the exact amount of extra
|
|
||||||
* // memory needed.
|
|
||||||
* av_hash_final(ctx, output_buffer);
|
|
||||||
*
|
|
||||||
* // Free the context
|
|
||||||
* av_hash_freep(&ctx);
|
|
||||||
* @endcode
|
|
||||||
*
|
|
||||||
* @section Hash Function-Specific Information
|
|
||||||
* If the CRC32 hash is selected, the #AV_CRC_32_IEEE polynomial will be
|
|
||||||
* used.
|
|
||||||
*
|
|
||||||
* If the Murmur3 hash is selected, the default seed will be used. See @ref
|
|
||||||
* lavu_murmur3_seedinfo "Murmur3" for more information.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @example ffhash.c
|
|
||||||
* This example is a simple command line application that takes one or more
|
|
||||||
* arguments. It demonstrates a typical use of the hashing API with allocation,
|
|
||||||
* initialization, updating, and finalizing.
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct AVHashContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate a hash context for the algorithm specified by name.
|
|
||||||
*
|
|
||||||
* @return >= 0 for success, a negative error code for failure
|
|
||||||
*
|
|
||||||
* @note The context is not initialized after a call to this function; you must
|
|
||||||
* call av_hash_init() to do so.
|
|
||||||
*/
|
|
||||||
int av_hash_alloc(struct AVHashContext **ctx, const char *name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the names of available hash algorithms.
|
|
||||||
*
|
|
||||||
* This function can be used to enumerate the algorithms.
|
|
||||||
*
|
|
||||||
* @param[in] i Index of the hash algorithm, starting from 0
|
|
||||||
* @return Pointer to a static string or `NULL` if `i` is out of range
|
|
||||||
*/
|
|
||||||
const char *av_hash_names(int i);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the name of the algorithm corresponding to the given hash context.
|
|
||||||
*/
|
|
||||||
const char *av_hash_get_name(const struct AVHashContext *ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Maximum value that av_hash_get_size() will currently return.
|
|
||||||
*
|
|
||||||
* You can use this if you absolutely want or need to use static allocation for
|
|
||||||
* the output buffer and are fine with not supporting hashes newly added to
|
|
||||||
* libavutil without recompilation.
|
|
||||||
*
|
|
||||||
* @warning
|
|
||||||
* Adding new hashes with larger sizes, and increasing the macro while doing
|
|
||||||
* so, will not be considered an ABI change. To prevent your code from
|
|
||||||
* overflowing a buffer, either dynamically allocate the output buffer with
|
|
||||||
* av_hash_get_size(), or limit your use of the Hashing API to hashes that are
|
|
||||||
* already in FFmpeg during the time of compilation.
|
|
||||||
*/
|
|
||||||
#define AV_HASH_MAX_SIZE 64
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the size of the resulting hash value in bytes.
|
|
||||||
*
|
|
||||||
* The maximum value this function will currently return is available as macro
|
|
||||||
* #AV_HASH_MAX_SIZE.
|
|
||||||
*
|
|
||||||
* @param[in] ctx Hash context
|
|
||||||
* @return Size of the hash value in bytes
|
|
||||||
*/
|
|
||||||
int av_hash_get_size(const struct AVHashContext *ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize or reset a hash context.
|
|
||||||
*
|
|
||||||
* @param[in,out] ctx Hash context
|
|
||||||
*/
|
|
||||||
void av_hash_init(struct AVHashContext *ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update a hash context with additional data.
|
|
||||||
*
|
|
||||||
* @param[in,out] ctx Hash context
|
|
||||||
* @param[in] src Data to be added to the hash context
|
|
||||||
* @param[in] len Size of the additional data
|
|
||||||
*/
|
|
||||||
#if FF_API_CRYPTO_SIZE_T
|
|
||||||
void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, int len);
|
|
||||||
#else
|
|
||||||
void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, size_t len);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finalize a hash context and compute the actual hash value.
|
|
||||||
*
|
|
||||||
* The minimum size of `dst` buffer is given by av_hash_get_size() or
|
|
||||||
* #AV_HASH_MAX_SIZE. The use of the latter macro is discouraged.
|
|
||||||
*
|
|
||||||
* It is not safe to update or finalize a hash context again, if it has already
|
|
||||||
* been finalized.
|
|
||||||
*
|
|
||||||
* @param[in,out] ctx Hash context
|
|
||||||
* @param[out] dst Where the final hash value will be stored
|
|
||||||
*
|
|
||||||
* @see av_hash_final_bin() provides an alternative API
|
|
||||||
*/
|
|
||||||
void av_hash_final(struct AVHashContext *ctx, uint8_t *dst);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finalize a hash context and store the actual hash value in a buffer.
|
|
||||||
*
|
|
||||||
* It is not safe to update or finalize a hash context again, if it has already
|
|
||||||
* been finalized.
|
|
||||||
*
|
|
||||||
* If `size` is smaller than the hash size (given by av_hash_get_size()), the
|
|
||||||
* hash is truncated; if size is larger, the buffer is padded with 0.
|
|
||||||
*
|
|
||||||
* @param[in,out] ctx Hash context
|
|
||||||
* @param[out] dst Where the final hash value will be stored
|
|
||||||
* @param[in] size Number of bytes to write to `dst`
|
|
||||||
*/
|
|
||||||
void av_hash_final_bin(struct AVHashContext *ctx, uint8_t *dst, int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finalize a hash context and store the hexadecimal representation of the
|
|
||||||
* actual hash value as a string.
|
|
||||||
*
|
|
||||||
* It is not safe to update or finalize a hash context again, if it has already
|
|
||||||
* been finalized.
|
|
||||||
*
|
|
||||||
* The string is always 0-terminated.
|
|
||||||
*
|
|
||||||
* If `size` is smaller than `2 * hash_size + 1`, where `hash_size` is the
|
|
||||||
* value returned by av_hash_get_size(), the string will be truncated.
|
|
||||||
*
|
|
||||||
* @param[in,out] ctx Hash context
|
|
||||||
* @param[out] dst Where the string will be stored
|
|
||||||
* @param[in] size Maximum number of bytes to write to `dst`
|
|
||||||
*/
|
|
||||||
void av_hash_final_hex(struct AVHashContext *ctx, uint8_t *dst, int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finalize a hash context and store the Base64 representation of the
|
|
||||||
* actual hash value as a string.
|
|
||||||
*
|
|
||||||
* It is not safe to update or finalize a hash context again, if it has already
|
|
||||||
* been finalized.
|
|
||||||
*
|
|
||||||
* The string is always 0-terminated.
|
|
||||||
*
|
|
||||||
* If `size` is smaller than AV_BASE64_SIZE(hash_size), where `hash_size` is
|
|
||||||
* the value returned by av_hash_get_size(), the string will be truncated.
|
|
||||||
*
|
|
||||||
* @param[in,out] ctx Hash context
|
|
||||||
* @param[out] dst Where the final hash value will be stored
|
|
||||||
* @param[in] size Maximum number of bytes to write to `dst`
|
|
||||||
*/
|
|
||||||
void av_hash_final_b64(struct AVHashContext *ctx, uint8_t *dst, int size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free hash context and set hash context pointer to `NULL`.
|
|
||||||
*
|
|
||||||
* @param[in,out] ctx Pointer to hash context
|
|
||||||
*/
|
|
||||||
void av_hash_freep(struct AVHashContext **ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_HASH_H */
|
|
||||||
@@ -1,343 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2018 Mohammad Izadi <moh.izadi at gmail.com>
|
|
||||||
*
|
|
||||||
* 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_HDR_DYNAMIC_METADATA_H
|
|
||||||
#define AVUTIL_HDR_DYNAMIC_METADATA_H
|
|
||||||
|
|
||||||
#include "frame.h"
|
|
||||||
#include "rational.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Option for overlapping elliptical pixel selectors in an image.
|
|
||||||
*/
|
|
||||||
enum AVHDRPlusOverlapProcessOption {
|
|
||||||
AV_HDR_PLUS_OVERLAP_PROCESS_WEIGHTED_AVERAGING = 0,
|
|
||||||
AV_HDR_PLUS_OVERLAP_PROCESS_LAYERING = 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents the percentile at a specific percentage in
|
|
||||||
* a distribution.
|
|
||||||
*/
|
|
||||||
typedef struct AVHDRPlusPercentile {
|
|
||||||
/**
|
|
||||||
* The percentage value corresponding to a specific percentile linearized
|
|
||||||
* RGB value in the processing window in the scene. The value shall be in
|
|
||||||
* the range of 0 to100, inclusive.
|
|
||||||
*/
|
|
||||||
uint8_t percentage;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The linearized maxRGB value at a specific percentile in the processing
|
|
||||||
* window in the scene. The value shall be in the range of 0 to 1, inclusive
|
|
||||||
* and in multiples of 0.00001.
|
|
||||||
*/
|
|
||||||
AVRational percentile;
|
|
||||||
} AVHDRPlusPercentile;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Color transform parameters at a processing window in a dynamic metadata for
|
|
||||||
* SMPTE 2094-40.
|
|
||||||
*/
|
|
||||||
typedef struct AVHDRPlusColorTransformParams {
|
|
||||||
/**
|
|
||||||
* The relative x coordinate of the top left pixel of the processing
|
|
||||||
* window. The value shall be in the range of 0 and 1, inclusive and
|
|
||||||
* in multiples of 1/(width of Picture - 1). The value 1 corresponds
|
|
||||||
* to the absolute coordinate of width of Picture - 1. The value for
|
|
||||||
* first processing window shall be 0.
|
|
||||||
*/
|
|
||||||
AVRational window_upper_left_corner_x;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The relative y coordinate of the top left pixel of the processing
|
|
||||||
* window. The value shall be in the range of 0 and 1, inclusive and
|
|
||||||
* in multiples of 1/(height of Picture - 1). The value 1 corresponds
|
|
||||||
* to the absolute coordinate of height of Picture - 1. The value for
|
|
||||||
* first processing window shall be 0.
|
|
||||||
*/
|
|
||||||
AVRational window_upper_left_corner_y;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The relative x coordinate of the bottom right pixel of the processing
|
|
||||||
* window. The value shall be in the range of 0 and 1, inclusive and
|
|
||||||
* in multiples of 1/(width of Picture - 1). The value 1 corresponds
|
|
||||||
* to the absolute coordinate of width of Picture - 1. The value for
|
|
||||||
* first processing window shall be 1.
|
|
||||||
*/
|
|
||||||
AVRational window_lower_right_corner_x;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The relative y coordinate of the bottom right pixel of the processing
|
|
||||||
* window. The value shall be in the range of 0 and 1, inclusive and
|
|
||||||
* in multiples of 1/(height of Picture - 1). The value 1 corresponds
|
|
||||||
* to the absolute coordinate of height of Picture - 1. The value for
|
|
||||||
* first processing window shall be 1.
|
|
||||||
*/
|
|
||||||
AVRational window_lower_right_corner_y;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The x coordinate of the center position of the concentric internal and
|
|
||||||
* external ellipses of the elliptical pixel selector in the processing
|
|
||||||
* window. The value shall be in the range of 0 to (width of Picture - 1),
|
|
||||||
* inclusive and in multiples of 1 pixel.
|
|
||||||
*/
|
|
||||||
uint16_t center_of_ellipse_x;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The y coordinate of the center position of the concentric internal and
|
|
||||||
* external ellipses of the elliptical pixel selector in the processing
|
|
||||||
* window. The value shall be in the range of 0 to (height of Picture - 1),
|
|
||||||
* inclusive and in multiples of 1 pixel.
|
|
||||||
*/
|
|
||||||
uint16_t center_of_ellipse_y;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The clockwise rotation angle in degree of arc with respect to the
|
|
||||||
* positive direction of the x-axis of the concentric internal and external
|
|
||||||
* ellipses of the elliptical pixel selector in the processing window. The
|
|
||||||
* value shall be in the range of 0 to 180, inclusive and in multiples of 1.
|
|
||||||
*/
|
|
||||||
uint8_t rotation_angle;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The semi-major axis value of the internal ellipse of the elliptical pixel
|
|
||||||
* selector in amount of pixels in the processing window. The value shall be
|
|
||||||
* in the range of 1 to 65535, inclusive and in multiples of 1 pixel.
|
|
||||||
*/
|
|
||||||
uint16_t semimajor_axis_internal_ellipse;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The semi-major axis value of the external ellipse of the elliptical pixel
|
|
||||||
* selector in amount of pixels in the processing window. The value
|
|
||||||
* shall not be less than semimajor_axis_internal_ellipse of the current
|
|
||||||
* processing window. The value shall be in the range of 1 to 65535,
|
|
||||||
* inclusive and in multiples of 1 pixel.
|
|
||||||
*/
|
|
||||||
uint16_t semimajor_axis_external_ellipse;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The semi-minor axis value of the external ellipse of the elliptical pixel
|
|
||||||
* selector in amount of pixels in the processing window. The value shall be
|
|
||||||
* in the range of 1 to 65535, inclusive and in multiples of 1 pixel.
|
|
||||||
*/
|
|
||||||
uint16_t semiminor_axis_external_ellipse;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Overlap process option indicates one of the two methods of combining
|
|
||||||
* rendered pixels in the processing window in an image with at least one
|
|
||||||
* elliptical pixel selector. For overlapping elliptical pixel selectors
|
|
||||||
* in an image, overlap_process_option shall have the same value.
|
|
||||||
*/
|
|
||||||
enum AVHDRPlusOverlapProcessOption overlap_process_option;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The maximum of the color components of linearized RGB values in the
|
|
||||||
* processing window in the scene. The values should be in the range of 0 to
|
|
||||||
* 1, inclusive and in multiples of 0.00001. maxscl[ 0 ], maxscl[ 1 ], and
|
|
||||||
* maxscl[ 2 ] are corresponding to R, G, B color components respectively.
|
|
||||||
*/
|
|
||||||
AVRational maxscl[3];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The average of linearized maxRGB values in the processing window in the
|
|
||||||
* scene. The value should be in the range of 0 to 1, inclusive and in
|
|
||||||
* multiples of 0.00001.
|
|
||||||
*/
|
|
||||||
AVRational average_maxrgb;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of linearized maxRGB values at given percentiles in the
|
|
||||||
* processing window in the scene. The maximum value shall be 15.
|
|
||||||
*/
|
|
||||||
uint8_t num_distribution_maxrgb_percentiles;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The linearized maxRGB values at given percentiles in the
|
|
||||||
* processing window in the scene.
|
|
||||||
*/
|
|
||||||
AVHDRPlusPercentile distribution_maxrgb[15];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The fraction of selected pixels in the image that contains the brightest
|
|
||||||
* pixel in the scene. The value shall be in the range of 0 to 1, inclusive
|
|
||||||
* and in multiples of 0.001.
|
|
||||||
*/
|
|
||||||
AVRational fraction_bright_pixels;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This flag indicates that the metadata for the tone mapping function in
|
|
||||||
* the processing window is present (for value of 1).
|
|
||||||
*/
|
|
||||||
uint8_t tone_mapping_flag;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The x coordinate of the separation point between the linear part and the
|
|
||||||
* curved part of the tone mapping function. The value shall be in the range
|
|
||||||
* of 0 to 1, excluding 0 and in multiples of 1/4095.
|
|
||||||
*/
|
|
||||||
AVRational knee_point_x;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The y coordinate of the separation point between the linear part and the
|
|
||||||
* curved part of the tone mapping function. The value shall be in the range
|
|
||||||
* of 0 to 1, excluding 0 and in multiples of 1/4095.
|
|
||||||
*/
|
|
||||||
AVRational knee_point_y;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of the intermediate anchor parameters of the tone mapping
|
|
||||||
* function in the processing window. The maximum value shall be 15.
|
|
||||||
*/
|
|
||||||
uint8_t num_bezier_curve_anchors;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The intermediate anchor parameters of the tone mapping function in the
|
|
||||||
* processing window in the scene. The values should be in the range of 0
|
|
||||||
* to 1, inclusive and in multiples of 1/1023.
|
|
||||||
*/
|
|
||||||
AVRational bezier_curve_anchors[15];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This flag shall be equal to 0 in bitstreams conforming to this version of
|
|
||||||
* this Specification. Other values are reserved for future use.
|
|
||||||
*/
|
|
||||||
uint8_t color_saturation_mapping_flag;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The color saturation gain in the processing window in the scene. The
|
|
||||||
* value shall be in the range of 0 to 63/8, inclusive and in multiples of
|
|
||||||
* 1/8. The default value shall be 1.
|
|
||||||
*/
|
|
||||||
AVRational color_saturation_weight;
|
|
||||||
} AVHDRPlusColorTransformParams;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct represents dynamic metadata for color volume transform -
|
|
||||||
* application 4 of SMPTE 2094-40:2016 standard.
|
|
||||||
*
|
|
||||||
* To be used as payload of a AVFrameSideData or AVPacketSideData with the
|
|
||||||
* appropriate type.
|
|
||||||
*
|
|
||||||
* @note The struct should be allocated with
|
|
||||||
* av_dynamic_hdr_plus_alloc() and its size is not a part of
|
|
||||||
* the public ABI.
|
|
||||||
*/
|
|
||||||
typedef struct AVDynamicHDRPlus {
|
|
||||||
/**
|
|
||||||
* Country code by Rec. ITU-T T.35 Annex A. The value shall be 0xB5.
|
|
||||||
*/
|
|
||||||
uint8_t itu_t_t35_country_code;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Application version in the application defining document in ST-2094
|
|
||||||
* suite. The value shall be set to 0.
|
|
||||||
*/
|
|
||||||
uint8_t application_version;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of processing windows. The value shall be in the range
|
|
||||||
* of 1 to 3, inclusive.
|
|
||||||
*/
|
|
||||||
uint8_t num_windows;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The color transform parameters for every processing window.
|
|
||||||
*/
|
|
||||||
AVHDRPlusColorTransformParams params[3];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The nominal maximum display luminance of the targeted system display,
|
|
||||||
* in units of 0.0001 candelas per square metre. The value shall be in
|
|
||||||
* the range of 0 to 10000, inclusive.
|
|
||||||
*/
|
|
||||||
AVRational targeted_system_display_maximum_luminance;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This flag shall be equal to 0 in bit streams conforming to this version
|
|
||||||
* of this Specification. The value 1 is reserved for future use.
|
|
||||||
*/
|
|
||||||
uint8_t targeted_system_display_actual_peak_luminance_flag;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of rows in the targeted system_display_actual_peak_luminance
|
|
||||||
* array. The value shall be in the range of 2 to 25, inclusive.
|
|
||||||
*/
|
|
||||||
uint8_t num_rows_targeted_system_display_actual_peak_luminance;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of columns in the
|
|
||||||
* targeted_system_display_actual_peak_luminance array. The value shall be
|
|
||||||
* in the range of 2 to 25, inclusive.
|
|
||||||
*/
|
|
||||||
uint8_t num_cols_targeted_system_display_actual_peak_luminance;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The normalized actual peak luminance of the targeted system display. The
|
|
||||||
* values should be in the range of 0 to 1, inclusive and in multiples of
|
|
||||||
* 1/15.
|
|
||||||
*/
|
|
||||||
AVRational targeted_system_display_actual_peak_luminance[25][25];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This flag shall be equal to 0 in bitstreams conforming to this version of
|
|
||||||
* this Specification. The value 1 is reserved for future use.
|
|
||||||
*/
|
|
||||||
uint8_t mastering_display_actual_peak_luminance_flag;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of rows in the mastering_display_actual_peak_luminance array.
|
|
||||||
* The value shall be in the range of 2 to 25, inclusive.
|
|
||||||
*/
|
|
||||||
uint8_t num_rows_mastering_display_actual_peak_luminance;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of columns in the mastering_display_actual_peak_luminance
|
|
||||||
* array. The value shall be in the range of 2 to 25, inclusive.
|
|
||||||
*/
|
|
||||||
uint8_t num_cols_mastering_display_actual_peak_luminance;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The normalized actual peak luminance of the mastering display used for
|
|
||||||
* mastering the image essence. The values should be in the range of 0 to 1,
|
|
||||||
* inclusive and in multiples of 1/15.
|
|
||||||
*/
|
|
||||||
AVRational mastering_display_actual_peak_luminance[25][25];
|
|
||||||
} AVDynamicHDRPlus;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVDynamicHDRPlus structure and set its fields to
|
|
||||||
* default values. The resulting struct can be freed using av_freep().
|
|
||||||
*
|
|
||||||
* @return An AVDynamicHDRPlus filled with default values or NULL
|
|
||||||
* on failure.
|
|
||||||
*/
|
|
||||||
AVDynamicHDRPlus *av_dynamic_hdr_plus_alloc(size_t *size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate a complete AVDynamicHDRPlus and add it to the frame.
|
|
||||||
* @param frame The frame which side data is added to.
|
|
||||||
*
|
|
||||||
* @return The AVDynamicHDRPlus structure to be filled by caller or NULL
|
|
||||||
* on failure.
|
|
||||||
*/
|
|
||||||
AVDynamicHDRPlus *av_dynamic_hdr_plus_create_side_data(AVFrame *frame);
|
|
||||||
|
|
||||||
#endif /* AVUTIL_HDR_DYNAMIC_METADATA_H */
|
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2012 Martin Storsjo
|
|
||||||
*
|
|
||||||
* 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_HMAC_H
|
|
||||||
#define AVUTIL_HMAC_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "avutilVersion.h"
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_hmac HMAC
|
|
||||||
* @ingroup lavu_crypto
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum AVHMACType {
|
|
||||||
AV_HMAC_MD5,
|
|
||||||
AV_HMAC_SHA1,
|
|
||||||
AV_HMAC_SHA224,
|
|
||||||
AV_HMAC_SHA256,
|
|
||||||
AV_HMAC_SHA384,
|
|
||||||
AV_HMAC_SHA512,
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct AVHMAC AVHMAC;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVHMAC context.
|
|
||||||
* @param type The hash function used for the HMAC.
|
|
||||||
*/
|
|
||||||
AVHMAC *av_hmac_alloc(enum AVHMACType type);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free an AVHMAC context.
|
|
||||||
* @param ctx The context to free, may be NULL
|
|
||||||
*/
|
|
||||||
void av_hmac_free(AVHMAC *ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize an AVHMAC context with an authentication key.
|
|
||||||
* @param ctx The HMAC context
|
|
||||||
* @param key The authentication key
|
|
||||||
* @param keylen The length of the key, in bytes
|
|
||||||
*/
|
|
||||||
void av_hmac_init(AVHMAC *ctx, const uint8_t *key, unsigned int keylen);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hash data with the HMAC.
|
|
||||||
* @param ctx The HMAC context
|
|
||||||
* @param data The data to hash
|
|
||||||
* @param len The length of the data, in bytes
|
|
||||||
*/
|
|
||||||
void av_hmac_update(AVHMAC *ctx, const uint8_t *data, unsigned int len);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finish hashing and output the HMAC digest.
|
|
||||||
* @param ctx The HMAC context
|
|
||||||
* @param out The output buffer to write the digest into
|
|
||||||
* @param outlen The length of the out buffer, in bytes
|
|
||||||
* @return The number of bytes written to out, or a negative error code.
|
|
||||||
*/
|
|
||||||
int av_hmac_final(AVHMAC *ctx, uint8_t *out, unsigned int outlen);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hash an array of data with a key.
|
|
||||||
* @param ctx The HMAC context
|
|
||||||
* @param data The data to hash
|
|
||||||
* @param len The length of the data, in bytes
|
|
||||||
* @param key The authentication key
|
|
||||||
* @param keylen The length of the key, in bytes
|
|
||||||
* @param out The output buffer to write the digest into
|
|
||||||
* @param outlen The length of the out buffer, in bytes
|
|
||||||
* @return The number of bytes written to out, or a negative error code.
|
|
||||||
*/
|
|
||||||
int av_hmac_calc(AVHMAC *ctx, const uint8_t *data, unsigned int len,
|
|
||||||
const uint8_t *key, unsigned int keylen,
|
|
||||||
uint8_t *out, unsigned int outlen);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_HMAC_H */
|
|
||||||
@@ -1,605 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_HWCONTEXT_H
|
|
||||||
#define AVUTIL_HWCONTEXT_H
|
|
||||||
|
|
||||||
#include "buffer.h"
|
|
||||||
#include "frame.h"
|
|
||||||
#include "log.h"
|
|
||||||
#include "pixfmt.h"
|
|
||||||
|
|
||||||
enum AVHWDeviceType {
|
|
||||||
AV_HWDEVICE_TYPE_NONE,
|
|
||||||
AV_HWDEVICE_TYPE_VDPAU,
|
|
||||||
AV_HWDEVICE_TYPE_CUDA,
|
|
||||||
AV_HWDEVICE_TYPE_VAAPI,
|
|
||||||
AV_HWDEVICE_TYPE_DXVA2,
|
|
||||||
AV_HWDEVICE_TYPE_QSV,
|
|
||||||
AV_HWDEVICE_TYPE_VIDEOTOOLBOX,
|
|
||||||
AV_HWDEVICE_TYPE_D3D11VA,
|
|
||||||
AV_HWDEVICE_TYPE_DRM,
|
|
||||||
AV_HWDEVICE_TYPE_OPENCL,
|
|
||||||
AV_HWDEVICE_TYPE_MEDIACODEC,
|
|
||||||
AV_HWDEVICE_TYPE_VULKAN,
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct AVHWDeviceInternal AVHWDeviceInternal;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct aggregates all the (hardware/vendor-specific) "high-level" state,
|
|
||||||
* i.e. state that is not tied to a concrete processing configuration.
|
|
||||||
* E.g., in an API that supports hardware-accelerated encoding and decoding,
|
|
||||||
* this struct will (if possible) wrap the state that is common to both encoding
|
|
||||||
* and decoding and from which specific instances of encoders or decoders can be
|
|
||||||
* derived.
|
|
||||||
*
|
|
||||||
* This struct is reference-counted with the AVBuffer mechanism. The
|
|
||||||
* av_hwdevice_ctx_alloc() constructor yields a reference, whose data field
|
|
||||||
* points to the actual AVHWDeviceContext. Further objects derived from
|
|
||||||
* AVHWDeviceContext (such as AVHWFramesContext, describing a frame pool with
|
|
||||||
* specific properties) will hold an internal reference to it. After all the
|
|
||||||
* references are released, the AVHWDeviceContext itself will be freed,
|
|
||||||
* optionally invoking a user-specified callback for uninitializing the hardware
|
|
||||||
* state.
|
|
||||||
*/
|
|
||||||
typedef struct AVHWDeviceContext {
|
|
||||||
/**
|
|
||||||
* A class for logging. Set by av_hwdevice_ctx_alloc().
|
|
||||||
*/
|
|
||||||
const AVClass *av_class;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Private data used internally by libavutil. Must not be accessed in any
|
|
||||||
* way by the caller.
|
|
||||||
*/
|
|
||||||
AVHWDeviceInternal *internal;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This field identifies the underlying API used for hardware access.
|
|
||||||
*
|
|
||||||
* This field is set when this struct is allocated and never changed
|
|
||||||
* afterwards.
|
|
||||||
*/
|
|
||||||
enum AVHWDeviceType type;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The format-specific data, allocated and freed by libavutil along with
|
|
||||||
* this context.
|
|
||||||
*
|
|
||||||
* Should be cast by the user to the format-specific context defined in the
|
|
||||||
* corresponding header (hwcontext_*.h) and filled as described in the
|
|
||||||
* documentation before calling av_hwdevice_ctx_init().
|
|
||||||
*
|
|
||||||
* After calling av_hwdevice_ctx_init() this struct should not be modified
|
|
||||||
* by the caller.
|
|
||||||
*/
|
|
||||||
void *hwctx;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This field may be set by the caller before calling av_hwdevice_ctx_init().
|
|
||||||
*
|
|
||||||
* If non-NULL, this callback will be called when the last reference to
|
|
||||||
* this context is unreferenced, immediately before it is freed.
|
|
||||||
*
|
|
||||||
* @note when other objects (e.g an AVHWFramesContext) are derived from this
|
|
||||||
* struct, this callback will be invoked after all such child objects
|
|
||||||
* are fully uninitialized and their respective destructors invoked.
|
|
||||||
*/
|
|
||||||
void (*free)(struct AVHWDeviceContext *ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Arbitrary user data, to be used e.g. by the free() callback.
|
|
||||||
*/
|
|
||||||
void *user_opaque;
|
|
||||||
} AVHWDeviceContext;
|
|
||||||
|
|
||||||
typedef struct AVHWFramesInternal AVHWFramesInternal;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct describes a set or pool of "hardware" frames (i.e. those with
|
|
||||||
* data not located in normal system memory). All the frames in the pool are
|
|
||||||
* assumed to be allocated in the same way and interchangeable.
|
|
||||||
*
|
|
||||||
* This struct is reference-counted with the AVBuffer mechanism and tied to a
|
|
||||||
* given AVHWDeviceContext instance. The av_hwframe_ctx_alloc() constructor
|
|
||||||
* yields a reference, whose data field points to the actual AVHWFramesContext
|
|
||||||
* struct.
|
|
||||||
*/
|
|
||||||
typedef struct AVHWFramesContext {
|
|
||||||
/**
|
|
||||||
* A class for logging.
|
|
||||||
*/
|
|
||||||
const AVClass *av_class;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Private data used internally by libavutil. Must not be accessed in any
|
|
||||||
* way by the caller.
|
|
||||||
*/
|
|
||||||
AVHWFramesInternal *internal;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A reference to the parent AVHWDeviceContext. This reference is owned and
|
|
||||||
* managed by the enclosing AVHWFramesContext, but the caller may derive
|
|
||||||
* additional references from it.
|
|
||||||
*/
|
|
||||||
AVBufferRef *device_ref;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The parent AVHWDeviceContext. This is simply a pointer to
|
|
||||||
* device_ref->data provided for convenience.
|
|
||||||
*
|
|
||||||
* Set by libavutil in av_hwframe_ctx_init().
|
|
||||||
*/
|
|
||||||
AVHWDeviceContext *device_ctx;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The format-specific data, allocated and freed automatically along with
|
|
||||||
* this context.
|
|
||||||
*
|
|
||||||
* Should be cast by the user to the format-specific context defined in the
|
|
||||||
* corresponding header (hwframe_*.h) and filled as described in the
|
|
||||||
* documentation before calling av_hwframe_ctx_init().
|
|
||||||
*
|
|
||||||
* After any frames using this context are created, the contents of this
|
|
||||||
* struct should not be modified by the caller.
|
|
||||||
*/
|
|
||||||
void *hwctx;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This field may be set by the caller before calling av_hwframe_ctx_init().
|
|
||||||
*
|
|
||||||
* If non-NULL, this callback will be called when the last reference to
|
|
||||||
* this context is unreferenced, immediately before it is freed.
|
|
||||||
*/
|
|
||||||
void (*free)(struct AVHWFramesContext *ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Arbitrary user data, to be used e.g. by the free() callback.
|
|
||||||
*/
|
|
||||||
void *user_opaque;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A pool from which the frames are allocated by av_hwframe_get_buffer().
|
|
||||||
* This field may be set by the caller before calling av_hwframe_ctx_init().
|
|
||||||
* The buffers returned by calling av_buffer_pool_get() on this pool must
|
|
||||||
* have the properties described in the documentation in the corresponding hw
|
|
||||||
* type's header (hwcontext_*.h). The pool will be freed strictly before
|
|
||||||
* this struct's free() callback is invoked.
|
|
||||||
*
|
|
||||||
* This field may be NULL, then libavutil will attempt to allocate a pool
|
|
||||||
* internally. Note that certain device types enforce pools allocated at
|
|
||||||
* fixed size (frame count), which cannot be extended dynamically. In such a
|
|
||||||
* case, initial_pool_size must be set appropriately.
|
|
||||||
*/
|
|
||||||
AVBufferPool *pool;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initial size of the frame pool. If a device type does not support
|
|
||||||
* dynamically resizing the pool, then this is also the maximum pool size.
|
|
||||||
*
|
|
||||||
* May be set by the caller before calling av_hwframe_ctx_init(). Must be
|
|
||||||
* set if pool is NULL and the device type does not support dynamic pools.
|
|
||||||
*/
|
|
||||||
int initial_pool_size;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The pixel format identifying the underlying HW surface type.
|
|
||||||
*
|
|
||||||
* Must be a hwaccel format, i.e. the corresponding descriptor must have the
|
|
||||||
* AV_PIX_FMT_FLAG_HWACCEL flag set.
|
|
||||||
*
|
|
||||||
* Must be set by the user before calling av_hwframe_ctx_init().
|
|
||||||
*/
|
|
||||||
enum AVPixelFormat format;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The pixel format identifying the actual data layout of the hardware
|
|
||||||
* frames.
|
|
||||||
*
|
|
||||||
* Must be set by the caller before calling av_hwframe_ctx_init().
|
|
||||||
*
|
|
||||||
* @note when the underlying API does not provide the exact data layout, but
|
|
||||||
* only the colorspace/bit depth, this field should be set to the fully
|
|
||||||
* planar version of that format (e.g. for 8-bit 420 YUV it should be
|
|
||||||
* AV_PIX_FMT_YUV420P, not AV_PIX_FMT_NV12 or anything else).
|
|
||||||
*/
|
|
||||||
enum AVPixelFormat sw_format;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The allocated dimensions of the frames in this pool.
|
|
||||||
*
|
|
||||||
* Must be set by the user before calling av_hwframe_ctx_init().
|
|
||||||
*/
|
|
||||||
int width, height;
|
|
||||||
} AVHWFramesContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Look up an AVHWDeviceType by name.
|
|
||||||
*
|
|
||||||
* @param name String name of the device type (case-insensitive).
|
|
||||||
* @return The type from enum AVHWDeviceType, or AV_HWDEVICE_TYPE_NONE if
|
|
||||||
* not found.
|
|
||||||
*/
|
|
||||||
enum AVHWDeviceType av_hwdevice_find_type_by_name(const char *name);
|
|
||||||
|
|
||||||
/** Get the string name of an AVHWDeviceType.
|
|
||||||
*
|
|
||||||
* @param type Type from enum AVHWDeviceType.
|
|
||||||
* @return Pointer to a static string containing the name, or NULL if the type
|
|
||||||
* is not valid.
|
|
||||||
*/
|
|
||||||
const char *av_hwdevice_get_type_name(enum AVHWDeviceType type);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Iterate over supported device types.
|
|
||||||
*
|
|
||||||
* @param type AV_HWDEVICE_TYPE_NONE initially, then the previous type
|
|
||||||
* returned by this function in subsequent iterations.
|
|
||||||
* @return The next usable device type from enum AVHWDeviceType, or
|
|
||||||
* AV_HWDEVICE_TYPE_NONE if there are no more.
|
|
||||||
*/
|
|
||||||
enum AVHWDeviceType av_hwdevice_iterate_types(enum AVHWDeviceType prev);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVHWDeviceContext for a given hardware type.
|
|
||||||
*
|
|
||||||
* @param type the type of the hardware device to allocate.
|
|
||||||
* @return a reference to the newly created AVHWDeviceContext on success or NULL
|
|
||||||
* on failure.
|
|
||||||
*/
|
|
||||||
AVBufferRef *av_hwdevice_ctx_alloc(enum AVHWDeviceType type);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finalize the device context before use. This function must be called after
|
|
||||||
* the context is filled with all the required information and before it is
|
|
||||||
* used in any way.
|
|
||||||
*
|
|
||||||
* @param ref a reference to the AVHWDeviceContext
|
|
||||||
* @return 0 on success, a negative AVERROR code on failure
|
|
||||||
*/
|
|
||||||
int av_hwdevice_ctx_init(AVBufferRef *ref);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Open a device of the specified type and create an AVHWDeviceContext for it.
|
|
||||||
*
|
|
||||||
* This is a convenience function intended to cover the simple cases. Callers
|
|
||||||
* who need to fine-tune device creation/management should open the device
|
|
||||||
* manually and then wrap it in an AVHWDeviceContext using
|
|
||||||
* av_hwdevice_ctx_alloc()/av_hwdevice_ctx_init().
|
|
||||||
*
|
|
||||||
* The returned context is already initialized and ready for use, the caller
|
|
||||||
* should not call av_hwdevice_ctx_init() on it. The user_opaque/free fields of
|
|
||||||
* the created AVHWDeviceContext are set by this function and should not be
|
|
||||||
* touched by the caller.
|
|
||||||
*
|
|
||||||
* @param device_ctx On success, a reference to the newly-created device context
|
|
||||||
* will be written here. The reference is owned by the caller
|
|
||||||
* and must be released with av_buffer_unref() when no longer
|
|
||||||
* needed. On failure, NULL will be written to this pointer.
|
|
||||||
* @param type The type of the device to create.
|
|
||||||
* @param device A type-specific string identifying the device to open.
|
|
||||||
* @param opts A dictionary of additional (type-specific) options to use in
|
|
||||||
* opening the device. The dictionary remains owned by the caller.
|
|
||||||
* @param flags currently unused
|
|
||||||
*
|
|
||||||
* @return 0 on success, a negative AVERROR code on failure.
|
|
||||||
*/
|
|
||||||
int av_hwdevice_ctx_create(AVBufferRef **device_ctx, enum AVHWDeviceType type,
|
|
||||||
const char *device, AVDictionary *opts, int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new device of the specified type from an existing device.
|
|
||||||
*
|
|
||||||
* If the source device is a device of the target type or was originally
|
|
||||||
* derived from such a device (possibly through one or more intermediate
|
|
||||||
* devices of other types), then this will return a reference to the
|
|
||||||
* existing device of the same type as is requested.
|
|
||||||
*
|
|
||||||
* Otherwise, it will attempt to derive a new device from the given source
|
|
||||||
* device. If direct derivation to the new type is not implemented, it will
|
|
||||||
* attempt the same derivation from each ancestor of the source device in
|
|
||||||
* turn looking for an implemented derivation method.
|
|
||||||
*
|
|
||||||
* @param dst_ctx On success, a reference to the newly-created
|
|
||||||
* AVHWDeviceContext.
|
|
||||||
* @param type The type of the new device to create.
|
|
||||||
* @param src_ctx A reference to an existing AVHWDeviceContext which will be
|
|
||||||
* used to create the new device.
|
|
||||||
* @param flags Currently unused; should be set to zero.
|
|
||||||
* @return Zero on success, a negative AVERROR code on failure.
|
|
||||||
*/
|
|
||||||
int av_hwdevice_ctx_create_derived(AVBufferRef **dst_ctx,
|
|
||||||
enum AVHWDeviceType type,
|
|
||||||
AVBufferRef *src_ctx, int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new device of the specified type from an existing device.
|
|
||||||
*
|
|
||||||
* This function performs the same action as av_hwdevice_ctx_create_derived,
|
|
||||||
* however, it is able to set options for the new device to be derived.
|
|
||||||
*
|
|
||||||
* @param dst_ctx On success, a reference to the newly-created
|
|
||||||
* AVHWDeviceContext.
|
|
||||||
* @param type The type of the new device to create.
|
|
||||||
* @param src_ctx A reference to an existing AVHWDeviceContext which will be
|
|
||||||
* used to create the new device.
|
|
||||||
* @param options Options for the new device to create, same format as in
|
|
||||||
* av_hwdevice_ctx_create.
|
|
||||||
* @param flags Currently unused; should be set to zero.
|
|
||||||
* @return Zero on success, a negative AVERROR code on failure.
|
|
||||||
*/
|
|
||||||
int av_hwdevice_ctx_create_derived_opts(AVBufferRef **dst_ctx,
|
|
||||||
enum AVHWDeviceType type,
|
|
||||||
AVBufferRef *src_ctx,
|
|
||||||
AVDictionary *options, int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an AVHWFramesContext tied to a given device context.
|
|
||||||
*
|
|
||||||
* @param device_ctx a reference to a AVHWDeviceContext. This function will make
|
|
||||||
* a new reference for internal use, the one passed to the
|
|
||||||
* function remains owned by the caller.
|
|
||||||
* @return a reference to the newly created AVHWFramesContext on success or NULL
|
|
||||||
* on failure.
|
|
||||||
*/
|
|
||||||
AVBufferRef *av_hwframe_ctx_alloc(AVBufferRef *device_ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finalize the context before use. This function must be called after the
|
|
||||||
* context is filled with all the required information and before it is attached
|
|
||||||
* to any frames.
|
|
||||||
*
|
|
||||||
* @param ref a reference to the AVHWFramesContext
|
|
||||||
* @return 0 on success, a negative AVERROR code on failure
|
|
||||||
*/
|
|
||||||
int av_hwframe_ctx_init(AVBufferRef *ref);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate a new frame attached to the given AVHWFramesContext.
|
|
||||||
*
|
|
||||||
* @param hwframe_ctx a reference to an AVHWFramesContext
|
|
||||||
* @param frame an empty (freshly allocated or unreffed) frame to be filled with
|
|
||||||
* newly allocated buffers.
|
|
||||||
* @param flags currently unused, should be set to zero
|
|
||||||
* @return 0 on success, a negative AVERROR code on failure
|
|
||||||
*/
|
|
||||||
int av_hwframe_get_buffer(AVBufferRef *hwframe_ctx, AVFrame *frame, int flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy data to or from a hw surface. At least one of dst/src must have an
|
|
||||||
* AVHWFramesContext attached.
|
|
||||||
*
|
|
||||||
* If src has an AVHWFramesContext attached, then the format of dst (if set)
|
|
||||||
* must use one of the formats returned by av_hwframe_transfer_get_formats(src,
|
|
||||||
* AV_HWFRAME_TRANSFER_DIRECTION_FROM).
|
|
||||||
* If dst has an AVHWFramesContext attached, then the format of src must use one
|
|
||||||
* of the formats returned by av_hwframe_transfer_get_formats(dst,
|
|
||||||
* AV_HWFRAME_TRANSFER_DIRECTION_TO)
|
|
||||||
*
|
|
||||||
* dst may be "clean" (i.e. with data/buf pointers unset), in which case the
|
|
||||||
* data buffers will be allocated by this function using av_frame_get_buffer().
|
|
||||||
* If dst->format is set, then this format will be used, otherwise (when
|
|
||||||
* dst->format is AV_PIX_FMT_NONE) the first acceptable format will be chosen.
|
|
||||||
*
|
|
||||||
* The two frames must have matching allocated dimensions (i.e. equal to
|
|
||||||
* AVHWFramesContext.width/height), since not all device types support
|
|
||||||
* transferring a sub-rectangle of the whole surface. The display dimensions
|
|
||||||
* (i.e. AVFrame.width/height) may be smaller than the allocated dimensions, but
|
|
||||||
* also have to be equal for both frames. When the display dimensions are
|
|
||||||
* smaller than the allocated dimensions, the content of the padding in the
|
|
||||||
* destination frame is unspecified.
|
|
||||||
*
|
|
||||||
* @param dst the destination frame. dst is not touched on failure.
|
|
||||||
* @param src the source frame.
|
|
||||||
* @param flags currently unused, should be set to zero
|
|
||||||
* @return 0 on success, a negative AVERROR error code on failure.
|
|
||||||
*/
|
|
||||||
int av_hwframe_transfer_data(AVFrame *dst, const AVFrame *src, int flags);
|
|
||||||
|
|
||||||
enum AVHWFrameTransferDirection {
|
|
||||||
/**
|
|
||||||
* Transfer the data from the queried hw frame.
|
|
||||||
*/
|
|
||||||
AV_HWFRAME_TRANSFER_DIRECTION_FROM,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Transfer the data to the queried hw frame.
|
|
||||||
*/
|
|
||||||
AV_HWFRAME_TRANSFER_DIRECTION_TO,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of possible source or target formats usable in
|
|
||||||
* av_hwframe_transfer_data().
|
|
||||||
*
|
|
||||||
* @param hwframe_ctx the frame context to obtain the information for
|
|
||||||
* @param dir the direction of the transfer
|
|
||||||
* @param formats the pointer to the output format list will be written here.
|
|
||||||
* The list is terminated with AV_PIX_FMT_NONE and must be freed
|
|
||||||
* by the caller when no longer needed using av_free().
|
|
||||||
* If this function returns successfully, the format list will
|
|
||||||
* have at least one item (not counting the terminator).
|
|
||||||
* On failure, the contents of this pointer are unspecified.
|
|
||||||
* @param flags currently unused, should be set to zero
|
|
||||||
* @return 0 on success, a negative AVERROR code on failure.
|
|
||||||
*/
|
|
||||||
int av_hwframe_transfer_get_formats(AVBufferRef *hwframe_ctx,
|
|
||||||
enum AVHWFrameTransferDirection dir,
|
|
||||||
enum AVPixelFormat **formats, int flags);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct describes the constraints on hardware frames attached to
|
|
||||||
* a given device with a hardware-specific configuration. This is returned
|
|
||||||
* by av_hwdevice_get_hwframe_constraints() and must be freed by
|
|
||||||
* av_hwframe_constraints_free() after use.
|
|
||||||
*/
|
|
||||||
typedef struct AVHWFramesConstraints {
|
|
||||||
/**
|
|
||||||
* A list of possible values for format in the hw_frames_ctx,
|
|
||||||
* terminated by AV_PIX_FMT_NONE. This member will always be filled.
|
|
||||||
*/
|
|
||||||
enum AVPixelFormat *valid_hw_formats;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A list of possible values for sw_format in the hw_frames_ctx,
|
|
||||||
* terminated by AV_PIX_FMT_NONE. Can be NULL if this information is
|
|
||||||
* not known.
|
|
||||||
*/
|
|
||||||
enum AVPixelFormat *valid_sw_formats;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The minimum size of frames in this hw_frames_ctx.
|
|
||||||
* (Zero if not known.)
|
|
||||||
*/
|
|
||||||
int min_width;
|
|
||||||
int min_height;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The maximum size of frames in this hw_frames_ctx.
|
|
||||||
* (INT_MAX if not known / no limit.)
|
|
||||||
*/
|
|
||||||
int max_width;
|
|
||||||
int max_height;
|
|
||||||
} AVHWFramesConstraints;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate a HW-specific configuration structure for a given HW device.
|
|
||||||
* After use, the user must free all members as required by the specific
|
|
||||||
* hardware structure being used, then free the structure itself with
|
|
||||||
* av_free().
|
|
||||||
*
|
|
||||||
* @param device_ctx a reference to the associated AVHWDeviceContext.
|
|
||||||
* @return The newly created HW-specific configuration structure on
|
|
||||||
* success or NULL on failure.
|
|
||||||
*/
|
|
||||||
void *av_hwdevice_hwconfig_alloc(AVBufferRef *device_ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the constraints on HW frames given a device and the HW-specific
|
|
||||||
* configuration to be used with that device. If no HW-specific
|
|
||||||
* configuration is provided, returns the maximum possible capabilities
|
|
||||||
* of the device.
|
|
||||||
*
|
|
||||||
* @param ref a reference to the associated AVHWDeviceContext.
|
|
||||||
* @param hwconfig a filled HW-specific configuration structure, or NULL
|
|
||||||
* to return the maximum possible capabilities of the device.
|
|
||||||
* @return AVHWFramesConstraints structure describing the constraints
|
|
||||||
* on the device, or NULL if not available.
|
|
||||||
*/
|
|
||||||
AVHWFramesConstraints *av_hwdevice_get_hwframe_constraints(AVBufferRef *ref,
|
|
||||||
const void *hwconfig);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free an AVHWFrameConstraints structure.
|
|
||||||
*
|
|
||||||
* @param constraints The (filled or unfilled) AVHWFrameConstraints structure.
|
|
||||||
*/
|
|
||||||
void av_hwframe_constraints_free(AVHWFramesConstraints **constraints);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Flags to apply to frame mappings.
|
|
||||||
*/
|
|
||||||
enum {
|
|
||||||
/**
|
|
||||||
* The mapping must be readable.
|
|
||||||
*/
|
|
||||||
AV_HWFRAME_MAP_READ = 1 << 0,
|
|
||||||
/**
|
|
||||||
* The mapping must be writeable.
|
|
||||||
*/
|
|
||||||
AV_HWFRAME_MAP_WRITE = 1 << 1,
|
|
||||||
/**
|
|
||||||
* The mapped frame will be overwritten completely in subsequent
|
|
||||||
* operations, so the current frame data need not be loaded. Any values
|
|
||||||
* which are not overwritten are unspecified.
|
|
||||||
*/
|
|
||||||
AV_HWFRAME_MAP_OVERWRITE = 1 << 2,
|
|
||||||
/**
|
|
||||||
* The mapping must be direct. That is, there must not be any copying in
|
|
||||||
* the map or unmap steps. Note that performance of direct mappings may
|
|
||||||
* be much lower than normal memory.
|
|
||||||
*/
|
|
||||||
AV_HWFRAME_MAP_DIRECT = 1 << 3,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Map a hardware frame.
|
|
||||||
*
|
|
||||||
* This has a number of different possible effects, depending on the format
|
|
||||||
* and origin of the src and dst frames. On input, src should be a usable
|
|
||||||
* frame with valid buffers and dst should be blank (typically as just created
|
|
||||||
* by av_frame_alloc()). src should have an associated hwframe context, and
|
|
||||||
* dst may optionally have a format and associated hwframe context.
|
|
||||||
*
|
|
||||||
* If src was created by mapping a frame from the hwframe context of dst,
|
|
||||||
* then this function undoes the mapping - dst is replaced by a reference to
|
|
||||||
* the frame that src was originally mapped from.
|
|
||||||
*
|
|
||||||
* If both src and dst have an associated hwframe context, then this function
|
|
||||||
* attempts to map the src frame from its hardware context to that of dst and
|
|
||||||
* then fill dst with appropriate data to be usable there. This will only be
|
|
||||||
* possible if the hwframe contexts and associated devices are compatible -
|
|
||||||
* given compatible devices, av_hwframe_ctx_create_derived() can be used to
|
|
||||||
* create a hwframe context for dst in which mapping should be possible.
|
|
||||||
*
|
|
||||||
* If src has a hwframe context but dst does not, then the src frame is
|
|
||||||
* mapped to normal memory and should thereafter be usable as a normal frame.
|
|
||||||
* If the format is set on dst, then the mapping will attempt to create dst
|
|
||||||
* with that format and fail if it is not possible. If format is unset (is
|
|
||||||
* AV_PIX_FMT_NONE) then dst will be mapped with whatever the most appropriate
|
|
||||||
* format to use is (probably the sw_format of the src hwframe context).
|
|
||||||
*
|
|
||||||
* A return value of AVERROR(ENOSYS) indicates that the mapping is not
|
|
||||||
* possible with the given arguments and hwframe setup, while other return
|
|
||||||
* values indicate that it failed somehow.
|
|
||||||
*
|
|
||||||
* @param dst Destination frame, to contain the mapping.
|
|
||||||
* @param src Source frame, to be mapped.
|
|
||||||
* @param flags Some combination of AV_HWFRAME_MAP_* flags.
|
|
||||||
* @return Zero on success, negative AVERROR code on failure.
|
|
||||||
*/
|
|
||||||
int av_hwframe_map(AVFrame *dst, const AVFrame *src, int flags);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create and initialise an AVHWFramesContext as a mapping of another existing
|
|
||||||
* AVHWFramesContext on a different device.
|
|
||||||
*
|
|
||||||
* av_hwframe_ctx_init() should not be called after this.
|
|
||||||
*
|
|
||||||
* @param derived_frame_ctx On success, a reference to the newly created
|
|
||||||
* AVHWFramesContext.
|
|
||||||
* @param derived_device_ctx A reference to the device to create the new
|
|
||||||
* AVHWFramesContext on.
|
|
||||||
* @param source_frame_ctx A reference to an existing AVHWFramesContext
|
|
||||||
* which will be mapped to the derived context.
|
|
||||||
* @param flags Some combination of AV_HWFRAME_MAP_* flags, defining the
|
|
||||||
* mapping parameters to apply to frames which are allocated
|
|
||||||
* in the derived device.
|
|
||||||
* @return Zero on success, negative AVERROR code on failure.
|
|
||||||
*/
|
|
||||||
int av_hwframe_ctx_create_derived(AVBufferRef **derived_frame_ctx,
|
|
||||||
enum AVPixelFormat format,
|
|
||||||
AVBufferRef *derived_device_ctx,
|
|
||||||
AVBufferRef *source_frame_ctx,
|
|
||||||
int flags);
|
|
||||||
|
|
||||||
#endif /* AVUTIL_HWCONTEXT_H */
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_HWCONTEXT_CUDA_H
|
|
||||||
#define AVUTIL_HWCONTEXT_CUDA_H
|
|
||||||
|
|
||||||
#ifndef CUDA_VERSION
|
|
||||||
#include <cuda.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "pixfmt.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* An API-specific header for AV_HWDEVICE_TYPE_CUDA.
|
|
||||||
*
|
|
||||||
* This API supports dynamic frame pools. AVHWFramesContext.pool must return
|
|
||||||
* AVBufferRefs whose data pointer is a CUdeviceptr.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct AVCUDADeviceContextInternal AVCUDADeviceContextInternal;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct is allocated as AVHWDeviceContext.hwctx
|
|
||||||
*/
|
|
||||||
typedef struct AVCUDADeviceContext {
|
|
||||||
CUcontext cuda_ctx;
|
|
||||||
CUstream stream;
|
|
||||||
AVCUDADeviceContextInternal *internal;
|
|
||||||
} AVCUDADeviceContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* AVHWFramesContext.hwctx is currently not used
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup hwcontext_cuda Device context creation flags
|
|
||||||
*
|
|
||||||
* Flags for av_hwdevice_ctx_create.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Use primary device context instead of creating a new one.
|
|
||||||
*/
|
|
||||||
#define AV_CUDA_USE_PRIMARY_CONTEXT (1 << 0)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_HWCONTEXT_CUDA_H */
|
|
||||||
@@ -1,169 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_HWCONTEXT_D3D11VA_H
|
|
||||||
#define AVUTIL_HWCONTEXT_D3D11VA_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* An API-specific header for AV_HWDEVICE_TYPE_D3D11VA.
|
|
||||||
*
|
|
||||||
* The default pool implementation will be fixed-size if initial_pool_size is
|
|
||||||
* set (and allocate elements from an array texture). Otherwise it will allocate
|
|
||||||
* individual textures. Be aware that decoding requires a single array texture.
|
|
||||||
*
|
|
||||||
* Using sw_format==AV_PIX_FMT_YUV420P has special semantics, and maps to
|
|
||||||
* DXGI_FORMAT_420_OPAQUE. av_hwframe_transfer_data() is not supported for
|
|
||||||
* this format. Refer to MSDN for details.
|
|
||||||
*
|
|
||||||
* av_hwdevice_ctx_create() for this device type supports a key named "debug"
|
|
||||||
* for the AVDictionary entry. If this is set to any value, the device creation
|
|
||||||
* code will try to load various supported D3D debugging layers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <d3d11.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct is allocated as AVHWDeviceContext.hwctx
|
|
||||||
*/
|
|
||||||
typedef struct AVD3D11VADeviceContext {
|
|
||||||
/**
|
|
||||||
* Device used for texture creation and access. This can also be used to
|
|
||||||
* set the libavcodec decoding device.
|
|
||||||
*
|
|
||||||
* Must be set by the user. This is the only mandatory field - the other
|
|
||||||
* device context fields are set from this and are available for convenience.
|
|
||||||
*
|
|
||||||
* Deallocating the AVHWDeviceContext will always release this interface,
|
|
||||||
* and it does not matter whether it was user-allocated.
|
|
||||||
*/
|
|
||||||
ID3D11Device *device;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If unset, this will be set from the device field on init.
|
|
||||||
*
|
|
||||||
* Deallocating the AVHWDeviceContext will always release this interface,
|
|
||||||
* and it does not matter whether it was user-allocated.
|
|
||||||
*/
|
|
||||||
ID3D11DeviceContext *device_context;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If unset, this will be set from the device field on init.
|
|
||||||
*
|
|
||||||
* Deallocating the AVHWDeviceContext will always release this interface,
|
|
||||||
* and it does not matter whether it was user-allocated.
|
|
||||||
*/
|
|
||||||
ID3D11VideoDevice *video_device;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If unset, this will be set from the device_context field on init.
|
|
||||||
*
|
|
||||||
* Deallocating the AVHWDeviceContext will always release this interface,
|
|
||||||
* and it does not matter whether it was user-allocated.
|
|
||||||
*/
|
|
||||||
ID3D11VideoContext *video_context;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Callbacks for locking. They protect accesses to device_context and
|
|
||||||
* video_context calls. They also protect access to the internal staging
|
|
||||||
* texture (for av_hwframe_transfer_data() calls). They do NOT protect
|
|
||||||
* access to hwcontext or decoder state in general.
|
|
||||||
*
|
|
||||||
* If unset on init, the hwcontext implementation will set them to use an
|
|
||||||
* internal mutex.
|
|
||||||
*
|
|
||||||
* The underlying lock must be recursive. lock_ctx is for free use by the
|
|
||||||
* locking implementation.
|
|
||||||
*/
|
|
||||||
void (*lock)(void *lock_ctx);
|
|
||||||
void (*unlock)(void *lock_ctx);
|
|
||||||
void *lock_ctx;
|
|
||||||
} AVD3D11VADeviceContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* D3D11 frame descriptor for pool allocation.
|
|
||||||
*
|
|
||||||
* In user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs
|
|
||||||
* with the data pointer pointing at an object of this type describing the
|
|
||||||
* planes of the frame.
|
|
||||||
*
|
|
||||||
* This has no use outside of custom allocation, and AVFrame AVBufferRef do not
|
|
||||||
* necessarily point to an instance of this struct.
|
|
||||||
*/
|
|
||||||
typedef struct AVD3D11FrameDescriptor {
|
|
||||||
/**
|
|
||||||
* The texture in which the frame is located. The reference count is
|
|
||||||
* managed by the AVBufferRef, and destroying the reference will release
|
|
||||||
* the interface.
|
|
||||||
*
|
|
||||||
* Normally stored in AVFrame.data[0].
|
|
||||||
*/
|
|
||||||
ID3D11Texture2D *texture;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The index into the array texture element representing the frame, or 0
|
|
||||||
* if the texture is not an array texture.
|
|
||||||
*
|
|
||||||
* Normally stored in AVFrame.data[1] (cast from intptr_t).
|
|
||||||
*/
|
|
||||||
intptr_t index;
|
|
||||||
} AVD3D11FrameDescriptor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct is allocated as AVHWFramesContext.hwctx
|
|
||||||
*/
|
|
||||||
typedef struct AVD3D11VAFramesContext {
|
|
||||||
/**
|
|
||||||
* The canonical texture used for pool allocation. If this is set to NULL
|
|
||||||
* on init, the hwframes implementation will allocate and set an array
|
|
||||||
* texture if initial_pool_size > 0.
|
|
||||||
*
|
|
||||||
* The only situation when the API user should set this is:
|
|
||||||
* - the user wants to do manual pool allocation (setting
|
|
||||||
* AVHWFramesContext.pool), instead of letting AVHWFramesContext
|
|
||||||
* allocate the pool
|
|
||||||
* - of an array texture
|
|
||||||
* - and wants it to use it for decoding
|
|
||||||
* - this has to be done before calling av_hwframe_ctx_init()
|
|
||||||
*
|
|
||||||
* Deallocating the AVHWFramesContext will always release this interface,
|
|
||||||
* and it does not matter whether it was user-allocated.
|
|
||||||
*
|
|
||||||
* This is in particular used by the libavcodec D3D11VA hwaccel, which
|
|
||||||
* requires a single array texture. It will create ID3D11VideoDecoderOutputView
|
|
||||||
* objects for each array texture element on decoder initialization.
|
|
||||||
*/
|
|
||||||
ID3D11Texture2D *texture;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* D3D11_TEXTURE2D_DESC.BindFlags used for texture creation. The user must
|
|
||||||
* at least set D3D11_BIND_DECODER if the frames context is to be used for
|
|
||||||
* video decoding.
|
|
||||||
* This field is ignored/invalid if a user-allocated texture is provided.
|
|
||||||
*/
|
|
||||||
UINT BindFlags;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* D3D11_TEXTURE2D_DESC.MiscFlags used for texture creation.
|
|
||||||
* This field is ignored/invalid if a user-allocated texture is provided.
|
|
||||||
*/
|
|
||||||
UINT MiscFlags;
|
|
||||||
} AVD3D11VAFramesContext;
|
|
||||||
|
|
||||||
#endif /* AVUTIL_HWCONTEXT_D3D11VA_H */
|
|
||||||
@@ -1,169 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_HWCONTEXT_DRM_H
|
|
||||||
#define AVUTIL_HWCONTEXT_DRM_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* API-specific header for AV_HWDEVICE_TYPE_DRM.
|
|
||||||
*
|
|
||||||
* Internal frame allocation is not currently supported - all frames
|
|
||||||
* must be allocated by the user. Thus AVHWFramesContext is always
|
|
||||||
* NULL, though this may change if support for frame allocation is
|
|
||||||
* added in future.
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum {
|
|
||||||
/**
|
|
||||||
* The maximum number of layers/planes in a DRM frame.
|
|
||||||
*/
|
|
||||||
AV_DRM_MAX_PLANES = 4
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DRM object descriptor.
|
|
||||||
*
|
|
||||||
* Describes a single DRM object, addressing it as a PRIME file
|
|
||||||
* descriptor.
|
|
||||||
*/
|
|
||||||
typedef struct AVDRMObjectDescriptor {
|
|
||||||
/**
|
|
||||||
* DRM PRIME fd for the object.
|
|
||||||
*/
|
|
||||||
int fd;
|
|
||||||
/**
|
|
||||||
* Total size of the object.
|
|
||||||
*
|
|
||||||
* (This includes any parts not which do not contain image data.)
|
|
||||||
*/
|
|
||||||
size_t size;
|
|
||||||
/**
|
|
||||||
* Format modifier applied to the object (DRM_FORMAT_MOD_*).
|
|
||||||
*
|
|
||||||
* If the format modifier is unknown then this should be set to
|
|
||||||
* DRM_FORMAT_MOD_INVALID.
|
|
||||||
*/
|
|
||||||
uint64_t format_modifier;
|
|
||||||
} AVDRMObjectDescriptor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DRM plane descriptor.
|
|
||||||
*
|
|
||||||
* Describes a single plane of a layer, which is contained within
|
|
||||||
* a single object.
|
|
||||||
*/
|
|
||||||
typedef struct AVDRMPlaneDescriptor {
|
|
||||||
/**
|
|
||||||
* Index of the object containing this plane in the objects
|
|
||||||
* array of the enclosing frame descriptor.
|
|
||||||
*/
|
|
||||||
int object_index;
|
|
||||||
/**
|
|
||||||
* Offset within that object of this plane.
|
|
||||||
*/
|
|
||||||
ptrdiff_t offset;
|
|
||||||
/**
|
|
||||||
* Pitch (linesize) of this plane.
|
|
||||||
*/
|
|
||||||
ptrdiff_t pitch;
|
|
||||||
} AVDRMPlaneDescriptor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DRM layer descriptor.
|
|
||||||
*
|
|
||||||
* Describes a single layer within a frame. This has the structure
|
|
||||||
* defined by its format, and will contain one or more planes.
|
|
||||||
*/
|
|
||||||
typedef struct AVDRMLayerDescriptor {
|
|
||||||
/**
|
|
||||||
* Format of the layer (DRM_FORMAT_*).
|
|
||||||
*/
|
|
||||||
uint32_t format;
|
|
||||||
/**
|
|
||||||
* Number of planes in the layer.
|
|
||||||
*
|
|
||||||
* This must match the number of planes required by format.
|
|
||||||
*/
|
|
||||||
int nb_planes;
|
|
||||||
/**
|
|
||||||
* Array of planes in this layer.
|
|
||||||
*/
|
|
||||||
AVDRMPlaneDescriptor planes[AV_DRM_MAX_PLANES];
|
|
||||||
} AVDRMLayerDescriptor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DRM frame descriptor.
|
|
||||||
*
|
|
||||||
* This is used as the data pointer for AV_PIX_FMT_DRM_PRIME frames.
|
|
||||||
* It is also used by user-allocated frame pools - allocating in
|
|
||||||
* AVHWFramesContext.pool must return AVBufferRefs which contain
|
|
||||||
* an object of this type.
|
|
||||||
*
|
|
||||||
* The fields of this structure should be set such it can be
|
|
||||||
* imported directly by EGL using the EGL_EXT_image_dma_buf_import
|
|
||||||
* and EGL_EXT_image_dma_buf_import_modifiers extensions.
|
|
||||||
* (Note that the exact layout of a particular format may vary between
|
|
||||||
* platforms - we only specify that the same platform should be able
|
|
||||||
* to import it.)
|
|
||||||
*
|
|
||||||
* The total number of planes must not exceed AV_DRM_MAX_PLANES, and
|
|
||||||
* the order of the planes by increasing layer index followed by
|
|
||||||
* increasing plane index must be the same as the order which would
|
|
||||||
* be used for the data pointers in the equivalent software format.
|
|
||||||
*/
|
|
||||||
typedef struct AVDRMFrameDescriptor {
|
|
||||||
/**
|
|
||||||
* Number of DRM objects making up this frame.
|
|
||||||
*/
|
|
||||||
int nb_objects;
|
|
||||||
/**
|
|
||||||
* Array of objects making up the frame.
|
|
||||||
*/
|
|
||||||
AVDRMObjectDescriptor objects[AV_DRM_MAX_PLANES];
|
|
||||||
/**
|
|
||||||
* Number of layers in the frame.
|
|
||||||
*/
|
|
||||||
int nb_layers;
|
|
||||||
/**
|
|
||||||
* Array of layers in the frame.
|
|
||||||
*/
|
|
||||||
AVDRMLayerDescriptor layers[AV_DRM_MAX_PLANES];
|
|
||||||
} AVDRMFrameDescriptor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DRM device.
|
|
||||||
*
|
|
||||||
* Allocated as AVHWDeviceContext.hwctx.
|
|
||||||
*/
|
|
||||||
typedef struct AVDRMDeviceContext {
|
|
||||||
/**
|
|
||||||
* File descriptor of DRM device.
|
|
||||||
*
|
|
||||||
* This is used as the device to create frames on, and may also be
|
|
||||||
* used in some derivation and mapping operations.
|
|
||||||
*
|
|
||||||
* If no device is required, set to -1.
|
|
||||||
*/
|
|
||||||
int fd;
|
|
||||||
} AVDRMDeviceContext;
|
|
||||||
|
|
||||||
#endif /* AVUTIL_HWCONTEXT_DRM_H */
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_HWCONTEXT_DXVA2_H
|
|
||||||
#define AVUTIL_HWCONTEXT_DXVA2_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* An API-specific header for AV_HWDEVICE_TYPE_DXVA2.
|
|
||||||
*
|
|
||||||
* Only fixed-size pools are supported.
|
|
||||||
*
|
|
||||||
* For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs
|
|
||||||
* with the data pointer set to a pointer to IDirect3DSurface9.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <d3d9.h>
|
|
||||||
#include <dxva2api.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct is allocated as AVHWDeviceContext.hwctx
|
|
||||||
*/
|
|
||||||
typedef struct AVDXVA2DeviceContext {
|
|
||||||
IDirect3DDeviceManager9 *devmgr;
|
|
||||||
} AVDXVA2DeviceContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct is allocated as AVHWFramesContext.hwctx
|
|
||||||
*/
|
|
||||||
typedef struct AVDXVA2FramesContext {
|
|
||||||
/**
|
|
||||||
* The surface type (e.g. DXVA2_VideoProcessorRenderTarget or
|
|
||||||
* DXVA2_VideoDecoderRenderTarget). Must be set by the caller.
|
|
||||||
*/
|
|
||||||
DWORD surface_type;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The surface pool. When an external pool is not provided by the caller,
|
|
||||||
* this will be managed (allocated and filled on init, freed on uninit) by
|
|
||||||
* libavutil.
|
|
||||||
*/
|
|
||||||
IDirect3DSurface9 **surfaces;
|
|
||||||
int nb_surfaces;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Certain drivers require the decoder to be destroyed before the surfaces.
|
|
||||||
* To allow internally managed pools to work properly in such cases, this
|
|
||||||
* field is provided.
|
|
||||||
*
|
|
||||||
* If it is non-NULL, libavutil will call IDirectXVideoDecoder_Release() on
|
|
||||||
* it just before the internal surface pool is freed.
|
|
||||||
*
|
|
||||||
* This is for convenience only. Some code uses other methods to manage the
|
|
||||||
* decoder reference.
|
|
||||||
*/
|
|
||||||
IDirectXVideoDecoder *decoder_to_release;
|
|
||||||
} AVDXVA2FramesContext;
|
|
||||||
|
|
||||||
#endif /* AVUTIL_HWCONTEXT_DXVA2_H */
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_HWCONTEXT_MEDIACODEC_H
|
|
||||||
#define AVUTIL_HWCONTEXT_MEDIACODEC_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* MediaCodec details.
|
|
||||||
*
|
|
||||||
* Allocated as AVHWDeviceContext.hwctx
|
|
||||||
*/
|
|
||||||
typedef struct AVMediaCodecDeviceContext {
|
|
||||||
/**
|
|
||||||
* android/view/Surface handle, to be filled by the user.
|
|
||||||
*
|
|
||||||
* This is the default surface used by decoders on this device.
|
|
||||||
*/
|
|
||||||
void *surface;
|
|
||||||
} AVMediaCodecDeviceContext;
|
|
||||||
|
|
||||||
#endif /* AVUTIL_HWCONTEXT_MEDIACODEC_H */
|
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_HWCONTEXT_OPENCL_H
|
|
||||||
#define AVUTIL_HWCONTEXT_OPENCL_H
|
|
||||||
|
|
||||||
#ifdef __APPLE__
|
|
||||||
#include <OpenCL/cl.h>
|
|
||||||
#else
|
|
||||||
#include <CL/cl.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "frame.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* API-specific header for AV_HWDEVICE_TYPE_OPENCL.
|
|
||||||
*
|
|
||||||
* Pools allocated internally are always dynamic, and are primarily intended
|
|
||||||
* to be used in OpenCL-only cases. If interoperation is required, it is
|
|
||||||
* typically required to allocate frames in the other API and then map the
|
|
||||||
* frames context to OpenCL with av_hwframe_ctx_create_derived().
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OpenCL frame descriptor for pool allocation.
|
|
||||||
*
|
|
||||||
* In user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs
|
|
||||||
* with the data pointer pointing at an object of this type describing the
|
|
||||||
* planes of the frame.
|
|
||||||
*/
|
|
||||||
typedef struct AVOpenCLFrameDescriptor {
|
|
||||||
/**
|
|
||||||
* Number of planes in the frame.
|
|
||||||
*/
|
|
||||||
int nb_planes;
|
|
||||||
/**
|
|
||||||
* OpenCL image2d objects for each plane of the frame.
|
|
||||||
*/
|
|
||||||
cl_mem planes[AV_NUM_DATA_POINTERS];
|
|
||||||
} AVOpenCLFrameDescriptor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OpenCL device details.
|
|
||||||
*
|
|
||||||
* Allocated as AVHWDeviceContext.hwctx
|
|
||||||
*/
|
|
||||||
typedef struct AVOpenCLDeviceContext {
|
|
||||||
/**
|
|
||||||
* The primary device ID of the device. If multiple OpenCL devices
|
|
||||||
* are associated with the context then this is the one which will
|
|
||||||
* be used for all operations internal to FFmpeg.
|
|
||||||
*/
|
|
||||||
cl_device_id device_id;
|
|
||||||
/**
|
|
||||||
* The OpenCL context which will contain all operations and frames on
|
|
||||||
* this device.
|
|
||||||
*/
|
|
||||||
cl_context context;
|
|
||||||
/**
|
|
||||||
* The default command queue for this device, which will be used by all
|
|
||||||
* frames contexts which do not have their own command queue. If not
|
|
||||||
* intialised by the user, a default queue will be created on the
|
|
||||||
* primary device.
|
|
||||||
*/
|
|
||||||
cl_command_queue command_queue;
|
|
||||||
} AVOpenCLDeviceContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OpenCL-specific data associated with a frame pool.
|
|
||||||
*
|
|
||||||
* Allocated as AVHWFramesContext.hwctx.
|
|
||||||
*/
|
|
||||||
typedef struct AVOpenCLFramesContext {
|
|
||||||
/**
|
|
||||||
* The command queue used for internal asynchronous operations on this
|
|
||||||
* device (av_hwframe_transfer_data(), av_hwframe_map()).
|
|
||||||
*
|
|
||||||
* If this is not set, the command queue from the associated device is
|
|
||||||
* used instead.
|
|
||||||
*/
|
|
||||||
cl_command_queue command_queue;
|
|
||||||
} AVOpenCLFramesContext;
|
|
||||||
|
|
||||||
#endif /* AVUTIL_HWCONTEXT_OPENCL_H */
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_HWCONTEXT_QSV_H
|
|
||||||
#define AVUTIL_HWCONTEXT_QSV_H
|
|
||||||
|
|
||||||
#include <mfx/mfxvideo.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* An API-specific header for AV_HWDEVICE_TYPE_QSV.
|
|
||||||
*
|
|
||||||
* This API does not support dynamic frame pools. AVHWFramesContext.pool must
|
|
||||||
* contain AVBufferRefs whose data pointer points to an mfxFrameSurface1 struct.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct is allocated as AVHWDeviceContext.hwctx
|
|
||||||
*/
|
|
||||||
typedef struct AVQSVDeviceContext {
|
|
||||||
mfxSession session;
|
|
||||||
} AVQSVDeviceContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct is allocated as AVHWFramesContext.hwctx
|
|
||||||
*/
|
|
||||||
typedef struct AVQSVFramesContext {
|
|
||||||
mfxFrameSurface1 *surfaces;
|
|
||||||
int nb_surfaces;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A combination of MFX_MEMTYPE_* describing the frame pool.
|
|
||||||
*/
|
|
||||||
int frame_type;
|
|
||||||
} AVQSVFramesContext;
|
|
||||||
|
|
||||||
#endif /* AVUTIL_HWCONTEXT_QSV_H */
|
|
||||||
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_HWCONTEXT_VAAPI_H
|
|
||||||
#define AVUTIL_HWCONTEXT_VAAPI_H
|
|
||||||
|
|
||||||
#include <va/va.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* API-specific header for AV_HWDEVICE_TYPE_VAAPI.
|
|
||||||
*
|
|
||||||
* Dynamic frame pools are supported, but note that any pool used as a render
|
|
||||||
* target is required to be of fixed size in order to be be usable as an
|
|
||||||
* argument to vaCreateContext().
|
|
||||||
*
|
|
||||||
* For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs
|
|
||||||
* with the data pointer set to a VASurfaceID.
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum {
|
|
||||||
/**
|
|
||||||
* The quirks field has been set by the user and should not be detected
|
|
||||||
* automatically by av_hwdevice_ctx_init().
|
|
||||||
*/
|
|
||||||
AV_VAAPI_DRIVER_QUIRK_USER_SET = (1 << 0),
|
|
||||||
/**
|
|
||||||
* The driver does not destroy parameter buffers when they are used by
|
|
||||||
* vaRenderPicture(). Additional code will be required to destroy them
|
|
||||||
* separately afterwards.
|
|
||||||
*/
|
|
||||||
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS = (1 << 1),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The driver does not support the VASurfaceAttribMemoryType attribute,
|
|
||||||
* so the surface allocation code will not try to use it.
|
|
||||||
*/
|
|
||||||
AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE = (1 << 2),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The driver does not support surface attributes at all.
|
|
||||||
* The surface allocation code will never pass them to surface allocation,
|
|
||||||
* and the results of the vaQuerySurfaceAttributes() call will be faked.
|
|
||||||
*/
|
|
||||||
AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES = (1 << 3),
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VAAPI connection details.
|
|
||||||
*
|
|
||||||
* Allocated as AVHWDeviceContext.hwctx
|
|
||||||
*/
|
|
||||||
typedef struct AVVAAPIDeviceContext {
|
|
||||||
/**
|
|
||||||
* The VADisplay handle, to be filled by the user.
|
|
||||||
*/
|
|
||||||
VADisplay display;
|
|
||||||
/**
|
|
||||||
* Driver quirks to apply - this is filled by av_hwdevice_ctx_init(),
|
|
||||||
* with reference to a table of known drivers, unless the
|
|
||||||
* AV_VAAPI_DRIVER_QUIRK_USER_SET bit is already present. The user
|
|
||||||
* may need to refer to this field when performing any later
|
|
||||||
* operations using VAAPI with the same VADisplay.
|
|
||||||
*/
|
|
||||||
unsigned int driver_quirks;
|
|
||||||
} AVVAAPIDeviceContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VAAPI-specific data associated with a frame pool.
|
|
||||||
*
|
|
||||||
* Allocated as AVHWFramesContext.hwctx.
|
|
||||||
*/
|
|
||||||
typedef struct AVVAAPIFramesContext {
|
|
||||||
/**
|
|
||||||
* Set by the user to apply surface attributes to all surfaces in
|
|
||||||
* the frame pool. If null, default settings are used.
|
|
||||||
*/
|
|
||||||
VASurfaceAttrib *attributes;
|
|
||||||
int nb_attributes;
|
|
||||||
/**
|
|
||||||
* The surfaces IDs of all surfaces in the pool after creation.
|
|
||||||
* Only valid if AVHWFramesContext.initial_pool_size was positive.
|
|
||||||
* These are intended to be used as the render_targets arguments to
|
|
||||||
* vaCreateContext().
|
|
||||||
*/
|
|
||||||
VASurfaceID *surface_ids;
|
|
||||||
int nb_surfaces;
|
|
||||||
} AVVAAPIFramesContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VAAPI hardware pipeline configuration details.
|
|
||||||
*
|
|
||||||
* Allocated with av_hwdevice_hwconfig_alloc().
|
|
||||||
*/
|
|
||||||
typedef struct AVVAAPIHWConfig {
|
|
||||||
/**
|
|
||||||
* ID of a VAAPI pipeline configuration.
|
|
||||||
*/
|
|
||||||
VAConfigID config_id;
|
|
||||||
} AVVAAPIHWConfig;
|
|
||||||
|
|
||||||
#endif /* AVUTIL_HWCONTEXT_VAAPI_H */
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_HWCONTEXT_VDPAU_H
|
|
||||||
#define AVUTIL_HWCONTEXT_VDPAU_H
|
|
||||||
|
|
||||||
#include <vdpau/vdpau.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* An API-specific header for AV_HWDEVICE_TYPE_VDPAU.
|
|
||||||
*
|
|
||||||
* This API supports dynamic frame pools. AVHWFramesContext.pool must return
|
|
||||||
* AVBufferRefs whose data pointer is a VdpVideoSurface.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This struct is allocated as AVHWDeviceContext.hwctx
|
|
||||||
*/
|
|
||||||
typedef struct AVVDPAUDeviceContext {
|
|
||||||
VdpDevice device;
|
|
||||||
VdpGetProcAddress *get_proc_address;
|
|
||||||
} AVVDPAUDeviceContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* AVHWFramesContext.hwctx is currently not used
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_HWCONTEXT_VDPAU_H */
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_HWCONTEXT_VIDEOTOOLBOX_H
|
|
||||||
#define AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include <VideoToolbox/VideoToolbox.h>
|
|
||||||
|
|
||||||
#include "pixfmt.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* An API-specific header for AV_HWDEVICE_TYPE_VIDEOTOOLBOX.
|
|
||||||
*
|
|
||||||
* This API currently does not support frame allocation, as the raw VideoToolbox
|
|
||||||
* API does allocation, and FFmpeg itself never has the need to allocate frames.
|
|
||||||
*
|
|
||||||
* If the API user sets a custom pool, AVHWFramesContext.pool must return
|
|
||||||
* AVBufferRefs whose data pointer is a CVImageBufferRef or CVPixelBufferRef.
|
|
||||||
*
|
|
||||||
* Currently AVHWDeviceContext.hwctx and AVHWFramesContext.hwctx are always
|
|
||||||
* NULL.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert a VideoToolbox (actually CoreVideo) format to AVPixelFormat.
|
|
||||||
* Returns AV_PIX_FMT_NONE if no known equivalent was found.
|
|
||||||
*/
|
|
||||||
enum AVPixelFormat av_map_videotoolbox_format_to_pixfmt(uint32_t cv_fmt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert an AVPixelFormat to a VideoToolbox (actually CoreVideo) format.
|
|
||||||
* Returns 0 if no known equivalent was found.
|
|
||||||
*/
|
|
||||||
uint32_t av_map_videotoolbox_format_from_pixfmt(enum AVPixelFormat pix_fmt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Same as av_map_videotoolbox_format_from_pixfmt function, but can map and
|
|
||||||
* return full range pixel formats via a flag.
|
|
||||||
*/
|
|
||||||
uint32_t av_map_videotoolbox_format_from_pixfmt2(enum AVPixelFormat pix_fmt, bool full_range);
|
|
||||||
|
|
||||||
#endif /* AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H */
|
|
||||||
@@ -1,204 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_HWCONTEXT_VULKAN_H
|
|
||||||
#define AVUTIL_HWCONTEXT_VULKAN_H
|
|
||||||
|
|
||||||
#include <vulkan/vulkan.h>
|
|
||||||
|
|
||||||
#include "pixfmt.h"
|
|
||||||
#include "frame.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* API-specific header for AV_HWDEVICE_TYPE_VULKAN.
|
|
||||||
*
|
|
||||||
* For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs
|
|
||||||
* with the data pointer set to an AVVkFrame.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Main Vulkan context, allocated as AVHWDeviceContext.hwctx.
|
|
||||||
* All of these can be set before init to change what the context uses
|
|
||||||
*/
|
|
||||||
typedef struct AVVulkanDeviceContext {
|
|
||||||
/**
|
|
||||||
* Custom memory allocator, else NULL
|
|
||||||
*/
|
|
||||||
const VkAllocationCallbacks *alloc;
|
|
||||||
/**
|
|
||||||
* Vulkan instance. Must be at least version 1.1.
|
|
||||||
*/
|
|
||||||
VkInstance inst;
|
|
||||||
/**
|
|
||||||
* Physical device
|
|
||||||
*/
|
|
||||||
VkPhysicalDevice phys_dev;
|
|
||||||
/**
|
|
||||||
* Active device
|
|
||||||
*/
|
|
||||||
VkDevice act_dev;
|
|
||||||
/**
|
|
||||||
* Queue family index for graphics
|
|
||||||
* @note av_hwdevice_create() will set all 3 queue indices if unset
|
|
||||||
* If there is no dedicated queue for compute or transfer operations,
|
|
||||||
* they will be set to the graphics queue index which can handle both.
|
|
||||||
* nb_graphics_queues indicates how many queues were enabled for the
|
|
||||||
* graphics queue (must be at least 1)
|
|
||||||
*/
|
|
||||||
int queue_family_index;
|
|
||||||
int nb_graphics_queues;
|
|
||||||
/**
|
|
||||||
* Queue family index to use for transfer operations, and the amount of queues
|
|
||||||
* enabled. In case there is no dedicated transfer queue, nb_tx_queues
|
|
||||||
* must be 0 and queue_family_tx_index must be the same as either the graphics
|
|
||||||
* queue or the compute queue, if available.
|
|
||||||
*/
|
|
||||||
int queue_family_tx_index;
|
|
||||||
int nb_tx_queues;
|
|
||||||
/**
|
|
||||||
* Queue family index for compute ops, and the amount of queues enabled.
|
|
||||||
* In case there are no dedicated compute queues, nb_comp_queues must be
|
|
||||||
* 0 and its queue family index must be set to the graphics queue.
|
|
||||||
*/
|
|
||||||
int queue_family_comp_index;
|
|
||||||
int nb_comp_queues;
|
|
||||||
/**
|
|
||||||
* Enabled instance extensions.
|
|
||||||
* If supplying your own device context, set this to an array of strings, with
|
|
||||||
* each entry containing the specified Vulkan extension string to enable.
|
|
||||||
* Duplicates are possible and accepted.
|
|
||||||
* If no extensions are enabled, set these fields to NULL, and 0 respectively.
|
|
||||||
*/
|
|
||||||
const char * const *enabled_inst_extensions;
|
|
||||||
int nb_enabled_inst_extensions;
|
|
||||||
/**
|
|
||||||
* Enabled device extensions. By default, VK_KHR_external_memory_fd,
|
|
||||||
* VK_EXT_external_memory_dma_buf, VK_EXT_image_drm_format_modifier,
|
|
||||||
* VK_KHR_external_semaphore_fd and VK_EXT_external_memory_host are enabled if found.
|
|
||||||
* If supplying your own device context, these fields takes the same format as
|
|
||||||
* the above fields, with the same conditions that duplicates are possible
|
|
||||||
* and accepted, and that NULL and 0 respectively means no extensions are enabled.
|
|
||||||
*/
|
|
||||||
const char * const *enabled_dev_extensions;
|
|
||||||
int nb_enabled_dev_extensions;
|
|
||||||
/**
|
|
||||||
* This structure should be set to the set of features that present and enabled
|
|
||||||
* during device creation. When a device is created by FFmpeg, it will default to
|
|
||||||
* enabling all that are present of the shaderImageGatherExtended,
|
|
||||||
* fragmentStoresAndAtomics, shaderInt64 and vertexPipelineStoresAndAtomics features.
|
|
||||||
*/
|
|
||||||
VkPhysicalDeviceFeatures2 device_features;
|
|
||||||
} AVVulkanDeviceContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocated as AVHWFramesContext.hwctx, used to set pool-specific options
|
|
||||||
*/
|
|
||||||
typedef struct AVVulkanFramesContext {
|
|
||||||
/**
|
|
||||||
* Controls the tiling of allocated frames.
|
|
||||||
*/
|
|
||||||
VkImageTiling tiling;
|
|
||||||
/**
|
|
||||||
* Defines extra usage of output frames. If left as 0, the following bits
|
|
||||||
* are set: TRANSFER_SRC, TRANSFER_DST. SAMPLED and STORAGE.
|
|
||||||
*/
|
|
||||||
VkImageUsageFlagBits usage;
|
|
||||||
/**
|
|
||||||
* Extension data for image creation.
|
|
||||||
*/
|
|
||||||
void *create_pnext;
|
|
||||||
/**
|
|
||||||
* Extension data for memory allocation. Must have as many entries as
|
|
||||||
* the number of planes of the sw_format.
|
|
||||||
* This will be chained to VkExportMemoryAllocateInfo, which is used
|
|
||||||
* to make all pool images exportable to other APIs if the necessary
|
|
||||||
* extensions are present in enabled_dev_extensions.
|
|
||||||
*/
|
|
||||||
void *alloc_pnext[AV_NUM_DATA_POINTERS];
|
|
||||||
} AVVulkanFramesContext;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Frame structure, the VkFormat of the image will always match
|
|
||||||
* the pool's sw_format.
|
|
||||||
* All frames, imported or allocated, will be created with the
|
|
||||||
* VK_IMAGE_CREATE_ALIAS_BIT flag set, so the memory may be aliased if needed.
|
|
||||||
*
|
|
||||||
* If all three queue family indices in the device context are the same,
|
|
||||||
* images will be created with the EXCLUSIVE sharing mode. Otherwise, all images
|
|
||||||
* will be created using the CONCURRENT sharing mode.
|
|
||||||
*
|
|
||||||
* @note the size of this structure is not part of the ABI, to allocate
|
|
||||||
* you must use @av_vk_frame_alloc().
|
|
||||||
*/
|
|
||||||
typedef struct AVVkFrame {
|
|
||||||
/**
|
|
||||||
* Vulkan images to which the memory is bound to.
|
|
||||||
*/
|
|
||||||
VkImage img[AV_NUM_DATA_POINTERS];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The same tiling must be used for all images in the frame.
|
|
||||||
*/
|
|
||||||
VkImageTiling tiling;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Memory backing the images. Could be less than the amount of images
|
|
||||||
* if importing from a DRM or VAAPI frame.
|
|
||||||
*/
|
|
||||||
VkDeviceMemory mem[AV_NUM_DATA_POINTERS];
|
|
||||||
size_t size[AV_NUM_DATA_POINTERS];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OR'd flags for all memory allocated
|
|
||||||
*/
|
|
||||||
VkMemoryPropertyFlagBits flags;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Updated after every barrier
|
|
||||||
*/
|
|
||||||
VkAccessFlagBits access[AV_NUM_DATA_POINTERS];
|
|
||||||
VkImageLayout layout[AV_NUM_DATA_POINTERS];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Synchronization semaphores. Must not be freed manually. Must be waited on
|
|
||||||
* and signalled at every queue submission.
|
|
||||||
* Could be less than the amount of images: either one per VkDeviceMemory
|
|
||||||
* or one for the entire frame. All others will be set to VK_NULL_HANDLE.
|
|
||||||
*/
|
|
||||||
VkSemaphore sem[AV_NUM_DATA_POINTERS];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Internal data.
|
|
||||||
*/
|
|
||||||
struct AVVkFrameInternal *internal;
|
|
||||||
} AVVkFrame;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocates a single AVVkFrame and initializes everything as 0.
|
|
||||||
* @note Must be freed via av_free()
|
|
||||||
*/
|
|
||||||
AVVkFrame *av_vk_frame_alloc(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the format of each image up to the number of planes for a given sw_format.
|
|
||||||
* Returns NULL on unsupported formats.
|
|
||||||
*/
|
|
||||||
const VkFormat *av_vkfmt_from_pixfmt(enum AVPixelFormat p);
|
|
||||||
|
|
||||||
#endif /* AVUTIL_HWCONTEXT_VULKAN_H */
|
|
||||||
@@ -1,277 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_IMGUTILS_H
|
|
||||||
#define AVUTIL_IMGUTILS_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* misc image utilities
|
|
||||||
*
|
|
||||||
* @addtogroup lavu_picture
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "avutil.h"
|
|
||||||
#include "pixdesc.h"
|
|
||||||
#include "rational.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Compute the max pixel step for each plane of an image with a
|
|
||||||
* format described by pixdesc.
|
|
||||||
*
|
|
||||||
* The pixel step is the distance in bytes between the first byte of
|
|
||||||
* the group of bytes which describe a pixel component and the first
|
|
||||||
* byte of the successive group in the same plane for the same
|
|
||||||
* component.
|
|
||||||
*
|
|
||||||
* @param max_pixsteps an array which is filled with the max pixel step
|
|
||||||
* for each plane. Since a plane may contain different pixel
|
|
||||||
* components, the computed max_pixsteps[plane] is relative to the
|
|
||||||
* component in the plane with the max pixel step.
|
|
||||||
* @param max_pixstep_comps an array which is filled with the component
|
|
||||||
* for each plane which has the max pixel step. May be NULL.
|
|
||||||
*/
|
|
||||||
void av_image_fill_max_pixsteps(int max_pixsteps[4], int max_pixstep_comps[4],
|
|
||||||
const AVPixFmtDescriptor *pixdesc);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Compute the size of an image line with format pix_fmt and width
|
|
||||||
* width for the plane plane.
|
|
||||||
*
|
|
||||||
* @return the computed size in bytes
|
|
||||||
*/
|
|
||||||
int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fill plane linesizes for an image with pixel format pix_fmt and
|
|
||||||
* width width.
|
|
||||||
*
|
|
||||||
* @param linesizes array to be filled with the linesize for each plane
|
|
||||||
* @return >= 0 in case of success, a negative error code otherwise
|
|
||||||
*/
|
|
||||||
int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fill plane data pointers for an image with pixel format pix_fmt and
|
|
||||||
* height height.
|
|
||||||
*
|
|
||||||
* @param data pointers array to be filled with the pointer for each image plane
|
|
||||||
* @param ptr the pointer to a buffer which will contain the image
|
|
||||||
* @param linesizes the array containing the linesize for each
|
|
||||||
* plane, should be filled by av_image_fill_linesizes()
|
|
||||||
* @return the size in bytes required for the image buffer, a negative
|
|
||||||
* error code in case of failure
|
|
||||||
*/
|
|
||||||
int av_image_fill_pointers(uint8_t *data[4], enum AVPixelFormat pix_fmt, int height,
|
|
||||||
uint8_t *ptr, const int linesizes[4]);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate an image with size w and h and pixel format pix_fmt, and
|
|
||||||
* fill pointers and linesizes accordingly.
|
|
||||||
* The allocated image buffer has to be freed by using
|
|
||||||
* av_freep(&pointers[0]).
|
|
||||||
*
|
|
||||||
* @param align the value to use for buffer size alignment
|
|
||||||
* @return the size in bytes required for the image buffer, a negative
|
|
||||||
* error code in case of failure
|
|
||||||
*/
|
|
||||||
int av_image_alloc(uint8_t *pointers[4], int linesizes[4],
|
|
||||||
int w, int h, enum AVPixelFormat pix_fmt, int align);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy image plane from src to dst.
|
|
||||||
* That is, copy "height" number of lines of "bytewidth" bytes each.
|
|
||||||
* The first byte of each successive line is separated by *_linesize
|
|
||||||
* bytes.
|
|
||||||
*
|
|
||||||
* bytewidth must be contained by both absolute values of dst_linesize
|
|
||||||
* and src_linesize, otherwise the function behavior is undefined.
|
|
||||||
*
|
|
||||||
* @param dst_linesize linesize for the image plane in dst
|
|
||||||
* @param src_linesize linesize for the image plane in src
|
|
||||||
*/
|
|
||||||
void av_image_copy_plane(uint8_t *dst, int dst_linesize,
|
|
||||||
const uint8_t *src, int src_linesize,
|
|
||||||
int bytewidth, int height);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy image in src_data to dst_data.
|
|
||||||
*
|
|
||||||
* @param dst_linesizes linesizes for the image in dst_data
|
|
||||||
* @param src_linesizes linesizes for the image in src_data
|
|
||||||
*/
|
|
||||||
void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4],
|
|
||||||
const uint8_t *src_data[4], const int src_linesizes[4],
|
|
||||||
enum AVPixelFormat pix_fmt, int width, int height);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy image data located in uncacheable (e.g. GPU mapped) memory. Where
|
|
||||||
* available, this function will use special functionality for reading from such
|
|
||||||
* memory, which may result in greatly improved performance compared to plain
|
|
||||||
* av_image_copy().
|
|
||||||
*
|
|
||||||
* The data pointers and the linesizes must be aligned to the maximum required
|
|
||||||
* by the CPU architecture.
|
|
||||||
*
|
|
||||||
* @note The linesize parameters have the type ptrdiff_t here, while they are
|
|
||||||
* int for av_image_copy().
|
|
||||||
* @note On x86, the linesizes currently need to be aligned to the cacheline
|
|
||||||
* size (i.e. 64) to get improved performance.
|
|
||||||
*/
|
|
||||||
void av_image_copy_uc_from(uint8_t *dst_data[4], const ptrdiff_t dst_linesizes[4],
|
|
||||||
const uint8_t *src_data[4], const ptrdiff_t src_linesizes[4],
|
|
||||||
enum AVPixelFormat pix_fmt, int width, int height);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setup the data pointers and linesizes based on the specified image
|
|
||||||
* parameters and the provided array.
|
|
||||||
*
|
|
||||||
* The fields of the given image are filled in by using the src
|
|
||||||
* address which points to the image data buffer. Depending on the
|
|
||||||
* specified pixel format, one or multiple image data pointers and
|
|
||||||
* line sizes will be set. If a planar format is specified, several
|
|
||||||
* pointers will be set pointing to the different picture planes and
|
|
||||||
* the line sizes of the different planes will be stored in the
|
|
||||||
* lines_sizes array. Call with src == NULL to get the required
|
|
||||||
* size for the src buffer.
|
|
||||||
*
|
|
||||||
* To allocate the buffer and fill in the dst_data and dst_linesize in
|
|
||||||
* one call, use av_image_alloc().
|
|
||||||
*
|
|
||||||
* @param dst_data data pointers to be filled in
|
|
||||||
* @param dst_linesize linesizes for the image in dst_data to be filled in
|
|
||||||
* @param src buffer which will contain or contains the actual image data, can be NULL
|
|
||||||
* @param pix_fmt the pixel format of the image
|
|
||||||
* @param width the width of the image in pixels
|
|
||||||
* @param height the height of the image in pixels
|
|
||||||
* @param align the value used in src for linesize alignment
|
|
||||||
* @return the size in bytes required for src, a negative error code
|
|
||||||
* in case of failure
|
|
||||||
*/
|
|
||||||
int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4],
|
|
||||||
const uint8_t *src,
|
|
||||||
enum AVPixelFormat pix_fmt, int width, int height, int align);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the size in bytes of the amount of data required to store an
|
|
||||||
* image with the given parameters.
|
|
||||||
*
|
|
||||||
* @param pix_fmt the pixel format of the image
|
|
||||||
* @param width the width of the image in pixels
|
|
||||||
* @param height the height of the image in pixels
|
|
||||||
* @param align the assumed linesize alignment
|
|
||||||
* @return the buffer size in bytes, a negative error code in case of failure
|
|
||||||
*/
|
|
||||||
int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy image data from an image into a buffer.
|
|
||||||
*
|
|
||||||
* av_image_get_buffer_size() can be used to compute the required size
|
|
||||||
* for the buffer to fill.
|
|
||||||
*
|
|
||||||
* @param dst a buffer into which picture data will be copied
|
|
||||||
* @param dst_size the size in bytes of dst
|
|
||||||
* @param src_data pointers containing the source image data
|
|
||||||
* @param src_linesize linesizes for the image in src_data
|
|
||||||
* @param pix_fmt the pixel format of the source image
|
|
||||||
* @param width the width of the source image in pixels
|
|
||||||
* @param height the height of the source image in pixels
|
|
||||||
* @param align the assumed linesize alignment for dst
|
|
||||||
* @return the number of bytes written to dst, or a negative value
|
|
||||||
* (error code) on error
|
|
||||||
*/
|
|
||||||
int av_image_copy_to_buffer(uint8_t *dst, int dst_size,
|
|
||||||
const uint8_t * const src_data[4], const int src_linesize[4],
|
|
||||||
enum AVPixelFormat pix_fmt, int width, int height, int align);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if the given dimension of an image is valid, meaning that all
|
|
||||||
* bytes of the image can be addressed with a signed int.
|
|
||||||
*
|
|
||||||
* @param w the width of the picture
|
|
||||||
* @param h the height of the picture
|
|
||||||
* @param log_offset the offset to sum to the log level for logging with log_ctx
|
|
||||||
* @param log_ctx the parent logging context, it may be NULL
|
|
||||||
* @return >= 0 if valid, a negative error code otherwise
|
|
||||||
*/
|
|
||||||
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if the given dimension of an image is valid, meaning that all
|
|
||||||
* bytes of a plane of an image with the specified pix_fmt can be addressed
|
|
||||||
* with a signed int.
|
|
||||||
*
|
|
||||||
* @param w the width of the picture
|
|
||||||
* @param h the height of the picture
|
|
||||||
* @param max_pixels the maximum number of pixels the user wants to accept
|
|
||||||
* @param pix_fmt the pixel format, can be AV_PIX_FMT_NONE if unknown.
|
|
||||||
* @param log_offset the offset to sum to the log level for logging with log_ctx
|
|
||||||
* @param log_ctx the parent logging context, it may be NULL
|
|
||||||
* @return >= 0 if valid, a negative error code otherwise
|
|
||||||
*/
|
|
||||||
int av_image_check_size2(unsigned int w, unsigned int h, int64_t max_pixels, enum AVPixelFormat pix_fmt, int log_offset, void *log_ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if the given sample aspect ratio of an image is valid.
|
|
||||||
*
|
|
||||||
* It is considered invalid if the denominator is 0 or if applying the ratio
|
|
||||||
* to the image size would make the smaller dimension less than 1. If the
|
|
||||||
* sar numerator is 0, it is considered unknown and will return as valid.
|
|
||||||
*
|
|
||||||
* @param w width of the image
|
|
||||||
* @param h height of the image
|
|
||||||
* @param sar sample aspect ratio of the image
|
|
||||||
* @return 0 if valid, a negative AVERROR code otherwise
|
|
||||||
*/
|
|
||||||
int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Overwrite the image data with black. This is suitable for filling a
|
|
||||||
* sub-rectangle of an image, meaning the padding between the right most pixel
|
|
||||||
* and the left most pixel on the next line will not be overwritten. For some
|
|
||||||
* formats, the image size might be rounded up due to inherent alignment.
|
|
||||||
*
|
|
||||||
* If the pixel format has alpha, the alpha is cleared to opaque.
|
|
||||||
*
|
|
||||||
* This can return an error if the pixel format is not supported. Normally, all
|
|
||||||
* non-hwaccel pixel formats should be supported.
|
|
||||||
*
|
|
||||||
* Passing NULL for dst_data is allowed. Then the function returns whether the
|
|
||||||
* operation would have succeeded. (It can return an error if the pix_fmt is
|
|
||||||
* not supported.)
|
|
||||||
*
|
|
||||||
* @param dst_data data pointers to destination image
|
|
||||||
* @param dst_linesize linesizes for the destination image
|
|
||||||
* @param pix_fmt the pixel format of the image
|
|
||||||
* @param range the color range of the image (important for colorspaces such as YUV)
|
|
||||||
* @param width the width of the image in pixels
|
|
||||||
* @param height the height of the image in pixels
|
|
||||||
* @return 0 if the image data was cleared, a negative AVERROR code otherwise
|
|
||||||
*/
|
|
||||||
int av_image_fill_black(uint8_t *dst_data[4], const ptrdiff_t dst_linesize[4],
|
|
||||||
enum AVPixelFormat pix_fmt, enum AVColorRange range,
|
|
||||||
int width, int height);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* AVUTIL_IMGUTILS_H */
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 Mans Rullgard
|
|
||||||
*
|
|
||||||
* 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_INTFLOAT_H
|
|
||||||
#define AVUTIL_INTFLOAT_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "attributes.h"
|
|
||||||
|
|
||||||
union av_intfloat32 {
|
|
||||||
uint32_t i;
|
|
||||||
float f;
|
|
||||||
};
|
|
||||||
|
|
||||||
union av_intfloat64 {
|
|
||||||
uint64_t i;
|
|
||||||
double f;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reinterpret a 32-bit integer as a float.
|
|
||||||
*/
|
|
||||||
static av_always_inline float av_int2float(uint32_t i)
|
|
||||||
{
|
|
||||||
union av_intfloat32 v;
|
|
||||||
v.i = i;
|
|
||||||
return v.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reinterpret a float as a 32-bit integer.
|
|
||||||
*/
|
|
||||||
static av_always_inline uint32_t av_float2int(float f)
|
|
||||||
{
|
|
||||||
union av_intfloat32 v;
|
|
||||||
v.f = f;
|
|
||||||
return v.i;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reinterpret a 64-bit integer as a double.
|
|
||||||
*/
|
|
||||||
static av_always_inline double av_int2double(uint64_t i)
|
|
||||||
{
|
|
||||||
union av_intfloat64 v;
|
|
||||||
v.i = i;
|
|
||||||
return v.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reinterpret a double as a 64-bit integer.
|
|
||||||
*/
|
|
||||||
static av_always_inline uint64_t av_double2int(double f)
|
|
||||||
{
|
|
||||||
union av_intfloat64 v;
|
|
||||||
v.f = f;
|
|
||||||
return v.i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* AVUTIL_INTFLOAT_H */
|
|
||||||
@@ -1,644 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_INTREADWRITE_H
|
|
||||||
#define AVUTIL_INTREADWRITE_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "avconfig.h"
|
|
||||||
#include "attributes.h"
|
|
||||||
#include "bswap.h"
|
|
||||||
|
|
||||||
typedef union {
|
|
||||||
uint64_t u64;
|
|
||||||
uint32_t u32[2];
|
|
||||||
uint16_t u16[4];
|
|
||||||
uint8_t u8 [8];
|
|
||||||
double f64;
|
|
||||||
float f32[2];
|
|
||||||
} av_alias av_alias64;
|
|
||||||
|
|
||||||
typedef union {
|
|
||||||
uint32_t u32;
|
|
||||||
uint16_t u16[2];
|
|
||||||
uint8_t u8 [4];
|
|
||||||
float f32;
|
|
||||||
} av_alias av_alias32;
|
|
||||||
|
|
||||||
typedef union {
|
|
||||||
uint16_t u16;
|
|
||||||
uint8_t u8 [2];
|
|
||||||
} av_alias av_alias16;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Arch-specific headers can provide any combination of
|
|
||||||
* AV_[RW][BLN](16|24|32|48|64) and AV_(COPY|SWAP|ZERO)(64|128) macros.
|
|
||||||
* Preprocessor symbols must be defined, even if these are implemented
|
|
||||||
* as inline functions.
|
|
||||||
*
|
|
||||||
* R/W means read/write, B/L/N means big/little/native endianness.
|
|
||||||
* The following macros require aligned access, compared to their
|
|
||||||
* unaligned variants: AV_(COPY|SWAP|ZERO)(64|128), AV_[RW]N[8-64]A.
|
|
||||||
* Incorrect usage may range from abysmal performance to crash
|
|
||||||
* depending on the platform.
|
|
||||||
*
|
|
||||||
* The unaligned variants are AV_[RW][BLN][8-64] and AV_COPY*U.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_AV_CONFIG_H
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#if ARCH_ARM
|
|
||||||
# include "arm/intreadwrite.h"
|
|
||||||
#elif ARCH_AVR32
|
|
||||||
# include "avr32/intreadwrite.h"
|
|
||||||
#elif ARCH_MIPS
|
|
||||||
# include "mips/intreadwrite.h"
|
|
||||||
#elif ARCH_PPC
|
|
||||||
# include "ppc/intreadwrite.h"
|
|
||||||
#elif ARCH_TOMI
|
|
||||||
# include "tomi/intreadwrite.h"
|
|
||||||
#elif ARCH_X86
|
|
||||||
# include "x86/intreadwrite.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* HAVE_AV_CONFIG_H */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Map AV_RNXX <-> AV_R[BL]XX for all variants provided by per-arch headers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if AV_HAVE_BIGENDIAN
|
|
||||||
|
|
||||||
# if defined(AV_RN16) && !defined(AV_RB16)
|
|
||||||
# define AV_RB16(p) AV_RN16(p)
|
|
||||||
# elif !defined(AV_RN16) && defined(AV_RB16)
|
|
||||||
# define AV_RN16(p) AV_RB16(p)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_WN16) && !defined(AV_WB16)
|
|
||||||
# define AV_WB16(p, v) AV_WN16(p, v)
|
|
||||||
# elif !defined(AV_WN16) && defined(AV_WB16)
|
|
||||||
# define AV_WN16(p, v) AV_WB16(p, v)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_RN24) && !defined(AV_RB24)
|
|
||||||
# define AV_RB24(p) AV_RN24(p)
|
|
||||||
# elif !defined(AV_RN24) && defined(AV_RB24)
|
|
||||||
# define AV_RN24(p) AV_RB24(p)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_WN24) && !defined(AV_WB24)
|
|
||||||
# define AV_WB24(p, v) AV_WN24(p, v)
|
|
||||||
# elif !defined(AV_WN24) && defined(AV_WB24)
|
|
||||||
# define AV_WN24(p, v) AV_WB24(p, v)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_RN32) && !defined(AV_RB32)
|
|
||||||
# define AV_RB32(p) AV_RN32(p)
|
|
||||||
# elif !defined(AV_RN32) && defined(AV_RB32)
|
|
||||||
# define AV_RN32(p) AV_RB32(p)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_WN32) && !defined(AV_WB32)
|
|
||||||
# define AV_WB32(p, v) AV_WN32(p, v)
|
|
||||||
# elif !defined(AV_WN32) && defined(AV_WB32)
|
|
||||||
# define AV_WN32(p, v) AV_WB32(p, v)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_RN48) && !defined(AV_RB48)
|
|
||||||
# define AV_RB48(p) AV_RN48(p)
|
|
||||||
# elif !defined(AV_RN48) && defined(AV_RB48)
|
|
||||||
# define AV_RN48(p) AV_RB48(p)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_WN48) && !defined(AV_WB48)
|
|
||||||
# define AV_WB48(p, v) AV_WN48(p, v)
|
|
||||||
# elif !defined(AV_WN48) && defined(AV_WB48)
|
|
||||||
# define AV_WN48(p, v) AV_WB48(p, v)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_RN64) && !defined(AV_RB64)
|
|
||||||
# define AV_RB64(p) AV_RN64(p)
|
|
||||||
# elif !defined(AV_RN64) && defined(AV_RB64)
|
|
||||||
# define AV_RN64(p) AV_RB64(p)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_WN64) && !defined(AV_WB64)
|
|
||||||
# define AV_WB64(p, v) AV_WN64(p, v)
|
|
||||||
# elif !defined(AV_WN64) && defined(AV_WB64)
|
|
||||||
# define AV_WN64(p, v) AV_WB64(p, v)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#else /* AV_HAVE_BIGENDIAN */
|
|
||||||
|
|
||||||
# if defined(AV_RN16) && !defined(AV_RL16)
|
|
||||||
# define AV_RL16(p) AV_RN16(p)
|
|
||||||
# elif !defined(AV_RN16) && defined(AV_RL16)
|
|
||||||
# define AV_RN16(p) AV_RL16(p)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_WN16) && !defined(AV_WL16)
|
|
||||||
# define AV_WL16(p, v) AV_WN16(p, v)
|
|
||||||
# elif !defined(AV_WN16) && defined(AV_WL16)
|
|
||||||
# define AV_WN16(p, v) AV_WL16(p, v)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_RN24) && !defined(AV_RL24)
|
|
||||||
# define AV_RL24(p) AV_RN24(p)
|
|
||||||
# elif !defined(AV_RN24) && defined(AV_RL24)
|
|
||||||
# define AV_RN24(p) AV_RL24(p)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_WN24) && !defined(AV_WL24)
|
|
||||||
# define AV_WL24(p, v) AV_WN24(p, v)
|
|
||||||
# elif !defined(AV_WN24) && defined(AV_WL24)
|
|
||||||
# define AV_WN24(p, v) AV_WL24(p, v)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_RN32) && !defined(AV_RL32)
|
|
||||||
# define AV_RL32(p) AV_RN32(p)
|
|
||||||
# elif !defined(AV_RN32) && defined(AV_RL32)
|
|
||||||
# define AV_RN32(p) AV_RL32(p)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_WN32) && !defined(AV_WL32)
|
|
||||||
# define AV_WL32(p, v) AV_WN32(p, v)
|
|
||||||
# elif !defined(AV_WN32) && defined(AV_WL32)
|
|
||||||
# define AV_WN32(p, v) AV_WL32(p, v)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_RN48) && !defined(AV_RL48)
|
|
||||||
# define AV_RL48(p) AV_RN48(p)
|
|
||||||
# elif !defined(AV_RN48) && defined(AV_RL48)
|
|
||||||
# define AV_RN48(p) AV_RL48(p)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_WN48) && !defined(AV_WL48)
|
|
||||||
# define AV_WL48(p, v) AV_WN48(p, v)
|
|
||||||
# elif !defined(AV_WN48) && defined(AV_WL48)
|
|
||||||
# define AV_WN48(p, v) AV_WL48(p, v)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_RN64) && !defined(AV_RL64)
|
|
||||||
# define AV_RL64(p) AV_RN64(p)
|
|
||||||
# elif !defined(AV_RN64) && defined(AV_RL64)
|
|
||||||
# define AV_RN64(p) AV_RL64(p)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined(AV_WN64) && !defined(AV_WL64)
|
|
||||||
# define AV_WL64(p, v) AV_WN64(p, v)
|
|
||||||
# elif !defined(AV_WN64) && defined(AV_WL64)
|
|
||||||
# define AV_WN64(p, v) AV_WL64(p, v)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#endif /* !AV_HAVE_BIGENDIAN */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Define AV_[RW]N helper macros to simplify definitions not provided
|
|
||||||
* by per-arch headers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
|
|
||||||
union unaligned_64 { uint64_t l; } __attribute__((packed)) av_alias;
|
|
||||||
union unaligned_32 { uint32_t l; } __attribute__((packed)) av_alias;
|
|
||||||
union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias;
|
|
||||||
|
|
||||||
# define AV_RN(s, p) (((const union unaligned_##s *) (p))->l)
|
|
||||||
# define AV_WN(s, p, v) ((((union unaligned_##s *) (p))->l) = (v))
|
|
||||||
|
|
||||||
#elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_X64) || defined(_M_ARM64)) && AV_HAVE_FAST_UNALIGNED
|
|
||||||
|
|
||||||
# define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p)))
|
|
||||||
# define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v))
|
|
||||||
|
|
||||||
#elif AV_HAVE_FAST_UNALIGNED
|
|
||||||
|
|
||||||
# define AV_RN(s, p) (((const av_alias##s*)(p))->u##s)
|
|
||||||
# define AV_WN(s, p, v) (((av_alias##s*)(p))->u##s = (v))
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#ifndef AV_RB16
|
|
||||||
# define AV_RB16(x) \
|
|
||||||
((((const uint8_t*)(x))[0] << 8) | \
|
|
||||||
((const uint8_t*)(x))[1])
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WB16
|
|
||||||
# define AV_WB16(p, val) do { \
|
|
||||||
uint16_t d = (val); \
|
|
||||||
((uint8_t*)(p))[1] = (d); \
|
|
||||||
((uint8_t*)(p))[0] = (d)>>8; \
|
|
||||||
} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RL16
|
|
||||||
# define AV_RL16(x) \
|
|
||||||
((((const uint8_t*)(x))[1] << 8) | \
|
|
||||||
((const uint8_t*)(x))[0])
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WL16
|
|
||||||
# define AV_WL16(p, val) do { \
|
|
||||||
uint16_t d = (val); \
|
|
||||||
((uint8_t*)(p))[0] = (d); \
|
|
||||||
((uint8_t*)(p))[1] = (d)>>8; \
|
|
||||||
} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RB32
|
|
||||||
# define AV_RB32(x) \
|
|
||||||
(((uint32_t)((const uint8_t*)(x))[0] << 24) | \
|
|
||||||
(((const uint8_t*)(x))[1] << 16) | \
|
|
||||||
(((const uint8_t*)(x))[2] << 8) | \
|
|
||||||
((const uint8_t*)(x))[3])
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WB32
|
|
||||||
# define AV_WB32(p, val) do { \
|
|
||||||
uint32_t d = (val); \
|
|
||||||
((uint8_t*)(p))[3] = (d); \
|
|
||||||
((uint8_t*)(p))[2] = (d)>>8; \
|
|
||||||
((uint8_t*)(p))[1] = (d)>>16; \
|
|
||||||
((uint8_t*)(p))[0] = (d)>>24; \
|
|
||||||
} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RL32
|
|
||||||
# define AV_RL32(x) \
|
|
||||||
(((uint32_t)((const uint8_t*)(x))[3] << 24) | \
|
|
||||||
(((const uint8_t*)(x))[2] << 16) | \
|
|
||||||
(((const uint8_t*)(x))[1] << 8) | \
|
|
||||||
((const uint8_t*)(x))[0])
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WL32
|
|
||||||
# define AV_WL32(p, val) do { \
|
|
||||||
uint32_t d = (val); \
|
|
||||||
((uint8_t*)(p))[0] = (d); \
|
|
||||||
((uint8_t*)(p))[1] = (d)>>8; \
|
|
||||||
((uint8_t*)(p))[2] = (d)>>16; \
|
|
||||||
((uint8_t*)(p))[3] = (d)>>24; \
|
|
||||||
} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RB64
|
|
||||||
# define AV_RB64(x) \
|
|
||||||
(((uint64_t)((const uint8_t*)(x))[0] << 56) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[1] << 48) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[2] << 40) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[3] << 32) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[4] << 24) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[5] << 16) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[6] << 8) | \
|
|
||||||
(uint64_t)((const uint8_t*)(x))[7])
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WB64
|
|
||||||
# define AV_WB64(p, val) do { \
|
|
||||||
uint64_t d = (val); \
|
|
||||||
((uint8_t*)(p))[7] = (d); \
|
|
||||||
((uint8_t*)(p))[6] = (d)>>8; \
|
|
||||||
((uint8_t*)(p))[5] = (d)>>16; \
|
|
||||||
((uint8_t*)(p))[4] = (d)>>24; \
|
|
||||||
((uint8_t*)(p))[3] = (d)>>32; \
|
|
||||||
((uint8_t*)(p))[2] = (d)>>40; \
|
|
||||||
((uint8_t*)(p))[1] = (d)>>48; \
|
|
||||||
((uint8_t*)(p))[0] = (d)>>56; \
|
|
||||||
} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RL64
|
|
||||||
# define AV_RL64(x) \
|
|
||||||
(((uint64_t)((const uint8_t*)(x))[7] << 56) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[6] << 48) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[5] << 40) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[4] << 32) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[3] << 24) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[2] << 16) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[1] << 8) | \
|
|
||||||
(uint64_t)((const uint8_t*)(x))[0])
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WL64
|
|
||||||
# define AV_WL64(p, val) do { \
|
|
||||||
uint64_t d = (val); \
|
|
||||||
((uint8_t*)(p))[0] = (d); \
|
|
||||||
((uint8_t*)(p))[1] = (d)>>8; \
|
|
||||||
((uint8_t*)(p))[2] = (d)>>16; \
|
|
||||||
((uint8_t*)(p))[3] = (d)>>24; \
|
|
||||||
((uint8_t*)(p))[4] = (d)>>32; \
|
|
||||||
((uint8_t*)(p))[5] = (d)>>40; \
|
|
||||||
((uint8_t*)(p))[6] = (d)>>48; \
|
|
||||||
((uint8_t*)(p))[7] = (d)>>56; \
|
|
||||||
} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if AV_HAVE_BIGENDIAN
|
|
||||||
# define AV_RN(s, p) AV_RB##s(p)
|
|
||||||
# define AV_WN(s, p, v) AV_WB##s(p, v)
|
|
||||||
#else
|
|
||||||
# define AV_RN(s, p) AV_RL##s(p)
|
|
||||||
# define AV_WN(s, p, v) AV_WL##s(p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* HAVE_FAST_UNALIGNED */
|
|
||||||
|
|
||||||
#ifndef AV_RN16
|
|
||||||
# define AV_RN16(p) AV_RN(16, p)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RN32
|
|
||||||
# define AV_RN32(p) AV_RN(32, p)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RN64
|
|
||||||
# define AV_RN64(p) AV_RN(64, p)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_WN16
|
|
||||||
# define AV_WN16(p, v) AV_WN(16, p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_WN32
|
|
||||||
# define AV_WN32(p, v) AV_WN(32, p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_WN64
|
|
||||||
# define AV_WN64(p, v) AV_WN(64, p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if AV_HAVE_BIGENDIAN
|
|
||||||
# define AV_RB(s, p) AV_RN##s(p)
|
|
||||||
# define AV_WB(s, p, v) AV_WN##s(p, v)
|
|
||||||
# define AV_RL(s, p) av_bswap##s(AV_RN##s(p))
|
|
||||||
# define AV_WL(s, p, v) AV_WN##s(p, av_bswap##s(v))
|
|
||||||
#else
|
|
||||||
# define AV_RB(s, p) av_bswap##s(AV_RN##s(p))
|
|
||||||
# define AV_WB(s, p, v) AV_WN##s(p, av_bswap##s(v))
|
|
||||||
# define AV_RL(s, p) AV_RN##s(p)
|
|
||||||
# define AV_WL(s, p, v) AV_WN##s(p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define AV_RB8(x) (((const uint8_t*)(x))[0])
|
|
||||||
#define AV_WB8(p, d) do { ((uint8_t*)(p))[0] = (d); } while(0)
|
|
||||||
|
|
||||||
#define AV_RL8(x) AV_RB8(x)
|
|
||||||
#define AV_WL8(p, d) AV_WB8(p, d)
|
|
||||||
|
|
||||||
#ifndef AV_RB16
|
|
||||||
# define AV_RB16(p) AV_RB(16, p)
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WB16
|
|
||||||
# define AV_WB16(p, v) AV_WB(16, p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RL16
|
|
||||||
# define AV_RL16(p) AV_RL(16, p)
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WL16
|
|
||||||
# define AV_WL16(p, v) AV_WL(16, p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RB32
|
|
||||||
# define AV_RB32(p) AV_RB(32, p)
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WB32
|
|
||||||
# define AV_WB32(p, v) AV_WB(32, p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RL32
|
|
||||||
# define AV_RL32(p) AV_RL(32, p)
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WL32
|
|
||||||
# define AV_WL32(p, v) AV_WL(32, p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RB64
|
|
||||||
# define AV_RB64(p) AV_RB(64, p)
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WB64
|
|
||||||
# define AV_WB64(p, v) AV_WB(64, p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RL64
|
|
||||||
# define AV_RL64(p) AV_RL(64, p)
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WL64
|
|
||||||
# define AV_WL64(p, v) AV_WL(64, p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RB24
|
|
||||||
# define AV_RB24(x) \
|
|
||||||
((((const uint8_t*)(x))[0] << 16) | \
|
|
||||||
(((const uint8_t*)(x))[1] << 8) | \
|
|
||||||
((const uint8_t*)(x))[2])
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WB24
|
|
||||||
# define AV_WB24(p, d) do { \
|
|
||||||
((uint8_t*)(p))[2] = (d); \
|
|
||||||
((uint8_t*)(p))[1] = (d)>>8; \
|
|
||||||
((uint8_t*)(p))[0] = (d)>>16; \
|
|
||||||
} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RL24
|
|
||||||
# define AV_RL24(x) \
|
|
||||||
((((const uint8_t*)(x))[2] << 16) | \
|
|
||||||
(((const uint8_t*)(x))[1] << 8) | \
|
|
||||||
((const uint8_t*)(x))[0])
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WL24
|
|
||||||
# define AV_WL24(p, d) do { \
|
|
||||||
((uint8_t*)(p))[0] = (d); \
|
|
||||||
((uint8_t*)(p))[1] = (d)>>8; \
|
|
||||||
((uint8_t*)(p))[2] = (d)>>16; \
|
|
||||||
} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RB48
|
|
||||||
# define AV_RB48(x) \
|
|
||||||
(((uint64_t)((const uint8_t*)(x))[0] << 40) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[1] << 32) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[2] << 24) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[3] << 16) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[4] << 8) | \
|
|
||||||
(uint64_t)((const uint8_t*)(x))[5])
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WB48
|
|
||||||
# define AV_WB48(p, darg) do { \
|
|
||||||
uint64_t d = (darg); \
|
|
||||||
((uint8_t*)(p))[5] = (d); \
|
|
||||||
((uint8_t*)(p))[4] = (d)>>8; \
|
|
||||||
((uint8_t*)(p))[3] = (d)>>16; \
|
|
||||||
((uint8_t*)(p))[2] = (d)>>24; \
|
|
||||||
((uint8_t*)(p))[1] = (d)>>32; \
|
|
||||||
((uint8_t*)(p))[0] = (d)>>40; \
|
|
||||||
} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RL48
|
|
||||||
# define AV_RL48(x) \
|
|
||||||
(((uint64_t)((const uint8_t*)(x))[5] << 40) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[4] << 32) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[3] << 24) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[2] << 16) | \
|
|
||||||
((uint64_t)((const uint8_t*)(x))[1] << 8) | \
|
|
||||||
(uint64_t)((const uint8_t*)(x))[0])
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WL48
|
|
||||||
# define AV_WL48(p, darg) do { \
|
|
||||||
uint64_t d = (darg); \
|
|
||||||
((uint8_t*)(p))[0] = (d); \
|
|
||||||
((uint8_t*)(p))[1] = (d)>>8; \
|
|
||||||
((uint8_t*)(p))[2] = (d)>>16; \
|
|
||||||
((uint8_t*)(p))[3] = (d)>>24; \
|
|
||||||
((uint8_t*)(p))[4] = (d)>>32; \
|
|
||||||
((uint8_t*)(p))[5] = (d)>>40; \
|
|
||||||
} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The AV_[RW]NA macros access naturally aligned data
|
|
||||||
* in a type-safe way.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define AV_RNA(s, p) (((const av_alias##s*)(p))->u##s)
|
|
||||||
#define AV_WNA(s, p, v) (((av_alias##s*)(p))->u##s = (v))
|
|
||||||
|
|
||||||
#ifndef AV_RN16A
|
|
||||||
# define AV_RN16A(p) AV_RNA(16, p)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RN32A
|
|
||||||
# define AV_RN32A(p) AV_RNA(32, p)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RN64A
|
|
||||||
# define AV_RN64A(p) AV_RNA(64, p)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_WN16A
|
|
||||||
# define AV_WN16A(p, v) AV_WNA(16, p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_WN32A
|
|
||||||
# define AV_WN32A(p, v) AV_WNA(32, p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_WN64A
|
|
||||||
# define AV_WN64A(p, v) AV_WNA(64, p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if AV_HAVE_BIGENDIAN
|
|
||||||
# define AV_RLA(s, p) av_bswap##s(AV_RN##s##A(p))
|
|
||||||
# define AV_WLA(s, p, v) AV_WN##s##A(p, av_bswap##s(v))
|
|
||||||
#else
|
|
||||||
# define AV_RLA(s, p) AV_RN##s##A(p)
|
|
||||||
# define AV_WLA(s, p, v) AV_WN##s##A(p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_RL64A
|
|
||||||
# define AV_RL64A(p) AV_RLA(64, p)
|
|
||||||
#endif
|
|
||||||
#ifndef AV_WL64A
|
|
||||||
# define AV_WL64A(p, v) AV_WLA(64, p, v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The AV_COPYxxU macros are suitable for copying data to/from unaligned
|
|
||||||
* memory locations.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define AV_COPYU(n, d, s) AV_WN##n(d, AV_RN##n(s));
|
|
||||||
|
|
||||||
#ifndef AV_COPY16U
|
|
||||||
# define AV_COPY16U(d, s) AV_COPYU(16, d, s)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_COPY32U
|
|
||||||
# define AV_COPY32U(d, s) AV_COPYU(32, d, s)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_COPY64U
|
|
||||||
# define AV_COPY64U(d, s) AV_COPYU(64, d, s)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_COPY128U
|
|
||||||
# define AV_COPY128U(d, s) \
|
|
||||||
do { \
|
|
||||||
AV_COPY64U(d, s); \
|
|
||||||
AV_COPY64U((char *)(d) + 8, (const char *)(s) + 8); \
|
|
||||||
} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be
|
|
||||||
* naturally aligned. They may be implemented using MMX,
|
|
||||||
* so emms_c() must be called before using any float code
|
|
||||||
* afterwards.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define AV_COPY(n, d, s) \
|
|
||||||
(((av_alias##n*)(d))->u##n = ((const av_alias##n*)(s))->u##n)
|
|
||||||
|
|
||||||
#ifndef AV_COPY16
|
|
||||||
# define AV_COPY16(d, s) AV_COPY(16, d, s)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_COPY32
|
|
||||||
# define AV_COPY32(d, s) AV_COPY(32, d, s)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_COPY64
|
|
||||||
# define AV_COPY64(d, s) AV_COPY(64, d, s)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_COPY128
|
|
||||||
# define AV_COPY128(d, s) \
|
|
||||||
do { \
|
|
||||||
AV_COPY64(d, s); \
|
|
||||||
AV_COPY64((char*)(d)+8, (char*)(s)+8); \
|
|
||||||
} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define AV_SWAP(n, a, b) FFSWAP(av_alias##n, *(av_alias##n*)(a), *(av_alias##n*)(b))
|
|
||||||
|
|
||||||
#ifndef AV_SWAP64
|
|
||||||
# define AV_SWAP64(a, b) AV_SWAP(64, a, b)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define AV_ZERO(n, d) (((av_alias##n*)(d))->u##n = 0)
|
|
||||||
|
|
||||||
#ifndef AV_ZERO16
|
|
||||||
# define AV_ZERO16(d) AV_ZERO(16, d)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_ZERO32
|
|
||||||
# define AV_ZERO32(d) AV_ZERO(32, d)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_ZERO64
|
|
||||||
# define AV_ZERO64(d) AV_ZERO(64, d)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef AV_ZERO128
|
|
||||||
# define AV_ZERO128(d) \
|
|
||||||
do { \
|
|
||||||
AV_ZERO64(d); \
|
|
||||||
AV_ZERO64((char*)(d)+8); \
|
|
||||||
} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* AVUTIL_INTREADWRITE_H */
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
/*
|
|
||||||
* Lagged Fibonacci PRNG
|
|
||||||
* Copyright (c) 2008 Michael Niedermayer
|
|
||||||
*
|
|
||||||
* 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_LFG_H
|
|
||||||
#define AVUTIL_LFG_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Context structure for the Lagged Fibonacci PRNG.
|
|
||||||
* The exact layout, types and content of this struct may change and should
|
|
||||||
* not be accessed directly. Only its sizeof() is guranteed to stay the same
|
|
||||||
* to allow easy instanciation.
|
|
||||||
*/
|
|
||||||
typedef struct AVLFG {
|
|
||||||
unsigned int state[64];
|
|
||||||
int index;
|
|
||||||
} AVLFG;
|
|
||||||
|
|
||||||
void av_lfg_init(AVLFG *c, unsigned int seed);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Seed the state of the ALFG using binary data.
|
|
||||||
*
|
|
||||||
* Return value: 0 on success, negative value (AVERROR) on failure.
|
|
||||||
*/
|
|
||||||
int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the next random unsigned 32-bit number using an ALFG.
|
|
||||||
*
|
|
||||||
* Please also consider a simple LCG like state= state*1664525+1013904223,
|
|
||||||
* it may be good enough and faster for your specific use case.
|
|
||||||
*/
|
|
||||||
static inline unsigned int av_lfg_get(AVLFG *c){
|
|
||||||
unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
|
|
||||||
c->index += 1U;
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the next random unsigned 32-bit number using a MLFG.
|
|
||||||
*
|
|
||||||
* Please also consider av_lfg_get() above, it is faster.
|
|
||||||
*/
|
|
||||||
static inline unsigned int av_mlfg_get(AVLFG *c){
|
|
||||||
unsigned int a= c->state[(c->index-55) & 63];
|
|
||||||
unsigned int b= c->state[(c->index-24) & 63];
|
|
||||||
a = c->state[c->index & 63] = 2*a*b+a+b;
|
|
||||||
c->index += 1U;
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the next two numbers generated by a Box-Muller Gaussian
|
|
||||||
* generator using the random numbers issued by lfg.
|
|
||||||
*
|
|
||||||
* @param out array where the two generated numbers are placed
|
|
||||||
*/
|
|
||||||
void av_bmg_get(AVLFG *lfg, double out[2]);
|
|
||||||
|
|
||||||
#endif /* AVUTIL_LFG_H */
|
|
||||||
@@ -1,383 +0,0 @@
|
|||||||
/*
|
|
||||||
* copyright (c) 2006 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_LOG_H
|
|
||||||
#define AVUTIL_LOG_H
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include "avutil.h"
|
|
||||||
#include "attributes.h"
|
|
||||||
#include "avutilVersion.h"
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
AV_CLASS_CATEGORY_NA = 0,
|
|
||||||
AV_CLASS_CATEGORY_INPUT,
|
|
||||||
AV_CLASS_CATEGORY_OUTPUT,
|
|
||||||
AV_CLASS_CATEGORY_MUXER,
|
|
||||||
AV_CLASS_CATEGORY_DEMUXER,
|
|
||||||
AV_CLASS_CATEGORY_ENCODER,
|
|
||||||
AV_CLASS_CATEGORY_DECODER,
|
|
||||||
AV_CLASS_CATEGORY_FILTER,
|
|
||||||
AV_CLASS_CATEGORY_BITSTREAM_FILTER,
|
|
||||||
AV_CLASS_CATEGORY_SWSCALER,
|
|
||||||
AV_CLASS_CATEGORY_SWRESAMPLER,
|
|
||||||
AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT = 40,
|
|
||||||
AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT,
|
|
||||||
AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT,
|
|
||||||
AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT,
|
|
||||||
AV_CLASS_CATEGORY_DEVICE_OUTPUT,
|
|
||||||
AV_CLASS_CATEGORY_DEVICE_INPUT,
|
|
||||||
AV_CLASS_CATEGORY_NB ///< not part of ABI/API
|
|
||||||
}AVClassCategory;
|
|
||||||
|
|
||||||
#define AV_IS_INPUT_DEVICE(category) \
|
|
||||||
(((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT) || \
|
|
||||||
((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT) || \
|
|
||||||
((category) == AV_CLASS_CATEGORY_DEVICE_INPUT))
|
|
||||||
|
|
||||||
#define AV_IS_OUTPUT_DEVICE(category) \
|
|
||||||
(((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT) || \
|
|
||||||
((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT) || \
|
|
||||||
((category) == AV_CLASS_CATEGORY_DEVICE_OUTPUT))
|
|
||||||
|
|
||||||
struct AVOptionRanges;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Describe the class of an AVClass context structure. That is an
|
|
||||||
* arbitrary struct of which the first field is a pointer to an
|
|
||||||
* AVClass struct (e.g. AVCodecContext, AVFormatContext etc.).
|
|
||||||
*/
|
|
||||||
typedef struct AVClass {
|
|
||||||
/**
|
|
||||||
* The name of the class; usually it is the same name as the
|
|
||||||
* context structure type to which the AVClass is associated.
|
|
||||||
*/
|
|
||||||
const char* class_name;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A pointer to a function which returns the name of a context
|
|
||||||
* instance ctx associated with the class.
|
|
||||||
*/
|
|
||||||
const char* (*item_name)(void* ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* a pointer to the first option specified in the class if any or NULL
|
|
||||||
*
|
|
||||||
* @see av_set_default_options()
|
|
||||||
*/
|
|
||||||
const struct AVOption *option;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* LIBAVUTIL_VERSION with which this structure was created.
|
|
||||||
* This is used to allow fields to be added without requiring major
|
|
||||||
* version bumps everywhere.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int version;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Offset in the structure where log_level_offset is stored.
|
|
||||||
* 0 means there is no such variable
|
|
||||||
*/
|
|
||||||
int log_level_offset_offset;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Offset in the structure where a pointer to the parent context for
|
|
||||||
* logging is stored. For example a decoder could pass its AVCodecContext
|
|
||||||
* to eval as such a parent context, which an av_log() implementation
|
|
||||||
* could then leverage to display the parent context.
|
|
||||||
* The offset can be NULL.
|
|
||||||
*/
|
|
||||||
int parent_log_context_offset;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return next AVOptions-enabled child or NULL
|
|
||||||
*/
|
|
||||||
void* (*child_next)(void *obj, void *prev);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return an AVClass corresponding to the next potential
|
|
||||||
* AVOptions-enabled child.
|
|
||||||
*
|
|
||||||
* The difference between child_next and this is that
|
|
||||||
* child_next iterates over _already existing_ objects, while
|
|
||||||
* child_class_next iterates over _all possible_ children.
|
|
||||||
*/
|
|
||||||
const struct AVClass* (*child_class_next)(const struct AVClass *prev);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Category used for visualization (like color)
|
|
||||||
* This is only set if the category is equal for all objects using this class.
|
|
||||||
* available since version (51 << 16 | 56 << 8 | 100)
|
|
||||||
*/
|
|
||||||
AVClassCategory category;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Callback to return the category.
|
|
||||||
* available since version (51 << 16 | 59 << 8 | 100)
|
|
||||||
*/
|
|
||||||
AVClassCategory (*get_category)(void* ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Callback to return the supported/allowed ranges.
|
|
||||||
* available since version (52.12)
|
|
||||||
*/
|
|
||||||
int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags);
|
|
||||||
} AVClass;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup lavu_log
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* @defgroup lavu_log_constants Logging Constants
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print no output.
|
|
||||||
*/
|
|
||||||
#define AV_LOG_QUIET -8
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Something went really wrong and we will crash now.
|
|
||||||
*/
|
|
||||||
#define AV_LOG_PANIC 0
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Something went wrong and recovery is not possible.
|
|
||||||
* For example, no header was found for a format which depends
|
|
||||||
* on headers or an illegal combination of parameters is used.
|
|
||||||
*/
|
|
||||||
#define AV_LOG_FATAL 8
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Something went wrong and cannot losslessly be recovered.
|
|
||||||
* However, not all future data is affected.
|
|
||||||
*/
|
|
||||||
#define AV_LOG_ERROR 16
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Something somehow does not look correct. This may or may not
|
|
||||||
* lead to problems. An example would be the use of '-vstrict -2'.
|
|
||||||
*/
|
|
||||||
#define AV_LOG_WARNING 24
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Standard information.
|
|
||||||
*/
|
|
||||||
#define AV_LOG_INFO 32
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Detailed information.
|
|
||||||
*/
|
|
||||||
#define AV_LOG_VERBOSE 40
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Stuff which is only useful for libav* developers.
|
|
||||||
*/
|
|
||||||
#define AV_LOG_DEBUG 48
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extremely verbose debugging, useful for libav* development.
|
|
||||||
*/
|
|
||||||
#define AV_LOG_TRACE 56
|
|
||||||
|
|
||||||
#define AV_LOG_MAX_OFFSET (AV_LOG_TRACE - AV_LOG_QUIET)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets additional colors for extended debugging sessions.
|
|
||||||
* @code
|
|
||||||
av_log(ctx, AV_LOG_DEBUG|AV_LOG_C(134), "Message in purple\n");
|
|
||||||
@endcode
|
|
||||||
* Requires 256color terminal support. Uses outside debugging is not
|
|
||||||
* recommended.
|
|
||||||
*/
|
|
||||||
#define AV_LOG_C(x) ((x) << 8)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Send the specified message to the log if the level is less than or equal
|
|
||||||
* to the current av_log_level. By default, all logging messages are sent to
|
|
||||||
* stderr. This behavior can be altered by setting a different logging callback
|
|
||||||
* function.
|
|
||||||
* @see av_log_set_callback
|
|
||||||
*
|
|
||||||
* @param avcl A pointer to an arbitrary struct of which the first field is a
|
|
||||||
* pointer to an AVClass struct or NULL if general log.
|
|
||||||
* @param level The importance level of the message expressed using a @ref
|
|
||||||
* lavu_log_constants "Logging Constant".
|
|
||||||
* @param fmt The format string (printf-compatible) that specifies how
|
|
||||||
* subsequent arguments are converted to output.
|
|
||||||
*/
|
|
||||||
void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Send the specified message to the log once with the initial_level and then with
|
|
||||||
* the subsequent_level. By default, all logging messages are sent to
|
|
||||||
* stderr. This behavior can be altered by setting a different logging callback
|
|
||||||
* function.
|
|
||||||
* @see av_log
|
|
||||||
*
|
|
||||||
* @param avcl A pointer to an arbitrary struct of which the first field is a
|
|
||||||
* pointer to an AVClass struct or NULL if general log.
|
|
||||||
* @param initial_level importance level of the message expressed using a @ref
|
|
||||||
* lavu_log_constants "Logging Constant" for the first occurance.
|
|
||||||
* @param subsequent_level importance level of the message expressed using a @ref
|
|
||||||
* lavu_log_constants "Logging Constant" after the first occurance.
|
|
||||||
* @param fmt The format string (printf-compatible) that specifies how
|
|
||||||
* subsequent arguments are converted to output.
|
|
||||||
* @param state a variable to keep trak of if a message has already been printed
|
|
||||||
* this must be initialized to 0 before the first use. The same state
|
|
||||||
* must not be accessed by 2 Threads simultaneously.
|
|
||||||
*/
|
|
||||||
void av_log_once(void* avcl, int initial_level, int subsequent_level, int *state, const char *fmt, ...) av_printf_format(5, 6);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Send the specified message to the log if the level is less than or equal
|
|
||||||
* to the current av_log_level. By default, all logging messages are sent to
|
|
||||||
* stderr. This behavior can be altered by setting a different logging callback
|
|
||||||
* function.
|
|
||||||
* @see av_log_set_callback
|
|
||||||
*
|
|
||||||
* @param avcl A pointer to an arbitrary struct of which the first field is a
|
|
||||||
* pointer to an AVClass struct.
|
|
||||||
* @param level The importance level of the message expressed using a @ref
|
|
||||||
* lavu_log_constants "Logging Constant".
|
|
||||||
* @param fmt The format string (printf-compatible) that specifies how
|
|
||||||
* subsequent arguments are converted to output.
|
|
||||||
* @param vl The arguments referenced by the format string.
|
|
||||||
*/
|
|
||||||
void av_vlog(void *avcl, int level, const char *fmt, va_list vl);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the current log level
|
|
||||||
*
|
|
||||||
* @see lavu_log_constants
|
|
||||||
*
|
|
||||||
* @return Current log level
|
|
||||||
*/
|
|
||||||
int av_log_get_level(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the log level
|
|
||||||
*
|
|
||||||
* @see lavu_log_constants
|
|
||||||
*
|
|
||||||
* @param level Logging level
|
|
||||||
*/
|
|
||||||
void av_log_set_level(int level);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the logging callback
|
|
||||||
*
|
|
||||||
* @note The callback must be thread safe, even if the application does not use
|
|
||||||
* threads itself as some codecs are multithreaded.
|
|
||||||
*
|
|
||||||
* @see av_log_default_callback
|
|
||||||
*
|
|
||||||
* @param callback A logging function with a compatible signature.
|
|
||||||
*/
|
|
||||||
void av_log_set_callback(void (*callback)(void*, int, const char*, va_list));
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Default logging callback
|
|
||||||
*
|
|
||||||
* It prints the message to stderr, optionally colorizing it.
|
|
||||||
*
|
|
||||||
* @param avcl A pointer to an arbitrary struct of which the first field is a
|
|
||||||
* pointer to an AVClass struct.
|
|
||||||
* @param level The importance level of the message expressed using a @ref
|
|
||||||
* lavu_log_constants "Logging Constant".
|
|
||||||
* @param fmt The format string (printf-compatible) that specifies how
|
|
||||||
* subsequent arguments are converted to output.
|
|
||||||
* @param vl The arguments referenced by the format string.
|
|
||||||
*/
|
|
||||||
void av_log_default_callback(void *avcl, int level, const char *fmt,
|
|
||||||
va_list vl);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the context name
|
|
||||||
*
|
|
||||||
* @param ctx The AVClass context
|
|
||||||
*
|
|
||||||
* @return The AVClass class_name
|
|
||||||
*/
|
|
||||||
const char* av_default_item_name(void* ctx);
|
|
||||||
AVClassCategory av_default_get_category(void *ptr);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Format a line of log the same way as the default callback.
|
|
||||||
* @param line buffer to receive the formatted line
|
|
||||||
* @param line_size size of the buffer
|
|
||||||
* @param print_prefix used to store whether the prefix must be printed;
|
|
||||||
* must point to a persistent integer initially set to 1
|
|
||||||
*/
|
|
||||||
void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl,
|
|
||||||
char *line, int line_size, int *print_prefix);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Format a line of log the same way as the default callback.
|
|
||||||
* @param line buffer to receive the formatted line;
|
|
||||||
* may be NULL if line_size is 0
|
|
||||||
* @param line_size size of the buffer; at most line_size-1 characters will
|
|
||||||
* be written to the buffer, plus one null terminator
|
|
||||||
* @param print_prefix used to store whether the prefix must be printed;
|
|
||||||
* must point to a persistent integer initially set to 1
|
|
||||||
* @return Returns a negative value if an error occurred, otherwise returns
|
|
||||||
* the number of characters that would have been written for a
|
|
||||||
* sufficiently large buffer, not including the terminating null
|
|
||||||
* character. If the return value is not less than line_size, it means
|
|
||||||
* that the log message was truncated to fit the buffer.
|
|
||||||
*/
|
|
||||||
int av_log_format_line2(void *ptr, int level, const char *fmt, va_list vl,
|
|
||||||
char *line, int line_size, int *print_prefix);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Skip repeated messages, this requires the user app to use av_log() instead of
|
|
||||||
* (f)printf as the 2 would otherwise interfere and lead to
|
|
||||||
* "Last message repeated x times" messages below (f)printf messages with some
|
|
||||||
* bad luck.
|
|
||||||
* Also to receive the last, "last repeated" line if any, the user app must
|
|
||||||
* call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end
|
|
||||||
*/
|
|
||||||
#define AV_LOG_SKIP_REPEATED 1
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Include the log severity in messages originating from codecs.
|
|
||||||
*
|
|
||||||
* Results in messages such as:
|
|
||||||
* [rawvideo @ 0xDEADBEEF] [error] encode did not produce valid pts
|
|
||||||
*/
|
|
||||||
#define AV_LOG_PRINT_LEVEL 2
|
|
||||||
|
|
||||||
void av_log_set_flags(int arg);
|
|
||||||
int av_log_get_flags(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_LOG_H */
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
/*
|
|
||||||
* LZO 1x decompression
|
|
||||||
* copyright (c) 2006 Reimar Doeffinger
|
|
||||||
*
|
|
||||||
* 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_LZO_H
|
|
||||||
#define AVUTIL_LZO_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup lavu_lzo LZO
|
|
||||||
* @ingroup lavu_crypto
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
/** @name Error flags returned by av_lzo1x_decode
|
|
||||||
* @{ */
|
|
||||||
/// end of the input buffer reached before decoding finished
|
|
||||||
#define AV_LZO_INPUT_DEPLETED 1
|
|
||||||
/// decoded data did not fit into output buffer
|
|
||||||
#define AV_LZO_OUTPUT_FULL 2
|
|
||||||
/// a reference to previously decoded data was wrong
|
|
||||||
#define AV_LZO_INVALID_BACKPTR 4
|
|
||||||
/// a non-specific error in the compressed bitstream
|
|
||||||
#define AV_LZO_ERROR 8
|
|
||||||
/** @} */
|
|
||||||
|
|
||||||
#define AV_LZO_INPUT_PADDING 8
|
|
||||||
#define AV_LZO_OUTPUT_PADDING 12
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Decodes LZO 1x compressed data.
|
|
||||||
* @param out output buffer
|
|
||||||
* @param outlen size of output buffer, number of bytes left are returned here
|
|
||||||
* @param in input buffer
|
|
||||||
* @param inlen size of input buffer, number of bytes left are returned here
|
|
||||||
* @return 0 on success, otherwise a combination of the error flags above
|
|
||||||
*
|
|
||||||
* Make sure all buffers are appropriately padded, in must provide
|
|
||||||
* AV_LZO_INPUT_PADDING, out must provide AV_LZO_OUTPUT_PADDING additional bytes.
|
|
||||||
*/
|
|
||||||
int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* AVUTIL_LZO_H */
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @ingroup lavu
|
|
||||||
* Utility Preprocessor macros
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef AVUTIL_MACROS_H
|
|
||||||
#define AVUTIL_MACROS_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup preproc_misc Preprocessor String Macros
|
|
||||||
*
|
|
||||||
* String manipulation macros
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define AV_STRINGIFY(s) AV_TOSTRING(s)
|
|
||||||
#define AV_TOSTRING(s) #s
|
|
||||||
|
|
||||||
#define AV_GLUE(a, b) a ## b
|
|
||||||
#define AV_JOIN(a, b) AV_GLUE(a, b)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define AV_PRAGMA(s) _Pragma(#s)
|
|
||||||
|
|
||||||
#define FFALIGN(x, a) (((x)+(a)-1)&~((a)-1))
|
|
||||||
|
|
||||||
#endif /* AVUTIL_MACROS_H */
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user