On Thu, Feb 16, 2017 at 11:14 AM, John Stebbins <stebb...@jetheaddev.com> wrote: > On 02/15/2017 10:09 PM, Luca Barbato wrote: >> On 15/02/2017 23:29, John Stebbins wrote: >>> ts_offset was added to cluster timecode, but then effectively subtracted >>> back off the block timecode >>> --- >>> libavformat/matroskaenc.c | 1 + >>> 1 file changed, 1 insertion(+) >>> >>> diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c >>> index e951a0f..2fe6e0e 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", >>> >> What does it fix? should it go in stable? >> >> > > 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 tc + block tc = (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.
Bonus points if this comment is added verbatim to the commit log. -- Vittorio _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel