From f7813a5324be39d13ab536c245d15dfc602a7849 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Sun, 29 Dec 2013 12:19:38 +0000 Subject: basic type mechanism working --- ffmpeg/ffmpeg.h | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) (limited to 'ffmpeg/ffmpeg.h') diff --git a/ffmpeg/ffmpeg.h b/ffmpeg/ffmpeg.h index f7178ff..433baf8 100644 --- a/ffmpeg/ffmpeg.h +++ b/ffmpeg/ffmpeg.h @@ -37,7 +37,6 @@ #include "libavcodec/avcodec.h" #include "libavfilter/avfilter.h" -#include "libavfilter/avfiltergraph.h" #include "libavutil/avutil.h" #include "libavutil/dict.h" @@ -52,10 +51,24 @@ #define VSYNC_PASSTHROUGH 0 #define VSYNC_CFR 1 #define VSYNC_VFR 2 +#define VSYNC_VSCFR 0xfe #define VSYNC_DROP 0xff #define MAX_STREAMS 1024 /* arbitrary sanity check value */ +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 */ @@ -94,11 +107,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; @@ -165,6 +183,8 @@ typedef struct OptionsContext { int nb_copy_prior_start; SpecifierOpt *filters; int nb_filters; + SpecifierOpt *filter_scripts; + int nb_filter_scripts; SpecifierOpt *reinit_filters; int nb_reinit_filters; SpecifierOpt *fix_sub_duration; @@ -177,6 +197,8 @@ typedef struct OptionsContext { int nb_passlogfiles; SpecifierOpt *guess_layout_max; int nb_guess_layout_max; + SpecifierOpt *apad; + int nb_apad; } OptionsContext; typedef struct InputFilter { @@ -270,6 +292,19 @@ typedef struct InputStream { int nb_filters; int reinit_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 { @@ -277,11 +312,16 @@ 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 input_streams */ + int64_t input_ts_offset; int64_t ts_offset; + int64_t last_ts; + 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 ffmpeg is aware of; may be different from ctx.nb_streams if new streams appear during av_read_frame() */ int nb_streams_warn; /* number of streams that the user was warned of */ int rate_emu; + int accurate_seek; #if HAVE_PTHREADS pthread_t thread; /* thread reading from this file */ @@ -318,6 +358,8 @@ 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; AVCodec *enc; int64_t max_frames; @@ -328,7 +370,7 @@ typedef struct OutputStream { int force_fps; int top_field_first; - float frame_aspect_ratio; + AVRational frame_aspect_ratio; /* forced key frames */ int64_t *forced_kf_pts; @@ -347,11 +389,14 @@ typedef struct OutputStream { OutputFilter *filter; char *avfilter; + char *filters; ///< filtergraph associated to the -filter option + char *filters_script; ///< filtergraph script associated to the -filter_script option int64_t sws_flags; AVDictionary *opts; AVDictionary *swr_opts; AVDictionary *resample_opts; + char *apad; int finished; /* no more packets should be written for this stream */ int unavailable; /* true if the steram is unavailable (possibly temporarily) */ int stream_copy; @@ -360,6 +405,8 @@ typedef struct OutputStream { int copy_prior_start; int keep_pix_fmt; + + AVCodecParserContext *parser; } OutputStream; typedef struct OutputFile { @@ -409,10 +456,13 @@ extern int qp_hist; extern int stdin_interaction; extern int frame_bits_per_raw_sample; extern AVIOContext *progress_avio; +extern float max_error_rate; extern const AVIOInterruptCB int_cb; extern const OptionDef options[]; +extern const HWAccel hwaccels[]; + void term_init(void); void term_exit(void); @@ -436,4 +486,6 @@ FilterGraph *init_simple_filtergraph(InputStream *ist, OutputStream *ost); int ffmpeg_parse_options(int argc, char **argv); +int vdpau_init(AVCodecContext *s); + #endif /* FFMPEG_H */ -- cgit v1.2.3