[FFmpeg-devel] [PATCH 01/20] avformat/matroskaenc: Fix ReferenceBlock timestamp
Paul B Mahol
onemda at gmail.com
Sat Jan 11 16:12:16 EET 2020
probably ok
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
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list