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

Reply via email to