summaryrefslogtreecommitdiffstats
path: root/stream
diff options
context:
space:
mode:
Diffstat (limited to 'stream')
-rw-r--r--stream/cache2.c6
-rw-r--r--stream/stream.c5
-rw-r--r--stream/stream.h4
-rw-r--r--stream/stream_dvd.c2
4 files changed, 17 insertions, 0 deletions
diff --git a/stream/cache2.c b/stream/cache2.c
index 7744f2cba9..6c11ec9812 100644
--- a/stream/cache2.c
+++ b/stream/cache2.c
@@ -323,6 +323,9 @@ static int cache_execute_control(cache_vars_t *s) {
case STREAM_CTRL_GET_LANG:
s->control_res = s->stream->control(s->stream, s->control, (void *)&s->control_lang_arg);
break;
+ case STREAM_CTRL_MANAGES_TIMELINE:
+ s->control_res = s->stream->control(s->stream, s->control, NULL);
+ break;
default:
s->control_res = STREAM_UNSUPPORTED;
break;
@@ -659,6 +662,7 @@ int cache_do_control(stream_t *stream, int cmd, void *arg) {
case STREAM_CTRL_GET_NUM_ANGLES:
case STREAM_CTRL_GET_ANGLE:
case STREAM_CTRL_GET_SIZE:
+ case STREAM_CTRL_MANAGES_TIMELINE:
case -2:
s->control = cmd;
break;
@@ -707,6 +711,8 @@ int cache_do_control(stream_t *stream, int cmd, void *arg) {
case STREAM_CTRL_GET_LANG:
*(struct stream_lang_req *)arg = s->control_lang_arg;
break;
+ case STREAM_CTRL_MANAGES_TIMELINE:
+ break;
}
return s->control_res;
}
diff --git a/stream/stream.c b/stream/stream.c
index 8e38d1983e..36594d8556 100644
--- a/stream/stream.c
+++ b/stream/stream.c
@@ -769,3 +769,8 @@ struct bstr stream_read_complete(struct stream *s, void *talloc_ctx,
buf, total_read
};
}
+
+bool stream_manages_timeline(struct stream *s)
+{
+ return stream_control(s, STREAM_CTRL_MANAGES_TIMELINE, NULL) == STREAM_OK;
+}
diff --git a/stream/stream.h b/stream/stream.h
index c47452aeb9..b6fe40b56a 100644
--- a/stream/stream.h
+++ b/stream/stream.h
@@ -101,6 +101,8 @@
#define STREAM_CTRL_GET_CACHE_FILL 16
#define STREAM_CTRL_GET_CACHE_IDLE 17
#define STREAM_CTRL_RECONNECT 18
+// DVD/Bluray, signal general support for GET_CURRENT_TIME etc.
+#define STREAM_CTRL_MANAGES_TIMELINE 19
struct stream_lang_req {
int type; // STREAM_AUDIO, STREAM_SUB
@@ -406,6 +408,8 @@ int stream_read_internal(stream_t *s, void *buf, int len);
/// Internal seek function bypassing the stream buffer
int stream_seek_internal(stream_t *s, int64_t newpos);
+bool stream_manages_timeline(stream_t *s);
+
extern int dvd_title;
extern int dvd_angle;
diff --git a/stream/stream_dvd.c b/stream/stream_dvd.c
index 0207ae3969..0b85e320ba 100644
--- a/stream/stream_dvd.c
+++ b/stream/stream_dvd.c
@@ -712,6 +712,8 @@ static int control(stream_t *stream,int cmd,void* arg)
snprintf(req->name, sizeof(req->name), "%c%c", lang >> 8, lang);
return STREAM_OK;
}
+ case STREAM_CTRL_MANAGES_TIMELINE:
+ return STREAM_OK;
}
return STREAM_UNSUPPORTED;
}