[FFmpeg-cvslog] avformat/matroskadec: adjust the cluster time to the track timebase
Steve Lhomme
git at videolan.org
Fri Nov 20 17:02:18 EET 2020
ffmpeg | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Sun Nov 15 09:59:48 2020 +0100| [3a2b786db0fe52ccdcb4a3276758c8ddd4887ce6] | committer: Anton Khirnov
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 at khirnov.net>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3a2b786db0fe52ccdcb4a3276758c8ddd4887ce6
---
libavformat/matroskadec.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
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 */
More information about the ffmpeg-cvslog
mailing list