mkvenc: Handle negative timestamps correctly
authorDavid Conrad <lessen42@gmail.com>
Tue, 9 Mar 2010 04:23:36 +0000 (04:23 +0000)
committerDavid Conrad <lessen42@gmail.com>
Tue, 9 Mar 2010 04:23:36 +0000 (04:23 +0000)
Originally committed as revision 22372 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/matroskaenc.c

index c0d4f1b..e26e31a 100644 (file)
@@ -72,9 +72,9 @@ typedef struct MatroskaMuxContext {
     int64_t         segment_uid;
     ebml_master     cluster;
     int64_t         cluster_pos;        ///< file offset of the current cluster
-    uint64_t        cluster_pts;
+    int64_t         cluster_pts;
     int64_t         duration_offset;
-    uint64_t        duration;
+    int64_t         duration;
     mkv_seekhead    *main_seekhead;
     mkv_seekhead    *cluster_seekhead;
     mkv_cues        *cues;
@@ -355,6 +355,9 @@ static int mkv_add_cuepoint(mkv_cues *cues, int stream, int64_t ts, int64_t clus
     if (entries == NULL)
         return AVERROR(ENOMEM);
 
+    if (ts < 0)
+        return 0;
+
     entries[cues->num_entries  ].pts = ts;
     entries[cues->num_entries  ].tracknum = stream + 1;
     entries[cues->num_entries++].cluster_pos = cluster_pos - cues->segment_offset;
@@ -883,8 +886,8 @@ static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
 
         mkv->cluster_pos = url_ftell(s->pb);
         mkv->cluster = start_ebml_master(pb, MATROSKA_ID_CLUSTER, 0);
-        put_ebml_uint(pb, MATROSKA_ID_CLUSTERTIMECODE, ts);
-        mkv->cluster_pts = ts;
+        put_ebml_uint(pb, MATROSKA_ID_CLUSTERTIMECODE, FFMAX(0, ts));
+        mkv->cluster_pts = FFMAX(0, ts);
         av_md5_update(mkv->md5_ctx, pkt->data, FFMIN(200, pkt->size));
     }