summaryrefslogtreecommitdiffstats
path: root/demux/demux.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-04-12 13:20:37 +0200
committerwm4 <wm4@nowhere>2013-04-12 14:38:04 +0200
commit6f28c061b4a87b2dbd9d0c5553b7b5f6a83b9c3e (patch)
treef087010385ec5076b2efab98de88c3c93d60d8f1 /demux/demux.c
parenta5916f5d1df7ad9c3e9d2644f930a3e62c4c0d3c (diff)
downloadmpv-6f28c061b4a87b2dbd9d0c5553b7b5f6a83b9c3e.tar.bz2
mpv-6f28c061b4a87b2dbd9d0c5553b7b5f6a83b9c3e.tar.xz
demux: always sort chapters
The condition that checked whether the chapters are out of order and should be sorted was inverted. This likely wasn't noticed in testing, because even if the chapters are unsorted, if the last two chapters were sorted, the rest got sorted too. Instead of doing this silly check, always sort the chapters after demuxer initialization. Also make sure the sort order is stable in case chapter start times are the same (original_index check).
Diffstat (limited to 'demux/demux.c')
-rw-r--r--demux/demux.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/demux/demux.c b/demux/demux.c
index ce1027b0f7..aa9e9c3b34 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -948,6 +948,7 @@ static struct demuxer *open_given_type(struct MPOpts *opts,
opts->correct_pts =
demux_control(demuxer, DEMUXER_CTRL_CORRECT_PTS,
NULL) == DEMUXER_CTRL_OK;
+ demuxer_sort_chapters(demuxer);
return demuxer;
} else {
// demux_mov can return playlist instead of mov
@@ -1281,10 +1282,10 @@ static int chapter_compare(const void *p1, const void *p2)
return 1;
else if (c1->start < c2->start)
return -1;
- return 0;
+ return c1->original_index > c2->original_index ? 1 :-1; // never equal
}
-static void demuxer_sort_chapters(demuxer_t *demuxer)
+void demuxer_sort_chapters(demuxer_t *demuxer)
{
qsort(demuxer->chapters, demuxer->num_chapters,
sizeof(struct demux_chapter), chapter_compare);
@@ -1298,6 +1299,8 @@ int demuxer_add_chapter(demuxer_t *demuxer, struct bstr name,
struct demux_chapter,
demuxer->num_chapters + 32);
+ demuxer->chapters[demuxer->num_chapters].original_index =
+ demuxer->num_chapters;
demuxer->chapters[demuxer->num_chapters].start = start;
demuxer->chapters[demuxer->num_chapters].end = end;
demuxer->chapters[demuxer->num_chapters].name = name.len ?
@@ -1305,12 +1308,6 @@ int demuxer_add_chapter(demuxer_t *demuxer, struct bstr name,
talloc_strdup(demuxer->chapters, mp_gtext("unknown"));
demuxer->num_chapters++;
-
- if (demuxer->num_chapters > 1
- && demuxer->chapters[demuxer->num_chapters - 2].start
- < demuxer->chapters[demuxer->num_chapters - 1].start)
- demuxer_sort_chapters(demuxer);
-
return 0;
}