[FFmpeg-devel] [PATCH 01/20] avformat/matroskaenc: Fix ReferenceBlock timestamp

James Almer jamrial at gmail.com
Sat Jan 11 16:28:58 EET 2020


On 1/11/2020 11:12 AM, Paul B Mahol wrote:
> probably ok

Applied.

> 
> On 1/1/20, Andreas Rheinhardt <andreas.rheinhardt at gmail.com> wrote:
>> In order to indicate that the frames in a BlockGroup are not keyframes,
>> one has to add a ReferenceBlock element containing the timestamp of a
>> referenced Block that has already been written. The timestamp ought to be
>> relative to the timestamp of the Block it is attached to. Yet the
>> Matroska muxer used the relative timestamp of the preceding Block of the
>> track, i.e. the timestamp of the preceding block relative to the
>> timestamp of the Cluster containing said block (that need not be the
>> Cluster containing the current Block). This has been fixed.
>>
>> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
>> ---
>>  libavformat/matroskaenc.c | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
>> index 469b604de6..9cf840c9be 100644
>> --- a/libavformat/matroskaenc.c
>> +++ b/libavformat/matroskaenc.c
>> @@ -2167,9 +2167,9 @@ static void mkv_write_block(AVFormatContext *s,
>> AVIOContext *pb,
>>          av_free(data);
>>
>>      if (blockid == MATROSKA_ID_BLOCK && !keyframe) {
>> -        put_ebml_sint(pb, MATROSKA_ID_BLOCKREFERENCE,
>> track->last_timestamp);
>> +        put_ebml_sint(pb, MATROSKA_ID_BLOCKREFERENCE, track->last_timestamp
>> - ts);
>>      }
>> -    track->last_timestamp = ts - mkv->cluster_pts;
>> +    track->last_timestamp = ts;
>>
>>      if (discard_padding) {
>>          put_ebml_sint(pb, MATROSKA_ID_DISCARDPADDING, discard_padding);
>> --
>> 2.20.1


More information about the ffmpeg-devel mailing list