X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Favformat.h;h=8767e0b1fba69f6c4b90595c9cf980edde79e9e1;hb=ac6a655b8a191a56dc194b548d8ba7bb16ea6abb;hp=c04f0f33a1f1400324ae8e89bc4e50d0e8d6bdb8;hpb=0d71240921397c98af9b42616be2fe4796df8912;p=ffmpeg diff --git a/libavformat/avformat.h b/libavformat/avformat.h index c04f0f33a1f..8767e0b1fba 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -5,11 +5,11 @@ extern "C" { #endif -#define LIBAVFORMAT_BUILD 4621 +#define LIBAVFORMAT_VERSION_INT ((49<<16)+(2<<8)+0) +#define LIBAVFORMAT_VERSION 49.2.0 +#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT -#define LIBAVFORMAT_VERSION_INT FFMPEG_VERSION_INT -#define LIBAVFORMAT_VERSION FFMPEG_VERSION -#define LIBAVFORMAT_IDENT "FFmpeg" FFMPEG_VERSION "b" AV_STRINGIFY(LIBAVFORMAT_BUILD) +#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) #include #include /* FILE */ @@ -28,27 +28,28 @@ extern "C" { #endif typedef struct AVPacket { - int64_t pts; /* presentation time stamp in AV_TIME_BASE units (or - pts_den units in muxers or demuxers) */ - int64_t dts; /* decompression time stamp in AV_TIME_BASE units (or - pts_den units in muxers or demuxers) */ + int64_t pts; ///< presentation time stamp in time_base units + int64_t dts; ///< decompression time stamp in time_base units uint8_t *data; int size; int stream_index; int flags; - int duration; /* presentation duration (0 if not available) */ + int duration; ///< presentation duration in time_base units (0 if not available) void (*destruct)(struct AVPacket *); void *priv; + int64_t pos; ///< byte position in stream, -1 if unknown } AVPacket; #define PKT_FLAG_KEY 0x0001 void av_destruct_packet_nofree(AVPacket *pkt); +void av_destruct_packet(AVPacket *pkt); /* initialize optional fields of a packet */ static inline void av_init_packet(AVPacket *pkt) { pkt->pts = AV_NOPTS_VALUE; pkt->dts = AV_NOPTS_VALUE; + pkt->pos = -1; pkt->duration = 0; pkt->flags = 0; pkt->stream_index = 0; @@ -56,6 +57,7 @@ static inline void av_init_packet(AVPacket *pkt) } int av_new_packet(AVPacket *pkt, int size); +int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size); int av_dup_packet(AVPacket *pkt); /** @@ -98,8 +100,7 @@ typedef struct AVProbeData { #define AVPROBE_SCORE_MAX 100 typedef struct AVFormatParameters { - int frame_rate; - int frame_rate_base; + AVRational time_base; int sample_rate; int channels; int width; @@ -107,7 +108,7 @@ typedef struct AVFormatParameters { enum PixelFormat pix_fmt; struct AVImageFormat *image_format; int channel; /* used to select dv channel */ - const char *device; /* video4linux, audio or DV device */ + const char *device; /* video, audio or DV device */ const char *standard; /* tv standard, NTSC, PAL, SECAM */ int mpeg2ts_raw:1; /* force raw MPEG2 transport stream output, if possible */ int mpeg2ts_compute_pcr:1; /* compute exact PCR for each transport @@ -124,6 +125,7 @@ typedef struct AVFormatParameters { #define AVFMT_SHOW_IDS 0x0008 /* show format stream IDs numbers */ #define AVFMT_RAWPICTURE 0x0020 /* format wants AVPicture structure for raw picture data */ +#define AVFMT_GLOBALHEADER 0x0040 /* format wants global header */ typedef struct AVOutputFormat { const char *name; @@ -138,7 +140,7 @@ typedef struct AVOutputFormat { int (*write_header)(struct AVFormatContext *); int (*write_packet)(struct AVFormatContext *, AVPacket *pkt); int (*write_trailer)(struct AVFormatContext *); - /* can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER */ + /* can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER */ int flags; /* currently only used to set pixel format if not YUV420P */ int (*set_parameters)(struct AVFormatContext *, AVFormatParameters *); @@ -214,19 +216,32 @@ typedef struct AVIndexEntry { typedef struct AVStream { int index; /* stream index in AVFormatContext */ int id; /* format specific stream id */ - AVCodecContext codec; /* codec context */ - int r_frame_rate; /* real frame rate of the stream */ - int r_frame_rate_base;/* real frame rate base of the stream */ + AVCodecContext *codec; /* codec context */ + /** + * real base frame rate of the stream. + * for example if the timebase is 1/90000 and all frames have either + * approximately 3600 or 1800 timer ticks then r_frame_rate will be 50/1 + */ + AVRational r_frame_rate; void *priv_data; /* internal data used in av_find_stream_info() */ int64_t codec_info_duration; int codec_info_nb_frames; /* encoding: PTS generation when outputing stream */ AVFrac pts; + + /** + * this is the fundamental unit of time (in seconds) in terms + * of which frame timestamps are represented. for fixed-fps content, + * timebase should be 1/framerate and timestamp increments should be + * identically 1. + */ AVRational time_base; int pts_wrap_bits; /* number of bits in pts (used for wrapping control) */ /* ffmpeg.c private use */ int stream_copy; /* if TRUE, just copy stream */ + enum AVDiscard discard; ///< selects which packets can be discarded at will and dont need to be demuxed + //FIXME move stuff to a flags field? /* quality, as it has been removed from AVCodecContext and put in AVVideoFrame * MN:dunno if thats the right place, for it */ float quality; @@ -237,8 +252,10 @@ typedef struct AVStream { seconds. */ int64_t duration; + char language[4]; /* ISO 639 3-letter language code (empty string if undefined) */ + /* av_read_frame() support */ - int need_parsing; + int need_parsing; ///< 1->full parsing needed, 2->only parse headers dont repack struct AVCodecParserContext *parser; int64_t cur_dts; @@ -249,6 +266,8 @@ typedef struct AVStream { support seeking natively */ int nb_index_entries; int index_entries_allocated_size; + + int64_t nb_frames; ///< number of frames in this stream if known or 0 } AVStream; #define AVFMTCTX_NOHEADER 0x0001 /* signal that no header is present @@ -314,6 +333,14 @@ typedef struct AVFormatContext { int packet_size; int preload; int max_delay; + +#define AVFMT_NOOUTPUTLOOP -1 +#define AVFMT_INFINITEOUTPUTLOOP 0 + /* number of times to loop output in formats that support it */ + int loop_output; + + int flags; +#define AVFMT_FLAG_GENPTS 0x0001 ///< generate pts if missing even if it requires parsing future frames } AVFormatContext; typedef struct AVPacketList { @@ -444,6 +471,9 @@ int amr_init(void); /* wav.c */ int ff_wav_init(void); +/* mmf.c */ +int ff_mmf_init(void); + /* raw.c */ int pcm_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags); @@ -455,9 +485,12 @@ int mp3_init(void); /* yuv4mpeg.c */ int yuv4mpeg_init(void); -/* ogg.c */ +/* ogg2.c */ int ogg_init(void); +/* ogg.c */ +int libogg_init(void); + /* dv.c */ int ff_dv_init(void); @@ -513,6 +546,9 @@ int ea_init(void); /* nsvdec.c */ int nsvdec_init(void); +/* daud.c */ +int daud_init(void); + #include "rtp.h" #include "rtsp.h" @@ -546,7 +582,7 @@ int fifo_size(FifoBuffer *f, uint8_t *rptr); int fifo_read(FifoBuffer *f, uint8_t *buf, int buf_size, uint8_t **rptr_ptr); void fifo_write(FifoBuffer *f, uint8_t *buf, int size, uint8_t **wptr_ptr); int put_fifo(ByteIOContext *pb, FifoBuffer *f, int buf_size, uint8_t **rptr_ptr); -void fifo_realloc(FifoBuffer *f, int size); +void fifo_realloc(FifoBuffer *f, unsigned int size); /* media file input */ AVInputFormat *av_find_input_format(const char *short_name); @@ -582,6 +618,7 @@ void av_set_pts_info(AVStream *s, int pts_wrap_bits, #define AVSEEK_FLAG_BACKWARD 1 ///< seek backward #define AVSEEK_FLAG_BYTE 2 ///< seeking based on position in bytes +#define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non keyframes int av_find_default_stream_index(AVFormatContext *s); int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags); @@ -677,3 +714,4 @@ int match_ext(const char *filename, const char *extensions); #endif #endif /* AVFORMAT_H */ +