summaryrefslogtreecommitdiff
path: root/src/fruits
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
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')
-rw-r--r--src/fruits/cmsrv/cmsrv.c6
-rw-r--r--src/fruits/cmsrv/ui.c4
-rw-r--r--src/fruits/cmv/cmv.c45
3 files changed, 40 insertions, 15 deletions
diff --git a/src/fruits/cmsrv/cmsrv.c b/src/fruits/cmsrv/cmsrv.c
index 00f5373..80d7c03 100644
--- a/src/fruits/cmsrv/cmsrv.c
+++ b/src/fruits/cmsrv/cmsrv.c
@@ -152,8 +152,10 @@ s32 wmain(s32 argc, wchar_t **argv)
nn_signal_init(&s.quit_signal, &s.loop, quit_signal_callback, &s);
nn_signal_start(&s.quit_signal);
- if (!camu_server_init(&s.server, CAMU_TEST_TYPE, &s.loop)) return EXIT_FAILURE;
- camu_server_listen(&s.server, CAMU_TEST_ADDR, CAMU_PORT);
+ camu_server_init(&s.server, &s.loop);
+ if (!camu_server_listen(&s.server, CAMU_TEST_TYPE, CAMU_TEST_ADDR, CAMU_PORT)) {
+ return EXIT_FAILURE;
+ }
#ifdef CAMU_LOCAL_SOCKET
s.local.sock.type = NNWT_SOCKET_UNIX;
diff --git a/src/fruits/cmsrv/ui.c b/src/fruits/cmsrv/ui.c
index 5d35380..ba1f8b3 100644
--- a/src/fruits/cmsrv/ui.c
+++ b/src/fruits/cmsrv/ui.c
@@ -135,7 +135,9 @@ static void render_lists(struct cmsrv_ui *ui)
struct lia_list *list;
al_array_foreach(ui->server->lists, i, list) {
if (current_line++ >= max_height) break;
- ncplane_putnstr_yx(n, i, 0, MIN(max_width, list->name.len), &al_str_at(&list->name, 0));
+ for (u32 j = 0; j < MIN(max_width, list->name.len); j++) {
+ ncplane_putchar_yx(n, i, j, al_str_at(&list->name, j));
+ }
s32 index = MAX(list->current - (entries_per_list / 2), 0);
s32 size = (s32)list->entries.size;
s32 end = MIN(index + entries_per_list, size);
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);