]> git.sesse.net Git - ffmpeg/commitdiff
avformat/matroskaenc: Improve checks for updating Tags
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Wed, 22 Jan 2020 18:37:29 +0000 (19:37 +0100)
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Fri, 3 Apr 2020 06:22:04 +0000 (08:22 +0200)
When updating the Tags at the end, the Matroska muxer would twice check
for whether (!mkv->is_live) is true, despite this code being only executed
if it is. Furthermore, a loop iterates over all the streams even when
there is no Tags element to update at all, because the check for whether
there are Tags is only performed later. This commit fixes this.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
libavformat/matroskaenc.c

index 223406ce7567d0e49cabb887863dae1f0cb3950a..92efa989517c60ee4f8482882b403e9b3ebc7450 100644 (file)
@@ -2545,7 +2545,7 @@ static int mkv_write_trailer(AVFormatContext *s)
         end_ebml_master_crc32(pb, &mkv->tracks_bc, mkv, MATROSKA_ID_TRACKS, 0, 0);
 
         // update stream durations
-        if (!mkv->is_live) {
+        if (mkv->tags_bc) {
             int i;
             for (i = 0; i < s->nb_streams; ++i) {
                 AVStream *st = s->streams[i];
@@ -2567,8 +2567,7 @@ static int mkv_write_trailer(AVFormatContext *s)
                     put_ebml_binary(mkv->tags_bc, MATROSKA_ID_TAGSTRING, duration_string, 20);
                 }
             }
-        }
-        if (mkv->tags_bc && !mkv->is_live) {
+
             avio_seek(pb, mkv->tags_pos, SEEK_SET);
             end_ebml_master_crc32(pb, &mkv->tags_bc, mkv, MATROSKA_ID_TAGS, 0, 0);
         }