summaryrefslogtreecommitdiff
path: root/src/liana
diff options
context:
space:
mode:
Diffstat (limited to 'src/liana')
-rw-r--r--src/liana/client.c3
-rw-r--r--src/liana/handlers/codec.h6
-rw-r--r--src/liana/list.c11
-rw-r--r--src/liana/list.h2
-rw-r--r--src/liana/server.c9
-rw-r--r--src/liana/vcr.c3
6 files changed, 16 insertions, 18 deletions
diff --git a/src/liana/client.c b/src/liana/client.c
index d853acf..581bdba 100644
--- a/src/liana/client.c
+++ b/src/liana/client.c
@@ -43,8 +43,7 @@ static void collect_streams(struct lia_client *client, struct nn_packet *packet)
struct camu_codec_stream stream = { 0 };
str codec;
nn_packet_read_str(packet, &codec);
- // @TODO: NULL unhandled.
- stream.codec_info = camu_codec_info_by_name(&codec);
+ stream.codec_info = camu_codec_info_by_name(&codec); // @TODO: NULL unhandled.
u8 mode = nn_packet_read_u8(packet);
u8 type = nn_packet_read_u8(packet);
u64 duration = nn_packet_read_u64(packet);
diff --git a/src/liana/handlers/codec.h b/src/liana/handlers/codec.h
index f179190..097dd23 100644
--- a/src/liana/handlers/codec.h
+++ b/src/liana/handlers/codec.h
@@ -6,12 +6,6 @@
#include "handler.h"
-// FFmpeg Independence:
-// - [ ] CAMU_CODEC_* only for explicitly non-ffmpeg codecs.
-// - [ ] Map between av_guess_format() and CAMU_CODEC_
-// - [ ] Runtime selection.
-// - [ ] Audio support.
-
#ifdef LIANA_SERVER
struct lia_codec_server {
struct lia_server_handler handler;
diff --git a/src/liana/list.c b/src/liana/list.c
index 2193360..9ac7e87 100644
--- a/src/liana/list.c
+++ b/src/liana/list.c
@@ -121,11 +121,10 @@ static inline void entry_unref(struct lia_list *list, struct lia_list_entry *ent
static void unref_all_entries(struct lia_list *list)
{
+ if (list->current < 0) return;
struct lia_list_entry *entry;
al_array_foreach(list->entries, i, entry) {
- if (list->current >= 0 && i != (u32)list->current) {
- entry_unref(list, entry);
- }
+ if (i != (u32)list->current) entry_unref(list, entry);
}
}
@@ -356,7 +355,7 @@ static bool handle_add(struct lia_list *list, struct lia_list_entry *entry)
// Processing this through a SKIPTO is extremely important for consistency.
// We expect current is ended but it still must be held before moving to this entry.
// -2 cause we just added this entry above.
- al_assert((u32)list->current == (list->entries.count - 2));
+ al_assert((u32)list->current == list->entries.count - 2);
struct lia_list_cmd *cmd = list->cmd;
cmd->op = SKIPTO;
cmd->sequence = list->current;
@@ -597,12 +596,12 @@ static bool handle_shuffle(struct lia_list *list)
exchange a[i] and a[j]
*/
if (size == 2) {
- if (al_rand() % 2) {
+ if (al_random_int(0, 1) == 0) {
SWAP(al_array_at(list->entries, 0), al_array_at(list->entries, 1));
}
} else {
for (u32 i = 0; i < size - 2; i++) {
- u32 j = i + (al_rand() % (size - i));
+ u32 j = al_random_int(i, size - 1);
SWAP(al_array_at(list->entries, i), al_array_at(list->entries, j));
}
}
diff --git a/src/liana/list.h b/src/liana/list.h
index bfcd240..0f09465 100644
--- a/src/liana/list.h
+++ b/src/liana/list.h
@@ -124,7 +124,7 @@ static inline const char *lia_pause_op_name(u8 pause)
case LIANA_PAUSE_RESUME: return "PAUSE_RESUME";
case LIANA_PAUSE_PAUSE: return "PAUSE_PAUSE";
case LIANA_PAUSE_BOTH: return "PAUSE_BOTH";
- default: al_assert_and_return(NULL);
+ default: al_assert_and_return("");
}
}
diff --git a/src/liana/server.c b/src/liana/server.c
index db61e20..04ef54b 100644
--- a/src/liana/server.c
+++ b/src/liana/server.c
@@ -46,7 +46,9 @@ static void packet_pool_callback(void *userdata, struct nn_packet *packet)
{
struct lia_node_connection *conn = (struct lia_node_connection *)userdata;
if (!nn_packet_stream_send_packet(conn->stream, packet)) {
+ nn_packet_pool_lock(&conn->pool);
nn_packet_pool_return(&conn->pool, packet);
+ nn_packet_pool_unlock(&conn->pool);
}
}
@@ -92,9 +94,8 @@ static nn_thread_result NNWT_THREADCALL handler_thread(void *userdata)
static void discard_packet_callback(void *userdata, struct nn_packet_stream *stream, struct nn_packet *packet)
{
(void)userdata;
+ // @TODO: This should invalidate the connection instead of asserting.
nn_packet_stream_return_packet(stream, packet);
- // We should never be here. Although, we also shouldn't assert because
- // any erroneous connection can bring us here.
al_assert(false);
}
@@ -208,7 +209,9 @@ static void handle_connection(struct lia_node_connection *conn, struct nn_packet
al_assert(!conn->ref);
conn->ref = true;
- // Besides being wasteful, seeking to 0 on a new stream can skip data.
+ // If mask is already set, this is a reconnect. So, always seek to flush
+ // the handler. Otherwise and if seek_pos is 0, don't seek as seeking to 0
+ // on a new stream can skip data.
if (mask != 0 || seek_pos > 0) {
conn->seek_pos = seek_pos;
}
diff --git a/src/liana/vcr.c b/src/liana/vcr.c
index d8a1fc9..e95922b 100644
--- a/src/liana/vcr.c
+++ b/src/liana/vcr.c
@@ -6,6 +6,9 @@
#include "vcr.h"
#define VCR_BUFFER_BUFFERED MB(4)
+#define VCR_BUFFER_GROW_FACTOR 8
+#define VCR_BUFFER_LOW_OFFSET MB(1)
+AL_STATIC_ASSERT(buf_gt_low_offset, VCR_BUFFER_BUFFERED * VCR_BUFFER_GROW_FACTOR, >, VCR_BUFFER_LOW_OFFSET);
enum {
VCR_EXPAND_UNTOUCHED = 0,