summaryrefslogtreecommitdiff
path: root/src/codec
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-02-19 17:38:59 -0500
committerAndrew Opalach <andrew@akon.city> 2025-02-19 17:45:26 -0500
commit152bf64d7da624dd6401e6529300bfc4b817dbbe (patch)
tree1b1b138eed8a9ac4ea560b514d08f2da028b441d /src/codec
parent2bee71a7e032c0972418e324bb1d7e6b02330b18 (diff)
downloadcamu-152bf64d7da624dd6401e6529300bfc4b817dbbe.tar.gz
camu-152bf64d7da624dd6401e6529300bfc4b817dbbe.tar.bz2
camu-152bf64d7da624dd6401e6529300bfc4b817dbbe.zip
Small fixes and update deps
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/codec')
-rw-r--r--src/codec/ffmpeg/decoder.c6
-rw-r--r--src/codec/ffmpeg/meson.build2
-rw-r--r--src/codec/ffmpeg/packet_ext.c24
3 files changed, 24 insertions, 8 deletions
diff --git a/src/codec/ffmpeg/decoder.c b/src/codec/ffmpeg/decoder.c
index 02f077d..affe9fa 100644
--- a/src/codec/ffmpeg/decoder.c
+++ b/src/codec/ffmpeg/decoder.c
@@ -182,9 +182,9 @@ static bool ff_decoder_init(struct camu_decoder *dec, struct camu_renderer *rend
goto err;
}
+#ifdef CAMU_FF_DECODER_HWACCEL
bool attempt_hwdec = stream->duration > 0 && codecpar->codec_type == AVMEDIA_TYPE_VIDEO;
-#ifdef CAMU_FF_DECODER_HWACCEL
if (attempt_hwdec) {
collect_supported_hwaccels(av);
@@ -243,7 +243,11 @@ static bool ff_decoder_init(struct camu_decoder *dec, struct camu_renderer *rend
(void)renderer;
#endif
+#ifdef CAMU_FF_DECODER_HWACCEL
if ((!attempt_hwdec || av->hw_device_type == AV_HWDEVICE_TYPE_NONE) && stream->duration > 0) {
+#else
+ if (codecpar->codec_type == AVMEDIA_TYPE_VIDEO && stream->duration > 0) {
+#endif
s32 cpus = 0;
if (av->codec_context->codec_type == AVMEDIA_TYPE_VIDEO) {
cpus = av_cpu_count();
diff --git a/src/codec/ffmpeg/meson.build b/src/codec/ffmpeg/meson.build
index b93e556..cd6c7d3 100644
--- a/src/codec/ffmpeg/meson.build
+++ b/src/codec/ffmpeg/meson.build
@@ -53,7 +53,7 @@ if not (libavutil.found() and libavformat.found() and libavcodec.found() and lib
ffmpeg_version_string = ffmpeg_proj.get_variable('ffmpeg_version_string')
endif
else
- ffmpeg_version_string = run_command('./version.sh', check: true).stdout().strip()
+ ffmpeg_version_string = run_command('sh', join_paths(meson.current_source_dir(), 'version.sh'), check: true).stdout().strip()
endif
# This is probably meaningless compared to libav* versions, it's just something I wanted.
diff --git a/src/codec/ffmpeg/packet_ext.c b/src/codec/ffmpeg/packet_ext.c
index 9aa1992..e7b1da8 100644
--- a/src/codec/ffmpeg/packet_ext.c
+++ b/src/codec/ffmpeg/packet_ext.c
@@ -26,8 +26,13 @@ void nn_packet_write_av_codec_parameters(struct nn_packet *packet, AVCodecParame
NNWT_PACKET_WRITE_TYPE(packet, enum AVColorSpace, codecpar->color_space);
NNWT_PACKET_WRITE_TYPE(packet, enum AVChromaLocation, codecpar->chroma_location);
NNWT_PACKET_WRITE_TYPE(packet, s32, codecpar->video_delay);
- NNWT_PACKET_WRITE_TYPE(packet, u64, codecpar->ch_layout.u.mask);
- //NNWT_PACKET_WRITE_TYPE(packet, AVChannelLayout, codecpar->ch_layout);
+ // Incomplete.
+ NNWT_PACKET_WRITE_TYPE(packet, enum AVChannelOrder, codecpar->ch_layout.order);
+ if (codecpar->ch_layout.order == AV_CHANNEL_ORDER_NATIVE) {
+ NNWT_PACKET_WRITE_TYPE(packet, u64, codecpar->ch_layout.u.mask);
+ } else {
+ NNWT_PACKET_WRITE_TYPE(packet, s32, codecpar->ch_layout.nb_channels);
+ }
NNWT_PACKET_WRITE_TYPE(packet, s32, codecpar->sample_rate);
NNWT_PACKET_WRITE_TYPE(packet, s32, codecpar->block_align);
NNWT_PACKET_WRITE_TYPE(packet, s32, codecpar->frame_size);
@@ -125,10 +130,17 @@ void nn_packet_read_av_codec_parameters(struct nn_packet *packet, AVCodecParamet
NNWT_PACKET_READ_TYPE(packet, enum AVColorSpace, codecpar->color_space);
NNWT_PACKET_READ_TYPE(packet, enum AVChromaLocation, codecpar->chroma_location);
NNWT_PACKET_READ_TYPE(packet, s32, codecpar->video_delay);
- u64 ch_layout_mask;
- NNWT_PACKET_READ_TYPE(packet, u64, ch_layout_mask);
- av_channel_layout_from_mask(&codecpar->ch_layout, ch_layout_mask);
- //NNWT_PACKET_READ_TYPE(packet, AVChannelLayout, codecpar->ch_layout);
+ enum AVChannelOrder order;
+ NNWT_PACKET_READ_TYPE(packet, enum AVChannelOrder, order);
+ if (order == AV_CHANNEL_ORDER_NATIVE) {
+ u64 ch_layout_mask;
+ NNWT_PACKET_READ_TYPE(packet, u64, ch_layout_mask);
+ av_channel_layout_from_mask(&codecpar->ch_layout, ch_layout_mask);
+ } else {
+ s32 nb_channels;
+ NNWT_PACKET_READ_TYPE(packet, s32, nb_channels);
+ av_channel_layout_default(&codecpar->ch_layout, nb_channels);
+ }
NNWT_PACKET_READ_TYPE(packet, s32, codecpar->sample_rate);
NNWT_PACKET_READ_TYPE(packet, s32, codecpar->block_align);
NNWT_PACKET_READ_TYPE(packet, s32, codecpar->frame_size);