diff options
| author | 2024-11-12 18:52:33 -0500 | |
|---|---|---|
| committer | 2024-11-12 19:28:50 -0500 | |
| commit | 8c996a5b597bd1cd9c188a0e61eae1ff718c8ca2 (patch) | |
| tree | 2195b2b6e43d2c879a01b72c0c7a159447c1c35f /src/sink | |
| parent | bacabb8f2b488b3da58dc3ea4159326298a003f6 (diff) | |
| download | camu-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.h | 87 | ||||
| -rw-r--r-- | src/sink/desktop.c | 77 |
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 |