]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/matroskaenc.c
Const correctness for vorbis_comment
[ffmpeg] / libavformat / matroskaenc.c
index 1ed69b47ccf00c8cc852b9c509330e52bf41f8ca..e26e31a776052f89f44667432d9dba1224563474 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;
@@ -866,6 +869,11 @@ static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
     int ret;
     int64_t ts = mkv->tracks[pkt->stream_index].write_dts ? pkt->dts : pkt->pts;
 
+    if (ts == AV_NOPTS_VALUE) {
+        av_log(s, AV_LOG_ERROR, "Can't write packet with unknown timestamp\n");
+        return AVERROR(EINVAL);
+    }
+
     if (url_is_streamed(s->pb)) {
         if (!mkv->dyn_bc)
             url_open_dyn_buf(&mkv->dyn_bc);
@@ -878,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));
     }