summaryrefslogtreecommitdiffstats
path: root/stream/cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'stream/cache.c')
-rw-r--r--stream/cache.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/stream/cache.c b/stream/cache.c
index d93d539494..9a9c6b9a00 100644
--- a/stream/cache.c
+++ b/stream/cache.c
@@ -99,6 +99,7 @@ struct priv {
double stream_start_time;
int64_t stream_size;
bool stream_manages_timeline;
+ unsigned int stream_num_chapters;
int stream_cache_idle;
int stream_cache_fill;
};
@@ -303,6 +304,7 @@ static bool cache_fill(struct priv *s)
static void update_cached_controls(struct priv *s)
{
+ unsigned int ui;
double d;
s->stream_time_length = 0;
if (stream_control(s->stream, STREAM_CTRL_GET_TIME_LENGTH, &d) == STREAM_OK)
@@ -313,6 +315,9 @@ static void update_cached_controls(struct priv *s)
s->stream_manages_timeline = false;
if (stream_control(s->stream, STREAM_CTRL_MANAGES_TIMELINE, NULL) == STREAM_OK)
s->stream_manages_timeline = true;
+ s->stream_num_chapters = 0;
+ if (stream_control(s->stream, STREAM_CTRL_GET_NUM_CHAPTERS, &ui) == STREAM_OK)
+ s->stream_num_chapters = ui;
stream_update_size(s->stream);
s->stream_size = s->stream->end_pos;
}
@@ -343,6 +348,9 @@ static int cache_get_cached_control(stream_t *cache, int cmd, void *arg)
return STREAM_OK;
case STREAM_CTRL_MANAGES_TIMELINE:
return s->stream_manages_timeline ? STREAM_OK : STREAM_UNSUPPORTED;
+ case STREAM_CTRL_GET_NUM_CHAPTERS:
+ *(unsigned int *)arg = s->stream_num_chapters;
+ return STREAM_OK;
case STREAM_CTRL_GET_CURRENT_TIME: {
if (s->read_filepos >= s->min_filepos &&
s->read_filepos <= s->max_filepos &&
@@ -478,6 +486,8 @@ static int cache_control(stream_t *cache, int cmd, void *arg)
if (r != STREAM_ERROR)
goto done;
+ mp_msg(MSGT_CACHE, MSGL_V, "[cache] blocking for STREAM_CTRL %d\n", cmd);
+
s->control = cmd;
s->control_arg = arg;
double retry = 0;