diff options
author | John Stebbins <stebbins@jetheaddev.com> | 2017-02-15 15:22:40 -0700 |
---|---|---|
committer | John Stebbins <stebbins@jetheaddev.com> | 2017-02-21 14:20:31 -0700 |
commit | 5d3953a5dcfd5f71391b7f34908517eb6f7e5146 (patch) | |
tree | dab2c3f481d71c3a298819ab6552f2e932cd9b83 | |
parent | c95169f0ec68bdeeabc5fde8aa4076f406242524 (diff) | |
download | ffmpeg-5d3953a5dcfd5f71391b7f34908517eb6f7e5146.tar.gz |
matroskaenc: factor ts_offset into block timecode computation
ts_offset was added to cluster timecode, but then effectively subtracted
back off the block timecode
When setting initial_padding for an audio stream, the timestamps are
written incorrectly to the mkv file. cluster timecode gets written
as pts0 + ts_offset which is correct, but then block timecode gets
written as pts - cluster timecode which expanded is
pts - (pts0 + ts_offset). Adding cluster and block tc back together:
cluster + block = (pts0 + ts_offset) + (pts - (pts0 + ts_offset)) = pts
But the result should be pts + ts_offset since demux will subtract the
CodecDelay element from pts and set initial_padding to CodecDelay.
This patch gives the correct result.
-rw-r--r-- | libavformat/matroskaenc.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index e951a0fb67..2fe6e0ed49 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -1461,6 +1461,7 @@ static void mkv_write_block(AVFormatContext *s, AVIOContext *pb, uint8_t *data = NULL; int offset = 0, size = pkt->size; int64_t ts = mkv->tracks[pkt->stream_index].write_dts ? pkt->dts : pkt->pts; + ts += mkv->tracks[pkt->stream_index].ts_offset; av_log(s, AV_LOG_DEBUG, "Writing block at offset %" PRIu64 ", size %d, " "pts %" PRId64 ", dts %" PRId64 ", duration %" PRId64 ", flags %d\n", |