diff options
Diffstat (limited to 'src/liana')
| -rw-r--r-- | src/liana/client.c | 9 | ||||
| -rw-r--r-- | src/liana/client.h | 14 | ||||
| -rw-r--r-- | src/liana/handler.h | 38 | ||||
| -rw-r--r-- | src/liana/handlers/cdio.h | 7 | ||||
| -rw-r--r-- | src/liana/handlers/cdio_client.c | 2 | ||||
| -rw-r--r-- | src/liana/handlers/cdio_server.c | 2 | ||||
| -rw-r--r-- | src/liana/handlers/codec.h | 7 | ||||
| -rw-r--r-- | src/liana/handlers/codec_client.c | 16 | ||||
| -rw-r--r-- | src/liana/handlers/codec_server.c | 6 | ||||
| -rw-r--r-- | src/liana/handlers/dvd.h | 11 | ||||
| -rw-r--r-- | src/liana/handlers/dvd_server.c | 2 | ||||
| -rw-r--r-- | src/liana/server.c | 22 |
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); } } |