diff options
| author | 2025-01-03 16:53:06 -0500 | |
|---|---|---|
| committer | 2025-01-03 16:53:06 -0500 | |
| commit | d86e3f6dade53d5ca3b23a5c72c550b8f0583f91 (patch) | |
| tree | 2452d09fda386a497a82eb120d8f36ac59dc912f /src/sink | |
| parent | 298debac881c1e7ca5e3a28834f32ff3e74e45f6 (diff) | |
| download | camu-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.c | 81 | ||||
| -rw-r--r-- | src/sink/common.h | 84 | ||||
| -rw-r--r-- | src/sink/desktop.c | 2 | ||||
| -rw-r--r-- | src/sink/meson.build | 2 |
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, |