summaryrefslogtreecommitdiff
path: root/src/sink
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2024-12-09 15:30:13 -0500
committerAndrew Opalach <andrew@akon.city> 2024-12-09 15:30:13 -0500
commit907766e7d59af88d125aef603fa9c61f67abd328 (patch)
tree2914e8c06327d77d298f8aa9dfe1550d6ac061c9 /src/sink
parentefb4728e02a882d4b62b57f6fd572a9e053ae609 (diff)
downloadcamu-907766e7d59af88d125aef603fa9c61f67abd328.tar.gz
camu-907766e7d59af88d125aef603fa9c61f67abd328.tar.bz2
camu-907766e7d59af88d125aef603fa9c61f67abd328.zip
Don't queue remove_sink, cleanup input simulator
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/sink')
-rw-r--r--src/sink/desktop.c19
-rw-r--r--src/sink/input_simulator.c60
-rw-r--r--src/sink/input_simulator.h7
-rw-r--r--src/sink/meson.build3
4 files changed, 87 insertions, 2 deletions
diff --git a/src/sink/desktop.c b/src/sink/desktop.c
index 11da0f9..85080ba 100644
--- a/src/sink/desktop.c
+++ b/src/sink/desktop.c
@@ -10,6 +10,9 @@
#include "desktop.h"
#include "common.h"
+#ifdef _DEBUG_
+#include "input_simulator.h"
+#endif
static u8 sink_callback(void *userdata, u8 op, u8 type, void *opaque)
{
@@ -47,8 +50,15 @@ static void screen_callback(void *userdata, u8 op, void *opaque)
case CAMU_SCREEN_RESEEK:
camu_sink_reseek(&c->sink);
break;
- case CAMU_SCREEN_UNSET:
- camu_sink_unset(&c->sink);
+ case CAMU_SCREEN_DEBUG:
+#ifdef _DEBUG_
+ if (camu_input_simulator_running()) {
+ camu_input_simulator_stop();
+ } else {
+ camu_input_simulator_run(&c->sink);
+ }
+ //camu_sink_unset(&c->sink);
+#endif
break;
case CAMU_SCREEN_VOLUME: {
f64 amount = *(f64 *)opaque;
@@ -111,6 +121,11 @@ bool camu_desktop_tick(struct camu_desktop *c)
void camu_desktop_stop(struct camu_desktop *c)
{
+#ifdef _DEBUG_
+ if (camu_input_simulator_running()) {
+ camu_input_simulator_stop();
+ }
+#endif
camu_mixer_pause(&c->mixer);
camu_mixer_clear(&c->mixer);
camu_screen_set_state(&c->scr, CAMU_SCREEN_CLOSED);
diff --git a/src/sink/input_simulator.c b/src/sink/input_simulator.c
new file mode 100644
index 0000000..b9c92ca
--- /dev/null
+++ b/src/sink/input_simulator.c
@@ -0,0 +1,60 @@
+#include <aki/thread.h>
+#include <al/random.h>
+
+#include "input_simulator.h"
+
+// This is ignoring all thread-safety.
+static s32 quit = 1;
+static struct aki_thread thread;
+
+enum {
+ SKIP = 0,
+ BACKSKIP,
+ SHUFFLE,
+ MARK, // count
+ TOGGLE_PAUSE,
+ SEEK,
+};
+
+static aki_thread_result AKI_THREADCALL input_simulation_thread(void *userdata)
+{
+ struct camu_sink *sink = (struct camu_sink *)userdata;
+ while (!quit) {
+ aki_thread_sleep(AKI_TS_FROM_USEC(30000));
+ switch (al_rand() % MARK) {
+ case SKIP:
+ camu_sink_skip(sink, (al_rand() % 5));
+ break;
+ case BACKSKIP:
+ camu_sink_skip(sink, -(al_rand() % 5));
+ break;
+ case SHUFFLE:
+ camu_sink_shuffle(sink);
+ break;
+ case TOGGLE_PAUSE:
+ camu_sink_toggle_pause(sink);
+ break;
+ case SEEK:
+ camu_sink_seek(sink, 0.0);
+ break;
+ }
+ }
+ return 0;
+}
+
+void camu_input_simulator_run(struct camu_sink *sink)
+{
+ quit = 0;
+ aki_thread_create(&thread, input_simulation_thread, sink);
+}
+
+bool camu_input_simulator_running(void)
+{
+ return quit == 0;
+}
+
+void camu_input_simulator_stop(void)
+{
+ quit = 1;
+ aki_thread_join(&thread);
+}
diff --git a/src/sink/input_simulator.h b/src/sink/input_simulator.h
new file mode 100644
index 0000000..40253d0
--- /dev/null
+++ b/src/sink/input_simulator.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#include "../libsink/sink.h"
+
+void camu_input_simulator_run(struct camu_sink *sink);
+bool camu_input_simulator_running(void);
+void camu_input_simulator_stop(void);
diff --git a/src/sink/meson.build b/src/sink/meson.build
index 73a9276..067b045 100644
--- a/src/sink/meson.build
+++ b/src/sink/meson.build
@@ -1,4 +1,7 @@
desktop_src = ['desktop.c']
+if is_debug
+ desktop_src += ['input_simulator.c']
+endif
desktop_deps = [libsink]
desktop_args = ['-DCAMU_MIXER_THREADED', '-DCAMU_SCREEN_THREADED']
desktop = declare_dependency(sources: desktop_src, dependencies: desktop_deps,