diff options
Diffstat (limited to 'src/liana')
| -rw-r--r-- | src/liana/client.c | 8 | ||||
| -rw-r--r-- | src/liana/handlers/codec_client.c | 2 | ||||
| -rw-r--r-- | src/liana/list.h | 2 | ||||
| -rw-r--r-- | src/liana/vcr.c | 8 |
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); |