diff options
author | Steve Lhomme <robux4@ycbcr.xyz> | 2020-11-15 09:59:48 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2020-11-20 15:20:24 +0100 |
commit | 3a2b786db0fe52ccdcb4a3276758c8ddd4887ce6 (patch) | |
tree | 9fc98f9eb5c1709f0e19f4fe221f558adc562cb7 /libavformat/matroskadec.c | |
parent | b00d2210e4526dbee22e305f209d523046b073b2 (diff) | |
download | ffmpeg-3a2b786db0fe52ccdcb4a3276758c8ddd4887ce6.tar.gz |
avformat/matroskadec: adjust the cluster time to the track timebase
The Block timestamp read in matroska_parse_block() is in track timebase and is
passed on as such to the AVPacket which uses this timebase.
In the normal case the Cluster and Track timebases are the same because the
track->time_scale is 1.0. But when it is not the case, the values in Cluster
timebase need to be transformed in Track timebase so they can be added
together.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Diffstat (limited to 'libavformat/matroskadec.c')
-rw-r--r-- | libavformat/matroskadec.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index ba0e2956df..137674c068 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -3581,7 +3581,8 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, AVBufferRef *buf if (cluster_time != (uint64_t) -1 && (block_time >= 0 || cluster_time >= -block_time)) { - timecode = cluster_time + block_time - track->codec_delay_in_track_tb; + uint64_t timecode_cluster_in_track_tb = (double) cluster_time / track->time_scale; + timecode = timecode_cluster_in_track_tb + block_time - track->codec_delay_in_track_tb; if (track->type == MATROSKA_TRACK_TYPE_SUBTITLE && timecode < track->end_timecode) is_keyframe = 0; /* overlapping subtitles are not key frame */ |