summaryrefslogtreecommitdiff
path: root/src/codec/ffmpeg
diff options
context:
space:
mode:
Diffstat (limited to 'src/codec/ffmpeg')
-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);