diff options
Diffstat (limited to 'demux')
-rw-r--r-- | demux/demux.c | 17 |
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 |