X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=avconv.h;h=b932d7e8db3df7b3cf3eb7293e3f52ccf8e25fd2;hb=b396bbad100a7493691d09b8dceba91e3cd28e2e;hp=11e846261fda40b8fcb6ba1b57bf05e56c818db8;hpb=c1ef30a6ba2cdc15147c4e80766e9bda629ffc1d;p=ffmpeg diff --git a/avconv.h b/avconv.h index 11e846261fd..b932d7e8db3 100644 --- a/avconv.h +++ b/avconv.h @@ -36,7 +36,6 @@ #include "libavcodec/avcodec.h" #include "libavfilter/avfilter.h" -#include "libavfilter/avfiltergraph.h" #include "libavutil/avutil.h" #include "libavutil/dict.h" @@ -49,6 +48,21 @@ #define VSYNC_CFR 1 #define VSYNC_VFR 2 +enum HWAccelID { + HWACCEL_NONE = 0, + HWACCEL_AUTO, + HWACCEL_VDPAU, + HWACCEL_DXVA2, + HWACCEL_VDA, +}; + +typedef struct HWAccel { + const char *name; + int (*init)(AVCodecContext *s); + enum HWAccelID id; + enum AVPixelFormat pix_fmt; +} HWAccel; + /* select an input stream for an output stream */ typedef struct StreamMap { int disabled; /* 1 is this mapping is disabled by a negative map */ @@ -67,6 +81,8 @@ typedef struct MetadataMap { } MetadataMap; typedef struct OptionsContext { + OptionGroup *g; + /* input/output options */ int64_t start_time; const char *format; @@ -87,11 +103,16 @@ typedef struct OptionsContext { /* input options */ int64_t input_ts_offset; int rate_emu; + int accurate_seek; 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; /* output options */ StreamMap *stream_maps; @@ -156,6 +177,8 @@ typedef struct OptionsContext { int nb_copy_initial_nonkeyframes; SpecifierOpt *filters; int nb_filters; + SpecifierOpt *filter_scripts; + int nb_filter_scripts; SpecifierOpt *pass; int nb_pass; SpecifierOpt *passlogfiles; @@ -196,8 +219,10 @@ typedef struct InputStream { AVStream *st; int discard; /* true if stream data should be discarded */ int decoding_needed; /* true if the packets must be decoded in 'raw_fifo' */ + 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 @@ -207,9 +232,8 @@ typedef struct InputStream { int64_t last_dts; PtsCorrectionContext pts_ctx; double ts_scale; - int is_start; /* is 1 at the start and after a discontinuity */ int showed_multi_packet_warning; - AVDictionary *opts; + AVDictionary *decoder_opts; AVRational framerate; /* framerate forced with -r */ int resample_height; @@ -221,13 +245,32 @@ typedef struct InputStream { int resample_channels; uint64_t resample_channel_layout; - /* a pool of free buffers for decoded data */ - FrameBuffer *buffer_pool; - /* decoded data from this stream goes into all those filters * currently video and audio only */ InputFilter **filters; int nb_filters; + + /* hwaccel options */ + enum HWAccelID hwaccel_id; + char *hwaccel_device; + + /* hwaccel context */ + enum HWAccelID active_hwaccel_id; + 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; + + /* 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; } InputStream; typedef struct InputFile { @@ -236,9 +279,12 @@ typedef struct InputFile { int eagain; /* true if last read attempt returned EAGAIN */ int ist_index; /* index of first stream in ist_table */ int64_t ts_offset; + int64_t start_time; /* user-specified start time in AV_TIME_BASE or AV_NOPTS_VALUE */ + int64_t recording_time; int nb_streams; /* number of stream that avconv is aware of; may be different from ctx.nb_streams if new streams appear during av_read_frame() */ int rate_emu; + int accurate_seek; #if HAVE_PTHREADS pthread_t thread; /* thread reading from this file */ @@ -265,7 +311,10 @@ typedef struct OutputStream { /* 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; AVBitStreamFilterContext *bitstream_filters; + AVCodecContext *enc_ctx; AVCodec *enc; int64_t max_frames; AVFrame *filtered_frame; @@ -290,13 +339,25 @@ typedef struct OutputStream { char *avfilter; int64_t sws_flags; - AVDictionary *opts; + AVDictionary *encoder_opts; + AVDictionary *resample_opts; int finished; /* no more packets should be written for this stream */ int stream_copy; const char *attachment_filename; int copy_initial_nonkeyframes; enum AVPixelFormat pix_fmts[2]; + + AVCodecParserContext *parser; + + /* 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; } OutputStream; typedef struct OutputFile { @@ -345,11 +406,11 @@ extern const AVIOInterruptCB int_cb; extern const OptionDef options[]; +extern const HWAccel hwaccels[]; + void reset_options(OptionsContext *o); void show_usage(void); -int opt_cpuflags(void *optctx, const char *opt, const char *arg); - void opt_output_file(void *optctx, const char *filename); void assert_avoptions(AVDictionary *m); @@ -361,4 +422,10 @@ int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOu int ist_in_filtergraph(FilterGraph *fg, InputStream *ist); FilterGraph *init_simple_filtergraph(InputStream *ist, OutputStream *ost); +int avconv_parse_options(int argc, char **argv); + +int vdpau_init(AVCodecContext *s); +int dxva2_init(AVCodecContext *s); +int vda_init(AVCodecContext *s); + #endif /* AVCONV_H */