summaryrefslogtreecommitdiff
path: root/src/codec/ffmpeg
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-04-16 15:12:41 -0400
committerAndrew Opalach <andrew@akon.city> 2025-04-16 15:15:01 -0400
commitae8822ec0327c4d5674f1dc79de926b230f27f1f (patch)
treee57027812d73baf7ab617222aa55ad2fe4c33a55 /src/codec/ffmpeg
parent832b3ab11fd6457c59aed9d5bf12ba40c117f15d (diff)
downloadcamu-ae8822ec0327c4d5674f1dc79de926b230f27f1f.tar.gz
camu-ae8822ec0327c4d5674f1dc79de926b230f27f1f.tar.bz2
camu-ae8822ec0327c4d5674f1dc79de926b230f27f1f.zip
Highly wip waveform view
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/codec/ffmpeg')
-rw-r--r--src/codec/ffmpeg/decoder.c2
-rw-r--r--src/codec/ffmpeg/demuxer.c3
-rw-r--r--src/codec/ffmpeg/meson.build16
-rw-r--r--src/codec/ffmpeg/packet_ext.c3
4 files changed, 17 insertions, 7 deletions
diff --git a/src/codec/ffmpeg/decoder.c b/src/codec/ffmpeg/decoder.c
index a6431b1..17be6cc 100644
--- a/src/codec/ffmpeg/decoder.c
+++ b/src/codec/ffmpeg/decoder.c
@@ -3,7 +3,7 @@
#include <al/lib.h>
#include <libavutil/cpu.h>
-#ifndef CAMU_SINK_NO_VIDEO
+#if !defined CAMU_SINK_NO_VIDEO && defined CAMU_FF_DECODER_HWACCEL
#include "../../render/renderer.h"
#endif
diff --git a/src/codec/ffmpeg/demuxer.c b/src/codec/ffmpeg/demuxer.c
index 058a423..b612b2d 100644
--- a/src/codec/ffmpeg/demuxer.c
+++ b/src/codec/ffmpeg/demuxer.c
@@ -14,7 +14,7 @@ static void close_internal(struct camu_ff_demuxer *av)
if (av->format_context) {
avformat_flush(av->format_context);
avformat_close_input(&av->format_context);
- avformat_free_context(av->format_context);
+ // avformat_close_input() should call avformat_free_context().
}
}
@@ -105,6 +105,7 @@ static bool ff_demuxer_init(struct camu_demuxer *demux, struct cch_handle *handl
.mode = CAMU_FFMPEG_COMPAT,
.type = type,
.duration = duration,
+ .index = stream->index,
.av.stream = stream
}));
}
diff --git a/src/codec/ffmpeg/meson.build b/src/codec/ffmpeg/meson.build
index dfbf624..eb68fad 100644
--- a/src/codec/ffmpeg/meson.build
+++ b/src/codec/ffmpeg/meson.build
@@ -12,9 +12,6 @@ ffmpeg_server_src = [
]
ffmpeg_server_deps = []
-# This is layed out based on how things work currently.
-# Obviously the decoder, resampler, scaler, and encoder should
-# be a part of a server-side transcoding function.
ffmpeg_client_src = [
ffmpeg_src,
'decoder.c',
@@ -24,6 +21,16 @@ ffmpeg_client_src = [
]
ffmpeg_client_deps = []
+server_transcode = not get_option('sink-only')
+if server_transcode
+ ffmpeg_server_src += [
+ 'decoder.c',
+ 'resampler.c',
+ 'scaler.c',
+ 'encoder.c'
+ ]
+endif
+
libavutil = dependency('libavutil', required: false)
libavformat = dependency('libavformat', required: false)
libavcodec = dependency('libavcodec', required: false)
@@ -60,6 +67,9 @@ if libavutil.found() and libavformat.found() and libavcodec.found() and libswres
# This is probably meaningless compared to libav* versions, it's just something I wanted.
ffmpeg_args += ['-DFFMPEG_VERSION="' + ffmpeg_version_string + '"']
ffmpeg_server_deps += [libavutil, libavformat, libavcodec]
+ if server_transcode
+ ffmpeg_server_deps += [libswresample, libswscale]
+ endif
ffmpeg_client_deps += [libavutil, libavformat, libavcodec, libswresample, libswscale]
soxr = compiler.find_library('soxr', required: false)
if soxr.found()
diff --git a/src/codec/ffmpeg/packet_ext.c b/src/codec/ffmpeg/packet_ext.c
index e7b1da8..acf5bbd 100644
--- a/src/codec/ffmpeg/packet_ext.c
+++ b/src/codec/ffmpeg/packet_ext.c
@@ -165,8 +165,7 @@ void nn_packet_read_av_dictionary(struct nn_packet *packet, AVDictionary **dict)
u32 len;
NNWT_PACKET_READ_TYPE(packet, u32, len);
NNWT_PACKET_READ_DATA(packet, len, key);
- // Key and value MUST be allocated with av_malloc functions,
- // just like all FFmpeg structures.
+ // Key and value MUST be allocated with av_malloc functions.
key = av_strndup(key, len);
NNWT_PACKET_READ_TYPE(packet, u32, len);
NNWT_PACKET_READ_DATA(packet, len, value);