#ifndef FFMPEG_AVFORMAT_H
#define FFMPEG_AVFORMAT_H
-#define LIBAVFORMAT_VERSION_INT ((52<<16)+(3<<8)+0)
-#define LIBAVFORMAT_VERSION 52.3.0
+#define LIBAVFORMAT_VERSION_TRIPLET 52,7,0
+
+#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_TRIPLET)
+#define LIBAVFORMAT_VERSION AV_VERSION(LIBAVFORMAT_VERSION_TRIPLET)
#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT
#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION)
int (*read_seek)(struct AVFormatContext *,
int stream_index, int64_t timestamp, int flags);
/**
- * gets the next timestamp in AV_TIME_BASE units.
+ * gets the next timestamp in stream[stream_index].time_base units.
+ * @return the timestamp or AV_NOPTS_VALUE if an error occured
*/
int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index,
int64_t *pos, int64_t pos_limit);
/**
* Stream structure.
* New fields can be added to the end with minor version bumps.
- * Removial, reordering and changes to existing fields require a Major
+ * Removal, reordering and changes to existing fields require a major
* version bump.
- * sizeof(AVStream) must not be used outside libav*
+ * sizeof(AVStream) must not be used outside libav*.
*/
typedef struct AVStream {
int index; /**< stream index in AVFormatContext */
int id; /**< format specific stream id */
AVCodecContext *codec; /**< codec context */
/**
- * real base frame rate of the stream.
- * this is the lowest framerate with which all timestamps can be
+ * Real base frame rate of the stream.
+ * This is the lowest frame rate with which all timestamps can be
* represented accurately (it is the least common multiple of all
- * framerates in the stream), Note, this value is just a guess!
- * 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
+ * frame rates in the stream), Note, this value is just a guess!
+ * 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;
struct 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
+ * 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/frame rate and timestamp increments should be
* identically 1.
*/
AVRational time_base;
* MN: dunno if that is the right place for it */
float quality;
/**
- * decoding: pts of the first frame of the stream, in stream time base.
- * only set this if you are absolutely 100% sure that the value you set
- * it to really is the pts of the first frame
+ * Decoding: pts of the first frame of the stream, in stream time base.
+ * Only set this if you are absolutely 100% sure that the value you set
+ * it to really is the pts of the first frame.
* This may be undefined (AV_NOPTS_VALUE).
- * @note the ASF header does NOT contain a correct start_time the ASF
- * demuxer must NOT set this
+ * @note The ASF header does NOT contain a correct start_time the ASF
+ * demuxer must NOT set this.
*/
int64_t start_time;
/**
- * decoding: duration of the stream, in stream time base.
+ * Decoding: duration of the stream, in stream time base.
* If a source file does not specify a duration, but does specify
* a bitrate, this value will be estimates from bit rate and file size.
*/
struct AVCodecParserContext *parser;
int64_t cur_dts;
- int last_IP_duration;
- int64_t last_IP_pts;
+ int last_IP_duration[2];
+ int64_t last_IP_pts[2];
/* av_seek_frame() support */
AVIndexEntry *index_entries; /**< only used if the format does not
support seeking natively */
#define MAX_REORDER_DELAY 4
int64_t pts_buffer[MAX_REORDER_DELAY+1];
+
+ char *filename; /**< source filename of the stream */
} AVStream;
#define AV_PROGRAM_RUNNING 1
/**
- *
* New fields can be added to the end with minor version bumps.
- * Removial, reordering and changes to existing fields require a Major
+ * Removal, reordering and changes to existing fields require a major
* version bump.
- * sizeof(AVProgram) must not be used outside libav*
+ * sizeof(AVProgram) must not be used outside libav*.
*/
typedef struct AVProgram {
int id;
/**
* format I/O context.
* New fields can be added to the end with minor version bumps.
- * Removial, reordering and changes to existing fields require a Major
+ * Removal, reordering and changes to existing fields require a major
* version bump.
- * sizeof(AVFormatContext) must not be used outside libav*
+ * sizeof(AVFormatContext) must not be used outside libav*.
*/
typedef struct AVFormatContext {
const AVClass *av_class; /**< set by av_alloc_format_context */
* demuxing: set by user
*/
enum CodecID subtitle_codec_id;
+
+ /**
+ * Maximum amount of memory in bytes to use per stream for the index.
+ * If the needed index exceeds this size entries will be discarded as
+ * needed to maintain a smaller size. This can lead to slower or less
+ * accurate seeking (depends on demuxer).
+ * Demuxers for which a full in memory index is mandatory will ignore
+ * this.
+ * muxing : unused
+ * demuxing: set by user
+ */
+ unsigned int max_index_size;
} AVFormatContext;
typedef struct AVPacketList {
*/
int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags);
+/**
+ * Ensures the index uses less memory than the maximum specified in
+ * AVFormatContext.max_index_size, by discarding entries if it grows
+ * too large.
+ * This function is not part of the public API and should only be called
+ * by demuxers.
+ */
+void ff_reduce_index(AVFormatContext *s, int stream_index);
+
/**
* Add a index entry into a sorted list updateing if it is already there.
*