diff options
| author | 2025-06-23 17:49:11 -0400 | |
|---|---|---|
| committer | 2025-06-23 17:49:11 -0400 | |
| commit | e0fcbf0910b52a6e66eb733a2850ec58a53cf0e3 (patch) | |
| tree | a24ff2b9313263666d121536064e01436b480571 /src/liana/handlers | |
| parent | e9475ce94ba69bd437d8cf0cf3f78062be928568 (diff) | |
| download | camu-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.c | 2 | ||||
| -rw-r--r-- | src/liana/handlers/cdio_server.c | 2 | ||||
| -rw-r--r-- | src/liana/handlers/codec.h | 6 | ||||
| -rw-r--r-- | src/liana/handlers/codec_client.c | 8 | ||||
| -rw-r--r-- | src/liana/handlers/dvd_server.c | 2 |
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) |