aboutsummaryrefslogtreecommitdiffhomepage
path: root/input
diff options
context:
space:
mode:
authorGravatar wm4 <wm4@nowhere>2014-04-15 22:50:16 +0200
committerGravatar wm4 <wm4@nowhere>2014-04-15 22:50:16 +0200
commit5aeec9aa70f47a88aeb20057169d54c54e87d017 (patch)
treea2fe13a577030e60d0773e493517ef9fb7c74460 /input
parentad75b8e339e3a8a1aae3564695a572836228cdc5 (diff)
audio: wake up the core when audio buffer is running low (2)
Same change as in e2184fcb, but this time for pull based AOs. This is slightly controversial, because it will make a fast syscall from e.g. ao_jack. And according to JackAudio developers, syscalls are evil and will destroy realtime operation. But I don't think this is an issue at all. Still avoid locking a mutex. I'm not sure what jackaudio does in the worst case - but if they set the jackaudio thread (and only this thread) to realtime, we might run into deadlock situations due to priority inversion and such. I'm not quite sure whether this can happen, but I'll readily follow the cargo cult if it makes hack happy.
Diffstat (limited to 'input')
-rw-r--r--input/input.c6
-rw-r--r--input/input.h2
2 files changed, 8 insertions, 0 deletions
diff --git a/input/input.c b/input/input.c
index cc36020af7..349803663e 100644
--- a/input/input.c
+++ b/input/input.c
@@ -1653,6 +1653,12 @@ void mp_input_wakeup(struct input_ctx *ictx)
write(ictx->wakeup_pipe[1], &(char){0}, 1);
}
+void mp_input_wakeup_nolock(struct input_ctx *ictx)
+{
+ if (ictx->wakeup_pipe[1] >= 0)
+ write(ictx->wakeup_pipe[1], &(char){0}, 1);
+}
+
static bool test_abort(struct input_ctx *ictx)
{
if (async_quit_request || queue_has_abort_cmds(&ictx->cmd_queue)) {
diff --git a/input/input.h b/input/input.h
index 6e2e0f7046..512d0457bf 100644
--- a/input/input.h
+++ b/input/input.h
@@ -206,6 +206,8 @@ void mp_input_uninit(struct input_ctx *ictx);
// Wake up sleeping input loop from another thread.
void mp_input_wakeup(struct input_ctx *ictx);
+void mp_input_wakeup_nolock(struct input_ctx *ictx);
+
// Interruptible usleep: (used by demux)
int mp_input_check_interrupt(struct input_ctx *ictx, int time);