X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=avconv.h;h=84fabf63713dbf0fdf13940eb115a696ed829193;hb=d78fd2fa21cde28465e40dd0be4446b1387d22a6;hp=1244d86ec3c0eeb06540feff975e6c420dff622a;hpb=76d23f40314fc1dcd74a3d470b17782cc0ee5a3a;p=ffmpeg diff --git a/avconv.h b/avconv.h index 1244d86ec3c..84fabf63713 100644 --- a/avconv.h +++ b/avconv.h @@ -48,6 +48,23 @@ #define VSYNC_CFR 1 #define VSYNC_VFR 2 +enum HWAccelID { + HWACCEL_NONE = 0, + HWACCEL_AUTO, + HWACCEL_VDPAU, + HWACCEL_DXVA2, + HWACCEL_VDA, + HWACCEL_QSV, + HWACCEL_VAAPI, +}; + +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 */ @@ -87,12 +104,22 @@ typedef struct OptionsContext { /* input options */ int64_t input_ts_offset; + int loop; 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; + SpecifierOpt *hwaccel_output_formats; + int nb_hwaccel_output_formats; + SpecifierOpt *autorotate; + int nb_autorotate; /* output options */ StreamMap *stream_maps; @@ -180,6 +207,7 @@ typedef struct OutputFilter { /* temporary storage until stream maps are processed */ AVFilterInOut *out_tmp; + enum AVMediaType type; } OutputFilter; typedef struct FilterGraph { @@ -199,6 +227,7 @@ 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 */ @@ -209,13 +238,15 @@ typedef struct InputStream { int64_t next_dts; /* dts of the last packet read for this stream */ int64_t last_dts; + 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 */ + int64_t nb_samples; /* number of samples in the last decoded audio frame before looping */ 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 autorotate; int resample_height; int resample_width; int resample_pix_fmt; @@ -229,6 +260,30 @@ typedef struct InputStream { * currently video and audio only */ InputFilter **filters; int nb_filters; + + /* hwaccel options */ + enum HWAccelID hwaccel_id; + char *hwaccel_device; + enum AVPixelFormat hwaccel_output_format; + + /* 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; + 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; } InputStream; typedef struct InputFile { @@ -236,10 +291,17 @@ typedef struct InputFile { int eof_reached; /* true if eof reached */ int eagain; /* true if last read attempt returned EAGAIN */ int ist_index; /* index of first stream in ist_table */ + 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 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 */ @@ -268,11 +330,18 @@ typedef struct OutputStream { int64_t first_pts; /* dts of the last packet sent to the muxer */ int64_t last_mux_dts; - AVBitStreamFilterContext *bitstream_filters; + + int nb_bitstream_filters; + const AVBitStreamFilter **bitstream_filters; + AVBSFContext **bsf_ctx; + + AVCodecContext *enc_ctx; AVCodec *enc; int64_t max_frames; AVFrame *filtered_frame; + void *hwaccel_ctx; + /* video only */ AVRational frame_rate; int force_fps; @@ -293,7 +362,7 @@ 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; @@ -301,6 +370,21 @@ typedef struct OutputStream { int copy_initial_nonkeyframes; enum AVPixelFormat pix_fmts[2]; + + AVCodecParserContext *parser; + AVCodecContext *parser_avctx; + + /* 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; } OutputStream; typedef struct OutputFile { @@ -349,11 +433,13 @@ extern const AVIOInterruptCB int_cb; extern const OptionDef options[]; +extern const HWAccel hwaccels[]; +extern int hwaccel_lax_profile_check; +extern AVBufferRef *hw_device_ctx; + 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); @@ -364,7 +450,16 @@ int configure_filtergraph(FilterGraph *fg); int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOut *out); int ist_in_filtergraph(FilterGraph *fg, InputStream *ist); FilterGraph *init_simple_filtergraph(InputStream *ist, OutputStream *ost); +int init_complex_filtergraph(FilterGraph *fg); int avconv_parse_options(int argc, char **argv); +int vdpau_init(AVCodecContext *s); +int dxva2_init(AVCodecContext *s); +int vda_init(AVCodecContext *s); +int qsv_init(AVCodecContext *s); +int qsv_transcode_init(OutputStream *ost); +int vaapi_decode_init(AVCodecContext *avctx); +int vaapi_device_init(const char *device); + #endif /* AVCONV_H */