diff options
Diffstat (limited to 'src/liana')
| -rw-r--r-- | src/liana/client.c | 3 | ||||
| -rw-r--r-- | src/liana/handlers/codec.h | 6 | ||||
| -rw-r--r-- | src/liana/list.c | 11 | ||||
| -rw-r--r-- | src/liana/list.h | 2 | ||||
| -rw-r--r-- | src/liana/server.c | 9 | ||||
| -rw-r--r-- | src/liana/vcr.c | 3 |
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, |