summaryrefslogtreecommitdiff
path: root/src/liana
diff options
context:
space:
mode:
Diffstat (limited to 'src/liana')
-rw-r--r--src/liana/client.c8
-rw-r--r--src/liana/handlers/codec_client.c2
-rw-r--r--src/liana/list.h2
-rw-r--r--src/liana/vcr.c8
4 files changed, 16 insertions, 4 deletions
diff --git a/src/liana/client.c b/src/liana/client.c
index d83ef48..54b5584 100644
--- a/src/liana/client.c
+++ b/src/liana/client.c
@@ -23,6 +23,11 @@ static void data_packet_callback(void *userdata, struct nn_packet_stream *stream
lia_vcr_push_packet(&client->vcr, packet);
}
+static s32 stream_compare(const void *a, const void *b)
+{
+ return (s32)((struct camu_codec_stream *)a)->type - (s32)((struct camu_codec_stream *)b)->type;
+}
+
static void parse_info_packet(struct lia_client *client, struct nn_packet *packet)
{
str liana;
@@ -90,6 +95,9 @@ static void parse_info_packet(struct lia_client *client, struct nn_packet *packe
al_array_push(client->streams, stream);
}
+ // Video streams have to come before subtitle streams.
+ al_array_sort(client->streams, struct camu_codec_stream, stream_compare);
+
bool have_audio = false;
bool have_video = false;
bool have_subs = false;
diff --git a/src/liana/handlers/codec_client.c b/src/liana/handlers/codec_client.c
index 8a86799..6f7e9f4 100644
--- a/src/liana/handlers/codec_client.c
+++ b/src/liana/handlers/codec_client.c
@@ -127,7 +127,7 @@ static bool codec_client_handle_packet(struct lia_client_handler *handler, struc
AVRational time_base = stream->av.stream->time;
pkt->pts += av_rescale_q(stream->duration, AV_TIME_BASE_Q, time_base);
#else
- av_packet_unref(pkt);
+ av_packet_free_side_data(pkt);
av_packet_free(&pkt);
#endif
break;
diff --git a/src/liana/list.h b/src/liana/list.h
index 86064af..a60790a 100644
--- a/src/liana/list.h
+++ b/src/liana/list.h
@@ -7,7 +7,7 @@
#define LIANA_SEQUENCE_ANY -1
#define LIANA_TIMESTAMP_INVALID ((u64)-1)
-#define LIANA_BASE_DELAY 450000Lu // 450ms
+#define LIANA_BASE_DELAY 500000Lu // 500ms
#define LIANA_BASE_PING 125000Lu // 125ms
#define LIANA_PAUSE_DELAY LIANA_BASE_PING
#define LIANA_DELAY_IGNORE 0Lu
diff --git a/src/liana/vcr.c b/src/liana/vcr.c
index 70fb7b6..e06ff8e 100644
--- a/src/liana/vcr.c
+++ b/src/liana/vcr.c
@@ -3,7 +3,7 @@
#include "vcr.h"
#include "handler.h"
-#define VCR_BUFFER_BUFFERED MB(24)
+#define VCR_BUFFER_BUFFERED MB(8)
enum {
VCR_EXPAND_UNTOUCHED = 0,
@@ -124,6 +124,10 @@ static nn_thread_result NNWT_THREADCALL vcr_track_thread(void *userdata)
continue;
}
+ index++; // Count of packets consumed.
+ nn_packet_stream_return_packets(vcr->data, al_array_offset(track->cache.cache, 0), index);
+ al_array_remove_range(track->cache.cache, 0, index);
+
nn_packet_cache_unlock(&track->cache);
// Wait for uncork.
@@ -147,7 +151,7 @@ static nn_thread_result NNWT_THREADCALL vcr_track_thread(void *userdata)
if (corked) {
// The cache is already unlocked here.
- index++;
+ index = 0;
} else {
#ifndef VCR_BUFFER_WHOLE_FILE
al_assert(index == packets);