changeset 5795:67059af53c04 libavformat

mkvenc: Handle negative timestamps correctly
author conrad
date Tue, 09 Mar 2010 04:23:36 +0000
parents 31e8a43123c5
children a8bf262a9302
files matroskaenc.c
diffstat 1 files changed, 7 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/matroskaenc.c	Tue Mar 09 04:23:33 2010 +0000
+++ b/matroskaenc.c	Tue Mar 09 04:23:36 2010 +0000
@@ -72,9 +72,9 @@
     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 @@
     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 @@
 
         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));
     }