X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=cmdutils.h;h=39125ce4ba9b499866d5b7569929158a6d3bb24d;hb=1136bd362a873156d9eb99f38a3edd09ae553eee;hp=5c5e57cbbe851c6c411b4144d20ca866e9cad18c;hpb=050dc127787e91d8ee4b341046c74fe6e74e3285;p=ffmpeg diff --git a/cmdutils.h b/cmdutils.h index 5c5e57cbbe8..39125ce4ba9 100644 --- a/cmdutils.h +++ b/cmdutils.h @@ -130,7 +130,6 @@ typedef struct { #define OPT_STRING 0x0008 #define OPT_VIDEO 0x0010 #define OPT_AUDIO 0x0020 -#define OPT_GRAB 0x0040 #define OPT_INT 0x0080 #define OPT_FLOAT 0x0100 #define OPT_SUBTITLE 0x0200 @@ -154,8 +153,16 @@ typedef struct { const char *argname; } OptionDef; -void show_help_options(const OptionDef *options, const char *msg, int mask, - int value); +/** + * 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. + */ +void show_help_options(const OptionDef *options, const char *msg, int req_flags, + int rej_flags); /** * Show help for all options with given flags in class and all its @@ -163,6 +170,17 @@ void show_help_options(const OptionDef *options, const char *msg, int mask, */ 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(const char *opt, const char *arg); + /** * Parse the command line arguments. * @@ -214,10 +232,12 @@ int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec); * * @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 CodecID codec_id, - AVFormatContext *s, AVStream *st); +AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id, + AVFormatContext *s, AVStream *st, AVCodec *codec); /** * Setup AVCodecContext options for avformat_find_stream_info(). @@ -256,49 +276,61 @@ void show_banner(void); * depends on the current versions of the repository and of the libav* * libraries. */ -void show_version(void); +int show_version(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. */ -void show_license(void); +int show_license(const char *opt, const char *arg); /** * Print a listing containing all the formats supported by the * program. */ -void show_formats(void); +int show_formats(const char *opt, const char *arg); /** * Print a listing containing all the codecs supported by the * program. */ -void show_codecs(void); +int show_codecs(const char *opt, const char *arg); + +/** + * Print a listing containing all the decoders supported by the + * program. + */ +int show_decoders(const char *opt, const char *arg); + +/** + * Print a listing containing all the encoders supported by the + * program. + */ +int show_encoders(const char *opt, const char *arg); /** * Print a listing containing all the filters supported by the * program. */ -void show_filters(void); +int show_filters(const char *opt, const char *arg); /** * Print a listing containing all the bit stream filters supported by the * program. */ -void show_bsfs(void); +int show_bsfs(const char *opt, const char *arg); /** * Print a listing containing all the protocols supported by the * program. */ -void show_protocols(void); +int show_protocols(const char *opt, const char *arg); /** * Print a listing containing all the pixel formats supported by the * program. */ -void show_pix_fmts(void); +int show_pix_fmts(const char *opt, const char *arg); /** * Print a listing containing all the sample formats supported by the @@ -367,26 +399,11 @@ int64_t guess_correct_pts(PtsCorrectionContext *ctx, int64_t pts, int64_t dts); FILE *get_preset_file(char *filename, size_t filename_size, const char *preset_name, int is_path, const char *codec_name); -typedef struct { - enum PixelFormat pix_fmt; -} SinkContext; - -extern AVFilter sink; - -/** - * Extract a frame from sink. - * - * @return a negative error in case of failure, 1 if one frame has - * been extracted successfully. - */ -int get_filtered_video_frame(AVFilterContext *sink, AVFrame *frame, - AVFilterBufferRef **picref, AVRational *pts_tb); - /** * Do all the necessary cleanup and abort. * This function is implemented in the avtools, not cmdutils. */ -void exit_program(int ret); +av_noreturn void exit_program(int ret); /** * Realloc array to hold new_size elements of elem_size. @@ -398,4 +415,65 @@ void exit_program(int ret); */ void *grow_array(void *array, int elem_size, int *size, int new_size); +typedef struct FrameBuffer { + uint8_t *base[4]; + uint8_t *data[4]; + int linesize[4]; + + int h, w; + enum PixelFormat pix_fmt; + + int refcount; + struct FrameBuffer **pool; ///< head of the buffer pool + struct FrameBuffer *next; +} FrameBuffer; + +/** + * Get a frame from the pool. This is intended to be used as a callback for + * AVCodecContext.get_buffer. + * + * @param s codec context. s->opaque must be a pointer to the head of the + * buffer pool. + * @param frame frame->opaque will be set to point to the FrameBuffer + * containing the frame data. + */ +int codec_get_buffer(AVCodecContext *s, AVFrame *frame); + +/** + * A callback to be used for AVCodecContext.release_buffer along with + * codec_get_buffer(). + */ +void codec_release_buffer(AVCodecContext *s, AVFrame *frame); + +/** + * A callback to be used for AVFilterBuffer.free. + * @param fb buffer to free. fb->priv must be a pointer to the FrameBuffer + * containing the buffer data. + */ +void filter_release_buffer(AVFilterBuffer *fb); + +/** + * Free all the buffers in the pool. This must be called after all the + * buffers have been released. + */ +void free_buffer_pool(FrameBuffer **pool); + +#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 */