summaryrefslogtreecommitdiff
path: root/src/liana
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-02-04 21:05:18 -0500
committerAndrew Opalach <andrew@akon.city> 2025-02-04 21:05:18 -0500
commit0060d4f3df9b264e4a4adb77da67336709b41b6b (patch)
treea59d4e2f218cec89af56bdb2036d0a2ecd488349 /src/liana
parentcdd1f574312722ab305cba6771d9bcc5da0b0c38 (diff)
downloadcamu-0060d4f3df9b264e4a4adb77da67336709b41b6b.tar.gz
camu-0060d4f3df9b264e4a4adb77da67336709b41b6b.tar.bz2
camu-0060d4f3df9b264e4a4adb77da67336709b41b6b.zip
Audio buffer and sink fixes, unsigned width/height
- Screen feature testing - Older FFmpeg support - Build configuration fixes Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/liana')
-rw-r--r--src/liana/client.c9
-rw-r--r--src/liana/client.h14
-rw-r--r--src/liana/handler.h38
-rw-r--r--src/liana/handlers/cdio.h7
-rw-r--r--src/liana/handlers/cdio_client.c2
-rw-r--r--src/liana/handlers/cdio_server.c2
-rw-r--r--src/liana/handlers/codec.h7
-rw-r--r--src/liana/handlers/codec_client.c16
-rw-r--r--src/liana/handlers/codec_server.c6
-rw-r--r--src/liana/handlers/dvd.h11
-rw-r--r--src/liana/handlers/dvd_server.c2
-rw-r--r--src/liana/server.c22
12 files changed, 72 insertions, 64 deletions
diff --git a/src/liana/client.c b/src/liana/client.c
index 1da27c1..44cba88 100644
--- a/src/liana/client.c
+++ b/src/liana/client.c
@@ -56,8 +56,8 @@ static void parse_info_packet(struct lia_client *client, struct nn_packet *packe
#endif
} else if (type == CAMU_STREAM_VIDEO) {
struct camu_video_format *fmt = &track->stream.video.fmt;
- fmt->width = nn_packet_read_s32(packet);
- fmt->height = nn_packet_read_s32(packet);
+ fmt->width = nn_packet_read_u32(packet);
+ fmt->height = nn_packet_read_u32(packet);
fmt->format = nn_packet_read_s32(packet);
}
break;
@@ -139,6 +139,7 @@ skip:
client->callback(client->userdata, LIANA_CLIENT_CONFIGURE, track->client->stream, track);
lia_vcr_add_track(&client->vcr, track);
}
+ client->callback(client->userdata, LIANA_CLIENT_CONFIGURE_COMPLETE, NULL, NULL);
}
static void info_packet_callback(void *userdata, struct nn_packet_stream *stream, struct nn_packet *packet)
@@ -154,7 +155,7 @@ static void info_packet_callback(void *userdata, struct nn_packet_stream *stream
}
stream->packet_callback = data_packet_callback;
struct nn_packet *rpacket = nn_packet_create();
- nn_packet_write_s32(rpacket, client->mask);
+ nn_packet_write_u32(rpacket, client->mask);
nn_packet_stream_send_packet(stream, rpacket);
lia_vcr_start(&client->vcr);
}
@@ -191,7 +192,7 @@ static bool connection_callback(void *userdata, struct nn_packet_stream *stream)
struct nn_packet *packet = nn_packet_create();
nn_packet_write_u32(packet, client->node_id);
nn_packet_write_u32(packet, client->connection_id);
- nn_packet_write_s32(packet, client->mask);
+ nn_packet_write_u32(packet, client->mask);
nn_packet_write_u64(packet, client->pos);
if (client->mask == 0) {
stream->packet_callback = info_packet_callback;
diff --git a/src/liana/client.h b/src/liana/client.h
index 9fe676b..5d5fc90 100644
--- a/src/liana/client.h
+++ b/src/liana/client.h
@@ -6,10 +6,22 @@
#include "vcr.h"
+enum {
+ LIANA_CLIENT_CONFIGURE = 0,
+ LIANA_CLIENT_CONFIGURE_COMPLETE,
+ LIANA_CLIENT_DATA,
+ LIANA_CLIENT_SUBTITLE,
+ LIANA_CLIENT_REMOVE_BUFFERS,
+ LIANA_CLIENT_RESUME_AT,
+ LIANA_CLIENT_RECONNECTED,
+ LIANA_CLIENT_EOF,
+ LIANA_CLIENT_CLOSED
+};
+
struct lia_client {
struct nn_event_loop *loop;
u32 node_id;
- s32 mask;
+ u32 mask;
u64 pos;
u64 at;
u8 reconnect;
diff --git a/src/liana/handler.h b/src/liana/handler.h
index 9f93e5c..1fa77a0 100644
--- a/src/liana/handler.h
+++ b/src/liana/handler.h
@@ -5,10 +5,16 @@
#include "../codec/codec.h"
#include "../cache/handle.h"
+enum {
+ LIANA_PACKET_DATA = 0,
+ LIANA_PACKET_EOF,
+ LIANA_PACKET_ERROR
+};
+
struct lia_server_handler {
bool (*init)(struct lia_server_handler *, struct cch_handle *);
void (*write_info)(struct lia_server_handler *, struct nn_packet *);
- void (*subscribe)(struct lia_server_handler *, s32);
+ void (*subscribe)(struct lia_server_handler *, u32);
u64 (*get_duration)(struct lia_server_handler *);
bool (*seek)(struct lia_server_handler *, u64);
void (*step)(struct lia_server_handler *);
@@ -17,36 +23,6 @@ struct lia_server_handler {
s32 status;
};
-enum {
- LIANA_PACKET_DATA = 0,
- LIANA_PACKET_EOF,
- LIANA_PACKET_ERROR
-};
-
-enum {
- LIANA_CLIENT_CONFIGURE = 0,
- LIANA_CLIENT_DATA,
- LIANA_CLIENT_SUBTITLE,
- LIANA_CLIENT_REMOVE_BUFFERS,
- LIANA_CLIENT_RESUME_AT,
- LIANA_CLIENT_RECONNECTED,
- LIANA_CLIENT_EOF,
- LIANA_CLIENT_CLOSED
-};
-
-struct lia_resume_req {
- u64 start;
- u64 offset;
-};
-
-struct lia_seek_req {
- u64 base;
- u64 ts;
- u64 delay;
- bool paused;
- u64 paused_at;
-};
-
struct lia_client_handler {
bool (*init)(struct lia_client_handler *, struct camu_renderer *, struct camu_codec_stream *);
bool (*handle_packet)(struct lia_client_handler *, struct nn_packet *);
diff --git a/src/liana/handlers/cdio.h b/src/liana/handlers/cdio.h
index 4c40986..3b0e991 100644
--- a/src/liana/handlers/cdio.h
+++ b/src/liana/handlers/cdio.h
@@ -2,6 +2,7 @@
#include "../handler.h"
+#ifdef LIANA_SERVER
struct lia_cdio_server {
struct lia_server_handler handler;
struct cch_handle *handle;
@@ -10,9 +11,13 @@ struct lia_cdio_server {
f64 pts;
};
+struct lia_server_handler *lia_cdio_server_create();
+#endif
+
+#ifdef LIANA_CLIENT
struct lia_cdio_client {
struct lia_client_handler handler;
};
-struct lia_server_handler *lia_cdio_server_create();
struct lia_client_handler *lia_cdio_client_create(void);
+#endif
diff --git a/src/liana/handlers/cdio_client.c b/src/liana/handlers/cdio_client.c
index 665858f..6d61e59 100644
--- a/src/liana/handlers/cdio_client.c
+++ b/src/liana/handlers/cdio_client.c
@@ -1,3 +1,5 @@
+#include "../client.h"
+
#include "cdio.h"
static bool cdio_client_init(struct lia_client_handler *handler, struct camu_renderer *renderer,
diff --git a/src/liana/handlers/cdio_server.c b/src/liana/handlers/cdio_server.c
index 01a9265..6ea1422 100644
--- a/src/liana/handlers/cdio_server.c
+++ b/src/liana/handlers/cdio_server.c
@@ -39,7 +39,7 @@ static void cdio_server_write_info(struct lia_server_handler *handler, struct nn
nn_packet_write_s32(packet, cdio->fmt.channel_count);
}
-static void cdio_server_subscribe(struct lia_server_handler *handler, s32 mask)
+static void cdio_server_subscribe(struct lia_server_handler *handler, u32 mask)
{
(void)handler;
(void)mask;
diff --git a/src/liana/handlers/codec.h b/src/liana/handlers/codec.h
index 29d513b..696cbb8 100644
--- a/src/liana/handlers/codec.h
+++ b/src/liana/handlers/codec.h
@@ -5,6 +5,7 @@
#include "../server.h"
#include "../handler.h"
+#ifdef LIANA_SERVER
struct lia_codec_server {
struct lia_server_handler handler;
struct camu_demuxer *demux;
@@ -14,10 +15,14 @@ struct lia_codec_server {
struct camu_codec_packet packet;
};
+struct lia_server_handler *lia_codec_server_create(void);
+#endif
+
+#ifdef LIANA_CLIENT
struct lia_codec_client {
struct lia_client_handler handler;
struct camu_decoder *dec;
};
-struct lia_server_handler *lia_codec_server_create(void);
struct lia_client_handler *lia_codec_client_create(void);
+#endif
diff --git a/src/liana/handlers/codec_client.c b/src/liana/handlers/codec_client.c
index 0aef69f..36e475e 100644
--- a/src/liana/handlers/codec_client.c
+++ b/src/liana/handlers/codec_client.c
@@ -1,5 +1,4 @@
#include "../../codec/codec.h"
-#include "../../server/common.h"
#ifdef CAMU_HAVE_FFMPEG
#include "../../codec/ffmpeg/decoder.h"
@@ -11,6 +10,7 @@
#include "../../codec/wuffs/decoder.h"
#include "../vcr.h"
+#include "../client.h"
#include "codec.h"
@@ -87,13 +87,13 @@ static bool codec_client_handle_packet(struct lia_client_handler *handler, struc
switch (mode) {
case CAMU_NORMAL: {
if (codec->dec) {
-#ifdef CAMU_DIRECT_MODE
- success = push_packet(codec, (struct nn_buffer *)packet->opaque);
-#else
- struct nn_buffer buffer;
- nn_packet_read_buffer(packet, &buffer);
- success = push_packet(codec, &buffer);
-#endif
+ if (packet->opaque) {
+ success = push_packet(codec, (struct nn_buffer *)packet->opaque);
+ } else {
+ struct nn_buffer buffer;
+ nn_packet_read_buffer(packet, &buffer);
+ success = push_packet(codec, &buffer);
+ }
} else {
success = true;
}
diff --git a/src/liana/handlers/codec_server.c b/src/liana/handlers/codec_server.c
index dcbfe17..7868a42 100644
--- a/src/liana/handlers/codec_server.c
+++ b/src/liana/handlers/codec_server.c
@@ -63,8 +63,8 @@ static void codec_server_write_info(struct lia_server_handler *handler, struct n
switch (stream->mode) {
case CAMU_NORMAL: {
struct camu_video_format *fmt = &stream->video.fmt;
- nn_packet_write_s32(packet, fmt->width);
- nn_packet_write_s32(packet, fmt->height);
+ nn_packet_write_u32(packet, fmt->width);
+ nn_packet_write_u32(packet, fmt->height);
nn_packet_write_s32(packet, fmt->format);
break;
}
@@ -78,7 +78,7 @@ static void codec_server_write_info(struct lia_server_handler *handler, struct n
}
}
-static void codec_server_subscribe(struct lia_server_handler *handler, s32 mask)
+static void codec_server_subscribe(struct lia_server_handler *handler, u32 mask)
{
struct lia_codec_server *codec = (struct lia_codec_server *)handler;
codec->demux->subscribed = mask;
diff --git a/src/liana/handlers/dvd.h b/src/liana/handlers/dvd.h
index 4b71ec8..dd5ac0a 100644
--- a/src/liana/handlers/dvd.h
+++ b/src/liana/handlers/dvd.h
@@ -1,9 +1,10 @@
#pragma once
-#include <dvdnav/dvdnav.h>
-
#include "../handler.h"
+#ifdef LIANA_SERVER
+#include <dvdnav/dvdnav.h>
+
struct lia_dvd_server {
struct lia_server_handler handler;
struct cch_handle *handle;
@@ -11,9 +12,13 @@ struct lia_dvd_server {
struct nn_buffer buffer;
};
+struct lia_server_handler *lia_dvd_server_create(void);
+#endif
+
+#ifdef LIANA_CLIENT
struct lia_dvd_client {
struct lia_client_handler handler;
};
-struct lia_server_handler *lia_dvd_server_create(void);
struct lia_client_handler *lia_dvd_client_create(void);
+#endif
diff --git a/src/liana/handlers/dvd_server.c b/src/liana/handlers/dvd_server.c
index afb2c07..f564325 100644
--- a/src/liana/handlers/dvd_server.c
+++ b/src/liana/handlers/dvd_server.c
@@ -53,7 +53,7 @@ static void dvd_server_write_info(struct lia_server_handler *handler, struct nn_
(void)packet;
}
-static void dvd_server_subscribe(struct lia_server_handler *handler, s32 mask)
+static void dvd_server_subscribe(struct lia_server_handler *handler, u32 mask)
{
(void)handler;
(void)mask;
diff --git a/src/liana/server.c b/src/liana/server.c
index 6459a0e..24c4bfc 100644
--- a/src/liana/server.c
+++ b/src/liana/server.c
@@ -152,11 +152,9 @@ static void data_connection_closed_callback(void *userdata, struct nn_packet_str
}
}
-static void subscribe_packet_callback(void *userdata, struct nn_packet_stream *stream, struct nn_packet *packet)
+static void start_connection_handler(struct lia_node_connection *conn, u32 mask)
{
- struct lia_node_connection *conn = (struct lia_node_connection *)userdata;
- s32 mask = nn_packet_read_s32(packet);
- nn_packet_stream_return_packet(stream, packet);
+ struct nn_packet_stream *stream = conn->stream;
conn->handler->subscribe(conn->handler, mask);
stream->packet_callback = discard_packet_callback;
stream->packet_sent_callback = data_packet_sent_callback;
@@ -165,6 +163,14 @@ static void subscribe_packet_callback(void *userdata, struct nn_packet_stream *s
nn_thread_create(&conn->thread, handler_thread, conn);
}
+static void subscribe_packet_callback(void *userdata, struct nn_packet_stream *stream, struct nn_packet *packet)
+{
+ struct lia_node_connection *conn = (struct lia_node_connection *)userdata;
+ u32 mask = nn_packet_read_u32(packet);
+ nn_packet_stream_return_packet(stream, packet);
+ start_connection_handler(conn, mask);
+}
+
static void subscribe_packet_sent_callback(void *userdata, struct nn_packet *packet)
{
(void)userdata;
@@ -183,7 +189,7 @@ static void handle_connection(struct lia_node_connection *conn, struct nn_packet
{
struct nn_packet_stream *stream = conn->stream;
- s32 mask = nn_packet_read_s32(packet);
+ u32 mask = nn_packet_read_u32(packet);
u64 seek_pos = nn_packet_read_u64(packet);
al_assert(!conn->ref);
@@ -204,12 +210,8 @@ static void handle_connection(struct lia_node_connection *conn, struct nn_packet
stream->connection_closed_callback = subscribe_connection_closed_callback;
nn_packet_stream_send_packet(stream, rpacket);
} else {
+ start_connection_handler(conn, mask);
conn->handler->subscribe(conn->handler, mask);
- stream->packet_callback = discard_packet_callback;
- stream->packet_sent_callback = data_packet_sent_callback;
- stream->packets_sent_callback = data_packets_sent_callback;
- stream->connection_closed_callback = data_connection_closed_callback;
- nn_thread_create(&conn->thread, handler_thread, conn);
}
}