From 24b58a516e6bacfdf59aac422411c2f1fcf4ffb2 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Wed, 1 Jan 2025 16:04:59 -0500 Subject: Optimizations based on video loop performance - Support nn_packet_stream direct mode - Hook up FFmpeg hardware accelerated decoding - Refactor VCR - Reduce locking when returning packets to a packet pool Signed-off-by: Andrew Opalach --- src/fruits/cmv/cmv.c | 45 +++++++++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 12 deletions(-) (limited to 'src/fruits/cmv') diff --git a/src/fruits/cmv/cmv.c b/src/fruits/cmv/cmv.c index 635c25e..02beffb 100644 --- a/src/fruits/cmv/cmv.c +++ b/src/fruits/cmv/cmv.c @@ -26,6 +26,18 @@ struct cmv { #endif }; +#ifndef CAMU_SINK_ONLY +static void server_meta_callback(void *userdata, u8 op, struct lia_list *list, struct lia_list_entry *entry) +{ + struct cmv *c = (struct cmv *)userdata; + (void)c; + (void)list; + if (op == LIANA_META_PLAYING) { + al_log_info("cmv", "now playing: %ls.", entry->name.data); + } +} +#endif + #ifndef CAMU_SINK_ONLY static void exit_callback(void *userdata, struct camu_desktop *desktop) { @@ -42,6 +54,7 @@ static nn_thread_result NNWT_THREADCALL event_loop_thread(void *userdata) return 0; } + static struct cmv c = { 0 }; static void sigint_handler(int signum) @@ -84,8 +97,16 @@ s32 wmain(s32 argc, wchar_t **argv) #else type = NNWT_SOCKET_TCP; addr = CAMU_LOCALHOST; #endif - if (!camu_server_init(&c.server, type, &c.loop)) failure(); - if (!camu_server_listen(&c.server, addr, CAMU_PORT)) failure(); + camu_server_init(&c.server, &c.loop); + c.server.meta_callback = server_meta_callback; + c.server.userdata = &c; +#ifdef CAMU_DIRECT_MODE + camu_server_bind_direct(&c.server); +#else + if (!camu_server_listen(&c.server, type, addr, CAMU_PORT)) { + failure(); + } +#endif } else { type = CAMU_TEST_TYPE; addr = CAMU_TEST_ADDR; @@ -94,6 +115,16 @@ s32 wmain(s32 argc, wchar_t **argv) type = NNWT_SOCKET_TCP; addr = CAMU_TEST_ADDR; #endif + if (!camu_desktop_init(&c.desktop, "cmv")) failure(); +#ifndef CAMU_SINK_ONLY + if (local) { + c.desktop.exit_callback = exit_callback; + c.desktop.userdata = &c; + c.desktop.sink.local_server = &c.server.data.server; + } +#endif + if (!camu_desktop_connect(&c.desktop, type, &c.loop, addr, CAMU_PORT)) failure(); + #ifndef CAMU_SINK_ONLY if (local) { for (s32 i = 1; i < argc; i++) { @@ -131,16 +162,6 @@ s32 wmain(s32 argc, wchar_t **argv) (void)argv; #endif - if (!camu_desktop_init(&c.desktop, "cmv")) failure(); -#ifndef CAMU_SINK_ONLY - if (local) { - c.desktop.exit_callback = exit_callback; - c.desktop.userdata = &c; - c.desktop.sink.local_server = &c.server.data.server; - } -#endif - if (!camu_desktop_connect(&c.desktop, type, &c.loop, addr, CAMU_PORT)) failure(); - struct nn_thread thread0; nn_thread_create(&thread0, event_loop_thread, &c); -- cgit v1.2.3-101-g0448