You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
mkvenc: Handle negative timestamps correctly
Originally committed as revision 22372 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
@@ -72,9 +72,9 @@ typedef struct MatroskaMuxContext {
|
|||||||
int64_t segment_uid;
|
int64_t segment_uid;
|
||||||
ebml_master cluster;
|
ebml_master cluster;
|
||||||
int64_t cluster_pos; ///< file offset of the current cluster
|
int64_t cluster_pos; ///< file offset of the current cluster
|
||||||
uint64_t cluster_pts;
|
int64_t cluster_pts;
|
||||||
int64_t duration_offset;
|
int64_t duration_offset;
|
||||||
uint64_t duration;
|
int64_t duration;
|
||||||
mkv_seekhead *main_seekhead;
|
mkv_seekhead *main_seekhead;
|
||||||
mkv_seekhead *cluster_seekhead;
|
mkv_seekhead *cluster_seekhead;
|
||||||
mkv_cues *cues;
|
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)
|
if (entries == NULL)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
|
||||||
|
if (ts < 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
entries[cues->num_entries ].pts = ts;
|
entries[cues->num_entries ].pts = ts;
|
||||||
entries[cues->num_entries ].tracknum = stream + 1;
|
entries[cues->num_entries ].tracknum = stream + 1;
|
||||||
entries[cues->num_entries++].cluster_pos = cluster_pos - cues->segment_offset;
|
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_pos = url_ftell(s->pb);
|
||||||
mkv->cluster = start_ebml_master(pb, MATROSKA_ID_CLUSTER, 0);
|
mkv->cluster = start_ebml_master(pb, MATROSKA_ID_CLUSTER, 0);
|
||||||
put_ebml_uint(pb, MATROSKA_ID_CLUSTERTIMECODE, ts);
|
put_ebml_uint(pb, MATROSKA_ID_CLUSTERTIMECODE, FFMAX(0, ts));
|
||||||
mkv->cluster_pts = ts;
|
mkv->cluster_pts = FFMAX(0, ts);
|
||||||
av_md5_update(mkv->md5_ctx, pkt->data, FFMIN(200, pkt->size));
|
av_md5_update(mkv->md5_ctx, pkt->data, FFMIN(200, pkt->size));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user