X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=cmdutils.h;h=5c5e57cbbe851c6c411b4144d20ca866e9cad18c;hb=2c07c1804831fa0ae6d494a63fdd10facfd6074b;hp=f0c9079647c23ffab18ea504530f391db385f6cf;hpb=2f8e586df14649ebf1538dc610928c844e0068ec;p=ffmpeg diff --git a/cmdutils.h b/cmdutils.h index f0c9079647c..5c5e57cbbe8 100644 --- a/cmdutils.h +++ b/cmdutils.h @@ -83,14 +83,15 @@ int opt_timelimit(const char *opt, const char *arg); * parsed or the corresponding value is invalid. * * @param context the context of the value to be set (e.g. the - * corresponding commandline option name) + * 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); +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 @@ -98,7 +99,7 @@ double parse_number_or_die(const char *context, const char *numstr, int type, do * the string cannot be correctly parsed. * * @param context the context of the value to be set (e.g. the - * corresponding commandline option name) + * 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 @@ -106,7 +107,19 @@ double parse_number_or_die(const char *context, const char *numstr, int type, do * * @see parse_date() */ -int64_t parse_time_or_die(const char *context, const char *timestr, int is_duration); +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 { const char *name; @@ -126,6 +139,11 @@ typedef struct { #define OPT_DATA 0x1000 #define OPT_FUNC2 0x2000 #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 union { void *dst_ptr; int (*func_arg)(const char *, const char *); @@ -136,7 +154,14 @@ typedef struct { const char *argname; } OptionDef; -void show_help_options(const OptionDef *options, const char *msg, int mask, int value); +void show_help_options(const OptionDef *options, const char *msg, int mask, + int value); + +/** + * Show help for all options with given flags in class and all its + * children. + */ +void show_help_children(const AVClass *class, int flags); /** * Parse the command line arguments. @@ -156,14 +181,26 @@ void parse_options(void *optctx, int argc, char **argv, const OptionDef *options * * @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); +int parse_option(void *optctx, const char *opt, const char *arg, + const OptionDef *options); + +/** + * 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]:[] form. + * @param spec A stream specifier of the [v|a|s|d]:[\] form. * * @return 1 if the stream matches, 0 if it doesn't, <0 on error */ @@ -179,7 +216,8 @@ int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec); * @param st A stream from s for which the options should be filtered. * @return a pointer to the created dictionary */ -AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id, AVFormatContext *s, AVStream *st); +AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id, + AVFormatContext *s, AVStream *st); /** * Setup AVCodecContext options for avformat_find_stream_info(). @@ -192,7 +230,8 @@ AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id, AVFor * @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); +AVDictionary **setup_find_stream_info_opts(AVFormatContext *s, + AVDictionary *codec_opts); /** * Print an error message to stderr, indicating filename and a human @@ -261,6 +300,12 @@ void show_protocols(void); */ void show_pix_fmts(void); +/** + * Print a listing containing all the sample formats supported by the + * program. + */ +int show_sample_fmts(const char *opt, const char *arg); + /** * Return a positive value if a line read from standard input * starts with [yY], otherwise return 0. @@ -276,7 +321,7 @@ int read_yesno(void); * @return 0 in case of success, a negative value corresponding to an * AVERROR error code in case of failure. */ -int read_file(const char *filename, char **bufptr, size_t *size); +int cmdutils_read_file(const char *filename, char **bufptr, size_t *size); typedef struct { int64_t num_faulty_pts; /// Number of incorrect PTS values so far @@ -306,11 +351,11 @@ 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.ffpreset in the directories - * $FFMPEG_DATADIR (if set), $HOME/.ffmpeg, and in the datadir defined + * 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.ffpreset in the above-mentioned directories. + * 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 @@ -324,9 +369,9 @@ FILE *get_preset_file(char *filename, size_t filename_size, typedef struct { enum PixelFormat pix_fmt; -} FFSinkContext; +} SinkContext; -extern AVFilter ffsink; +extern AVFilter sink; /** * Extract a frame from sink.