diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-08-09 04:49:09 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-08-09 05:05:09 +0200 |
commit | 64d029de41ed556b765df50c7080b06fd5a86417 (patch) | |
tree | fe552016ab131bd564d714fb4787e57f72c59803 | |
parent | d6af706eee48cf8e1c545b3097b2bebcffa7ab1d (diff) | |
download | ffmpeg-64d029de41ed556b765df50c7080b06fd5a86417.tar.gz |
avformat/matroskaenc: fix MAX_CUEPOINT_SIZE calculation
Fixes assertion failure
Fixes Ticket3822
as a side-effect this makes some mkv files a few bytes smaller
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/matroskaenc.c | 15 | ||||
-rw-r--r-- | tests/ref/lavf/mkv | 4 |
2 files changed, 16 insertions, 3 deletions
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index db7c2af74e..3ec8ef27a9 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -445,8 +445,21 @@ static int64_t mkv_write_cues(AVFormatContext *s, mkv_cues *cues, mkv_track *tra ebml_master cuepoint, track_positions; mkv_cuepoint *entry = &cues->entries[i]; uint64_t pts = entry->pts; + int ctp_nb = 0; - cuepoint = start_ebml_master(pb, MATROSKA_ID_POINTENTRY, MAX_CUEPOINT_SIZE(num_tracks)); + // Calculate the number of entries, so we know the element size + for (j = 0; j < num_tracks; j++) + tracks[j].has_cue = 0; + for (j = 0; j < cues->num_entries - i && entry[j].pts == pts; j++) { + int tracknum = entry[j].stream_idx; + av_assert0(tracknum>=0 && tracknum<num_tracks); + if (tracks[tracknum].has_cue && s->streams[tracknum]->codec->codec_type != AVMEDIA_TYPE_SUBTITLE) + continue; + tracks[tracknum].has_cue = 1; + ctp_nb ++; + } + + cuepoint = start_ebml_master(pb, MATROSKA_ID_POINTENTRY, MAX_CUEPOINT_SIZE(ctp_nb)); put_ebml_uint(pb, MATROSKA_ID_CUETIME, pts); // put all the entries from different tracks that have the exact same diff --git a/tests/ref/lavf/mkv b/tests/ref/lavf/mkv index 97c9864bba..edbfe60a00 100644 --- a/tests/ref/lavf/mkv +++ b/tests/ref/lavf/mkv @@ -1,5 +1,5 @@ -bda342503392d517955e1112def7b03a *./tests/data/lavf/lavf.mkv -472671 ./tests/data/lavf/lavf.mkv +bab98f5a04a9f7991fb960041c996478 *./tests/data/lavf/lavf.mkv +472668 ./tests/data/lavf/lavf.mkv ./tests/data/lavf/lavf.mkv CRC=0xec6c3c68 c93950920d4ee57eb3ff5ba0cf0c8b19 *./tests/data/lavf/lavf.mkv 320412 ./tests/data/lavf/lavf.mkv |