summaryrefslogtreecommitdiffstats
path: root/stream
diff options
context:
space:
mode:
Diffstat (limited to 'stream')
-rw-r--r--stream/cache2.c9
-rw-r--r--stream/stream.h1
2 files changed, 9 insertions, 1 deletions
diff --git a/stream/cache2.c b/stream/cache2.c
index 8b35150321..7744f2cba9 100644
--- a/stream/cache2.c
+++ b/stream/cache2.c
@@ -93,6 +93,7 @@ typedef struct {
volatile int control_res;
volatile double stream_time_length;
volatile double stream_time_pos;
+ volatile int idle;
} cache_vars_t;
static void cache_wakeup(stream_t *s)
@@ -420,6 +421,7 @@ static void cache_mainloop(cache_vars_t *s) {
#endif
do {
if (!cache_fill(s)) {
+ s->idle = 1;
#if FORKED_CACHE
// Let signal wake us up, we cannot leave this
// enabled since we do not handle EINTR in most places.
@@ -436,8 +438,10 @@ static void cache_mainloop(cache_vars_t *s) {
sa.sa_handler = SIG_IGN;
sigaction(SIGUSR1, &sa, NULL);
#endif
- } else
+ } else {
sleep_count = 0;
+ s->idle = 0;
+ }
} while (cache_execute_control(s));
}
@@ -624,6 +628,9 @@ int cache_do_control(stream_t *stream, int cmd, void *arg) {
case STREAM_CTRL_GET_CACHE_FILL:
*(int64_t *)arg = s->max_filepos - s->read_filepos;
return STREAM_OK;
+ case STREAM_CTRL_GET_CACHE_IDLE:
+ *(int *)arg = s->idle;
+ return STREAM_OK;
case STREAM_CTRL_SEEK_TO_TIME:
s->control_double_arg = *(double *)arg;
s->control = cmd;
diff --git a/stream/stream.h b/stream/stream.h
index a112b0f3f6..9f2be2f817 100644
--- a/stream/stream.h
+++ b/stream/stream.h
@@ -100,6 +100,7 @@
#define STREAM_CTRL_GET_CURRENT_TITLE 14
#define STREAM_CTRL_GET_CACHE_SIZE 15
#define STREAM_CTRL_GET_CACHE_FILL 16
+#define STREAM_CTRL_GET_CACHE_IDLE 17
struct stream_lang_req {
int type; // STREAM_AUDIO, STREAM_SUB