summaryrefslogtreecommitdiffstats
path: root/demux/demux.c
diff options
context:
space:
mode:
Diffstat (limited to 'demux/demux.c')
-rw-r--r--demux/demux.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 94f54fcbfd..f95a134903 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -101,6 +101,8 @@ const demuxer_desc_t *const demuxer_list[] = {
NULL
};
+static void add_stream_chapters(struct demuxer *demuxer);
+
static int packet_destroy(void *ptr)
{
struct demux_packet *dp = ptr;
@@ -932,6 +934,7 @@ static struct demuxer *open_given_type(struct MPOpts *opts,
// Doesn't work, because stream_pts is a "guess".
demuxer->accurate_seek = false;
}
+ add_stream_chapters(demuxer);
demuxer_sort_chapters(demuxer);
return demuxer;
} else {
@@ -1300,6 +1303,20 @@ int demuxer_add_chapter(demuxer_t *demuxer, struct bstr name,
return 0;
}
+static void add_stream_chapters(struct demuxer *demuxer)
+{
+ if (demuxer->num_chapters)
+ return;
+ int num_chapters = demuxer_chapter_count(demuxer);
+ for (int n = 0; n < num_chapters; n++) {
+ double p = n;
+ if (stream_control(demuxer->stream, STREAM_CTRL_GET_CHAPTER_TIME, &p)
+ != STREAM_OK)
+ return;
+ demuxer_add_chapter(demuxer, bstr0(""), p * 1e9, 0);
+ }
+}
+
/**
* \brief demuxer_seek_chapter() seeks to a chapter in two possible ways:
* either using the demuxer->chapters structure set by the demuxer