summaryrefslogtreecommitdiff
path: root/src/liana/handlers
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-06-23 17:49:11 -0400
committerAndrew Opalach <andrew@akon.city> 2025-06-23 17:49:11 -0400
commite0fcbf0910b52a6e66eb733a2850ec58a53cf0e3 (patch)
treea24ff2b9313263666d121536064e01436b480571 /src/liana/handlers
parente9475ce94ba69bd437d8cf0cf3f78062be928568 (diff)
downloadcamu-e0fcbf0910b52a6e66eb733a2850ec58a53cf0e3.tar.gz
camu-e0fcbf0910b52a6e66eb733a2850ec58a53cf0e3.tar.bz2
camu-e0fcbf0910b52a6e66eb733a2850ec58a53cf0e3.zip
Improve FFmpeg hwaccel fallback, VR emulation
- Optimize sink seeking with single video frame. - Small cleanups. Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/liana/handlers')
-rw-r--r--src/liana/handlers/cdio_client.c2
-rw-r--r--src/liana/handlers/cdio_server.c2
-rw-r--r--src/liana/handlers/codec.h6
-rw-r--r--src/liana/handlers/codec_client.c8
-rw-r--r--src/liana/handlers/dvd_server.c2
5 files changed, 14 insertions, 6 deletions
diff --git a/src/liana/handlers/cdio_client.c b/src/liana/handlers/cdio_client.c
index 6d61e59..af93dcc 100644
--- a/src/liana/handlers/cdio_client.c
+++ b/src/liana/handlers/cdio_client.c
@@ -24,7 +24,7 @@ static bool cdio_client_handle_packet(struct lia_client_handler *handler, struct
frame->audio.sample_count = nn_packet_read_s32(packet);
struct nn_buffer buffer;
nn_packet_read_buffer(packet, &buffer);
- frame->data = al_malloc(buffer.size);
+ frame->data = (u8 *)al_malloc(buffer.size);
al_memcpy(frame->data, nn_buffer_get_ptr(&buffer, 0), buffer.size);
cdio->handler.callback(cdio->handler.userdata, LIANA_CLIENT_DATA, cdio->handler.stream, frame);
return true;
diff --git a/src/liana/handlers/cdio_server.c b/src/liana/handlers/cdio_server.c
index e1d574d..0fafae7 100644
--- a/src/liana/handlers/cdio_server.c
+++ b/src/liana/handlers/cdio_server.c
@@ -87,7 +87,7 @@ static void cdio_server_write_packet(struct lia_server_handler *handler, struct
nn_packet_write_f64(packet, cdio->pts);
s32 sample_count = ret / (camu_audio_format_bytes_per_sample(&cdio->fmt) * cdio->fmt.channel_count);
nn_packet_write_s32(packet, sample_count);
- nn_buffer_set_size(&cdio->buffer, ret);
+ cdio->buffer.size = ret;
nn_packet_write_buffer(packet, &cdio->buffer);
cdio->pts += camu_audio_format_samples_to_sec(&cdio->fmt, sample_count);
}
diff --git a/src/liana/handlers/codec.h b/src/liana/handlers/codec.h
index 696cbb8..be43f63 100644
--- a/src/liana/handlers/codec.h
+++ b/src/liana/handlers/codec.h
@@ -5,6 +5,12 @@
#include "../server.h"
#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/handlers/codec_client.c b/src/liana/handlers/codec_client.c
index b85fc43..267187f 100644
--- a/src/liana/handlers/codec_client.c
+++ b/src/liana/handlers/codec_client.c
@@ -39,8 +39,7 @@ static bool codec_client_init(struct lia_client_handler *handler, struct camu_re
#ifdef CAMU_HAVE_FFMPEG
static bool push_av_packet(struct lia_codec_client *codec, AVPacket *pkt)
{
- s32 ret = codec->dec->push_av_packet(codec->dec, pkt);
- return ret == CAMU_OK;
+ return codec->dec->push_av_packet(codec->dec, pkt) == CAMU_OK;
}
static void passthrough_subtitle(struct lia_codec_client *codec, AVPacket *pkt)
@@ -73,7 +72,7 @@ static bool codec_client_handle_packet(struct lia_client_handler *handler, struc
break;
#ifdef CAMU_HAVE_FFMPEG
case CAMU_FFMPEG_COMPAT:
- codec->dec->push_av_packet(codec->dec, NULL);
+ push_av_packet(codec, NULL);
break;
#endif
}
@@ -117,6 +116,9 @@ static bool codec_client_handle_packet(struct lia_client_handler *handler, struc
}
if (codec->dec) {
success = push_av_packet(codec, pkt);
+ if (!success) {
+ success = push_av_packet(codec, pkt);
+ }
} else {
passthrough_subtitle(codec, pkt);
success = true;
diff --git a/src/liana/handlers/dvd_server.c b/src/liana/handlers/dvd_server.c
index f564325..5a9c793 100644
--- a/src/liana/handlers/dvd_server.c
+++ b/src/liana/handlers/dvd_server.c
@@ -4,7 +4,7 @@
static s32 dvd_stream_read(void *userdata, void *buffer, s32 size)
{
struct lia_dvd_server *dvd = (struct lia_dvd_server *)userdata;
- return cch_handle_read(dvd->handle, buffer, size);
+ return cch_handle_read(dvd->handle, (u8 *)buffer, size);
}
static s32 dvd_stream_seek(void *userdata, u64 pos)