Re: [FFmpeg-devel] [PATCH 2/2] avformat/matroskadec: adjust the cluster time to the track timebase
Quoting Steve Lhomme (2020-11-15 09:59:48) > 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. > --- > 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 */ > -- > 2.26.2 > Set makes sense I suppose. -- Anton Khirnov ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-devel] [PATCH 2/2] 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. --- 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 */ -- 2.26.2 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".