diff options
| author | 2025-01-01 16:04:59 -0500 | |
|---|---|---|
| committer | 2025-01-01 16:13:22 -0500 | |
| commit | 24b58a516e6bacfdf59aac422411c2f1fcf4ffb2 (patch) | |
| tree | 834284316a98f829362619eb2174022687df85ea /src/server | |
| parent | 20003fd25404ee5fc4cd068fbc4fae1ad6f6ae99 (diff) | |
| download | camu-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/server')
| -rw-r--r-- | src/server/common.h | 2 | ||||
| -rw-r--r-- | src/server/server.c | 41 | ||||
| -rw-r--r-- | src/server/server.h | 5 |
3 files changed, 32 insertions, 16 deletions
diff --git a/src/server/common.h b/src/server/common.h index b4c6344..9948c02 100644 --- a/src/server/common.h +++ b/src/server/common.h @@ -6,6 +6,8 @@ #define CAMU_MULTIPLEX_RPC 0x53 #define CAMU_MULTIPLEX_LIANA 0x85 +//#define CAMU_DIRECT_MODE + enum { CAMU_NODE = 0, CAMU_CLIENT, diff --git a/src/server/server.c b/src/server/server.c index 8373296..c2b30a0 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -117,7 +117,8 @@ static bool identify_callback(void *userdata, struct nn_rpc_connection *conn, } } - nn_packet_free(packet); + nn_packet_stream_return_packet(conn->stream, packet); + return true; } @@ -336,7 +337,8 @@ static bool client_command_callback(void *userdata, struct nn_rpc_connection *co } out: - nn_packet_free(packet); + nn_packet_stream_return_packet(conn->stream, packet); + return true; } @@ -562,7 +564,8 @@ static bool list_action_callback(void *userdata, struct nn_rpc_connection *conn, } out: - nn_packet_free(packet); + nn_packet_stream_return_packet(conn->stream, packet); + return false; } @@ -634,23 +637,23 @@ static void connection_closed_callback(void *userdata, struct nn_rpc_connection } } -static bool multiplex_callback(void *userdata, u8 id, struct nn_socket *sock) +static bool multiplex_callback(void *userdata, u8 id, struct nn_packet_stream *stream) { struct camu_server *server = (struct camu_server *)userdata; switch (id) { case CAMU_MULTIPLEX_RPC: - nn_rpc_add_socket(&server->server, sock); - return true; + nn_rpc_add_stream(&server->server, stream); + break; case CAMU_MULTIPLEX_LIANA: - lia_server_add_socket(&server->data.server, sock); - return true; - default: + lia_server_add_stream(&server->data.server, stream); break; + default: + return false; } - return false; + return true; } -bool camu_server_init(struct camu_server *server, u8 type, struct nn_event_loop *loop) +void camu_server_init(struct camu_server *server, struct nn_event_loop *loop) { server->loop = loop; server->addr = al_str_zero(); @@ -678,24 +681,34 @@ bool camu_server_init(struct camu_server *server, u8 type, struct nn_event_loop camu_post_cache_init(&server->cache); camu_portal_init(&server->bridge, &server->cache, server->loop, server); #endif - - return nn_multiplex_socket_init(&server->multi, type, multiplex_callback, server); } -bool camu_server_listen(struct camu_server *server, str *addr, u16 port) +bool camu_server_listen(struct camu_server *server, u8 type, str *addr, u16 port) { + if (!nn_multiplex_socket_init(&server->multi, type, multiplex_callback, server)) { + return false; + } al_str_clone(&server->addr, addr); if (server->multi.sock.type == NNWT_SOCKET_TCP) addr = NULL; // any return nn_multiplex_socket_listen(&server->multi, server->loop, addr, port); } +void camu_server_bind_direct(struct camu_server *server) +{ + nn_multiplex_direct_init(multiplex_callback, server); +} + void camu_server_close(struct camu_server *server) { #ifdef CAMU_HAVE_PORTAL camu_portal_close(&server->bridge); #endif lia_server_close(&server->data.server); +#ifdef CAMU_DIRECT_MODE + nn_multiplex_direct_close(); +#else nn_multiplex_socket_close(&server->multi); +#endif } void camu_server_free(struct camu_server *server) diff --git a/src/server/server.h b/src/server/server.h index ab96e80..1b250dc 100644 --- a/src/server/server.h +++ b/src/server/server.h @@ -49,8 +49,9 @@ struct camu_server { void *userdata; }; -bool camu_server_init(struct camu_server *server, u8 type, struct nn_event_loop *loop); -bool camu_server_listen(struct camu_server *server, str *addr, u16 port); +void camu_server_init(struct camu_server *server, struct nn_event_loop *loop); +bool camu_server_listen(struct camu_server *server, u8 type, str *addr, u16 port); +void camu_server_bind_direct(struct camu_server *server); void camu_server_close(struct camu_server *server); void camu_server_free(struct camu_server *server); |