From 2bee71a7e032c0972418e324bb1d7e6b02330b18 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Wed, 19 Feb 2025 13:40:38 -0500 Subject: Server resource unload, many tweaks and fixes - Initial liana client preferences. - Hook up libplacebo dx11 backend. - Make usage of FFmpeg hardware decoding api make some sense. Signed-off-by: Andrew Opalach --- src/fruits/cmc/cmc.c | 2 + src/fruits/cmsrv/cmsrv.c | 8 +--- src/fruits/cmv/cmv.c | 109 +++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 96 insertions(+), 23 deletions(-) (limited to 'src/fruits') diff --git a/src/fruits/cmc/cmc.c b/src/fruits/cmc/cmc.c index 58bb3b1..1046e41 100644 --- a/src/fruits/cmc/cmc.c +++ b/src/fruits/cmc/cmc.c @@ -18,6 +18,7 @@ enum { CLI_SEARCH }; +/* static struct cmc_search *get_search_by_id(struct cmc *c, s32 id) { struct cmc_search *search; @@ -26,6 +27,7 @@ static struct cmc_search *get_search_by_id(struct cmc *c, s32 id) } return NULL; } +*/ static void parse_list_entry(struct nn_packet *packet, struct cmc_list_entry *entry) { diff --git a/src/fruits/cmsrv/cmsrv.c b/src/fruits/cmsrv/cmsrv.c index be620a7..e830831 100644 --- a/src/fruits/cmsrv/cmsrv.c +++ b/src/fruits/cmsrv/cmsrv.c @@ -54,7 +54,7 @@ static u8 server_line_callback(void *userdata, str *line) } else if (al_str_eq(line, &al_str_c(";REVERSE"))) { lia_list_reverse(list); } else if (al_str_eq(line, &al_str_c(";CLEAR"))) { - lia_list_clear(list); + //lia_list_clear(list); } else { struct nn_packet *packet = nn_packet_create(); #ifdef CAMU_HAVE_PORTAL @@ -155,7 +155,7 @@ s32 main(s32 argc, char *argv[]) signal(SIGINT, sigint_handler); #ifdef CAMU_HAVE_FFMPEG - camu_ff_set_default_log_callback(); + camu_ff_common_init(); #endif nn_event_loop_init(&s.loop); @@ -196,10 +196,6 @@ s32 main(s32 argc, char *argv[]) cmsrv_ui_close(&s.ui); #endif -#ifdef CAMU_HAVE_FFMPEG - camu_ff_free_default_log_callback(); -#endif - nn_common_close(); return EXIT_SUCCESS; diff --git a/src/fruits/cmv/cmv.c b/src/fruits/cmv/cmv.c index ebc2236..f79ffe2 100644 --- a/src/fruits/cmv/cmv.c +++ b/src/fruits/cmv/cmv.c @@ -53,6 +53,66 @@ static void sigint_handler(int signum) goto out; \ } while (0) +// sink-p12-108.52.160.112-aEN-v-sEN.exe +static bool parse_exe_name_params(str *exe_name, str *addr, struct lia_prefs *prefs) +{ + u32 index = al_str_rfind(exe_name, '/'); + if (index == al_str_npos) { + index = al_str_rfind(exe_name, '\\'); + if (index == al_str_npos) goto def; + } + + str sub = al_str_substr(exe_name, index + 1, exe_name->length); + if (al_str_cmp(&sub, &al_str_c("sink-"), 0, 5) != 0) { + goto def; + } + sub = al_str_substr(&sub, 5, sub.length); + + // Skip version. + index = al_str_find(&sub, '-'); + if (index == al_str_npos) goto def; + sub = al_str_substr(&sub, index + 1, sub.length); + + index = al_str_find(&sub, '-'); + if (index == al_str_npos) goto def; + *addr = al_str_substr(&sub, 0, index); + + for (;;) { + sub = al_str_substr(&sub, index + 1, sub.length); + index = al_str_find(&sub, '-'); + if (index == al_str_npos) { + index = al_str_find(&sub, '.'); + if (index == al_str_npos) { + index = sub.length; + } else { + sub.length = index; + } + } + + str value; + al_str_clone(&value, &al_str_substr(&sub, 0, index)); + al_str_to_lower(&value); + if (al_str_at(&value, 0) == 'a') { + prefs->enabled_mask |= CAMU_MASK_AUDIO; + } else if (al_str_at(&value, 0) == 'v') { + prefs->enabled_mask |= CAMU_MASK_VIDEO; + } else if (al_str_at(&value, 0) == 's') { + prefs->enabled_mask |= CAMU_MASK_SUBTITLE; + } + al_str_free(&value); + + if (index == sub.length) break; + } + + return true; +def: + prefs->enabled_mask = CAMU_MASK_AUDIO | CAMU_MASK_VIDEO | CAMU_MASK_SUBTITLE; + prefs->audio_lang = CAMU_LANG_ENGLISH; + prefs->subtitle_lang = CAMU_LANG_ENGLISH; + + return false; +} + #ifdef NAUNET_ON_WINDOWS s32 wmain(s32 argc, wchar_t **argv) #else @@ -68,7 +128,7 @@ s32 main(s32 argc, char *argv[]) signal(SIGINT, sigint_handler); #ifdef CAMU_HAVE_FFMPEG - camu_ff_set_default_log_callback(); + camu_ff_common_init(); #endif str home = al_str_null(); @@ -84,30 +144,49 @@ s32 main(s32 argc, char *argv[]) nn_event_loop_init(&c.loop); - u8 type; - str *addr; #ifndef CAMU_SINK_ONLY bool local = argc > 1; - if (local) { +#endif + + u8 type; + str addr; + + str exe_name; +#ifdef NAUNET_ON_WINDOWS + al_wstr_to_str(&al_wstr_cr(argv[0]), &exe_name); +#else + exe_name = al_str_cr(argv[0]); +#endif + if (!parse_exe_name_params(&exe_name, &addr, &c.desktop.sink.prefs)) { +#ifndef CAMU_SINK_ONLY + if (local) { #ifdef NAUNET_ON_WINDOWS - type = NNWT_SOCKET_TCP; addr = &CAMU_LOCALHOST; + type = NNWT_SOCKET_TCP; addr = CAMU_LOCALHOST; +#else + type = NNWT_SOCKET_UNIX; addr = CMV_UNIX_PATH; +#endif + } else { + type = CAMU_TEST_TYPE; + addr = CAMU_TEST_ADDR; + } #else - type = NNWT_SOCKET_UNIX; addr = &CMV_UNIX_PATH; + type = NNWT_SOCKET_TCP; addr = CAMU_TEST_ADDR; #endif + } else { + type = NNWT_SOCKET_TCP; + } + +#ifndef CAMU_SINK_ONLY + if (local) { camu_server_init(&c.server, &c.loop); #ifdef CAMU_DIRECT_MODE camu_server_bind_direct(&c.server); #else - if (!camu_server_listen(&c.server, type, addr, CAMU_PORT)) { + if (!camu_server_listen(&c.server, type, &addr, CAMU_PORT)) { failure(); } #endif - } else { - type = CAMU_TEST_TYPE; - addr = &CAMU_TEST_ADDR; } -#else - type = NNWT_SOCKET_TCP; addr = &CAMU_TEST_ADDR; #endif if (!camu_desktop_init(&c.desktop, "cmv")) failure(); @@ -118,7 +197,7 @@ s32 main(s32 argc, char *argv[]) c.desktop.sink.local_server = &c.server.data.server; } #endif - if (!camu_desktop_connect(&c.desktop, type, &c.loop, addr, CAMU_PORT)) failure(); + if (!camu_desktop_connect(&c.desktop, type, &c.loop, &addr, CAMU_PORT)) failure(); #ifndef CAMU_SINK_ONLY if (local) { @@ -177,10 +256,6 @@ out: al_str_free(&home); -#ifdef CAMU_HAVE_FFMPEG - camu_ff_free_default_log_callback(); -#endif - stl_global_close(); nn_common_close(); -- cgit v1.2.3-101-g0448