summaryrefslogtreecommitdiff
path: root/src/sink
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2024-11-12 18:52:33 -0500
committerAndrew Opalach <andrew@akon.city> 2024-11-12 19:28:50 -0500
commit8c996a5b597bd1cd9c188a0e61eae1ff718c8ca2 (patch)
tree2195b2b6e43d2c879a01b72c0c7a159447c1c35f /src/sink
parentbacabb8f2b488b3da58dc3ea4159326298a003f6 (diff)
downloadcamu-8c996a5b597bd1cd9c188a0e61eae1ff718c8ca2.tar.gz
camu-8c996a5b597bd1cd9c188a0e61eae1ff718c8ca2.tar.bz2
camu-8c996a5b597bd1cd9c188a0e61eae1ff718c8ca2.zip
Bare minimum Android sink
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/sink')
-rw-r--r--src/sink/common.h87
-rw-r--r--src/sink/desktop.c77
2 files changed, 91 insertions, 73 deletions
diff --git a/src/sink/common.h b/src/sink/common.h
new file mode 100644
index 0000000..ed84c39
--- /dev/null
+++ b/src/sink/common.h
@@ -0,0 +1,87 @@
+#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_debug("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_debug("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_debug("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_debug("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
diff --git a/src/sink/desktop.c b/src/sink/desktop.c
index 2e2863f..efe835e 100644
--- a/src/sink/desktop.c
+++ b/src/sink/desktop.c
@@ -1,7 +1,7 @@
#include <al/log.h>
+#include "../mixer/audio_null.h"
#include "../mixer/audio_miniaudio.h"
-//#include "../mixer/audio_null.h"
#if defined CAMU_RENDERER_TIGER
#include "../render/renderer_tiger.h"
#elif defined CAMU_RENDERER_LIBPLACEBO
@@ -9,85 +9,16 @@
#endif
#include "desktop.h"
+#include "common.h"
static u8 sink_callback(void *userdata, u8 op, u8 type, void *opaque)
{
struct camu_desktop *c = (struct camu_desktop *)userdata;
- 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(&c->mixer, buf);
- al_log_debug("camu_desktop", "Audio buffer added.");
- break;
- }
- case CAMU_SINK_VIDEO: {
- struct camu_video_buffer *buf = (struct camu_video_buffer *)opaque;
- camu_screen_add_buffer(&c->scr, buf);
- al_log_debug("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(&c->mixer, buf);
- al_log_debug("camu_desktop", "Audio buffer removed.");
- break;
- }
- case CAMU_SINK_VIDEO: {
- struct camu_video_buffer *buf = (struct camu_video_buffer *)opaque;
- camu_screen_remove_buffer(&c->scr, buf);
- al_log_debug("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(&c->mixer);
- al_log_info("camu_desktop", "Audio started.");
- break;
- }
- case CAMU_SINK_VIDEO: {
- camu_screen_set_state(&c->scr, CAMU_SCREEN_PLAYING);
- camu_screen_wake(&c->scr);
- al_log_info("camu_desktop", "Video started.");
- break;
- }
- }
- break;
- case CAMU_SINK_STOP:
- switch (type) {
- case CAMU_SINK_AUDIO: {
- camu_mixer_pause(&c->mixer);
- al_log_info("camu_desktop", "Audio stopped.");
- break;
- }
- case CAMU_SINK_VIDEO: {
- camu_screen_set_state(&c->scr, CAMU_SCREEN_PAUSED);
- al_log_info("camu_desktop", "Video stopped.");
- break;
- }
- }
- break;
- case CAMU_SINK_EXIT:
+ if (!camu_default_sink_callback(&c->scr, &c->mixer, op, type, opaque)) {
camu_sink_close(&c->sink);
if (c->exit_callback) {
c->exit_callback(c->userdata, c);
}
- break;
}
return CAMU_SINK_OK;
}
@@ -131,7 +62,7 @@ bool camu_desktop_init(struct camu_desktop *c, const char *name)
{
c->scr.callback = screen_callback;
c->scr.userdata = c;
- if (!camu_screen_init(&c->scr) || !camu_screen_create_window(&c->scr, name)) {
+ if (!camu_screen_init(&c->scr, NULL) || !camu_screen_create_window(&c->scr, name)) {
return false;
}
#if defined CAMU_RENDERER_TIGER