Andreas Rheinhardt: > Currently they are ordered as-written (i.e. by increasing position); > in case av_interleaved_write_frame() is used, this is (mostly) > the same as ordered by increasing dts. > Yet the Matroska specification strongly recommends (SHOULD) that > the CuePoints be sorted by CueTime. mkvalidator warns when they are > not. Therefore this commit sorts them accordingly. > > Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@outlook.com> > --- > libavformat/matroskaenc.c | 19 ++++++++++++++----- > 1 file changed, 14 insertions(+), 5 deletions(-) > > diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c > index f08ead0a96..8c4cf4024a 100644 > --- a/libavformat/matroskaenc.c > +++ b/libavformat/matroskaenc.c > @@ -533,6 +533,7 @@ static int mkv_add_cuepoint(MatroskaMuxContext *mkv, int > stream, int64_t ts, > { > mkv_cues *cues = &mkv->cues; > mkv_cuepoint *entries = cues->entries; > + unsigned idx = cues->num_entries; > > if (ts < 0) > return 0; > @@ -542,11 +543,19 @@ static int mkv_add_cuepoint(MatroskaMuxContext *mkv, > int stream, int64_t ts, > return AVERROR(ENOMEM); > cues->entries = entries; > > - cues->entries[cues->num_entries].pts = ts; > - cues->entries[cues->num_entries].stream_idx = stream; > - cues->entries[cues->num_entries].cluster_pos = cluster_pos - > mkv->segment_offset; > - cues->entries[cues->num_entries].relative_pos = relative_pos; > - cues->entries[cues->num_entries++].duration = duration; > + /* Make sure the cues entries are sorted by pts. */ > + while (idx > 0 && entries[idx - 1].pts > ts) > + idx--; > + memmove(&entries[idx + 1], &entries[idx], > + (cues->num_entries - idx) * sizeof(entries[0])); > + > + entries[idx].pts = ts; > + entries[idx].stream_idx = stream; > + entries[idx].cluster_pos = cluster_pos - mkv->segment_offset; > + entries[idx].relative_pos = relative_pos; > + entries[idx].duration = duration; > + > + cues->num_entries++; > > return 0; > } > Will apply tonight unless there are objections.
- Andreas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".