summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demux/demux.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 7c563e9625..0bfb150cfd 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -129,6 +129,8 @@ struct demux_internal {
int64_t stream_cache_size;
int64_t stream_cache_fill;
int stream_cache_idle;
+ // Updated during init only.
+ char *stream_base_filename;
};
struct demux_stream {
@@ -786,6 +788,16 @@ void demux_update(demuxer_t *demuxer)
pthread_mutex_unlock(&in->lock);
}
+static void demux_init_cache(struct demuxer *demuxer)
+{
+ struct demux_internal *in = demuxer->in;
+ struct stream *stream = demuxer->stream;
+
+ char *base = NULL;
+ stream_control(stream, STREAM_CTRL_GET_BASE_FILENAME, &base);
+ in->stream_base_filename = talloc_steal(demuxer, base);
+}
+
static struct demuxer *open_given_type(struct mpv_global *global,
struct mp_log *log,
const struct demuxer_desc *desc,
@@ -855,6 +867,7 @@ static struct demuxer *open_given_type(struct mpv_global *global,
mp_warn(log, "Enabling seeking because stream cache is active.\n");
in->d_thread->seekable = true;
}
+ demux_init_cache(demuxer);
demux_changed(in->d_thread, DEMUX_EVENT_ALL);
demux_update(demuxer);
return demuxer;
@@ -1146,6 +1159,11 @@ static int cached_stream_control(struct demux_internal *in, int cmd, void *arg)
return STREAM_UNSUPPORTED;
*(int64_t *)arg = in->stream_size;
return STREAM_OK;
+ case STREAM_CTRL_GET_BASE_FILENAME:
+ if (!in->stream_base_filename)
+ return STREAM_UNSUPPORTED;
+ *(char **)arg = talloc_strdup(NULL, in->stream_base_filename);
+ return STREAM_OK;
}
return STREAM_ERROR;
}