Mercurial > libavformat.hg
comparison matroskaenc.c @ 5795:67059af53c04 libavformat
mkvenc: Handle negative timestamps correctly
author | conrad |
---|---|
date | Tue, 09 Mar 2010 04:23:36 +0000 |
parents | 31e8a43123c5 |
children | 3c72ab66eb24 |
comparison
equal
deleted
inserted
replaced
5794:31e8a43123c5 | 5795:67059af53c04 |
---|---|
70 ebml_master segment; | 70 ebml_master segment; |
71 int64_t segment_offset; | 71 int64_t segment_offset; |
72 int64_t segment_uid; | 72 int64_t segment_uid; |
73 ebml_master cluster; | 73 ebml_master cluster; |
74 int64_t cluster_pos; ///< file offset of the current cluster | 74 int64_t cluster_pos; ///< file offset of the current cluster |
75 uint64_t cluster_pts; | 75 int64_t cluster_pts; |
76 int64_t duration_offset; | 76 int64_t duration_offset; |
77 uint64_t duration; | 77 int64_t duration; |
78 mkv_seekhead *main_seekhead; | 78 mkv_seekhead *main_seekhead; |
79 mkv_seekhead *cluster_seekhead; | 79 mkv_seekhead *cluster_seekhead; |
80 mkv_cues *cues; | 80 mkv_cues *cues; |
81 mkv_track *tracks; | 81 mkv_track *tracks; |
82 | 82 |
352 mkv_cuepoint *entries = cues->entries; | 352 mkv_cuepoint *entries = cues->entries; |
353 | 353 |
354 entries = av_realloc(entries, (cues->num_entries + 1) * sizeof(mkv_cuepoint)); | 354 entries = av_realloc(entries, (cues->num_entries + 1) * sizeof(mkv_cuepoint)); |
355 if (entries == NULL) | 355 if (entries == NULL) |
356 return AVERROR(ENOMEM); | 356 return AVERROR(ENOMEM); |
357 | |
358 if (ts < 0) | |
359 return 0; | |
357 | 360 |
358 entries[cues->num_entries ].pts = ts; | 361 entries[cues->num_entries ].pts = ts; |
359 entries[cues->num_entries ].tracknum = stream + 1; | 362 entries[cues->num_entries ].tracknum = stream + 1; |
360 entries[cues->num_entries++].cluster_pos = cluster_pos - cues->segment_offset; | 363 entries[cues->num_entries++].cluster_pos = cluster_pos - cues->segment_offset; |
361 | 364 |
881 ret = mkv_add_seekhead_entry(mkv->cluster_seekhead, MATROSKA_ID_CLUSTER, url_ftell(pb)); | 884 ret = mkv_add_seekhead_entry(mkv->cluster_seekhead, MATROSKA_ID_CLUSTER, url_ftell(pb)); |
882 if (ret < 0) return ret; | 885 if (ret < 0) return ret; |
883 | 886 |
884 mkv->cluster_pos = url_ftell(s->pb); | 887 mkv->cluster_pos = url_ftell(s->pb); |
885 mkv->cluster = start_ebml_master(pb, MATROSKA_ID_CLUSTER, 0); | 888 mkv->cluster = start_ebml_master(pb, MATROSKA_ID_CLUSTER, 0); |
886 put_ebml_uint(pb, MATROSKA_ID_CLUSTERTIMECODE, ts); | 889 put_ebml_uint(pb, MATROSKA_ID_CLUSTERTIMECODE, FFMAX(0, ts)); |
887 mkv->cluster_pts = ts; | 890 mkv->cluster_pts = FFMAX(0, ts); |
888 av_md5_update(mkv->md5_ctx, pkt->data, FFMIN(200, pkt->size)); | 891 av_md5_update(mkv->md5_ctx, pkt->data, FFMIN(200, pkt->size)); |
889 } | 892 } |
890 | 893 |
891 if (codec->codec_type != CODEC_TYPE_SUBTITLE) { | 894 if (codec->codec_type != CODEC_TYPE_SUBTITLE) { |
892 mkv_write_block(s, pb, MATROSKA_ID_SIMPLEBLOCK, pkt, keyframe << 7); | 895 mkv_write_block(s, pb, MATROSKA_ID_SIMPLEBLOCK, pkt, keyframe << 7); |