diff options
| author | 2025-03-15 20:40:38 -0400 | |
|---|---|---|
| committer | 2025-03-15 20:40:38 -0400 | |
| commit | 846bd3d1b7bcec3653aa9d662f559235c4689e1b (patch) | |
| tree | 56906544460079681f46d23d48d76f1a8242ea75 /src/fruits/ctv | |
| parent | 46d5660a2582323e1c9c33a56694c322bc21b7bc (diff) | |
| download | camu-846bd3d1b7bcec3653aa9d662f559235c4689e1b.tar.gz camu-846bd3d1b7bcec3653aa9d662f559235c4689e1b.tar.bz2 camu-846bd3d1b7bcec3653aa9d662f559235c4689e1b.zip | |
Sink refactor wip
Dangling target won't stay around. I have a couple of ideas about how to massively simplify the handling of ended entries.
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/fruits/ctv')
| -rw-r--r-- | src/fruits/ctv/ctv.c | 127 | ||||
| -rw-r--r-- | src/fruits/ctv/meson.build | 7 |
2 files changed, 34 insertions, 100 deletions
diff --git a/src/fruits/ctv/ctv.c b/src/fruits/ctv/ctv.c index c9be50f..c3af943 100644 --- a/src/fruits/ctv/ctv.c +++ b/src/fruits/ctv/ctv.c @@ -1,131 +1,66 @@ -#include <stl/window.h> #include <stl/platform.h> #include <al/log.h> #include "../../libsink/sink.h" -#include "../../screen/screen.h" -#include "../../render/renderer_libplacebo.h" -#include "../../mixer/mixer.h" -#include "../../mixer/audio_null.h" -#include "../../mixer/audio_miniaudio.h" -#include "../../sink/common.h" -#include "../../server/common.h" +#include "../../sink/desktop.h" +#ifdef CAMU_HAVE_FFMPEG +#include "../../codec/ffmpeg/common.h" +#endif #include "../common.h" struct ctv { struct nn_event_loop loop; - struct camu_screen scr; - struct camu_renderer *renderer; - struct camu_mixer mixer; - struct camu_sink sink; + struct camu_desktop desktop; struct nn_thread thread; - bool created; }; -static u8 sink_callback(void *userdata, u8 op, u8 type, void *opaque) -{ - struct ctv *c = (struct ctv *)userdata; - if (!camu_default_sink_callback(&c->scr, &c->mixer, op, type, opaque)) { - camu_sink_close(&c->sink); - } - return CAMU_SINK_OK; -} - -static void screen_callback(void *userdata, u8 op, void *opaque) -{ - struct ctv *c = (struct ctv *)userdata; - (void)c; - (void)op; - (void)opaque; -} - static nn_thread_result NNWT_THREADCALL event_loop_thread(void *userdata) { struct ctv *c = (struct ctv *)userdata; - nn_event_loop_run(&c->loop); - return 0; -} - -static void to_be_removed_inline_create_client(struct ctv *c, GLFMDisplay *display) -{ - c->scr.callback = screen_callback; - c->scr.userdata = c; - camu_screen_init(&c->scr, display); - camu_screen_create_window(&c->scr, "ctv"); - c->renderer = camu_renderer_lp_create(); - camu_screen_create_renderer(&c->scr, c->renderer); - - camu_mixer_init(&c->mixer, camu_audio_miniaudio_create()); - c->mixer.audio->configure_stream(c->mixer.audio, NULL); - camu_mixer_pick_format(&c->mixer, &c->mixer.fmt); nn_event_loop_init(&c->loop); - camu_sink_init(&c->sink, &c->loop, &c->mixer, c->renderer); - al_str_from(&c->sink.default_list, "default"); - c->sink.callback = sink_callback; - c->sink.userdata = c; - camu_sink_connect(&c->sink, NNWT_SOCKET_TCP, &CAMU_TEST_IP, CAMU_PORT, &al_str_c("ctv")); - - nn_thread_create(&c->thread, event_loop_thread, c); -} - -static void onSurfaceCreated(GLFMDisplay *display, s32 width, s32 height) -{ - struct ctv *c = (struct ctv *)glfmGetUserData(display); - (void)width; - (void)height; - - GLFMRenderingAPI api = glfmGetRenderingAPI(display); - al_log_info("window_glfm", "Created GLES context of version %s.", - api == GLFMRenderingAPIOpenGLES32 ? "3.2" : - api == GLFMRenderingAPIOpenGLES31 ? "3.1" : - api == GLFMRenderingAPIOpenGLES3 ? "3.0" : "2.0"); + struct lia_prefs *prefs = &c->desktop.sink.prefs; + prefs->enabled_mask = CAMU_MASK_AUDIO | CAMU_MASK_VIDEO | CAMU_MASK_SUBTITLE; + prefs->audio_lang = CAMU_LANG_ENGLISH; + prefs->subtitle_lang = CAMU_LANG_ENGLISH; - if (!c->created) { - to_be_removed_inline_create_client(c, display); - c->created = true; + if (!camu_desktop_connect(&c->desktop, NNWT_SOCKET_TCP, &c->loop, &CAMU_TEST_ADDR, CAMU_PORT)) { + return 0; } -} -static void onSurfaceDestroyed(GLFMDisplay *display) -{ - (void)display; -} + nn_event_loop_run(&c->loop); -static void onDraw(GLFMDisplay *display) -{ - struct ctv *c = (struct ctv *)glfmGetUserData(display); - bool force; - if (camu_screen_tick(&c->scr, &force)) { - c->renderer->render(c->renderer, &c->scr, force); - } + return 0; } static s32 log_callback(void *userdata, u8 level, char *message) { (void)userdata; (void)level; - __android_log_print(ANDROID_LOG_DEBUG, "CTV", "%.*s", AL_LOG_MESSAGE_SIZE, message); + __android_log_print(ANDROID_LOG_DEBUG, "CTV", "%*.*s", 0, AL_LOG_MESSAGE_SIZE, message); return al_strnlen(message, AL_LOG_MESSAGE_SIZE); } -void glfmMain(GLFMDisplay *display) +static struct ctv c = { 0 }; + +s32 window_system_main(s32 argc, str *argv) { - struct ctv *c = al_alloc_object(struct ctv); - c->created = false; + (void)argc; + (void)argv; + + al_set_print(log_callback, NULL); + +#ifdef CAMU_HAVE_FFMPEG + camu_ff_common_init(); +#endif + + if (!camu_desktop_init(&c.desktop, "ctv")) { + return 0; + } - al_set_print(log_callback, c); + nn_thread_create(&c.thread, event_loop_thread, &c); - glfmSetUserData(display, c); - glfmSetDisplayConfig(display, - GLFMRenderingAPIOpenGLES2, - GLFMColorFormatRGBA8888, - GLFMDepthFormatNone, - GLFMStencilFormatNone, - GLFMMultisampleNone); - glfmSetSurfaceCreatedFunc(display, onSurfaceCreated); - glfmSetSurfaceDestroyedFunc(display, onSurfaceDestroyed); - glfmSetRenderFunc(display, onDraw); + return EXIT_SUCCESS; } diff --git a/src/fruits/ctv/meson.build b/src/fruits/ctv/meson.build index 1b653e7..bf6f9e5 100644 --- a/src/fruits/ctv/meson.build +++ b/src/fruits/ctv/meson.build @@ -1,5 +1,4 @@ -ctv_src = ['ctv.c', '../../sink/common.c'] -ctv_deps = [common_deps, libsink] -ctv_args = ['-DCAMU_MIXER_THREADED', '-DCAMU_SCREEN_THREADED'] +ctv_src = ['ctv.c'] +ctv_deps = [common_deps, desktop] # https://github.com/google/ExoPlayer/issues/9933#issuecomment-1029775358 -shared_library('ctv', ctv_src, dependencies: ctv_deps, c_args: ctv_args, link_args: ['-Wl,-Bsymbolic', '-static-libstdc++']) +shared_library('ctv', ctv_src, dependencies: ctv_deps, link_args: ['-Wl,-Bsymbolic', '-static-libstdc++']) |