summaryrefslogtreecommitdiff
path: root/src/fruits/cmv
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-01-01 16:04:59 -0500
committerAndrew Opalach <andrew@akon.city> 2025-01-01 16:13:22 -0500
commit24b58a516e6bacfdf59aac422411c2f1fcf4ffb2 (patch)
tree834284316a98f829362619eb2174022687df85ea /src/fruits/cmv
parent20003fd25404ee5fc4cd068fbc4fae1ad6f6ae99 (diff)
downloadcamu-24b58a516e6bacfdf59aac422411c2f1fcf4ffb2.tar.gz
camu-24b58a516e6bacfdf59aac422411c2f1fcf4ffb2.tar.bz2
camu-24b58a516e6bacfdf59aac422411c2f1fcf4ffb2.zip
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 <andrew@akon.city>
Diffstat (limited to 'src/fruits/cmv')
-rw-r--r--src/fruits/cmv/cmv.c45
1 files changed, 33 insertions, 12 deletions
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
@@ -27,6 +27,18 @@ struct cmv {
};
#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)
{
struct cmv *c = (struct cmv *)userdata;
@@ -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);