* be set to the timebase that the caller desires to use for this stream (note
* that the timebase actually used by the muxer can be different, as will be
* described later).
+ * - It is advised to manually initialize only the relevant fields in
+ * AVCodecContext, rather than using @ref avcodec_copy_context() during
+ * remuxing: there is no guarantee that the codec context values remain valid
+ * for both input and output format contexts.
* - The caller may fill in additional information, such as @ref
* AVFormatContext.metadata "global" or @ref AVStream.metadata "per-stream"
* metadata, @ref AVFormatContext.chapters "chapters", @ref
* - sorting -- a modified version of a tag that should be used for
* sorting will have '-sort' appended. E.g. artist="The Beatles",
* artist-sort="Beatles, The".
+ * - Some protocols and demuxers support metadata updates. After a successful
+ * call to av_read_packet(), AVFormatContext.event_flags or AVStream.event_flags
+ * will be updated to indicate if metadata changed. In order to detect metadata
+ * changes on a stream, you need to loop through all streams in the AVFormatContext
+ * and check their individual event_flags.
*
* - Demuxers attempt to export metadata in a generic format, however tags
* with no generic equivalents are left as they are stored in the container.
const char *filename;
unsigned char *buf; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */
int buf_size; /**< Size of buf except extra allocated bytes */
+ const char *mime_type; /**< mime_type, when known. */
} AVProbeData;
#define AVPROBE_SCORE_EXTENSION 50 ///< score for file extension
+#define AVPROBE_SCORE_MIME 75 ///< score for file mime type
#define AVPROBE_SCORE_MAX 100 ///< maximum score
#define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the end of the probe buffer
const AVClass *priv_class; ///< AVClass for the private context
+ /**
+ * Comma-separated list of mime types.
+ * It is used check for matching mime types while probing.
+ * @see av_probe_input_format2
+ */
+ const char *mime_type;
+
/*****************************************************************
* No fields below this line are part of the public API. They
* may not be used outside of libavformat and can be changed and
/**
* Read the format header and initialize the AVFormatContext
- * structure. Return 0 if OK. Only used in raw format right
- * now. 'avformat_new_stream' should be called to create new streams.
+ * structure. Return 0 if OK. 'avformat_new_stream' should be
+ * called to create new streams.
*/
int (*read_header)(struct AVFormatContext *);
*/
int nb_side_data;
+ /**
+ * Flags for the user to detect events happening on the stream. Flags must
+ * be cleared by the user once the event has been handled.
+ * A combination of AVSTREAM_EVENT_FLAG_*.
+ */
+ int event_flags;
+#define AVSTREAM_EVENT_FLAG_METADATA_UPDATED 0x0001 ///< The call resulted in updated metadata.
+
/*****************************************************************
* All fields below this line are not part of the public API. They
* may not be used outside of libavformat and can be changed and
int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */
-#if FF_API_REFERENCE_DTS
- /* a hack to keep ABI compatibility for avconv, which accesses parser even
- * though it should not */
- int64_t do_not_use;
-#endif
// Timestamp generation support:
int64_t first_dts;
int64_t cur_dts;
* @see AVCodecContext.strict_std_compliance
*/
int strict_std_compliance;
- /*****************************************************************
- * All fields below this line are not part of the public API. They
- * may not be used outside of libavformat and can be changed and
- * removed at will.
- * New public fields should be added right above.
- *****************************************************************
- */
-
- /**
- * This buffer is only needed when packets were already buffered but
- * not decoded, for example to get the codec parameters in MPEG
- * streams.
- */
- struct AVPacketList *packet_buffer;
- struct AVPacketList *packet_buffer_end;
- /* av_seek_frame() support */
- int64_t data_offset; /**< offset of the first packet */
-
- /**
- * Raw packets from the demuxer, prior to parsing and decoding.
- * This buffer is used for buffering packets until the codec can
- * be identified, as parsing cannot be done without knowing the
- * codec.
- */
- struct AVPacketList *raw_packet_buffer;
- struct AVPacketList *raw_packet_buffer_end;
- /**
- * Packets split by the parser get queued here.
- */
- struct AVPacketList *parse_queue;
- struct AVPacketList *parse_queue_end;
/**
- * Remaining size available for raw_packet_buffer, in bytes.
+ * Flags for the user to detect events happening on the file. Flags must
+ * be cleared by the user once the event has been handled.
+ * A combination of AVFMT_EVENT_FLAG_*.
*/
-#define RAW_PACKET_BUFFER_SIZE 2500000
- int raw_packet_buffer_remaining_size;
+ int event_flags;
+#define AVFMT_EVENT_FLAG_METADATA_UPDATED 0x0001 ///< The call resulted in updated metadata.
/**
- * Offset to remap timestamps to be non-negative.
- * Expressed in timebase units.
+ * Maximum number of packets to read while waiting for the first timestamp.
+ * Decoding only.
*/
- int64_t offset;
+ int max_ts_probe;
/**
- * Timebase for the timestamp offset.
+ * Avoid negative timestamps during muxing.
+ * Any value of the AVFMT_AVOID_NEG_TS_* constants.
+ * Note, this only works when using av_interleaved_write_frame.
+ * - muxing: Set by user
+ * - demuxing: unused
*/
- AVRational offset_timebase;
+ int avoid_negative_ts;
+#define AVFMT_AVOID_NEG_TS_AUTO -1 ///< Enabled when required by target format
+#define AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE 1 ///< Shift timestamps so they are non negative
+#define AVFMT_AVOID_NEG_TS_MAKE_ZERO 2 ///< Shift timestamps so that they start at 0
/**
* An opaque field for libavformat internal usage.