X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=avconv.h;h=3c3f0ef6595581bd09045c360bfdf16ada0e38e7;hb=9127ac5ebc941d5e54828a91e5072c876be8ec42;hp=5a7cf0991c2e4d8179a325a4d0c0cf1eee2f4893;hpb=16b0c929621f84983b83b9735ce973acb12723bc;p=ffmpeg diff --git a/avconv.h b/avconv.h index 5a7cf0991c2..3c3f0ef6595 100644 --- a/avconv.h +++ b/avconv.h @@ -54,6 +54,8 @@ enum HWAccelID { HWACCEL_VDPAU, HWACCEL_DXVA2, HWACCEL_VDA, + HWACCEL_QSV, + HWACCEL_VAAPI, }; typedef struct HWAccel { @@ -114,6 +116,8 @@ typedef struct OptionsContext { int nb_hwaccels; SpecifierOpt *hwaccel_devices; int nb_hwaccel_devices; + SpecifierOpt *hwaccel_output_formats; + int nb_hwaccel_output_formats; SpecifierOpt *autorotate; int nb_autorotate; @@ -158,6 +162,8 @@ typedef struct OptionsContext { int nb_sample_fmts; SpecifierOpt *qscale; int nb_qscale; + SpecifierOpt *bitrates; + int nb_bitrates; SpecifierOpt *forced_key_frames; int nb_forced_key_frames; SpecifierOpt *force_fps; @@ -186,6 +192,8 @@ typedef struct OptionsContext { int nb_pass; SpecifierOpt *passlogfiles; int nb_passlogfiles; + SpecifierOpt *max_muxing_queue_size; + int nb_max_muxing_queue_size; } OptionsContext; typedef struct InputFilter { @@ -193,6 +201,21 @@ typedef struct InputFilter { struct InputStream *ist; struct FilterGraph *graph; uint8_t *name; + + AVFifoBuffer *frame_queue; + + // parameters configured for this input + int format; + + int width, height; + AVRational sample_aspect_ratio; + + int sample_rate; + uint64_t channel_layout; + + AVBufferRef *hw_frames_ctx; + + int eof; } InputFilter; typedef struct OutputFilter { @@ -204,6 +227,18 @@ typedef struct OutputFilter { /* temporary storage until stream maps are processed */ AVFilterInOut *out_tmp; enum AVMediaType type; + + /* desired output stream properties */ + int width, height; + AVRational frame_rate; + int format; + int sample_rate; + uint64_t channel_layout; + + // those are only set if no format is specified and the encoder gives us multiple options + int *formats; + uint64_t *channel_layouts; + int *sample_rates; } OutputFilter; typedef struct FilterGraph { @@ -236,22 +271,18 @@ typedef struct InputStream { 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 */ + + // when forcing constant input framerate through -r, + // this contains the pts that will be given to the next decoded frame + int64_t cfr_next_pts; + int64_t nb_samples; /* number of samples in the last decoded audio frame before looping */ PtsCorrectionContext pts_ctx; double ts_scale; - int showed_multi_packet_warning; AVDictionary *decoder_opts; AVRational framerate; /* framerate forced with -r */ int autorotate; - int resample_height; - int resample_width; - int resample_pix_fmt; - - int resample_sample_fmt; - int resample_sample_rate; - int resample_channels; - uint64_t resample_channel_layout; /* decoded data from this stream goes into all those filters * currently video and audio only */ @@ -261,6 +292,7 @@ typedef struct InputStream { /* hwaccel options */ enum HWAccelID hwaccel_id; char *hwaccel_device; + enum AVPixelFormat hwaccel_output_format; /* hwaccel context */ enum HWAccelID active_hwaccel_id; @@ -270,6 +302,7 @@ typedef struct InputStream { 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 @@ -325,12 +358,19 @@ typedef struct OutputStream { int64_t first_pts; /* dts of the last packet sent to the muxer */ int64_t last_mux_dts; - AVBitStreamFilterContext *bitstream_filters; + // the timebase of the packets sent to the muxer + AVRational mux_timebase; + + int nb_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; @@ -344,6 +384,9 @@ typedef struct OutputStream { int forced_kf_index; char *forced_keyframes; + // the bitrate to send to the muxer for streamcopy + int bitrate_override; + char *logfile_prefix; FILE *logfile; @@ -355,12 +398,19 @@ typedef struct OutputStream { AVDictionary *resample_opts; int finished; /* no more packets should be written for this stream */ int stream_copy; + + // init_output_stream() has been called for this stream + // The encoder and the bistream filters have been initialized and the stream + // parameters are set in the AVStream. + int initialized; + const char *attachment_filename; int copy_initial_nonkeyframes; enum AVPixelFormat pix_fmts[2]; AVCodecParserContext *parser; + AVCodecContext *parser_avctx; /* stats */ // combined size of all the packets written @@ -373,6 +423,11 @@ typedef struct OutputStream { /* packet quality factor */ int quality; + + int max_muxing_queue_size; + + /* the packets are buffered here until the muxer is ready to be initialized */ + AVFifoBuffer *muxing_queue; } OutputStream; typedef struct OutputFile { @@ -384,6 +439,8 @@ typedef struct OutputFile { uint64_t limit_filesize; int shortest; + + int header_written; } OutputFile; extern InputStream **input_streams; @@ -422,6 +479,8 @@ 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); @@ -435,13 +494,20 @@ int guess_input_channel_layout(InputStream *ist); 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 filtergraph_is_simple(FilterGraph *fg); +int init_simple_filtergraph(InputStream *ist, OutputStream *ost); int init_complex_filtergraph(FilterGraph *fg); +int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *frame); + 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 */