]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
matroska: subtitle display duration must be stored in pkt->convergence_duration
authoraurel <aurel@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Thu, 4 Sep 2008 23:08:19 +0000 (23:08 +0000)
committeraurel <aurel@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Thu, 4 Sep 2008 23:08:19 +0000 (23:08 +0000)
git-svn-id: file:///var/local/repositories/ffmpeg/trunk@15206 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavformat/matroskadec.c
libavformat/matroskaenc.c

index b947a50e0ac2ce8ec46669e763efe30dbf4781eb..437ac3717e69d2a8ae70066f98459c1eaef7b7c0 100644 (file)
@@ -1583,7 +1583,10 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data,
 
                 pkt->pts = timecode;
                 pkt->pos = pos;
-                pkt->duration = duration;
+                if (track->type == MATROSKA_TRACK_TYPE_SUBTITLE)
+                    pkt->convergence_duration = duration;
+                else
+                    pkt->duration = duration;
 
                 dynarray_add(&matroska->packets, &matroska->num_packets, pkt);
             }
index db090be04904513b7ca2759735fd09b98107a5d4..ef3140ee8bee060277bf8359937a8d703b1f94cb 100644 (file)
@@ -749,6 +749,7 @@ static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
     ByteIOContext *pb = s->pb;
     AVCodecContext *codec = s->streams[pkt->stream_index]->codec;
     int keyframe = !!(pkt->flags & PKT_FLAG_KEY);
+    int duration = pkt->duration;
     int ret;
 
     // start a new cluster every 5 MB or 5 sec
@@ -781,8 +782,9 @@ static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
         mkv_write_block(s, MATROSKA_ID_SIMPLEBLOCK, pkt, keyframe << 7);
     } else {
         ebml_master blockgroup = start_ebml_master(pb, MATROSKA_ID_BLOCKGROUP, mkv_blockgroup_size(pkt));
+        duration = pkt->convergence_duration;
         mkv_write_block(s, MATROSKA_ID_BLOCK, pkt, 0);
-        put_ebml_uint(pb, MATROSKA_ID_DURATION, pkt->duration);
+        put_ebml_uint(pb, MATROSKA_ID_DURATION, duration);
         end_ebml_master(pb, blockgroup);
     }
 
@@ -791,7 +793,7 @@ static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
         if (ret < 0) return ret;
     }
 
-    mkv->duration = FFMAX(mkv->duration, pkt->pts + pkt->duration);
+    mkv->duration = FFMAX(mkv->duration, pkt->pts + duration);
     return 0;
 }