diff options
Diffstat (limited to 'src/codec/ffmpeg')
| -rw-r--r-- | src/codec/ffmpeg/decoder.c | 8 | ||||
| -rw-r--r-- | src/codec/ffmpeg/meson.build | 70 |
2 files changed, 76 insertions, 2 deletions
diff --git a/src/codec/ffmpeg/decoder.c b/src/codec/ffmpeg/decoder.c index 36e59dd..5ff99d7 100644 --- a/src/codec/ffmpeg/decoder.c +++ b/src/codec/ffmpeg/decoder.c @@ -2,9 +2,13 @@ #include <al/log.h> #include <libavutil/cpu.h> +#ifndef CAMU_SINK_NO_VIDEO +#include "../../render/renderer.h" +#endif + #include "decoder.h" -#if !defined CAMU_SINK_NO_VIDEO +#ifndef CAMU_SINK_NO_VIDEO static s32 get_buffer2(AVCodecContext *context, AVFrame *pic, s32 flags) { struct camu_ff_decoder *av = (struct camu_ff_decoder *)context->opaque; @@ -236,7 +240,7 @@ static bool ff_decoder_init(struct camu_decoder *dec, struct camu_renderer *rend } #endif -#if !defined CAMU_SINK_NO_VIDEO +#ifndef CAMU_SINK_NO_VIDEO if (codecpar->codec_type == AVMEDIA_TYPE_VIDEO && renderer && renderer->get_buffer2) { av->renderer = renderer; av->codec_context->opaque = av; diff --git a/src/codec/ffmpeg/meson.build b/src/codec/ffmpeg/meson.build new file mode 100644 index 0000000..fc0bc91 --- /dev/null +++ b/src/codec/ffmpeg/meson.build @@ -0,0 +1,70 @@ +ffmpeg_src = [ + 'common.c', + 'packet_ext.c', +] +ffmpeg_args = ['-DCAMU_HAVE_FFMPEG'] +ffmpeg_deps = [] + +ffmpeg_server_src = [ + ffmpeg_src, + 'demuxer.c', + 'avio.c' +] +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', + 'resampler.c', + 'scaler.c', + 'encoder.c' +] +ffmpeg_client_deps = [] + +libavutil = dependency('libavutil', required: false) +libavformat = dependency('libavformat', required: false) +libavcodec = dependency('libavcodec', required: false) +libswresample = dependency('libswresample', required: false) +libswscale = dependency('libswscale', required: false) +if not (libavutil.found() and libavformat.found() and libavcodec.found() and libswresample.found() and libswscale.found()) + ffmpeg_proj = subproject('ffmpeg', required: false) + if ffmpeg_proj.found() + libavutil = ffmpeg_proj.get_variable('avutil') + libavformat = ffmpeg_proj.get_variable('avformat') + libavcodec = ffmpeg_proj.get_variable('avcodec') + libswresample = ffmpeg_proj.get_variable('swresample') + libswscale = ffmpeg_proj.get_variable('swscale') + # Only used to set include dirs for FFmpeg. + ffmpeg_deps += [ffmpeg_proj.get_variable('ffmpeg_inc_dep')] + # We explicitly enable zlib in the FFmpeg build. + ffmpeg_deps += [dependency('zlib')] + if is_windows + # Extra static dependencies for Windows. + ffmpeg_client_deps += [compiler.find_library('bcrypt')] + elif is_android + # Android MediaCodec HW decoding. + ffmpeg_client_deps += [compiler.find_library('mediandk')] + endif + soxr = compiler.find_library('soxr', required: false) + if soxr.found() + ffmpeg_client_deps += [soxr] + ffmpeg_args += ['-DCAMU_HAVE_SOXR'] + endif + endif +endif + +if libavutil.found() and libavformat.found() and libavcodec.found() and libswresample.found() and libswscale.found() + ffmpeg_server_deps += [libavutil, libavformat, libavcodec] + ffmpeg_client_deps += [libavutil, libavformat, libavcodec, libswresample, libswscale] + codec_server_deps += [ + declare_dependency(sources: ffmpeg_server_src, + dependencies: [ffmpeg_deps, ffmpeg_server_deps], compile_args: ffmpeg_args) + ] + codec_client_deps += [ + declare_dependency(sources: ffmpeg_client_src, + dependencies: [ffmpeg_deps, ffmpeg_client_deps], compile_args: ffmpeg_args) + ] +endif |