From cb342b234defc1205de5d8b10ddf79deae0a551a Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Sun, 11 May 2025 15:10:54 -0400 Subject: Add keybind to disable scaling filter - Fix no FFmpeg build. - Cleanup commented code from cmc ui. Signed-off-by: Andrew Opalach --- src/liana/client.c | 75 +++++++++++++++++++++++++++++---------- src/liana/handlers/codec_server.c | 1 - src/liana/process.c | 2 ++ 3 files changed, 58 insertions(+), 20 deletions(-) (limited to 'src/liana') diff --git a/src/liana/client.c b/src/liana/client.c index d926f9e..164a4d1 100644 --- a/src/liana/client.c +++ b/src/liana/client.c @@ -112,33 +112,68 @@ static u8 type_to_mask[] = { [CAMU_STREAM_SUBTITLE] = CAMU_MASK_SUBTITLE }; +static const char *type_to_str[] = { + [CAMU_STREAM_AUDIO] = "audio", + [CAMU_STREAM_VIDEO] = "video", + [CAMU_STREAM_SUBTITLE] = "subtitle" +}; + static void parse_info_packet(struct lia_client *client, struct nn_packet *packet) { str liana; nn_packet_read_str(packet, &liana); client->duration = nn_packet_read_u64(packet); collect_streams(client, packet); + struct lia_prefs *prefs = &client->prefs; u8 selected = 0; - struct camu_codec_stream *stream; - al_array_foreach_ptr(client->streams, i, stream) { - u8 type_mask = type_to_mask[stream->type]; - if ((selected & type_mask) || !(client->prefs.enabled_mask & type_mask)) { - continue; - } - selected |= type_mask; - client->mask |= 1 << stream->index; - struct lia_vcr_track *track = al_alloc_object(struct lia_vcr_track); - track->stream = stream; - track->client = lia_handler_by_name(&liana)->create_client_handler(); - track->client->callback = client->callback; - track->client->userdata = client->userdata; - if (!track->client->init(track->client, client->renderer, track->stream)) { - track->client->free(&track->client); - al_free(track); - continue; + u32 accept_defaults = 0; + for (; accept_defaults < 2; accept_defaults++) { + struct camu_codec_stream *stream; + al_array_foreach_ptr(client->streams, i, stream) { + u8 type_mask = type_to_mask[stream->type]; + if ((selected & type_mask) || !(prefs->enabled_mask & type_mask)) continue; +#ifdef CAMU_HAVE_FFMPEG + const AVDictionaryEntry *title = NULL; + if (stream->mode == CAMU_FFMPEG_COMPAT) { + AVDictionary *metadata = stream->av.stream->metadata; + title = av_dict_get(metadata, "title", NULL, 0); + const AVDictionaryEntry *lang = av_dict_get(metadata, "language", NULL, 0); + if (lang && !accept_defaults) { + u8 lang_value = CAMU_LANG_UNKNOWN; + if (strcmp(lang->value, "eng") == 0) lang_value = CAMU_LANG_ENGLISH; + else if (strcmp(lang->value, "jpn") == 0) lang_value = CAMU_LANG_JAPANESE; + switch (stream->type) { + case CAMU_STREAM_AUDIO: + if (prefs->audio_lang != lang_value) continue; + break; + case CAMU_STREAM_SUBTITLE: + if (prefs->subtitle_lang != lang_value) continue; + break; + default: + break; + } + } + } + log_info("Selected %s stream (index: %u, title: %s).", type_to_str[stream->type], stream->index, title ? title->value : "(empty)"); +#else + log_info("Selected %s stream (index: %u).", type_to_str[stream->type], stream->index); +#endif + selected |= type_mask; + client->mask |= 1 << stream->index; + struct lia_vcr_track *track = al_alloc_object(struct lia_vcr_track); + track->stream = stream; + track->client = lia_handler_by_name(&liana)->create_client_handler(); + track->client->callback = client->callback; + track->client->userdata = client->userdata; + if (!track->client->init(track->client, client->renderer, track->stream)) { + track->client->free(&track->client); + al_free(track); + // This will NOT attempt to select another stream. + continue; + } + client->callback(client->userdata, LIANA_CLIENT_CONFIGURE, stream, track); + lia_vcr_add_track(&client->vcr, track); } - client->callback(client->userdata, LIANA_CLIENT_CONFIGURE, stream, track); - lia_vcr_add_track(&client->vcr, track); } client->callback(client->userdata, LIANA_CLIENT_CONFIGURE_COMPLETE, NULL, NULL); } @@ -289,12 +324,14 @@ void lia_client_free(struct lia_client *client) { lia_vcr_free(&client->vcr); nn_packet_stream_free(&client->data); +#ifdef CAMU_HAVE_FFMPEG struct camu_codec_stream *stream; al_array_foreach_ptr(client->streams, i, stream) { if (stream->mode == CAMU_FFMPEG_COMPAT) { avformat_free_context(stream->av.format_context); } } +#endif al_array_free(client->streams); al_str_free(&client->addr); } diff --git a/src/liana/handlers/codec_server.c b/src/liana/handlers/codec_server.c index 042c05b..de2c927 100644 --- a/src/liana/handlers/codec_server.c +++ b/src/liana/handlers/codec_server.c @@ -5,7 +5,6 @@ #include "../../codec/ffmpeg/demuxer.h" #include "../../codec/ffmpeg/packet_ext.h" #endif - #include "../../codec/stb_image/demuxer.h" #include "../../codec/spng/demuxer.h" #include "../../codec/wuffs/demuxer.h" diff --git a/src/liana/process.c b/src/liana/process.c index c2e4ce4..0a6d6b6 100644 --- a/src/liana/process.c +++ b/src/liana/process.c @@ -14,6 +14,7 @@ struct raw_samples_data { u32 index; }; +#ifdef CAMU_HAVE_FFMPEG static u32 append_samples(struct raw_samples_data *raw, u8 *data, u32 sample_count) { u32 bytes = sample_count * raw->channels * raw->bps; @@ -111,3 +112,4 @@ out: return data->samples != NULL; } +#endif -- cgit v1.2.3-101-g0448