X-Git-Url: https://git.libav.org/?p=libav.git;a=blobdiff_plain;f=avconv.h;h=6360f76c0bb5d1d768819dd358d5f3a76e765b1a;hp=05abae68653848b3386f3e1afe656a3ce5dfe221;hb=1ea77aae927c7310034b1f75d4f1c2676fe641f2;hpb=5d273d3efac340ef8de445c955ff44c7abed4e8f diff --git a/avconv.h b/avconv.h index 05abae6865..6360f76c0b 100644 --- a/avconv.h +++ b/avconv.h @@ -190,6 +190,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 { @@ -197,6 +199,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 { @@ -208,6 +225,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 { @@ -240,6 +269,11 @@ 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; @@ -247,14 +281,6 @@ typedef struct InputStream { 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 */ @@ -330,9 +356,10 @@ typedef struct OutputStream { int64_t first_pts; /* dts of the last packet sent to the muxer */ int64_t last_mux_dts; + // the timebase of the packets sent to the muxer + AVRational mux_timebase; int nb_bitstream_filters; - const AVBitStreamFilter **bitstream_filters; AVBSFContext **bsf_ctx; AVCodecContext *enc_ctx; @@ -366,12 +393,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 @@ -384,6 +418,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 { @@ -395,6 +434,8 @@ typedef struct OutputFile { uint64_t limit_filesize; int shortest; + + int header_written; } OutputFile; extern InputStream **input_streams; @@ -448,9 +489,12 @@ 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);