[FFmpeg-cvslog] avformat/mux: Add avoid_negative_ts_use_pts
ffmpeg | branch: release/2.6 | Michael Niedermayer michae...@gmx.at | Tue May 5 12:44:20 2015 +0200| [5a8b43285baa744d5450a4a37d98bcfb500c18fe] | committer: James Almer avformat/mux: Add avoid_negative_ts_use_pts This allows using pts instead of dts for negative TS avoidance Signed-off-by: Michael Niedermayer michae...@gmx.at (cherry picked from commit 7ac5c38ec5baeea6ad647ccc9bb7e97564c50ec2) http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5a8b43285baa744d5450a4a37d98bcfb500c18fe --- libavformat/internal.h |2 ++ libavformat/mux.c | 36 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/libavformat/internal.h b/libavformat/internal.h index 76ffcc5..5dacb45 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -97,6 +97,8 @@ struct AVFormatInternal { AVRational offset_timebase; int inject_global_side_data; + +int avoid_negative_ts_use_pts; }; #ifdef __GNUC__ diff --git a/libavformat/mux.c b/libavformat/mux.c index 72d8e94..5dd0be8 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -554,10 +554,11 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) if (s-avoid_negative_ts 0) { AVStream *st = s-streams[pkt-stream_index]; int64_t offset = st-mux_ts_offset; +int64_t ts = s-internal-avoid_negative_ts_use_pts ? pkt-pts : pkt-dts; -if (s-internal-offset == AV_NOPTS_VALUE pkt-dts != AV_NOPTS_VALUE -(pkt-dts 0 || s-avoid_negative_ts == AVFMT_AVOID_NEG_TS_MAKE_ZERO)) { -s-internal-offset = -pkt-dts; +if (s-internal-offset == AV_NOPTS_VALUE ts != AV_NOPTS_VALUE +(ts 0 || s-avoid_negative_ts == AVFMT_AVOID_NEG_TS_MAKE_ZERO)) { +s-internal-offset = -ts; s-internal-offset_timebase = st-time_base; } @@ -574,15 +575,26 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) if (pkt-pts != AV_NOPTS_VALUE) pkt-pts += offset; -av_assert2(pkt-dts == AV_NOPTS_VALUE || pkt-dts = 0 || s-max_interleave_delta 0); -if (pkt-dts != AV_NOPTS_VALUE pkt-dts 0) { -av_log(s, AV_LOG_WARNING, - Packets poorly interleaved, failed to avoid negative - timestamp %s in stream %d.\n - Try -max_interleave_delta 0 as a possible workaround.\n, - av_ts2str(pkt-dts), - pkt-stream_index -); +if (s-internal-avoid_negative_ts_use_pts) { +if (pkt-pts != AV_NOPTS_VALUE pkt-pts 0) { +av_log(s, AV_LOG_WARNING, failed to avoid negative +pts %s in stream %d.\n +Try -avoid_negative_ts 1 as a possible workaround.\n, +av_ts2str(pkt-dts), +pkt-stream_index +); +} +} else { +av_assert2(pkt-dts == AV_NOPTS_VALUE || pkt-dts = 0 || s-max_interleave_delta 0); +if (pkt-dts != AV_NOPTS_VALUE pkt-dts 0) { +av_log(s, AV_LOG_WARNING, +Packets poorly interleaved, failed to avoid negative +timestamp %s in stream %d.\n +Try -max_interleave_delta 0 as a possible workaround.\n, +av_ts2str(pkt-dts), +pkt-stream_index +); +} } } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avformat/mux: Add avoid_negative_ts_use_pts
ffmpeg | branch: master | Michael Niedermayer michae...@gmx.at | Tue May 5 12:44:20 2015 +0200| [7ac5c38ec5baeea6ad647ccc9bb7e97564c50ec2] | committer: Michael Niedermayer avformat/mux: Add avoid_negative_ts_use_pts This allows using pts instead of dts for negative TS avoidance Signed-off-by: Michael Niedermayer michae...@gmx.at http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7ac5c38ec5baeea6ad647ccc9bb7e97564c50ec2 --- libavformat/internal.h |2 ++ libavformat/mux.c | 36 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/libavformat/internal.h b/libavformat/internal.h index 76ffcc5..5dacb45 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -97,6 +97,8 @@ struct AVFormatInternal { AVRational offset_timebase; int inject_global_side_data; + +int avoid_negative_ts_use_pts; }; #ifdef __GNUC__ diff --git a/libavformat/mux.c b/libavformat/mux.c index 9101925..945bb9d 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -557,10 +557,11 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) if (s-avoid_negative_ts 0) { AVStream *st = s-streams[pkt-stream_index]; int64_t offset = st-mux_ts_offset; +int64_t ts = s-internal-avoid_negative_ts_use_pts ? pkt-pts : pkt-dts; -if (s-internal-offset == AV_NOPTS_VALUE pkt-dts != AV_NOPTS_VALUE -(pkt-dts 0 || s-avoid_negative_ts == AVFMT_AVOID_NEG_TS_MAKE_ZERO)) { -s-internal-offset = -pkt-dts; +if (s-internal-offset == AV_NOPTS_VALUE ts != AV_NOPTS_VALUE +(ts 0 || s-avoid_negative_ts == AVFMT_AVOID_NEG_TS_MAKE_ZERO)) { +s-internal-offset = -ts; s-internal-offset_timebase = st-time_base; } @@ -577,15 +578,26 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) if (pkt-pts != AV_NOPTS_VALUE) pkt-pts += offset; -av_assert2(pkt-dts == AV_NOPTS_VALUE || pkt-dts = 0 || s-max_interleave_delta 0); -if (pkt-dts != AV_NOPTS_VALUE pkt-dts 0) { -av_log(s, AV_LOG_WARNING, - Packets poorly interleaved, failed to avoid negative - timestamp %s in stream %d.\n - Try -max_interleave_delta 0 as a possible workaround.\n, - av_ts2str(pkt-dts), - pkt-stream_index -); +if (s-internal-avoid_negative_ts_use_pts) { +if (pkt-pts != AV_NOPTS_VALUE pkt-pts 0) { +av_log(s, AV_LOG_WARNING, failed to avoid negative +pts %s in stream %d.\n +Try -avoid_negative_ts 1 as a possible workaround.\n, +av_ts2str(pkt-dts), +pkt-stream_index +); +} +} else { +av_assert2(pkt-dts == AV_NOPTS_VALUE || pkt-dts = 0 || s-max_interleave_delta 0); +if (pkt-dts != AV_NOPTS_VALUE pkt-dts 0) { +av_log(s, AV_LOG_WARNING, +Packets poorly interleaved, failed to avoid negative +timestamp %s in stream %d.\n +Try -max_interleave_delta 0 as a possible workaround.\n, +av_ts2str(pkt-dts), +pkt-stream_index +); +} } } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog