mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-27 13:30:45 +00:00
avformat: Add a flag to mark muxers that allow (non strict) monotone timestamps.
Signed-off-by: Justin Ruggles <justin.ruggles@gmail.com>
This commit is contained in:
parent
5d603f1b65
commit
e9cef89702
@ -13,6 +13,10 @@ libavutil: 2011-04-18
|
||||
|
||||
API changes, most recent first:
|
||||
|
||||
2012-05-xx - xxxxxxx - lavf 54.3.0
|
||||
Add AVFMT_TS_NONSTRICT format flag to indicate that a muxer supports
|
||||
non-increasing monotone timestamps.
|
||||
|
||||
2012-05-15 - lavfi 2.17.0
|
||||
Add support for audio filters
|
||||
ac71230/a2cd9be - add video/audio buffer sink in a new installed
|
||||
|
@ -351,6 +351,9 @@ typedef struct AVProbeData {
|
||||
#define AVFMT_NOGENSEARCH 0x4000 /**< Format does not allow to fallback to generic search */
|
||||
#define AVFMT_NO_BYTE_SEEK 0x8000 /**< Format does not allow seeking by bytes */
|
||||
#define AVFMT_ALLOW_FLUSH 0x10000 /**< Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function. */
|
||||
#define AVFMT_TS_NONSTRICT 0x20000 /**< Format does not require strictly
|
||||
increasing timestamps, but they must
|
||||
still be monotonic */
|
||||
|
||||
/**
|
||||
* @addtogroup lavf_encoding
|
||||
@ -373,7 +376,8 @@ typedef struct AVOutputFormat {
|
||||
/**
|
||||
* can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_RAWPICTURE,
|
||||
* AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS,
|
||||
* AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH
|
||||
* AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH,
|
||||
* AVFMT_TS_NONSTRICT
|
||||
*/
|
||||
int flags;
|
||||
|
||||
|
@ -488,5 +488,6 @@ AVOutputFormat ff_flv_muxer = {
|
||||
.codec_tag = (const AVCodecTag* const []){
|
||||
flv_video_codec_ids, flv_audio_codec_ids, 0
|
||||
},
|
||||
.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS,
|
||||
.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS |
|
||||
AVFMT_TS_NONSTRICT,
|
||||
};
|
||||
|
@ -43,5 +43,5 @@ AVOutputFormat ff_framecrc_muxer = {
|
||||
.video_codec = CODEC_ID_RAWVIDEO,
|
||||
.write_header = ff_framehash_write_header,
|
||||
.write_packet = framecrc_write_packet,
|
||||
.flags = AVFMT_VARIABLE_FPS,
|
||||
.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT,
|
||||
};
|
||||
|
@ -1305,7 +1305,8 @@ AVOutputFormat ff_matroska_muxer = {
|
||||
.write_header = mkv_write_header,
|
||||
.write_packet = mkv_write_packet,
|
||||
.write_trailer = mkv_write_trailer,
|
||||
.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS,
|
||||
.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS |
|
||||
AVFMT_TS_NONSTRICT,
|
||||
.codec_tag = (const AVCodecTag* const []){
|
||||
ff_codec_bmp_tags, ff_codec_wav_tags, 0
|
||||
},
|
||||
@ -1326,7 +1327,8 @@ AVOutputFormat ff_webm_muxer = {
|
||||
.write_header = mkv_write_header,
|
||||
.write_packet = mkv_write_packet,
|
||||
.write_trailer = mkv_write_trailer,
|
||||
.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS,
|
||||
.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS |
|
||||
AVFMT_TS_NONSTRICT,
|
||||
};
|
||||
#endif
|
||||
|
||||
@ -1346,7 +1348,7 @@ AVOutputFormat ff_matroska_audio_muxer = {
|
||||
.write_header = mkv_write_header,
|
||||
.write_packet = mkv_write_packet,
|
||||
.write_trailer = mkv_write_trailer,
|
||||
.flags = AVFMT_GLOBALHEADER,
|
||||
.flags = AVFMT_GLOBALHEADER | AVFMT_TS_NONSTRICT,
|
||||
.codec_tag = (const AVCodecTag* const []){ ff_codec_wav_tags, 0 },
|
||||
};
|
||||
#endif
|
||||
|
@ -106,6 +106,6 @@ AVOutputFormat ff_framemd5_muxer = {
|
||||
.video_codec = CODEC_ID_RAWVIDEO,
|
||||
.write_header = ff_framehash_write_header,
|
||||
.write_packet = framemd5_write_packet,
|
||||
.flags = AVFMT_VARIABLE_FPS,
|
||||
.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT,
|
||||
};
|
||||
#endif
|
||||
|
@ -144,6 +144,6 @@ AVOutputFormat ff_smjpeg_muxer = {
|
||||
.write_header = smjpeg_write_header,
|
||||
.write_packet = smjpeg_write_packet,
|
||||
.write_trailer = smjpeg_write_trailer,
|
||||
.flags = AVFMT_GLOBALHEADER,
|
||||
.flags = AVFMT_GLOBALHEADER | AVFMT_TS_NONSTRICT,
|
||||
.codec_tag = (const AVCodecTag *const []){ ff_codec_smjpeg_video_tags, ff_codec_smjpeg_audio_tags, 0 },
|
||||
};
|
||||
|
@ -513,6 +513,7 @@ AVOutputFormat ff_swf_muxer = {
|
||||
.write_header = swf_write_header,
|
||||
.write_packet = swf_write_packet,
|
||||
.write_trailer = swf_write_trailer,
|
||||
.flags = AVFMT_TS_NONSTRICT,
|
||||
};
|
||||
#endif
|
||||
#if CONFIG_AVM2_MUXER
|
||||
@ -526,5 +527,6 @@ AVOutputFormat ff_avm2_muxer = {
|
||||
.write_header = swf_write_header,
|
||||
.write_packet = swf_write_packet,
|
||||
.write_trailer = swf_write_trailer,
|
||||
.flags = AVFMT_TS_NONSTRICT,
|
||||
};
|
||||
#endif
|
||||
|
@ -2962,7 +2962,9 @@ static int compute_pkt_fields2(AVFormatContext *s, AVStream *st, AVPacket *pkt){
|
||||
pkt->dts= st->pts_buffer[0];
|
||||
}
|
||||
|
||||
if(st->cur_dts && st->cur_dts != AV_NOPTS_VALUE && st->cur_dts >= pkt->dts){
|
||||
if (st->cur_dts && st->cur_dts != AV_NOPTS_VALUE &&
|
||||
((!(s->oformat->flags & AVFMT_TS_NONSTRICT) &&
|
||||
st->cur_dts >= pkt->dts) || st->cur_dts > pkt->dts)) {
|
||||
av_log(s, AV_LOG_ERROR,
|
||||
"Application provided invalid, non monotonically increasing dts to muxer in stream %d: %"PRId64" >= %"PRId64"\n",
|
||||
st->index, st->cur_dts, pkt->dts);
|
||||
|
@ -30,7 +30,7 @@
|
||||
#include "libavutil/avutil.h"
|
||||
|
||||
#define LIBAVFORMAT_VERSION_MAJOR 54
|
||||
#define LIBAVFORMAT_VERSION_MINOR 2
|
||||
#define LIBAVFORMAT_VERSION_MINOR 3
|
||||
#define LIBAVFORMAT_VERSION_MICRO 0
|
||||
|
||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||
|
@ -216,6 +216,7 @@ AVOutputFormat ff_wav_muxer = {
|
||||
.write_header = wav_write_header,
|
||||
.write_packet = wav_write_packet,
|
||||
.write_trailer = wav_write_trailer,
|
||||
.flags = AVFMT_TS_NONSTRICT,
|
||||
.codec_tag = (const AVCodecTag* const []){ ff_codec_wav_tags, 0 },
|
||||
.priv_class = &wav_muxer_class,
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user