mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-10-31 12:36:41 +08:00 
			
		
		
		
	build: Move cli tool sources to a separate subdirectory
This unclutters the top-level directory and groups related files together.
This commit is contained in:
		
							
								
								
									
										566
									
								
								avtools/cmdutils.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										566
									
								
								avtools/cmdutils.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,566 @@ | ||||
| /* | ||||
|  * Various utilities for command line tools | ||||
|  * copyright (c) 2003 Fabrice Bellard | ||||
|  * | ||||
|  * This file is part of Libav. | ||||
|  * | ||||
|  * Libav 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. | ||||
|  * | ||||
|  * Libav 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 Libav; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||||
|  */ | ||||
|  | ||||
| #ifndef LIBAV_CMDUTILS_H | ||||
| #define LIBAV_CMDUTILS_H | ||||
|  | ||||
| #include <stdint.h> | ||||
|  | ||||
| #include "libavcodec/avcodec.h" | ||||
| #include "libavfilter/avfilter.h" | ||||
| #include "libavformat/avformat.h" | ||||
| #include "libswscale/swscale.h" | ||||
|  | ||||
| /** | ||||
|  * 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 struct SwsContext *sws_opts; | ||||
| extern AVDictionary *format_opts, *codec_opts, *resample_opts; | ||||
|  | ||||
| /** | ||||
|  * 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 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 show_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 mask. | ||||
|  */ | ||||
| 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); | ||||
|  | ||||
| /** | ||||
|  * 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 parse_date() | ||||
|  */ | ||||
| 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; | ||||
|         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 avconv-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); | ||||
|  | ||||
| #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" },                          \ | ||||
|     { "formats",     OPT_EXIT,             { .func_arg = show_formats },     "show available formats" },                \ | ||||
|     { "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" },          \ | ||||
|     { "sample_fmts", OPT_EXIT,             { .func_arg = show_sample_fmts }, "show available audio sample formats" },   \ | ||||
|     { "loglevel",    HAS_ARG,              { .func_arg = opt_loglevel },     "set libav* logging level", "loglevel" },  \ | ||||
|     { "v",           HAS_ARG,              { .func_arg = opt_loglevel },     "set libav* logging level", "loglevel" },  \ | ||||
|     { "cpuflags",    HAS_ARG | OPT_EXPERT, { .func_arg = opt_cpuflags },     "set CPU flags mask", "mask" },            \ | ||||
|  | ||||
| /** | ||||
|  * Show help for all options with given flags in class and all its | ||||
|  * children. | ||||
|  */ | ||||
| void show_help_children(const AVClass *class, int flags); | ||||
|  | ||||
| /** | ||||
|  * Per-avtool specific help handler. Implemented in each | ||||
|  * avtool, called by show_help(). | ||||
|  */ | ||||
| void show_help_default(const char *opt, const char *arg); | ||||
|  | ||||
| /** | ||||
|  * Generic -h handler common to all avtools. | ||||
|  */ | ||||
| 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. avconv 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; | ||||
|     struct SwsContext *sws_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(void); | ||||
|  | ||||
| /** | ||||
|  * Print the version of the program to stdout. The version message | ||||
|  * depends on the current versions of the repository and of the libav* | ||||
|  * libraries. | ||||
|  */ | ||||
| int show_version(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. | ||||
|  */ | ||||
| int show_license(void *optctx, const char *opt, const char *arg); | ||||
|  | ||||
| /** | ||||
|  * Print a listing containing all the formats supported by the | ||||
|  * program. | ||||
|  */ | ||||
| int show_formats(void *optctx, const char *opt, const char *arg); | ||||
|  | ||||
| /** | ||||
|  * Print a listing containing all the codecs supported by the | ||||
|  * program. | ||||
|  */ | ||||
| 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. | ||||
|  */ | ||||
| int show_filters(void *optctx, const char *opt, const char *arg); | ||||
|  | ||||
| /** | ||||
|  * Print a listing containing all the bit stream filters supported by the | ||||
|  * program. | ||||
|  */ | ||||
| int show_bsfs(void *optctx, const char *opt, const char *arg); | ||||
|  | ||||
| /** | ||||
|  * Print a listing containing all the protocols supported by the | ||||
|  * program. | ||||
|  */ | ||||
| int show_protocols(void *optctx, const char *opt, const char *arg); | ||||
|  | ||||
| /** | ||||
|  * Print a listing containing all the pixel formats supported by the | ||||
|  * program. | ||||
|  */ | ||||
| int show_pix_fmts(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); | ||||
|  | ||||
| /** | ||||
|  * Return a positive value if a line read from standard input | ||||
|  * starts with [yY], otherwise return 0. | ||||
|  */ | ||||
| int read_yesno(void); | ||||
|  | ||||
| typedef struct PtsCorrectionContext { | ||||
|     int64_t num_faulty_pts; /// Number of incorrect PTS values so far | ||||
|     int64_t num_faulty_dts; /// Number of incorrect DTS values so far | ||||
|     int64_t last_pts;       /// PTS of the last frame | ||||
|     int64_t last_dts;       /// DTS of the last frame | ||||
| } PtsCorrectionContext; | ||||
|  | ||||
| /** | ||||
|  * Reset the state of the PtsCorrectionContext. | ||||
|  */ | ||||
| void init_pts_correction(PtsCorrectionContext *ctx); | ||||
|  | ||||
| /** | ||||
|  * Attempt to guess proper monotonic timestamps for decoded video frames | ||||
|  * which might have incorrect times. Input timestamps may wrap around, in | ||||
|  * which case the output will as well. | ||||
|  * | ||||
|  * @param ctx the PtsCorrectionContext carrying stream pts information | ||||
|  * @param pts the pts field of the decoded AVPacket, as passed through | ||||
|  * AVCodecContext.reordered_opaque | ||||
|  * @param dts the dts field of the decoded AVPacket | ||||
|  * @return one of the input values, may be AV_NOPTS_VALUE | ||||
|  */ | ||||
| int64_t guess_correct_pts(PtsCorrectionContext *ctx, int64_t pts, int64_t dts); | ||||
|  | ||||
| /** | ||||
|  * 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.avpreset in the directories | ||||
|  * $AVCONV_DATADIR (if set), $HOME/.avconv, and in the datadir defined | ||||
|  * at configuration time, 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); | ||||
|  | ||||
| /** | ||||
|  * Get a string describing a media type. | ||||
|  */ | ||||
| const char *media_type_string(enum AVMediaType media_type); | ||||
|  | ||||
| #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_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); | ||||
|  | ||||
| #endif /* LIBAV_CMDUTILS_H */ | ||||
		Reference in New Issue
	
	Block a user
	 Diego Biurrun
					Diego Biurrun