summaryrefslogtreecommitdiff
path: root/src/sink
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-01-03 16:53:06 -0500
committerAndrew Opalach <andrew@akon.city> 2025-01-03 16:53:06 -0500
commitd86e3f6dade53d5ca3b23a5c72c550b8f0583f91 (patch)
tree2452d09fda386a497a82eb120d8f36ac59dc912f /src/sink
parent298debac881c1e7ca5e3a28834f32ff3e74e45f6 (diff)
downloadcamu-d86e3f6dade53d5ca3b23a5c72c550b8f0583f91.tar.gz
camu-d86e3f6dade53d5ca3b23a5c72c550b8f0583f91.tar.bz2
camu-d86e3f6dade53d5ca3b23a5c72c550b8f0583f91.zip
Audio buffer, mixer and sink improvements
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/sink')
-rw-r--r--src/sink/common.c81
-rw-r--r--src/sink/common.h84
-rw-r--r--src/sink/desktop.c2
-rw-r--r--src/sink/meson.build2
4 files changed, 83 insertions, 86 deletions
diff --git a/src/sink/common.c b/src/sink/common.c
new file mode 100644
index 0000000..f720a3c
--- /dev/null
+++ b/src/sink/common.c
@@ -0,0 +1,81 @@
+#include <al/log.h>
+
+#include "../libsink/sink.h"
+
+#include "common.h"
+
+bool camu_default_sink_callback(struct camu_screen *scr, struct camu_mixer *mixer, u8 op, u8 type, void *opaque)
+{
+ switch (op) {
+ case CAMU_SINK_ADD_BUFFER:
+ switch (type) {
+ case CAMU_SINK_AUDIO: {
+ struct camu_audio_buffer *buf = (struct camu_audio_buffer *)opaque;
+ camu_mixer_add_buffer(mixer, buf);
+ al_log_info("camu_desktop", "Audio buffer added.");
+ break;
+ }
+ case CAMU_SINK_VIDEO: {
+ struct camu_video_buffer *buf = (struct camu_video_buffer *)opaque;
+ camu_screen_add_buffer(scr, buf);
+ al_log_info("camu_desktop", "Video buffer added.");
+ break;
+ }
+ }
+ break;
+ case CAMU_SINK_REMOVE_BUFFER:
+ switch (type) {
+ case CAMU_SINK_AUDIO: {
+ struct camu_audio_buffer *buf = (struct camu_audio_buffer *)opaque;
+ camu_mixer_remove_buffer(mixer, buf);
+ al_log_info("camu_desktop", "Audio buffer removed.");
+ break;
+ }
+ case CAMU_SINK_VIDEO: {
+ struct camu_video_buffer *buf = (struct camu_video_buffer *)opaque;
+ camu_screen_remove_buffer(scr, buf);
+ al_log_info("camu_desktop", "Video buffer removed.");
+ break;
+ }
+ }
+ break;
+ case CAMU_SINK_START:
+ switch (type) {
+ case CAMU_SINK_AUDIO:
+ camu_mixer_resume(mixer);
+ al_log_info("camu_desktop", "Audio started.");
+ break;
+ case CAMU_SINK_VIDEO:
+ camu_screen_set_state(scr, CAMU_SCREEN_PLAYING);
+ camu_screen_wake(scr);
+ al_log_info("camu_desktop", "Video started.");
+ break;
+ }
+ break;
+ case CAMU_SINK_STOP:
+ switch (type) {
+ case CAMU_SINK_AUDIO:
+ camu_mixer_pause(mixer);
+ al_log_info("camu_desktop", "Audio stopped.");
+ break;
+ case CAMU_SINK_VIDEO:
+ camu_screen_set_state(scr, CAMU_SCREEN_PAUSED);
+ al_log_info("camu_desktop", "Video stopped.");
+ break;
+ }
+ break;
+ case CAMU_SINK_CLEAR:
+ switch (type) {
+ case CAMU_SINK_AUDIO:
+ camu_mixer_clear(mixer);
+ break;
+ case CAMU_SINK_VIDEO:
+ camu_screen_clear(scr);
+ break;
+ }
+ break;
+ case CAMU_SINK_EXIT:
+ return false;
+ }
+ return true;
+}
diff --git a/src/sink/common.h b/src/sink/common.h
index dffaea1..5d02ed1 100644
--- a/src/sink/common.h
+++ b/src/sink/common.h
@@ -1,86 +1,4 @@
-#include <al/log.h>
-
#include "../screen/screen.h"
#include "../mixer/mixer.h"
-#include "../libsink/sink.h"
-
-AL_UNUSED_FUNCTION_PUSH
-
-static bool camu_default_sink_callback(struct camu_screen *scr, struct camu_mixer *mixer, u8 op, u8 type, void *opaque)
-{
- switch (op) {
- case CAMU_SINK_ADD_BUFFER:
- switch (type) {
- case CAMU_SINK_AUDIO: {
- struct camu_audio_buffer *buf = (struct camu_audio_buffer *)opaque;
- camu_mixer_add_buffer(mixer, buf);
- al_log_info("camu_desktop", "Audio buffer added.");
- break;
- }
- case CAMU_SINK_VIDEO: {
- struct camu_video_buffer *buf = (struct camu_video_buffer *)opaque;
- camu_screen_add_buffer(scr, buf);
- al_log_info("camu_desktop", "Video buffer added.");
- break;
- }
- }
- break;
- case CAMU_SINK_REMOVE_BUFFER:
- switch (type) {
- case CAMU_SINK_AUDIO: {
- struct camu_audio_buffer *buf = (struct camu_audio_buffer *)opaque;
- camu_mixer_remove_buffer(mixer, buf);
- al_log_info("camu_desktop", "Audio buffer removed.");
- break;
- }
- case CAMU_SINK_VIDEO: {
- struct camu_video_buffer *buf = (struct camu_video_buffer *)opaque;
- camu_screen_remove_buffer(scr, buf);
- al_log_info("camu_desktop", "Video buffer removed.");
- break;
- }
- }
- break;
- case CAMU_SINK_SWAP_BUFFER:
- switch (type) {
- case CAMU_SINK_AUDIO: {
- break;
- }
- }
- break;
- case CAMU_SINK_START:
- switch (type) {
- case CAMU_SINK_AUDIO: {
- camu_mixer_resume(mixer);
- al_log_info("camu_desktop", "Audio started.");
- break;
- }
- case CAMU_SINK_VIDEO: {
- camu_screen_set_state(scr, CAMU_SCREEN_PLAYING);
- camu_screen_wake(scr);
- al_log_info("camu_desktop", "Video started.");
- break;
- }
- }
- break;
- case CAMU_SINK_STOP:
- switch (type) {
- case CAMU_SINK_AUDIO: {
- camu_mixer_pause(mixer);
- al_log_info("camu_desktop", "Audio stopped.");
- break;
- }
- case CAMU_SINK_VIDEO: {
- camu_screen_set_state(scr, CAMU_SCREEN_PAUSED);
- al_log_info("camu_desktop", "Video stopped.");
- break;
- }
- }
- break;
- case CAMU_SINK_EXIT:
- return false;
- }
- return true;
-}
-AL_UNUSED_FUNCTION_POP
+bool camu_default_sink_callback(struct camu_screen *scr, struct camu_mixer *mixer, u8 op, u8 type, void *opaque);
diff --git a/src/sink/desktop.c b/src/sink/desktop.c
index 5529a3b..cb5e7c6 100644
--- a/src/sink/desktop.c
+++ b/src/sink/desktop.c
@@ -127,8 +127,6 @@ void camu_desktop_stop(struct camu_desktop *c)
camu_input_simulator_stop();
}
#endif
- camu_mixer_pause(&c->mixer);
- camu_mixer_clear(&c->mixer);
// We have already stopped ticking the screen at this point.
camu_screen_clear(&c->scr);
camu_sink_stop(&c->sink);
diff --git a/src/sink/meson.build b/src/sink/meson.build
index 30a5f39..124c7a5 100644
--- a/src/sink/meson.build
+++ b/src/sink/meson.build
@@ -1,4 +1,4 @@
-desktop_src = ['desktop.c', 'input_simulator.c']
+desktop_src = ['desktop.c', 'common.c', 'input_simulator.c']
desktop_deps = [libsink]
desktop_args = ['-DCAMU_MIXER_THREADED', '-DCAMU_SCREEN_THREADED']
desktop = declare_dependency(sources: desktop_src, dependencies: desktop_deps,