#include "libavcodec/avcodec.h"
#include "libavfilter/avfilter.h"
-#include "libavfilter/avfiltergraph.h"
#include "libavutil/avutil.h"
#include "libavutil/dict.h"
#define VSYNC_CFR 1
#define VSYNC_VFR 2
+enum HWAccelID {
+ HWACCEL_NONE = 0,
+ HWACCEL_AUTO,
+ HWACCEL_VDPAU,
+};
+
+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 */
+ int disabled; /* 1 is this mapping is disabled by a negative map */
int file_index;
int stream_index;
int sync_file_index;
int sync_stream_index;
- char *linklabel; /** name of an output link, for mapping lavfi outputs */
+ char *linklabel; /* name of an output link, for mapping lavfi outputs */
} StreamMap;
-/**
- * select an input file for an output file
- */
+/* select an input file for an output file */
typedef struct MetadataMap {
- int file; ///< file index
- char type; ///< type of metadata to copy -- (g)lobal, (s)tream, (c)hapter or (p)rogram
- int index; ///< stream/chapter/program number
+ int file; // file index
+ char type; // type of metadata to copy -- (g)lobal, (s)tream, (c)hapter or (p)rogram
+ int index; // stream/chapter/program number
} MetadataMap;
typedef struct OptionsContext {
+ OptionGroup *g;
+
/* input/output options */
int64_t start_time;
const char *format;
/* 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;
uint64_t limit_filesize;
float mux_preload;
float mux_max_delay;
+ int shortest;
int video_disable;
int audio_disable;
int nb_copy_initial_nonkeyframes;
SpecifierOpt *filters;
int nb_filters;
+ SpecifierOpt *filter_scripts;
+ int nb_filter_scripts;
+ SpecifierOpt *pass;
+ int nb_pass;
+ SpecifierOpt *passlogfiles;
+ int nb_passlogfiles;
} OptionsContext;
typedef struct InputFilter {
int decoding_needed; /* true if the packets must be decoded in 'raw_fifo' */
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
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;
} InputStream;
typedef struct InputFile {
AVFormatContext *ctx;
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 buffer_size; /* current total buffer size */
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 */
/* 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;
AVCodec *enc;
int64_t max_frames;
int top_field_first;
float frame_aspect_ratio;
- float last_quality;
/* forced key frames */
int64_t *forced_kf_pts;
int forced_kf_index;
char *forced_keyframes;
+ char *logfile_prefix;
FILE *logfile;
OutputFilter *filter;
int64_t sws_flags;
AVDictionary *opts;
- int is_past_recording_time;
+ 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 PixelFormat pix_fmts[2];
+ enum AVPixelFormat pix_fmts[2];
+
+ AVCodecParserContext *parser;
} OutputStream;
typedef struct OutputFile {
int64_t recording_time; /* desired length of the resulting file in microseconds */
int64_t start_time; /* start time in microseconds */
uint64_t limit_filesize;
+
+ int shortest;
} OutputFile;
extern InputStream **input_streams;
extern FilterGraph **filtergraphs;
extern int nb_filtergraphs;
-extern char *pass_logfilename_prefix;
extern char *vstats_filename;
extern float audio_drift_threshold;
extern int do_pkt_dump;
extern int copy_ts;
extern int copy_tb;
-extern int opt_shortest;
extern int exit_on_error;
extern int print_stats;
extern int qp_hist;
-extern int same_quant;
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(const char *opt, const char *arg);
-
void opt_output_file(void *optctx, const char *filename);
void assert_avoptions(AVDictionary *m);
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);
+
#endif /* AVCONV_H */