From 152bf64d7da624dd6401e6529300bfc4b817dbbe Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Wed, 19 Feb 2025 17:38:59 -0500 Subject: Small fixes and update deps Signed-off-by: Andrew Opalach --- src/codec/ffmpeg/decoder.c | 6 +++++- src/codec/ffmpeg/meson.build | 2 +- src/codec/ffmpeg/packet_ext.c | 24 ++++++++++++++++++------ 3 files changed, 24 insertions(+), 8 deletions(-) (limited to 'src/codec/ffmpeg') 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); -- cgit v1.2.3-101-g0448