aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/ffmpeg
diff options
context:
space:
mode:
authorEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
committerEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
commit54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch)
treed915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/ports/ffmpeg
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/ports/ffmpeg')
-rw-r--r--vcpkg/ports/ffmpeg/0001-create-lib-libraries.patch27
-rw-r--r--vcpkg/ports/ffmpeg/0002-fix-msvc-link.patch11
-rw-r--r--vcpkg/ports/ffmpeg/0003-fix-windowsinclude.patch13
-rw-r--r--vcpkg/ports/ffmpeg/0004-dependencies.patch65
-rw-r--r--vcpkg/ports/ffmpeg/0005-fix-nasm.patch78
-rw-r--r--vcpkg/ports/ffmpeg/0007-fix-lib-naming.patch12
-rw-r--r--vcpkg/ports/ffmpeg/0013-define-WINVER.patch15
-rw-r--r--vcpkg/ports/ffmpeg/0020-fix-aarch64-libswscale.patch28
-rw-r--r--vcpkg/ports/ffmpeg/0024-fix-osx-host-c11.patch15
-rw-r--r--vcpkg/ports/ffmpeg/0040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch35
-rw-r--r--vcpkg/ports/ffmpeg/0041-add-const-for-opengl-definition.patch13
-rw-r--r--vcpkg/ports/ffmpeg/0042-fix-arm64-linux.patch9
-rw-r--r--vcpkg/ports/ffmpeg/0043-fix-miss-head.patch12
-rw-r--r--vcpkg/ports/ffmpeg/0044-fix-vulkan-debug-callback-abi.patch13
-rw-r--r--vcpkg/ports/ffmpeg/FindFFMPEG.cmake.in166
-rw-r--r--vcpkg/ports/ffmpeg/build.sh.in142
-rw-r--r--vcpkg/ports/ffmpeg/portfile.cmake1020
-rw-r--r--vcpkg/ports/ffmpeg/usage29
-rw-r--r--vcpkg/ports/ffmpeg/vcpkg-cmake-wrapper.cmake318
-rw-r--r--vcpkg/ports/ffmpeg/vcpkg.json735
20 files changed, 2756 insertions, 0 deletions
diff --git a/vcpkg/ports/ffmpeg/0001-create-lib-libraries.patch b/vcpkg/ports/ffmpeg/0001-create-lib-libraries.patch
new file mode 100644
index 0000000..ced7ba8
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/0001-create-lib-libraries.patch
@@ -0,0 +1,27 @@
+diff --git a/configure b/configure
+index 1f0b9497cb..3243e23021 100644
+--- a/configure
++++ b/configure
+@@ -5697,17 +5697,19 @@ case $target_os in
+ ;;
+ win32|win64)
+ disable symver
+- if enabled shared; then
++# if enabled shared; then
+ # Link to the import library instead of the normal static library
+ # for shared libs.
+ LD_LIB='%.lib'
+ # Cannot build both shared and static libs with MSVC or icl.
+- disable static
+- fi
++# disable static
++# fi
+ ! enabled small && test_cmd $windres --version && enable gnu_windres
+ enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
+ add_cppflags -DWIN32_LEAN_AND_MEAN
+ shlibdir_default="$bindir_default"
++ LIBPREF=""
++ LIBSUF=".lib"
+ SLIBPREF=""
+ SLIBSUF=".dll"
+ SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
diff --git a/vcpkg/ports/ffmpeg/0002-fix-msvc-link.patch b/vcpkg/ports/ffmpeg/0002-fix-msvc-link.patch
new file mode 100644
index 0000000..c9aa7e7
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/0002-fix-msvc-link.patch
@@ -0,0 +1,11 @@
+diff --git a/configure b/configure
+--- a/configure
++++ b/configure
+@@ -6162,6 +6162,7 @@ EOF
+ test -n "$extern_prefix" && append X86ASMFLAGS "-DPREFIX"
+ case "$objformat" in
+ elf*) enabled debug && append X86ASMFLAGS $x86asm_debug ;;
++ win*) enabled debug && append X86ASMFLAGS "-g" ;;
+ esac
+
+ enabled avx512 && check_x86asm avx512_external "vmovdqa32 [eax]{k1}{z}, zmm0"
diff --git a/vcpkg/ports/ffmpeg/0003-fix-windowsinclude.patch b/vcpkg/ports/ffmpeg/0003-fix-windowsinclude.patch
new file mode 100644
index 0000000..8b2e22b
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/0003-fix-windowsinclude.patch
@@ -0,0 +1,13 @@
+diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c
+--- a/fftools/cmdutils.c
++++ b/fftools/cmdutils.c
+@@ -51,6 +51,8 @@
+ #include "fopen_utf8.h"
+ #include "opt_common.h"
+ #ifdef _WIN32
++#define _WIN32_WINNT 0x0502
++#define WIN32_LEAN_AND_MEAN
+ #include <windows.h>
+ #include "compat/w32dlfcn.h"
+ #endif
+
diff --git a/vcpkg/ports/ffmpeg/0004-dependencies.patch b/vcpkg/ports/ffmpeg/0004-dependencies.patch
new file mode 100644
index 0000000..f1f6e72
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/0004-dependencies.patch
@@ -0,0 +1,65 @@
+diff --git a/configure b/configure
+index a8b74e0..c99f41c 100755
+--- a/configure
++++ b/configure
+@@ -6633,7 +6633,7 @@ fi
+
+ enabled zlib && { check_pkg_config zlib zlib "zlib.h" zlibVersion ||
+ check_lib zlib zlib.h zlibVersion -lz; }
+-enabled bzlib && check_lib bzlib bzlib.h BZ2_bzlibVersion -lbz2
++enabled bzlib && require_pkg_config bzlib bzip2 bzlib.h BZ2_bzlibVersion
+ enabled lzma && check_lib lzma lzma.h lzma_version_number -llzma
+
+ enabled zlib && test_exec $zlib_extralibs <<EOF && enable zlib_gzip
+@@ -6757,7 +6757,8 @@ if enabled libmfx; then
+ fi
+
+ enabled libmodplug && require_pkg_config libmodplug libmodplug libmodplug/modplug.h ModPlug_Load
+-enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame $libm_extralibs
++enabled libmp3lame && { check_lib libmp3lame lame/lame.h lame_set_VBR_quality -lmp3lame $libm_extralibs ||
++ require libmp3lame lame/lame.h lame_set_VBR_quality -llibmp3lame-static -llibmpghip-static $libm_extralibs; }
+ enabled libmysofa && { check_pkg_config libmysofa libmysofa mysofa.h mysofa_neighborhood_init_withstepdefine ||
+ require libmysofa mysofa.h mysofa_neighborhood_init_withstepdefine -lmysofa $zlib_extralibs; }
+ enabled libnpp && { check_lib libnpp npp.h nppGetLibVersion -lnppig -lnppicc -lnppc -lnppidei -lnppif ||
+@@ -6772,7 +6773,7 @@ require_pkg_config libopencv opencv opencv/cxcore.h cvCreateImageHeader; }
+ enabled libopenh264 && require_pkg_config libopenh264 "openh264 >= 1.3.0" wels/codec_api.h WelsGetCodecVersion
+ enabled libopenjpeg && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version ||
+ { require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } }
+-enabled libopenmpt && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++"
++enabled libopenmpt && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create
+ enabled libopenvino && { { check_pkg_config libopenvino openvino openvino/c/openvino.h ov_core_create && enable openvino2; } ||
+ { check_pkg_config libopenvino openvino c_api/ie_c_api.h ie_c_api_version ||
+ require libopenvino c_api/ie_c_api.h ie_c_api_version -linference_engine_c_api; } }
+@@ -6796,8 +6797,8 @@ enabled libshaderc && require_pkg_config spirv_compiler "shaderc >= 2019.
+ enabled libshine && require_pkg_config libshine shine shine/layer3.h shine_encode_buffer
+ enabled libsmbclient && { check_pkg_config libsmbclient smbclient libsmbclient.h smbc_init ||
+ require libsmbclient libsmbclient.h smbc_init -lsmbclient; }
+-enabled libsnappy && require libsnappy snappy-c.h snappy_compress -lsnappy -lstdc++
+-enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr
++enabled libsnappy && require_pkg_config libsnappy snappy snappy-c.h snappy_compress
++enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr $libm_extralibs
+ enabled libssh && require_pkg_config libssh "libssh >= 0.6.0" libssh/sftp.h sftp_init
+ enabled libspeex && require_pkg_config libspeex speex speex/speex.h speex_decoder_init
+ enabled libsrt && require_pkg_config libsrt "srt >= 1.3.0" srt/srt.h srt_socket
+@@ -6880,6 +6881,8 @@ enabled openal && { check_pkg_config openal "openal >= 1.1" "AL/al.h"
+ enabled opencl && { check_pkg_config opencl OpenCL CL/cl.h clEnqueueNDRangeKernel ||
+ check_lib opencl OpenCL/cl.h clEnqueueNDRangeKernel "-framework OpenCL" ||
+ check_lib opencl CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
++ check_lib opencl CL/cl.h clEnqueueNDRangeKernel -lOpenCL -lAdvapi32 -lOle32 -lCfgmgr32||
++ check_lib opencl CL/cl.h clEnqueueNDRangeKernel -lOpenCL -pthread -ldl ||
+ die "ERROR: opencl not found"; } &&
+ { test_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
+ test_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
+@@ -7204,10 +7207,10 @@ enabled amf &&
+ "(AMF_VERSION_MAJOR << 48 | AMF_VERSION_MINOR << 32 | AMF_VERSION_RELEASE << 16 | AMF_VERSION_BUILD_NUM) >= 0x0001000400210000"
+
+ # Funny iconv installations are not unusual, so check it after all flags have been set
+-if enabled libc_iconv; then
++if enabled libc_iconv && disabled iconv; then
+ check_func_headers iconv.h iconv
+ elif enabled iconv; then
+- check_func_headers iconv.h iconv || check_lib iconv iconv.h iconv -liconv
++ check_func_headers iconv.h iconv || check_lib iconv iconv.h iconv -liconv || check_lib iconv iconv.h iconv -liconv -lcharset
+ fi
+
+ enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
diff --git a/vcpkg/ports/ffmpeg/0005-fix-nasm.patch b/vcpkg/ports/ffmpeg/0005-fix-nasm.patch
new file mode 100644
index 0000000..68b7503
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/0005-fix-nasm.patch
@@ -0,0 +1,78 @@
+diff --git a/libavcodec/x86/mlpdsp.asm b/libavcodec/x86/mlpdsp.asm
+index 3dc641e..609b834 100644
+--- a/libavcodec/x86/mlpdsp.asm
++++ b/libavcodec/x86/mlpdsp.asm
+@@ -23,7 +23,9 @@
+
+ SECTION .text
+
+-%if ARCH_X86_64
++%ifn ARCH_X86_64
++mlpdsp_placeholder: times 4 db 0
++%else
+
+ %macro SHLX 2
+ %if cpuflag(bmi2)
+diff --git a/libavcodec/x86/proresdsp.asm b/libavcodec/x86/proresdsp.asm
+index 65c9fad..5ad73f3 100644
+--- a/libavcodec/x86/proresdsp.asm
++++ b/libavcodec/x86/proresdsp.asm
+@@ -24,7 +24,10 @@
+
+ %include "libavutil/x86/x86util.asm"
+
+-%if ARCH_X86_64
++%ifn ARCH_X86_64
++SECTION .rdata
++proresdsp_placeholder: times 4 db 0
++%else
+
+ SECTION_RODATA
+
+diff --git a/libavcodec/x86/vvc/vvc_mc.asm b/libavcodec/x86/vvc/vvc_mc.asm
+index 30aa97c..3975f98 100644
+--- a/libavcodec/x86/vvc/vvc_mc.asm
++++ b/libavcodec/x86/vvc/vvc_mc.asm
+@@ -31,7 +31,9 @@
+
+ SECTION_RODATA 32
+
+-%if ARCH_X86_64
++%ifn ARCH_X86_64
++vvc_mc_placeholder: times 4 db 0
++%else
+
+ %if HAVE_AVX2_EXTERNAL
+
+diff --git a/libavfilter/x86/vf_atadenoise.asm b/libavfilter/x86/vf_atadenoise.asm
+index 4945ad3..748b65a 100644
+--- a/libavfilter/x86/vf_atadenoise.asm
++++ b/libavfilter/x86/vf_atadenoise.asm
+@@ -20,7 +20,10 @@
+ ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ ;******************************************************************************
+
+-%if ARCH_X86_64
++%ifn ARCH_X86_64
++SECTION .rdata
++vf_atadenoise_placeholder: times 4 db 0
++%else
+
+ %include "libavutil/x86/x86util.asm"
+
+diff --git a/libavfilter/x86/vf_nlmeans.asm b/libavfilter/x86/vf_nlmeans.asm
+index 8f57801..9aef3a4 100644
+--- a/libavfilter/x86/vf_nlmeans.asm
++++ b/libavfilter/x86/vf_nlmeans.asm
+@@ -21,7 +21,10 @@
+
+ %include "libavutil/x86/x86util.asm"
+
+-%if HAVE_AVX2_EXTERNAL && ARCH_X86_64
++%ifn HAVE_AVX2_EXTERNAL && ARCH_X86_64
++SECTION .rdata
++vf_nlmeans_placeholder: times 4 db 0
++%else
+
+ SECTION_RODATA 32
+
diff --git a/vcpkg/ports/ffmpeg/0007-fix-lib-naming.patch b/vcpkg/ports/ffmpeg/0007-fix-lib-naming.patch
new file mode 100644
index 0000000..c22f9c1
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/0007-fix-lib-naming.patch
@@ -0,0 +1,12 @@
+diff --git a/configure b/configure
+index d6c4388..75b96c3 100644
+--- a/configure
++++ b/configure
+@@ -4781,6 +4781,7 @@ msvc_common_flags(){
+ -mfp16-format=*) ;;
+ -lz) echo zlib.lib ;;
+ -lx264) echo libx264.lib ;;
++ -lmp3lame) echo libmp3lame.lib ;;
+ -lstdc++) ;;
+ -l*) echo ${flag#-l}.lib ;;
+ -LARGEADDRESSAWARE) echo $flag ;;
diff --git a/vcpkg/ports/ffmpeg/0013-define-WINVER.patch b/vcpkg/ports/ffmpeg/0013-define-WINVER.patch
new file mode 100644
index 0000000..295a738
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/0013-define-WINVER.patch
@@ -0,0 +1,15 @@
+diff --color -Naur src_old/libavcodec/mf_utils.c src/libavcodec/mf_utils.c
+--- src_old/libavcodec/mf_utils.c 2020-07-11 05:26:17.000000000 +0700
++++ src/libavcodec/mf_utils.c 2020-11-13 12:55:57.226976400 +0700
+@@ -22,6 +22,11 @@
+ #define _WIN32_WINNT 0x0602
+ #endif
+
++#if !defined(WINVER) || WINVER < 0x0602
++#undef WINVER
++#define WINVER 0x0602
++#endif
++
+ #include "mf_utils.h"
+ #include "libavutil/pixdesc.h"
+
diff --git a/vcpkg/ports/ffmpeg/0020-fix-aarch64-libswscale.patch b/vcpkg/ports/ffmpeg/0020-fix-aarch64-libswscale.patch
new file mode 100644
index 0000000..f47e82e
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/0020-fix-aarch64-libswscale.patch
@@ -0,0 +1,28 @@
+diff --git a/libswscale/aarch64/yuv2rgb_neon.S b/libswscale/aarch64/yuv2rgb_neon.S
+index 89d69e7f6c..4bc1607a7a 100644
+--- a/libswscale/aarch64/yuv2rgb_neon.S
++++ b/libswscale/aarch64/yuv2rgb_neon.S
+@@ -169,19 +169,19 @@ function ff_\ifmt\()_to_\ofmt\()_neon, export=1
+ sqdmulh v26.8h, v26.8h, v0.8h // ((Y1*(1<<3) - y_offset) * y_coeff) >> 15
+ sqdmulh v27.8h, v27.8h, v0.8h // ((Y2*(1<<3) - y_offset) * y_coeff) >> 15
+
+-.ifc \ofmt,argb // 1 2 3 0
++.ifc \ofmt,argb
+ compute_rgba v5.8b,v6.8b,v7.8b,v4.8b, v17.8b,v18.8b,v19.8b,v16.8b
+ .endif
+
+-.ifc \ofmt,rgba // 0 1 2 3
++.ifc \ofmt,rgba
+ compute_rgba v4.8b,v5.8b,v6.8b,v7.8b, v16.8b,v17.8b,v18.8b,v19.8b
+ .endif
+
+-.ifc \ofmt,abgr // 3 2 1 0
++.ifc \ofmt,abgr
+ compute_rgba v7.8b,v6.8b,v5.8b,v4.8b, v19.8b,v18.8b,v17.8b,v16.8b
+ .endif
+
+-.ifc \ofmt,bgra // 2 1 0 3
++.ifc \ofmt,bgra
+ compute_rgba v6.8b,v5.8b,v4.8b,v7.8b, v18.8b,v17.8b,v16.8b,v19.8b
+ .endif
+
diff --git a/vcpkg/ports/ffmpeg/0024-fix-osx-host-c11.patch b/vcpkg/ports/ffmpeg/0024-fix-osx-host-c11.patch
new file mode 100644
index 0000000..dbce2f5
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/0024-fix-osx-host-c11.patch
@@ -0,0 +1,15 @@
+diff --git a/configure b/configure
+index 4f5353f84b..dd9147c677 100755
+--- a/configure
++++ b/configure
+@@ -5607,8 +5607,8 @@ check_cppflags -D_FILE_OFFSET_BITS=64
+ check_cppflags -D_LARGEFILE_SOURCE
+
+ add_host_cppflags -D_ISOC11_SOURCE
+ check_host_cflags_cc -std=$stdc ctype.h "__STDC_VERSION__ >= 201112L" ||
+- check_host_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L" || die "Host compiler lacks C11 support"
++ check_host_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L"
+
+ check_host_cflags -Wall
+ check_host_cflags $host_cflags_speed
+
diff --git a/vcpkg/ports/ffmpeg/0040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch b/vcpkg/ports/ffmpeg/0040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch
new file mode 100644
index 0000000..c2e1d8f
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/0040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch
@@ -0,0 +1,35 @@
+diff --git a/libavformat/avformat.h b/libavformat/avformat.h
+index cd7b0d941c..b4a6dce885 100644
+--- a/libavformat/avformat.h
++++ b/libavformat/avformat.h
+@@ -1169,7 +1169,11 @@ typedef struct AVStreamGroup {
+ } AVStreamGroup;
+
+ struct AVCodecParserContext *av_stream_get_parser(const AVStream *s);
+
++// Chromium: We use the internal field first_dts vvv
++int64_t av_stream_get_first_dts(const AVStream *st);
++// Chromium: We use the internal field first_dts ^^^
++
+ #define AV_PROGRAM_RUNNING 1
+
+ /**
+diff --git a/libavformat/mux_utils.c b/libavformat/mux_utils.c
+index de7580c32d..0ef0fe530e 100644
+--- a/libavformat/mux_utils.c
++++ b/libavformat/mux_utils.c
+@@ -29,7 +29,14 @@ #include "avformat.h"
+ #include "avio.h"
+ #include "internal.h"
+ #include "mux.h"
+
++// Chromium: We use the internal field first_dts vvv
++int64_t av_stream_get_first_dts(const AVStream *st)
++{
++ return cffstream(st)->first_dts;
++}
++// Chromium: We use the internal field first_dts ^^^
++
+ int avformat_query_codec(const AVOutputFormat *ofmt, enum AVCodecID codec_id,
+ int std_compliance)
+ {
diff --git a/vcpkg/ports/ffmpeg/0041-add-const-for-opengl-definition.patch b/vcpkg/ports/ffmpeg/0041-add-const-for-opengl-definition.patch
new file mode 100644
index 0000000..b22b40d
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/0041-add-const-for-opengl-definition.patch
@@ -0,0 +1,13 @@
+diff --git a/libavdevice/opengl_enc.c b/libavdevice/opengl_enc.c
+index b2ac6eb..6351614 100644
+--- a/libavdevice/opengl_enc.c
++++ b/libavdevice/opengl_enc.c
+@@ -116,7 +116,7 @@ typedef void (APIENTRY *FF_PFNGLATTACHSHADERPROC) (GLuint program, GLuint shad
+ typedef GLuint (APIENTRY *FF_PFNGLCREATESHADERPROC) (GLenum type);
+ typedef void (APIENTRY *FF_PFNGLDELETESHADERPROC) (GLuint shader);
+ typedef void (APIENTRY *FF_PFNGLCOMPILESHADERPROC) (GLuint shader);
+-typedef void (APIENTRY *FF_PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const char* *string, const GLint *length);
++typedef void (APIENTRY *FF_PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const char* const *string, const GLint *length);
+ typedef void (APIENTRY *FF_PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+ typedef void (APIENTRY *FF_PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, char *infoLog);
+
diff --git a/vcpkg/ports/ffmpeg/0042-fix-arm64-linux.patch b/vcpkg/ports/ffmpeg/0042-fix-arm64-linux.patch
new file mode 100644
index 0000000..6ff63c3
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/0042-fix-arm64-linux.patch
@@ -0,0 +1,9 @@
+diff --git a/ffbuild/libversion.sh b/ffbuild/libversion.sh
+index a94ab58..ecaa90c 100644
+--- a/ffbuild/libversion.sh
++++ b/ffbuild/libversion.sh
+@@ -1,3 +1,4 @@
++#!/bin/sh
+ toupper(){
+ echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
+ }
diff --git a/vcpkg/ports/ffmpeg/0043-fix-miss-head.patch b/vcpkg/ports/ffmpeg/0043-fix-miss-head.patch
new file mode 100644
index 0000000..bad4279
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/0043-fix-miss-head.patch
@@ -0,0 +1,12 @@
+diff --git a/libavfilter/textutils.c b/libavfilter/textutils.c
+index ef658d0..c61b0ad 100644
+--- a/libavfilter/textutils.c
++++ b/libavfilter/textutils.c
+@@ -31,6 +31,7 @@
+ #include "libavutil/file.h"
+ #include "libavutil/mem.h"
+ #include "libavutil/time.h"
++#include "libavutil/time_internal.h"
+
+ static int ff_expand_text_function_internal(FFExpandTextContext *expand_text, AVBPrint *bp,
+ char *name, unsigned argc, char **argv)
diff --git a/vcpkg/ports/ffmpeg/0044-fix-vulkan-debug-callback-abi.patch b/vcpkg/ports/ffmpeg/0044-fix-vulkan-debug-callback-abi.patch
new file mode 100644
index 0000000..d80e468
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/0044-fix-vulkan-debug-callback-abi.patch
@@ -0,0 +1,13 @@
+diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c
+index 6317ab7d0e..f1f70e9b96 100644
+--- a/libavutil/hwcontext_vulkan.c
++++ b/libavutil/hwcontext_vulkan.c
+@@ -453,7 +453,7 @@ static const VulkanOptExtension optional_device_exts[] = {
+ { VK_KHR_VIDEO_DECODE_AV1_EXTENSION_NAME, FF_VK_EXT_VIDEO_DECODE_AV1 },
+ };
+
+-static VkBool32 VKAPI_CALL vk_dbg_callback(VkDebugUtilsMessageSeverityFlagBitsEXT severity,
++static VKAPI_ATTR VkBool32 VKAPI_CALL vk_dbg_callback(VkDebugUtilsMessageSeverityFlagBitsEXT severity,
+ VkDebugUtilsMessageTypeFlagsEXT messageType,
+ const VkDebugUtilsMessengerCallbackDataEXT *data,
+ void *priv)
diff --git a/vcpkg/ports/ffmpeg/FindFFMPEG.cmake.in b/vcpkg/ports/ffmpeg/FindFFMPEG.cmake.in
new file mode 100644
index 0000000..7461a3c
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/FindFFMPEG.cmake.in
@@ -0,0 +1,166 @@
+# Distributed under the OSI-approved BSD 3-Clause License.
+#
+#.rst:
+# FindFFMPEG
+# --------
+#
+# Find the FFPMEG libraries
+#
+# Result Variables
+# ^^^^^^^^^^^^^^^^
+#
+# The following variables will be defined:
+#
+# ``FFMPEG_FOUND``
+# True if FFMPEG found on the local system
+#
+# ``FFMPEG_INCLUDE_DIRS``
+# Location of FFMPEG header files
+#
+# ``FFMPEG_LIBRARY_DIRS``
+# Location of FFMPEG libraries
+#
+# ``FFMPEG_LIBRARIES``
+# List of the FFMPEG libraries found
+#
+#
+
+include(FindPackageHandleStandardArgs)
+include(SelectLibraryConfigurations)
+include(CMakeFindDependencyMacro)
+
+if(NOT FFMPEG_FOUND)
+
+# Compute the installation path relative to this file.
+get_filename_component(SEARCH_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(SEARCH_PATH "${SEARCH_PATH}" PATH)
+get_filename_component(SEARCH_PATH "${SEARCH_PATH}" PATH)
+if(SEARCH_PATH STREQUAL "/")
+ set(SEARCH_PATH "")
+endif()
+
+set(FFMPEG_VERSION "@FFMPEG_VERSION@")
+
+function(append_dependencies out)
+ cmake_parse_arguments(PARSE_ARGV 1 "arg" "DEBUG" "NAMES" "")
+ if(${arg_DEBUG})
+ set(config DEBUG)
+ set(path "${SEARCH_PATH}/debug/lib/")
+ else()
+ set(config RELEASE)
+ set(path "${SEARCH_PATH}/lib/")
+ endif()
+ if("${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES}" STREQUAL "")
+ enable_language(CXX)
+ endif()
+ set(pass_through
+ ${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES}
+ advapi32 bcrypt crypt32 gdi32 mfuuid ole32 oleaut32 psapi secur32 shlwapi strmiids user32 uuid vfw32 ws2_32 usp10 cfgmgr32 rpcrt4
+ -pthread -pthreads pthread atomic m
+ )
+ cmake_policy(SET CMP0057 NEW)
+ foreach(lib_name IN LISTS arg_NAMES)
+ if(lib_name IN_LIST CMAKE_C_IMPLICIT_LINK_LIBRARIES)
+ continue() # implicit even for C
+ elseif(lib_name IN_LIST pass_through)
+ list(APPEND ${out} "${lib_name}")
+ elseif(EXISTS "${lib_name}")
+ list(APPEND ${out} "${lib_name}")
+ else()
+ # first look in ${path} specifically to ensure we find the right release/debug variant
+ find_library(FFMPEG_DEPENDENCY_${lib_name}_${config} NAMES "${lib_name}" PATHS "${path}" NO_DEFAULT_PATH)
+ # if not found there, must be a system dependency, so look elsewhere
+ find_library(FFMPEG_DEPENDENCY_${lib_name}_${config} NAMES "${lib_name}" REQUIRED)
+ list(APPEND ${out} "${FFMPEG_DEPENDENCY_${lib_name}_${config}}")
+ endif()
+ endforeach()
+ set("${out}" "${${out}}" PARENT_SCOPE)
+endfunction()
+
+macro(FFMPEG_FIND varname shortname headername)
+ if(NOT FFMPEG_${varname}_INCLUDE_DIRS)
+ find_path(FFMPEG_${varname}_INCLUDE_DIRS NAMES lib${shortname}/${headername} ${headername} PATHS ${SEARCH_PATH}/include NO_DEFAULT_PATH)
+ endif()
+ if(NOT FFMPEG_${varname}_LIBRARY)
+ find_library(FFMPEG_${varname}_LIBRARY_RELEASE NAMES ${shortname} PATHS ${SEARCH_PATH}/lib/ NO_DEFAULT_PATH)
+ find_library(FFMPEG_${varname}_LIBRARY_DEBUG NAMES ${shortname}d ${shortname} PATHS ${SEARCH_PATH}/debug/lib/ NO_DEFAULT_PATH)
+ get_filename_component(FFMPEG_${varname}_LIBRARY_RELEASE_DIR ${FFMPEG_${varname}_LIBRARY_RELEASE} DIRECTORY)
+ get_filename_component(FFMPEG_${varname}_LIBRARY_DEBUG_DIR ${FFMPEG_${varname}_LIBRARY_DEBUG} DIRECTORY)
+ select_library_configurations(FFMPEG_${varname})
+ set(FFMPEG_${varname}_LIBRARY ${FFMPEG_${varname}_LIBRARY} CACHE STRING "")
+ endif()
+ if (FFMPEG_${varname}_LIBRARY AND FFMPEG_${varname}_INCLUDE_DIRS)
+ set(FFMPEG_${varname}_FOUND TRUE BOOL)
+ list(APPEND FFMPEG_INCLUDE_DIRS ${FFMPEG_${varname}_INCLUDE_DIRS})
+ list(APPEND FFMPEG_LIBRARIES ${FFMPEG_${varname}_LIBRARY})
+ list(APPEND FFMPEG_LIBRARY_DIRS ${FFMPEG_${varname}_LIBRARY_RELEASE_DIR} ${FFMPEG_${varname}_LIBRARY_DEBUG_DIR})
+ endif()
+endmacro(FFMPEG_FIND)
+
+if(@ENABLE_AVDEVICE@)
+ FFMPEG_FIND(libavdevice avdevice avdevice.h)
+endif()
+if(@ENABLE_AVFILTER@)
+ FFMPEG_FIND(libavfilter avfilter avfilter.h)
+endif()
+if(@ENABLE_AVFORMAT@)
+ FFMPEG_FIND(libavformat avformat avformat.h)
+endif()
+if(@ENABLE_AVCODEC@)
+ FFMPEG_FIND(libavcodec avcodec avcodec.h)
+endif()
+if(@ENABLE_POSTPROC@)
+ FFMPEG_FIND(libpostproc postproc postprocess.h)
+endif()
+if(@ENABLE_SWRESAMPLE@)
+ FFMPEG_FIND(libswresample swresample swresample.h)
+endif()
+if(@ENABLE_SWSCALE@)
+ FFMPEG_FIND(libswscale swscale swscale.h)
+endif()
+FFMPEG_FIND(libavutil avutil avutil.h)
+
+if (FFMPEG_libavutil_FOUND)
+ list(REMOVE_DUPLICATES FFMPEG_INCLUDE_DIRS)
+ list(REMOVE_DUPLICATES FFMPEG_LIBRARY_DIRS)
+ set(FFMPEG_libavutil_VERSION "@LIBAVUTIL_VERSION@" CACHE STRING "")
+
+ if(FFMPEG_libavcodec_FOUND)
+ set(FFMPEG_libavcodec_VERSION "@LIBAVCODEC_VERSION@" CACHE STRING "")
+ endif()
+ if(FFMPEG_libavdevice_FOUND)
+ set(FFMPEG_libavdevice_VERSION "@LIBAVDEVICE_VERSION@" CACHE STRING "")
+ endif()
+ if(FFMPEG_libavfilter_FOUND)
+ set(FFMPEG_libavfilter_VERSION "@LIBAVFILTER_VERSION@" CACHE STRING "")
+ endif()
+ if(FFMPEG_libavformat_FOUND)
+ set(FFMPEG_libavformat_VERSION "@LIBAVFORMAT_VERSION@" CACHE STRING "")
+ endif()
+ if(FFMPEG_libswresample_FOUND)
+ set(FFMPEG_libswresample_VERSION "@LIBSWRESAMPLE_VERSION@" CACHE STRING "")
+ endif()
+ if(FFMPEG_libswscale_FOUND)
+ set(FFMPEG_libswscale_VERSION "@LIBSWSCALE_VERSION@" CACHE STRING "")
+ endif()
+
+ append_dependencies(FFMPEG_DEPS_LIBRARY_RELEASE NAMES "@FFMPEG_DEPENDENCIES_RELEASE@")
+ append_dependencies(FFMPEG_DEPS_LIBRARY_DEBUG NAMES "@FFMPEG_DEPENDENCIES_DEBUG@" DEBUG)
+ if(FFMPEG_DEPS_LIBRARY_RELEASE OR FFMPEG_DEPS_LIBRARY_DEBUG)
+ select_library_configurations(FFMPEG_DEPS)
+ list(APPEND FFMPEG_LIBRARIES ${FFMPEG_DEPS_LIBRARY})
+ endif()
+
+ set(FFMPEG_LIBRARY ${FFMPEG_LIBRARIES})
+
+ set(FFMPEG_FOUND TRUE CACHE BOOL "")
+ set(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} CACHE STRING "")
+ set(FFMPEG_INCLUDE_DIRS ${FFMPEG_INCLUDE_DIRS} CACHE STRING "")
+ set(FFMPEG_LIBRARY_DIRS ${FFMPEG_LIBRARY_DIRS} CACHE STRING "")
+endif()
+
+find_package_handle_standard_args(FFMPEG REQUIRED_VARS FFMPEG_LIBRARIES FFMPEG_LIBRARY_DIRS FFMPEG_INCLUDE_DIRS)
+
+set(z_vcpkg_using_vcpkg_find_ffmpeg ${FFMPEG_FOUND})
+
+endif()
diff --git a/vcpkg/ports/ffmpeg/build.sh.in b/vcpkg/ports/ffmpeg/build.sh.in
new file mode 100644
index 0000000..fd794d4
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/build.sh.in
@@ -0,0 +1,142 @@
+#!/usr/bin/env bash
+
+set -e
+
+move_binary() {
+ SOURCE=$1
+ TARGET=$2
+ BINARY=$3
+
+ # run lipo over the command to check whether it really
+ # is a binary that we need to merge architectures
+ lipo $SOURCE/$BINARY -info &> /dev/null || return 0
+
+ # get the directory name the file is in
+ DIRNAME=$(dirname $BINARY)
+
+ # ensure the directory to move the binary to exists
+ mkdir -p $TARGET/$DIRNAME
+
+ # now finally move the binary
+ mv $SOURCE/$BINARY $TARGET/$BINARY
+}
+
+move_binaries() {
+ SOURCE=$1
+ TARGET=$2
+
+ [ ! -d $SOURCE ] && return 0
+ pushd $SOURCE
+
+ for BINARY in $(find . -type f); do
+ move_binary $SOURCE $TARGET $BINARY
+ done
+
+ popd
+}
+
+merge_binaries() {
+ TARGET=$1
+ SOURCE=$2
+
+ shift
+ shift
+
+ pushd $SOURCE/$1
+ BINARIES=$(find . -type f)
+ popd
+
+ for BINARY in $BINARIES; do
+ COMMAND="lipo -create -output $TARGET/$BINARY"
+
+ for ARCH in $@; do
+ COMMAND="$COMMAND -arch $ARCH $SOURCE/$ARCH/$BINARY"
+ done
+
+ $($COMMAND)
+ done
+}
+
+PATH_TO_BUILD_DIR="@BUILD_DIR@"
+PATH_TO_SRC_DIR="@SOURCE_PATH@"
+PATH_TO_PACKAGE_DIR="@INST_PREFIX@"
+
+JOBS=@VCPKG_CONCURRENCY@
+
+OSX_ARCHS="@OSX_ARCHS@"
+OSX_ARCH_COUNT=0@OSX_ARCH_COUNT@
+
+# Default to hardware concurrency if unset.
+: ${JOBS:=$(nproc)}
+
+# Disable asm and x86asm on all android targets because they trigger build failures:
+# arm64 Android build fails with 'relocation R_AARCH64_ADR_PREL_PG_HI21 cannot be used against symbol ff_cos_32; recompile with -fPIC'
+# x86 Android build fails with 'error: inline assembly requires more registers than available'.
+# x64 Android build fails with 'relocation R_X86_64_PC32 cannot be used against symbol ff_h264_cabac_tables; recompile with -fPIC'
+if [ "@VCPKG_CMAKE_SYSTEM_NAME@" = "Android" ]; then
+ OPTIONS_arm=" --disable-asm --disable-x86asm"
+ OPTIONS_arm64=" --disable-asm --disable-x86asm"
+ OPTIONS_x86=" --disable-asm --disable-x86asm"
+ OPTIONS_x86_64="${OPTIONS_x86}"
+else
+ OPTIONS_arm=" --disable-asm --disable-x86asm"
+ OPTIONS_arm64=" --enable-asm --disable-x86asm"
+ OPTIONS_x86=" --enable-asm --enable-x86asm"
+ OPTIONS_x86_64="${OPTIONS_x86}"
+fi
+
+case "@VCPKG_CMAKE_SYSTEM_NAME@" in
+ *BSD)
+ MAKE_BINARY="gmake"
+ ;;
+ *)
+ MAKE_BINARY="make"
+ ;;
+esac
+
+build_ffmpeg() {
+ # extract build architecture
+ BUILD_ARCH=$1
+ shift
+
+ echo "BUILD_ARCH=${BUILD_ARCH}"
+
+ # get architecture-specific options
+ OPTION_VARIABLE="OPTIONS_${BUILD_ARCH}"
+ echo "OPTION_VARIABLE=${OPTION_VARIABLE}"
+
+ echo "=== CONFIGURING ==="
+
+ sh "$PATH_TO_SRC_DIR/configure" "--prefix=$PATH_TO_PACKAGE_DIR" @CONFIGURE_OPTIONS@ --arch=${BUILD_ARCH} ${!OPTION_VARIABLE} $@
+
+ echo "=== BUILDING ==="
+
+ $MAKE_BINARY -j${JOBS} V=1
+
+ echo "=== INSTALLING ==="
+
+ $MAKE_BINARY install
+}
+
+cd "$PATH_TO_BUILD_DIR"
+
+if [ $OSX_ARCH_COUNT -gt 0 ]; then
+ for ARCH in $OSX_ARCHS; do
+ echo "=== CLEANING FOR $ARCH ==="
+
+ $MAKE_BINARY clean && $MAKE_BINARY distclean
+
+ build_ffmpeg $ARCH --extra-cflags=-arch --extra-cflags=$ARCH --extra-ldflags=-arch --extra-ldflags=$ARCH
+
+ echo "=== COLLECTING BINARIES FOR $ARCH ==="
+
+ move_binaries $PATH_TO_PACKAGE_DIR/lib $PATH_TO_BUILD_DIR/stage/$ARCH/lib
+ move_binaries $PATH_TO_PACKAGE_DIR/bin $PATH_TO_BUILD_DIR/stage/$ARCH/bin
+ done
+
+ echo "=== MERGING ARCHITECTURES ==="
+
+ merge_binaries $PATH_TO_PACKAGE_DIR $PATH_TO_BUILD_DIR/stage $OSX_ARCHS
+else
+ build_ffmpeg @BUILD_ARCH@
+fi
diff --git a/vcpkg/ports/ffmpeg/portfile.cmake b/vcpkg/ports/ffmpeg/portfile.cmake
new file mode 100644
index 0000000..03397d7
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/portfile.cmake
@@ -0,0 +1,1020 @@
+vcpkg_from_github(
+ OUT_SOURCE_PATH SOURCE_PATH
+ REPO ffmpeg/ffmpeg
+ REF "n${VERSION}"
+ SHA512 8411c45f71d2d61184b11e2a786137044a80d9b979a7e2e8513efc5e716b3360bff4533a13875dd4bca492b97b97f0384f7fb4f3d796802e81981b0857d18a2b
+ HEAD_REF master
+ PATCHES
+ 0001-create-lib-libraries.patch
+ 0002-fix-msvc-link.patch
+ 0003-fix-windowsinclude.patch
+ 0004-dependencies.patch
+ 0005-fix-nasm.patch
+ 0007-fix-lib-naming.patch
+ 0013-define-WINVER.patch
+ 0020-fix-aarch64-libswscale.patch
+ 0024-fix-osx-host-c11.patch
+ 0040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch # Do not remove this patch. It is required by chromium
+ 0041-add-const-for-opengl-definition.patch
+ 0043-fix-miss-head.patch
+ 0044-fix-vulkan-debug-callback-abi.patch
+)
+
+if(SOURCE_PATH MATCHES " ")
+ message(FATAL_ERROR "Error: ffmpeg will not build with spaces in the path. Please use a directory with no spaces")
+endif()
+
+if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" OR VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ vcpkg_find_acquire_program(NASM)
+ get_filename_component(NASM_EXE_PATH "${NASM}" DIRECTORY)
+ vcpkg_add_to_path("${NASM_EXE_PATH}")
+endif()
+
+set(OPTIONS "--enable-pic --disable-doc --enable-debug --enable-runtime-cpudetect --disable-autodetect")
+
+if(VCPKG_TARGET_IS_MINGW)
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ string(APPEND OPTIONS " --target-os=mingw32")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ string(APPEND OPTIONS " --target-os=mingw64")
+ endif()
+elseif(VCPKG_TARGET_IS_LINUX)
+ string(APPEND OPTIONS " --target-os=linux --enable-pthreads")
+elseif(VCPKG_TARGET_IS_UWP)
+ string(APPEND OPTIONS " --target-os=win32 --enable-w32threads --enable-d3d11va --enable-d3d12va --enable-mediafoundation")
+elseif(VCPKG_TARGET_IS_WINDOWS)
+ string(APPEND OPTIONS " --target-os=win32 --enable-w32threads --enable-d3d11va --enable-d3d12va --enable-dxva2 --enable-mediafoundation")
+elseif(VCPKG_TARGET_IS_OSX)
+ string(APPEND OPTIONS " --target-os=darwin --enable-appkit --enable-avfoundation --enable-coreimage --enable-audiotoolbox --enable-videotoolbox")
+elseif(VCPKG_TARGET_IS_IOS)
+ string(APPEND OPTIONS " --enable-avfoundation --enable-coreimage --enable-videotoolbox")
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Android")
+ string(APPEND OPTIONS " --target-os=android --enable-jni --enable-mediacodec")
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "QNX")
+ string(APPEND OPTIONS " --target-os=qnx")
+endif()
+
+if(VCPKG_TARGET_IS_OSX)
+ list(JOIN VCPKG_OSX_ARCHITECTURES " " OSX_ARCHS)
+ list(LENGTH VCPKG_OSX_ARCHITECTURES OSX_ARCH_COUNT)
+endif()
+
+vcpkg_cmake_get_vars(cmake_vars_file)
+include("${cmake_vars_file}")
+if(VCPKG_DETECTED_MSVC)
+ string(APPEND OPTIONS " --disable-inline-asm") # clang-cl has inline assembly but this leads to undefined symbols.
+ set(OPTIONS "--toolchain=msvc ${OPTIONS}")
+ # This is required because ffmpeg depends upon optimizations to link correctly
+ string(APPEND VCPKG_COMBINED_C_FLAGS_DEBUG " -O2")
+ string(REGEX REPLACE "(^| )-RTC1( |$)" " " VCPKG_COMBINED_C_FLAGS_DEBUG "${VCPKG_COMBINED_C_FLAGS_DEBUG}")
+ string(REGEX REPLACE "(^| )-Od( |$)" " " VCPKG_COMBINED_C_FLAGS_DEBUG "${VCPKG_COMBINED_C_FLAGS_DEBUG}")
+ string(REGEX REPLACE "(^| )-Ob0( |$)" " " VCPKG_COMBINED_C_FLAGS_DEBUG "${VCPKG_COMBINED_C_FLAGS_DEBUG}")
+endif()
+
+string(APPEND VCPKG_COMBINED_C_FLAGS_DEBUG " -I \"${CURRENT_INSTALLED_DIR}/include\"")
+string(APPEND VCPKG_COMBINED_C_FLAGS_RELEASE " -I \"${CURRENT_INSTALLED_DIR}/include\"")
+
+## Setup vcpkg toolchain
+
+set(prog_env "")
+
+if(VCPKG_DETECTED_CMAKE_C_COMPILER)
+ get_filename_component(CC_path "${VCPKG_DETECTED_CMAKE_C_COMPILER}" DIRECTORY)
+ get_filename_component(CC_filename "${VCPKG_DETECTED_CMAKE_C_COMPILER}" NAME)
+ set(ENV{CC} "${CC_filename}")
+ string(APPEND OPTIONS " --cc=${CC_filename}")
+ string(APPEND OPTIONS " --host_cc=${CC_filename}")
+ list(APPEND prog_env "${CC_path}")
+endif()
+
+if(VCPKG_DETECTED_CMAKE_CXX_COMPILER)
+ get_filename_component(CXX_path "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}" DIRECTORY)
+ get_filename_component(CXX_filename "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}" NAME)
+ set(ENV{CXX} "${CXX_filename}")
+ string(APPEND OPTIONS " --cxx=${CXX_filename}")
+ #string(APPEND OPTIONS " --host_cxx=${CC_filename}")
+ list(APPEND prog_env "${CXX_path}")
+endif()
+
+if(VCPKG_DETECTED_CMAKE_RC_COMPILER)
+ get_filename_component(RC_path "${VCPKG_DETECTED_CMAKE_RC_COMPILER}" DIRECTORY)
+ get_filename_component(RC_filename "${VCPKG_DETECTED_CMAKE_RC_COMPILER}" NAME)
+ set(ENV{WINDRES} "${RC_filename}")
+ string(APPEND OPTIONS " --windres=${RC_filename}")
+ list(APPEND prog_env "${RC_path}")
+endif()
+
+if(VCPKG_DETECTED_CMAKE_LINKER AND VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
+ get_filename_component(LD_path "${VCPKG_DETECTED_CMAKE_LINKER}" DIRECTORY)
+ get_filename_component(LD_filename "${VCPKG_DETECTED_CMAKE_LINKER}" NAME)
+ set(ENV{LD} "${LD_filename}")
+ string(APPEND OPTIONS " --ld=${LD_filename}")
+ #string(APPEND OPTIONS " --host_ld=${LD_filename}")
+ list(APPEND prog_env "${LD_path}")
+endif()
+
+if(VCPKG_DETECTED_CMAKE_NM)
+ get_filename_component(NM_path "${VCPKG_DETECTED_CMAKE_NM}" DIRECTORY)
+ get_filename_component(NM_filename "${VCPKG_DETECTED_CMAKE_NM}" NAME)
+ set(ENV{NM} "${NM_filename}")
+ string(APPEND OPTIONS " --nm=${NM_filename}")
+ list(APPEND prog_env "${NM_path}")
+endif()
+
+if(VCPKG_DETECTED_CMAKE_AR)
+ get_filename_component(AR_path "${VCPKG_DETECTED_CMAKE_AR}" DIRECTORY)
+ get_filename_component(AR_filename "${VCPKG_DETECTED_CMAKE_AR}" NAME)
+ if(AR_filename MATCHES [[^(llvm-)?lib\.exe$]])
+ set(ENV{AR} "ar-lib ${AR_filename}")
+ string(APPEND OPTIONS " --ar='ar-lib ${AR_filename}'")
+ else()
+ set(ENV{AR} "${AR_filename}")
+ string(APPEND OPTIONS " --ar='${AR_filename}'")
+ endif()
+ list(APPEND prog_env "${AR_path}")
+endif()
+
+if(VCPKG_DETECTED_CMAKE_RANLIB)
+ get_filename_component(RANLIB_path "${VCPKG_DETECTED_CMAKE_RANLIB}" DIRECTORY)
+ get_filename_component(RANLIB_filename "${VCPKG_DETECTED_CMAKE_RANLIB}" NAME)
+ set(ENV{RANLIB} "${RANLIB_filename}")
+ string(APPEND OPTIONS " --ranlib=${RANLIB_filename}")
+ list(APPEND prog_env "${RANLIB_path}")
+endif()
+
+if(VCPKG_DETECTED_CMAKE_STRIP)
+ get_filename_component(STRIP_path "${VCPKG_DETECTED_CMAKE_STRIP}" DIRECTORY)
+ get_filename_component(STRIP_filename "${VCPKG_DETECTED_CMAKE_STRIP}" NAME)
+ set(ENV{STRIP} "${STRIP_filename}")
+ string(APPEND OPTIONS " --strip=${STRIP_filename}")
+ list(APPEND prog_env "${STRIP_path}")
+endif()
+
+if(VCPKG_HOST_IS_WINDOWS)
+ vcpkg_acquire_msys(MSYS_ROOT PACKAGES automake)
+ set(SHELL "${MSYS_ROOT}/usr/bin/bash.exe")
+ vcpkg_execute_required_process(
+ COMMAND "${SHELL}" -c "'/usr/bin/automake' --print-lib"
+ OUTPUT_VARIABLE automake_lib
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ WORKING_DIRECTORY "${MSYS_ROOT}"
+ LOGNAME automake-print-lib
+ )
+ list(APPEND prog_env "${MSYS_ROOT}/usr/bin" "${MSYS_ROOT}${automake_lib}")
+else()
+ find_program(SHELL bash)
+endif()
+
+list(REMOVE_DUPLICATES prog_env)
+vcpkg_add_to_path(PREPEND ${prog_env})
+
+# More? OBJCC BIN2C
+
+file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg" "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
+
+set(FFMPEG_PKGCONFIG_MODULES libavutil)
+
+if("nonfree" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-nonfree")
+endif()
+
+if("gpl" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-gpl")
+endif()
+
+if("version3" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-version3")
+endif()
+
+if("ffmpeg" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-ffmpeg")
+else()
+ set(OPTIONS "${OPTIONS} --disable-ffmpeg")
+endif()
+
+if("ffplay" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-ffplay")
+else()
+ set(OPTIONS "${OPTIONS} --disable-ffplay")
+endif()
+
+if("ffprobe" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-ffprobe")
+else()
+ set(OPTIONS "${OPTIONS} --disable-ffprobe")
+endif()
+
+if("avcodec" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-avcodec")
+ set(ENABLE_AVCODEC ON)
+ list(APPEND FFMPEG_PKGCONFIG_MODULES libavcodec)
+else()
+ set(OPTIONS "${OPTIONS} --disable-avcodec")
+ set(ENABLE_AVCODEC OFF)
+endif()
+
+if("avdevice" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-avdevice")
+ set(ENABLE_AVDEVICE ON)
+ list(APPEND FFMPEG_PKGCONFIG_MODULES libavdevice)
+else()
+ set(OPTIONS "${OPTIONS} --disable-avdevice")
+ set(ENABLE_AVDEVICE OFF)
+endif()
+
+if("avformat" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-avformat")
+ set(ENABLE_AVFORMAT ON)
+ list(APPEND FFMPEG_PKGCONFIG_MODULES libavformat)
+else()
+ set(OPTIONS "${OPTIONS} --disable-avformat")
+ set(ENABLE_AVFORMAT OFF)
+endif()
+
+if("avfilter" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-avfilter")
+ set(ENABLE_AVFILTER ON)
+ list(APPEND FFMPEG_PKGCONFIG_MODULES libavfilter)
+else()
+ set(OPTIONS "${OPTIONS} --disable-avfilter")
+ set(ENABLE_AVFILTER OFF)
+endif()
+
+if("postproc" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-postproc")
+ set(ENABLE_POSTPROC ON)
+ list(APPEND FFMPEG_PKGCONFIG_MODULES libpostproc)
+else()
+ set(OPTIONS "${OPTIONS} --disable-postproc")
+ set(ENABLE_POSTPROC OFF)
+endif()
+
+if("swresample" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-swresample")
+ set(ENABLE_SWRESAMPLE ON)
+ list(APPEND FFMPEG_PKGCONFIG_MODULES libswresample)
+else()
+ set(OPTIONS "${OPTIONS} --disable-swresample")
+ set(ENABLE_SWRESAMPLE OFF)
+endif()
+
+if("swscale" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-swscale")
+ set(ENABLE_SWSCALE ON)
+ list(APPEND FFMPEG_PKGCONFIG_MODULES libswscale)
+else()
+ set(OPTIONS "${OPTIONS} --disable-swscale")
+ set(ENABLE_SWSCALE OFF)
+endif()
+
+if ("alsa" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-alsa")
+else()
+ set(OPTIONS "${OPTIONS} --disable-alsa")
+endif()
+
+if("amf" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-amf")
+else()
+ set(OPTIONS "${OPTIONS} --disable-amf")
+endif()
+
+if("aom" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libaom")
+ set(WITH_AOM ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libaom")
+ set(WITH_AOM OFF)
+endif()
+
+if("ass" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libass")
+ set(WITH_ASS ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libass")
+ set(WITH_ASS OFF)
+endif()
+
+if("avisynthplus" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-avisynth")
+else()
+ set(OPTIONS "${OPTIONS} --disable-avisynth")
+endif()
+
+if("bzip2" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-bzlib")
+else()
+ set(OPTIONS "${OPTIONS} --disable-bzlib")
+endif()
+
+if("dav1d" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libdav1d")
+ set(WITH_DAV1D ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libdav1d")
+ set(WITH_DAV1D OFF)
+endif()
+
+if("fdk-aac" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libfdk-aac")
+ set(WITH_AAC ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libfdk-aac")
+ set(WITH_AAC OFF)
+endif()
+
+if("fontconfig" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libfontconfig")
+else()
+ set(OPTIONS "${OPTIONS} --disable-libfontconfig")
+endif()
+
+if("drawtext" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libharfbuzz")
+else()
+ set(OPTIONS "${OPTIONS} --disable-libharfbuzz")
+endif()
+
+if("freetype" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libfreetype")
+else()
+ set(OPTIONS "${OPTIONS} --disable-libfreetype")
+endif()
+
+if("fribidi" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libfribidi")
+else()
+ set(OPTIONS "${OPTIONS} --disable-libfribidi")
+endif()
+
+if("iconv" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-iconv")
+ set(WITH_ICONV ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-iconv")
+ set(WITH_ICONV OFF)
+endif()
+
+if("ilbc" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libilbc")
+ set(WITH_ILBC ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libilbc")
+ set(WITH_ILBC OFF)
+endif()
+
+if("lzma" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-lzma")
+ set(WITH_LZMA ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-lzma")
+ set(WITH_LZMA OFF)
+endif()
+
+if("mp3lame" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libmp3lame")
+ set(WITH_MP3LAME ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libmp3lame")
+ set(WITH_MP3LAME OFF)
+endif()
+
+if("modplug" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libmodplug")
+ set(WITH_MODPLUG ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libmodplug")
+ set(WITH_MODPLUG OFF)
+endif()
+
+if("nvcodec" IN_LIST FEATURES)
+ #Note: the --enable-cuda option does not actually require the cuda sdk or toolset port dependency as ffmpeg uses runtime detection and dynamic loading
+ set(OPTIONS "${OPTIONS} --enable-cuda --enable-nvenc --enable-nvdec --enable-cuvid --enable-ffnvcodec")
+else()
+ set(OPTIONS "${OPTIONS} --disable-cuda --disable-nvenc --disable-nvdec --disable-cuvid --disable-ffnvcodec")
+endif()
+
+if("opencl" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-opencl")
+ set(WITH_OPENCL ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-opencl")
+ set(WITH_OPENCL OFF)
+endif()
+
+if("opengl" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-opengl")
+else()
+ set(OPTIONS "${OPTIONS} --disable-opengl")
+endif()
+
+if("openh264" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libopenh264")
+ set(WITH_OPENH264 ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libopenh264")
+ set(WITH_OPENH264 OFF)
+endif()
+
+if("openjpeg" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libopenjpeg")
+ set(WITH_OPENJPEG ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libopenjpeg")
+ set(WITH_OPENJPEG OFF)
+endif()
+
+if("openmpt" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libopenmpt")
+ set(WITH_OPENMPT ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libopenmpt")
+ set(WITH_OPENMPT OFF)
+endif()
+
+if("openssl" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-openssl")
+else()
+ set(OPTIONS "${OPTIONS} --disable-openssl")
+ if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_UWP)
+ string(APPEND OPTIONS " --enable-schannel")
+ endif()
+endif()
+
+if("opus" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libopus")
+ set(WITH_OPUS ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libopus")
+ set(WITH_OPUS OFF)
+endif()
+
+if("sdl2" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-sdl2")
+else()
+ set(OPTIONS "${OPTIONS} --disable-sdl2")
+endif()
+
+if("snappy" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libsnappy")
+ set(WITH_SNAPPY ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libsnappy")
+ set(WITH_SNAPPY OFF)
+endif()
+
+if("soxr" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libsoxr")
+ set(WITH_SOXR ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libsoxr")
+ set(WITH_SOXR OFF)
+endif()
+
+if("speex" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libspeex")
+ set(WITH_SPEEX ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libspeex")
+ set(WITH_SPEEX OFF)
+endif()
+
+if("ssh" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libssh")
+ set(WITH_SSH ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libssh")
+ set(WITH_SSH OFF)
+endif()
+
+if("tensorflow" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libtensorflow")
+else()
+ set(OPTIONS "${OPTIONS} --disable-libtensorflow")
+endif()
+
+if("tesseract" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libtesseract")
+else()
+ set(OPTIONS "${OPTIONS} --disable-libtesseract")
+endif()
+
+if("theora" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libtheora")
+ set(WITH_THEORA ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libtheora")
+ set(WITH_THEORA OFF)
+endif()
+
+if("vorbis" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libvorbis")
+ set(WITH_VORBIS ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libvorbis")
+ set(WITH_VORBIS OFF)
+endif()
+
+if("vpx" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libvpx")
+ set(WITH_VPX ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libvpx")
+ set(WITH_VPX OFF)
+endif()
+
+if("vulkan" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-vulkan")
+else()
+ set(OPTIONS "${OPTIONS} --disable-vulkan")
+endif()
+
+if("webp" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libwebp")
+ set(WITH_WEBP ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libwebp")
+ set(WITH_WEBP OFF)
+endif()
+
+if("x264" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libx264")
+ set(WITH_X264 ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libx264")
+ set(WITH_X264 OFF)
+endif()
+
+if("x265" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libx265")
+ set(WITH_X265 ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libx265")
+ set(WITH_X265 OFF)
+endif()
+
+if("xml2" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libxml2")
+ set(WITH_XML2 ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libxml2")
+ set(WITH_XML2 OFF)
+endif()
+
+if("zlib" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-zlib")
+else()
+ set(OPTIONS "${OPTIONS} --disable-zlib")
+endif()
+
+if ("srt" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libsrt")
+ set(WITH_SRT ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libsrt")
+ set(WITH_SRT OFF)
+endif()
+
+if ("qsv" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libmfx --enable-encoder=h264_qsv --enable-decoder=h264_qsv")
+ set(WITH_MFX ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libmfx")
+ set(WITH_MFX OFF)
+endif()
+
+if ("vaapi" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-vaapi")
+ set(WITH_VAAPI ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-vaapi")
+ set(WITH_VAAPI OFF)
+endif()
+
+set(OPTIONS_CROSS "--enable-cross-compile")
+
+# ffmpeg needs --cross-prefix option to use appropriate tools for cross-compiling.
+if(VCPKG_DETECTED_CMAKE_C_COMPILER MATCHES "([^\/]*-)gcc$")
+ string(APPEND OPTIONS_CROSS " --cross-prefix=${CMAKE_MATCH_1}")
+endif()
+
+if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(BUILD_ARCH "x86_64")
+else()
+ set(BUILD_ARCH ${VCPKG_TARGET_ARCHITECTURE})
+endif()
+
+if (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" OR VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
+ if(VCPKG_TARGET_IS_WINDOWS)
+ vcpkg_find_acquire_program(GASPREPROCESSOR)
+ foreach(GAS_PATH ${GASPREPROCESSOR})
+ get_filename_component(GAS_ITEM_PATH ${GAS_PATH} DIRECTORY)
+ vcpkg_add_to_path("${GAS_ITEM_PATH}")
+ endforeach(GAS_PATH)
+ endif()
+endif()
+
+if(VCPKG_TARGET_IS_UWP)
+ set(ENV{LIBPATH} "$ENV{LIBPATH};$ENV{_WKITS10}references\\windows.foundation.foundationcontract\\2.0.0.0\\;$ENV{_WKITS10}references\\windows.foundation.universalapicontract\\3.0.0.0\\")
+ string(APPEND OPTIONS " --disable-programs")
+ string(APPEND OPTIONS " --extra-cflags=-DWINAPI_FAMILY=WINAPI_FAMILY_APP --extra-cflags=-D_WIN32_WINNT=0x0A00")
+ string(APPEND OPTIONS " --extra-ldflags=-APPCONTAINER --extra-ldflags=WindowsApp.lib")
+endif()
+
+if (VCPKG_TARGET_IS_IOS)
+ set(vcpkg_target_arch "${VCPKG_TARGET_ARCHITECTURE}")
+ if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(vcpkg_target_arch "x86_64")
+ elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
+ message(FATAL_ERROR "You can build for arm up to iOS 10 but ffmpeg can only be built for iOS 11.0 and later.
+ Did you mean arm64?")
+ elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ message(FATAL_ERROR "You can build for x86 up to iOS 10 but ffmpeg can only be built for iOS 11.0 and later.
+ Did you mean x64")
+ endif ()
+
+ set(vcpkg_osx_deployment_target "${VCPKG_OSX_DEPLOYMENT_TARGET}")
+ if (NOT VCPKG_OSX_DEPLOYMENT_TARGET)
+ set(vcpkg_osx_deployment_target 11.0)
+ elseif (VCPKG_OSX_DEPLOYMENT_TARGET LESS 11.0) # nowadays ffmpeg needs to be built for ios 11.0 and later
+ message(FATAL_ERROR "ffmpeg can be built only for iOS 11.0 and later but you set VCPKG_OSX_DEPLOYMENT_TARGET to
+ ${VCPKG_OSX_DEPLOYMENT_TARGET}")
+ endif ()
+
+ if (VCPKG_OSX_SYSROOT STREQUAL "iphonesimulator")
+ set(simulator "-simulator")
+ endif ()
+
+ set(OPTIONS "${OPTIONS} --extra-cflags=--target=${vcpkg_target_arch}-apple-ios${vcpkg_osx_deployment_target}${simulator}")
+ set(OPTIONS "${OPTIONS} --extra-ldflags=--target=${vcpkg_target_arch}-apple-ios${vcpkg_osx_deployment_target}${simulator}")
+
+ set(vcpkg_osx_sysroot "${VCPKG_OSX_SYSROOT}")
+ # only on x64 for some reason you need to specify the sdk path, otherwise it will try to build with the MacOS sdk
+ # (on apple silicon it's not required but shouldn't cause any problems)
+ if ((VCPKG_OSX_SYSROOT MATCHES "^(iphoneos|iphonesimulator)$") OR (NOT VCPKG_OSX_SYSROOT) OR (VCPKG_OSX_SYSROOT STREQUAL "")) # if it's not a path
+ if (VCPKG_OSX_SYSROOT MATCHES "^(iphoneos|iphonesimulator)$")
+ set(requested_sysroot "${VCPKG_OSX_SYSROOT}")
+ elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64") # if the sysroot is not specified we have to guess
+ set(requested_sysroot "iphoneos")
+ elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(requested_sysroot "iphonesimulator")
+ else ()
+ message(FATAL_ERROR "Unsupported build arch: ${VCPKG_TARGET_ARCHITECTURE}")
+ endif ()
+ message(STATUS "Retrieving default SDK for ${requested_sysroot}")
+ execute_process(
+ COMMAND /usr/bin/xcrun --sdk ${requested_sysroot} --show-sdk-path
+ OUTPUT_VARIABLE sdk_path
+ ERROR_VARIABLE xcrun_error
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_STRIP_TRAILING_WHITESPACE
+ )
+ if (sdk_path)
+ message(STATUS "Found!")
+ set(vcpkg_osx_sysroot "${sdk_path}")
+ else ()
+ message(FATAL_ERROR "Can't determine ${CMAKE_OSX_SYSROOT} SDK path. Error: ${xcrun_error}")
+ endif ()
+ endif ()
+ set(OPTIONS "${OPTIONS} --extra-cflags=-isysroot\"${vcpkg_osx_sysroot}\"")
+ set(OPTIONS "${OPTIONS} --extra-ldflags=-isysroot\"${vcpkg_osx_sysroot}\"")
+endif ()
+
+set(OPTIONS_DEBUG "--disable-optimizations")
+set(OPTIONS_RELEASE "--enable-optimizations")
+
+set(OPTIONS "${OPTIONS} ${OPTIONS_CROSS}")
+
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
+ set(OPTIONS "${OPTIONS} --disable-static --enable-shared")
+endif()
+
+if(VCPKG_TARGET_IS_MINGW)
+ set(OPTIONS "${OPTIONS} --extra_cflags=-D_WIN32_WINNT=0x0601")
+elseif(VCPKG_TARGET_IS_WINDOWS)
+ set(OPTIONS "${OPTIONS} --extra-cflags=-DHAVE_UNISTD_H=0")
+endif()
+
+set(maybe_needed_libraries -lm)
+separate_arguments(standard_libraries NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES}")
+foreach(item IN LISTS standard_libraries)
+ if(item IN_LIST maybe_needed_libraries)
+ set(OPTIONS "${OPTIONS} \"--extra-libs=${item}\"")
+ endif()
+endforeach()
+
+vcpkg_find_acquire_program(PKGCONFIG)
+set(OPTIONS "${OPTIONS} --pkg-config=\"${PKGCONFIG}\"")
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ set(OPTIONS "${OPTIONS} --pkg-config-flags=--static")
+endif()
+
+message(STATUS "Building Options: ${OPTIONS}")
+
+# Release build
+if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ if (VCPKG_DETECTED_MSVC)
+ set(OPTIONS_RELEASE "${OPTIONS_RELEASE} --extra-ldflags=-libpath:\"${CURRENT_INSTALLED_DIR}/lib\"")
+ else()
+ set(OPTIONS_RELEASE "${OPTIONS_RELEASE} --extra-ldflags=-L\"${CURRENT_INSTALLED_DIR}/lib\"")
+ endif()
+ message(STATUS "Building Release Options: ${OPTIONS_RELEASE}")
+ message(STATUS "Building ${PORT} for Release")
+ file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
+ # We use response files here as the only known way to handle spaces in paths
+ set(crsp "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/cflags.rsp")
+ string(REGEX REPLACE "-arch [A-Za-z0-9_]+" "" VCPKG_COMBINED_C_FLAGS_RELEASE_SANITIZED "${VCPKG_COMBINED_C_FLAGS_RELEASE}")
+ file(WRITE "${crsp}" "${VCPKG_COMBINED_C_FLAGS_RELEASE_SANITIZED}")
+ set(ldrsp "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/ldflags.rsp")
+ string(REGEX REPLACE "-arch [A-Za-z0-9_]+" "" VCPKG_COMBINED_SHARED_LINKER_FLAGS_RELEASE_SANITIZED "${VCPKG_COMBINED_SHARED_LINKER_FLAGS_RELEASE}")
+ file(WRITE "${ldrsp}" "${VCPKG_COMBINED_SHARED_LINKER_FLAGS_RELEASE_SANITIZED}")
+ set(ENV{CFLAGS} "@${crsp}")
+ # All tools except the msvc arm{,64} assembler accept @... as response file syntax.
+ # For that assembler, there is no known way to pass in flags. We must hope that not passing flags will work acceptably.
+ if(NOT VCPKG_DETECTED_MSVC OR NOT VCPKG_TARGET_ARCHITECTURE MATCHES "^arm")
+ set(ENV{ASFLAGS} "@${crsp}")
+ endif()
+ set(ENV{LDFLAGS} "@${ldrsp}")
+ set(ENV{ARFLAGS} "${VCPKG_COMBINED_STATIC_LINKER_FLAGS_RELEASE}")
+
+ set(BUILD_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
+ set(CONFIGURE_OPTIONS "${OPTIONS} ${OPTIONS_RELEASE}")
+ set(INST_PREFIX "${CURRENT_PACKAGES_DIR}")
+
+ configure_file("${CMAKE_CURRENT_LIST_DIR}/build.sh.in" "${BUILD_DIR}/build.sh" @ONLY)
+
+ z_vcpkg_setup_pkgconfig_path(CONFIG RELEASE)
+
+ vcpkg_execute_required_process(
+ COMMAND "${SHELL}" ./build.sh
+ WORKING_DIRECTORY "${BUILD_DIR}"
+ LOGNAME "build-${TARGET_TRIPLET}-rel"
+ SAVE_LOG_FILES ffbuild/config.log
+ )
+
+ z_vcpkg_restore_pkgconfig_path()
+endif()
+
+# Debug build
+if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ if (VCPKG_DETECTED_MSVC)
+ set(OPTIONS_DEBUG "${OPTIONS_DEBUG} --extra-ldflags=-libpath:\"${CURRENT_INSTALLED_DIR}/debug/lib\"")
+ else()
+ set(OPTIONS_DEBUG "${OPTIONS_DEBUG} --extra-ldflags=-L\"${CURRENT_INSTALLED_DIR}/debug/lib\"")
+ endif()
+ message(STATUS "Building Debug Options: ${OPTIONS_DEBUG}")
+ message(STATUS "Building ${PORT} for Debug")
+ file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
+ set(crsp "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/cflags.rsp")
+ string(REGEX REPLACE "-arch [A-Za-z0-9_]+" "" VCPKG_COMBINED_C_FLAGS_DEBUG_SANITIZED "${VCPKG_COMBINED_C_FLAGS_DEBUG}")
+ file(WRITE "${crsp}" "${VCPKG_COMBINED_C_FLAGS_DEBUG_SANITIZED}")
+ set(ldrsp "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/ldflags.rsp")
+ string(REGEX REPLACE "-arch [A-Za-z0-9_]+" "" VCPKG_COMBINED_SHARED_LINKER_FLAGS_DEBUG_SANITIZED "${VCPKG_COMBINED_SHARED_LINKER_FLAGS_DEBUG}")
+ file(WRITE "${ldrsp}" "${VCPKG_COMBINED_SHARED_LINKER_FLAGS_DEBUG_SANITIZED}")
+ set(ENV{CFLAGS} "@${crsp}")
+ if(NOT VCPKG_DETECTED_MSVC OR NOT VCPKG_TARGET_ARCHITECTURE MATCHES "^arm")
+ set(ENV{ASFLAGS} "@${crsp}")
+ endif()
+ set(ENV{LDFLAGS} "@${ldrsp}")
+ set(ENV{ARFLAGS} "${VCPKG_COMBINED_STATIC_LINKER_FLAGS_DEBUG}")
+
+ set(BUILD_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
+ set(CONFIGURE_OPTIONS "${OPTIONS} ${OPTIONS_DEBUG}")
+ set(INST_PREFIX "${CURRENT_PACKAGES_DIR}/debug")
+
+ configure_file("${CMAKE_CURRENT_LIST_DIR}/build.sh.in" "${BUILD_DIR}/build.sh" @ONLY)
+
+ z_vcpkg_setup_pkgconfig_path(CONFIG DEBUG)
+
+ vcpkg_execute_required_process(
+ COMMAND "${SHELL}" ./build.sh
+ WORKING_DIRECTORY "${BUILD_DIR}"
+ LOGNAME "build-${TARGET_TRIPLET}-dbg"
+ SAVE_LOG_FILES ffbuild/config.log
+ )
+
+ z_vcpkg_restore_pkgconfig_path()
+endif()
+
+if(VCPKG_TARGET_IS_WINDOWS)
+ file(GLOB DEF_FILES "${CURRENT_PACKAGES_DIR}/lib/*.def" "${CURRENT_PACKAGES_DIR}/debug/lib/*.def")
+
+ if(NOT VCPKG_TARGET_IS_MINGW)
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
+ set(LIB_MACHINE_ARG /machine:ARM)
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
+ set(LIB_MACHINE_ARG /machine:ARM64)
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ set(LIB_MACHINE_ARG /machine:x86)
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(LIB_MACHINE_ARG /machine:x64)
+ else()
+ message(FATAL_ERROR "Unsupported target architecture")
+ endif()
+
+ foreach(DEF_FILE ${DEF_FILES})
+ get_filename_component(DEF_FILE_DIR "${DEF_FILE}" DIRECTORY)
+ get_filename_component(DEF_FILE_NAME "${DEF_FILE}" NAME)
+ string(REGEX REPLACE "-[0-9]*\\.def" "${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX}" OUT_FILE_NAME "${DEF_FILE_NAME}")
+ file(TO_NATIVE_PATH "${DEF_FILE}" DEF_FILE_NATIVE)
+ file(TO_NATIVE_PATH "${DEF_FILE_DIR}/${OUT_FILE_NAME}" OUT_FILE_NATIVE)
+ message(STATUS "Generating ${OUT_FILE_NATIVE}")
+ vcpkg_execute_required_process(
+ COMMAND lib.exe "/def:${DEF_FILE_NATIVE}" "/out:${OUT_FILE_NATIVE}" ${LIB_MACHINE_ARG}
+ WORKING_DIRECTORY "${CURRENT_PACKAGES_DIR}"
+ LOGNAME "libconvert-${TARGET_TRIPLET}"
+ )
+ endforeach()
+ endif()
+
+ file(GLOB EXP_FILES "${CURRENT_PACKAGES_DIR}/lib/*.exp" "${CURRENT_PACKAGES_DIR}/debug/lib/*.exp")
+ file(GLOB LIB_FILES "${CURRENT_PACKAGES_DIR}/bin/*${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX}" "${CURRENT_PACKAGES_DIR}/debug/bin/*${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX}")
+ if(VCPKG_TARGET_IS_MINGW)
+ file(GLOB LIB_FILES_2 "${CURRENT_PACKAGES_DIR}/bin/*.lib" "${CURRENT_PACKAGES_DIR}/debug/bin/*.lib")
+ endif()
+ set(files_to_remove ${EXP_FILES} ${LIB_FILES} ${LIB_FILES_2} ${DEF_FILES})
+ if(files_to_remove)
+ file(REMOVE ${files_to_remove})
+ endif()
+endif()
+
+if("ffmpeg" IN_LIST FEATURES)
+ vcpkg_copy_tools(TOOL_NAMES ffmpeg AUTO_CLEAN)
+endif()
+if("ffprobe" IN_LIST FEATURES)
+ vcpkg_copy_tools(TOOL_NAMES ffprobe AUTO_CLEAN)
+endif()
+if("ffplay" IN_LIST FEATURES)
+ vcpkg_copy_tools(TOOL_NAMES ffplay AUTO_CLEAN)
+endif()
+
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include" "${CURRENT_PACKAGES_DIR}/debug/share")
+
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin" "${CURRENT_PACKAGES_DIR}/debug/bin")
+endif()
+
+vcpkg_copy_pdbs()
+
+if(VCPKG_TARGET_IS_WINDOWS)
+ file(GLOB pc_files "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/*.pc" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/*.pc")
+ foreach(file IN LISTS pc_files)
+ # ffmpeg exports -libpath:foo and bar.lib for transitive deps.
+ # But CMake's pkg_check_modules cannot handle this properly.
+ # pc files generally use non-msvc syntax with -Lfoo -lbar.
+ file(READ "${file}" content)
+ foreach(entry IN ITEMS Libs Libs.private)
+ if(content MATCHES "${entry}:( [^\n]*)")
+ set(old_value "${CMAKE_MATCH_1}")
+ string(REGEX REPLACE "-libpath:" "-L" new_value "${old_value}")
+ string(REGEX REPLACE " ([^ /]+)[.]lib" " -l\\1" new_value "${new_value}")
+ string(REPLACE "${entry}:${old_value}" "${entry}:${new_value}" content "${content}")
+ endif()
+ endforeach()
+ file(WRITE "${file}" "${content}")
+ endforeach()
+endif()
+vcpkg_fixup_pkgconfig()
+
+# Handle dependencies
+
+x_vcpkg_pkgconfig_get_modules(PREFIX FFMPEG_PKGCONFIG MODULES ${FFMPEG_PKGCONFIG_MODULES} LIBS)
+
+function(append_dependencies_from_libs out)
+ cmake_parse_arguments(PARSE_ARGV 1 "arg" "" "LIBS" "")
+ separate_arguments(contents UNIX_COMMAND "${arg_LIBS}")
+ list(FILTER contents EXCLUDE REGEX "^-F.+")
+ list(FILTER contents EXCLUDE REGEX "^-framework$")
+ list(FILTER contents EXCLUDE REGEX "^-L.+")
+ list(FILTER contents EXCLUDE REGEX "^-libpath:.+")
+ list(TRANSFORM contents REPLACE "^-Wl,-framework," "-l")
+ list(FILTER contents EXCLUDE REGEX "^-Wl,.+")
+ list(TRANSFORM contents REPLACE "^-l" "")
+ list(FILTER contents EXCLUDE REGEX "^avutil$")
+ list(FILTER contents EXCLUDE REGEX "^avcodec$")
+ list(FILTER contents EXCLUDE REGEX "^avdevice$")
+ list(FILTER contents EXCLUDE REGEX "^avfilter$")
+ list(FILTER contents EXCLUDE REGEX "^avformat$")
+ list(FILTER contents EXCLUDE REGEX "^postproc$")
+ list(FILTER contents EXCLUDE REGEX "^swresample$")
+ list(FILTER contents EXCLUDE REGEX "^swscale$")
+ if(VCPKG_TARGET_IS_WINDOWS)
+ list(TRANSFORM contents TOLOWER)
+ endif()
+ if(contents)
+ list(APPEND "${out}" "${contents}")
+ set("${out}" "${${out}}" PARENT_SCOPE)
+ endif()
+endfunction()
+
+append_dependencies_from_libs(FFMPEG_DEPENDENCIES_RELEASE LIBS "${FFMPEG_PKGCONFIG_LIBS_RELEASE}")
+append_dependencies_from_libs(FFMPEG_DEPENDENCIES_DEBUG LIBS "${FFMPEG_PKGCONFIG_LIBS_DEBUG}")
+
+# must remove duplicates from the front to respect link order so reverse first
+list(REVERSE FFMPEG_DEPENDENCIES_RELEASE)
+list(REVERSE FFMPEG_DEPENDENCIES_DEBUG)
+list(REMOVE_DUPLICATES FFMPEG_DEPENDENCIES_RELEASE)
+list(REMOVE_DUPLICATES FFMPEG_DEPENDENCIES_DEBUG)
+list(REVERSE FFMPEG_DEPENDENCIES_RELEASE)
+list(REVERSE FFMPEG_DEPENDENCIES_DEBUG)
+
+message(STATUS "Dependencies (release): ${FFMPEG_DEPENDENCIES_RELEASE}")
+message(STATUS "Dependencies (debug): ${FFMPEG_DEPENDENCIES_DEBUG}")
+
+# Handle version strings
+
+function(extract_regex_from_file out)
+ cmake_parse_arguments(PARSE_ARGV 1 "arg" "MAJOR" "FILE_WITHOUT_EXTENSION;REGEX" "")
+ file(READ "${arg_FILE_WITHOUT_EXTENSION}.h" contents)
+ if (contents MATCHES "${arg_REGEX}")
+ if(NOT CMAKE_MATCH_COUNT EQUAL 1)
+ message(FATAL_ERROR "Could not identify match group in regular expression \"${arg_REGEX}\"")
+ endif()
+ else()
+ if (arg_MAJOR)
+ file(READ "${arg_FILE_WITHOUT_EXTENSION}_major.h" contents)
+ if (contents MATCHES "${arg_REGEX}")
+ if(NOT CMAKE_MATCH_COUNT EQUAL 1)
+ message(FATAL_ERROR "Could not identify match group in regular expression \"${arg_REGEX}\"")
+ endif()
+ else()
+ message(WARNING "Could not find line matching \"${arg_REGEX}\" in file \"${arg_FILE_WITHOUT_EXTENSION}_major.h\"")
+ endif()
+ else()
+ message(WARNING "Could not find line matching \"${arg_REGEX}\" in file \"${arg_FILE_WITHOUT_EXTENSION}.h\"")
+ endif()
+ endif()
+ set("${out}" "${CMAKE_MATCH_1}" PARENT_SCOPE)
+endfunction()
+
+function(extract_version_from_component out)
+ cmake_parse_arguments(PARSE_ARGV 1 "arg" "" "COMPONENT" "")
+ string(TOLOWER "${arg_COMPONENT}" component_lower)
+ string(TOUPPER "${arg_COMPONENT}" component_upper)
+ extract_regex_from_file(major_version
+ FILE_WITHOUT_EXTENSION "${SOURCE_PATH}/${component_lower}/version"
+ MAJOR
+ REGEX "#define ${component_upper}_VERSION_MAJOR[ ]+([0-9]+)"
+ )
+ extract_regex_from_file(minor_version
+ FILE_WITHOUT_EXTENSION "${SOURCE_PATH}/${component_lower}/version"
+ REGEX "#define ${component_upper}_VERSION_MINOR[ ]+([0-9]+)"
+ )
+ extract_regex_from_file(micro_version
+ FILE_WITHOUT_EXTENSION "${SOURCE_PATH}/${component_lower}/version"
+ REGEX "#define ${component_upper}_VERSION_MICRO[ ]+([0-9]+)"
+ )
+ set("${out}" "${major_version}.${minor_version}.${micro_version}" PARENT_SCOPE)
+endfunction()
+
+extract_regex_from_file(FFMPEG_VERSION
+ FILE_WITHOUT_EXTENSION "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/libavutil/ffversion"
+ REGEX "#define FFMPEG_VERSION[ ]+\"(.+)\""
+)
+
+extract_version_from_component(LIBAVUTIL_VERSION
+ COMPONENT libavutil)
+extract_version_from_component(LIBAVCODEC_VERSION
+ COMPONENT libavcodec)
+extract_version_from_component(LIBAVDEVICE_VERSION
+ COMPONENT libavdevice)
+extract_version_from_component(LIBAVFILTER_VERSION
+ COMPONENT libavfilter)
+extract_version_from_component(LIBAVFORMAT_VERSION
+ COMPONENT libavformat)
+extract_version_from_component(LIBSWRESAMPLE_VERSION
+ COMPONENT libswresample)
+extract_version_from_component(LIBSWSCALE_VERSION
+ COMPONENT libswscale)
+
+# Handle copyright
+file(STRINGS "${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-rel-out.log" LICENSE_STRING REGEX "License: .*" LIMIT_COUNT 1)
+if(LICENSE_STRING STREQUAL "License: LGPL version 2.1 or later")
+ set(LICENSE_FILE "COPYING.LGPLv2.1")
+elseif(LICENSE_STRING STREQUAL "License: LGPL version 3 or later")
+ set(LICENSE_FILE "COPYING.LGPLv3")
+elseif(LICENSE_STRING STREQUAL "License: GPL version 2 or later")
+ set(LICENSE_FILE "COPYING.GPLv2")
+elseif(LICENSE_STRING STREQUAL "License: GPL version 3 or later")
+ set(LICENSE_FILE "COPYING.GPLv3")
+elseif(LICENSE_STRING STREQUAL "License: nonfree and unredistributable")
+ set(LICENSE_FILE "COPYING.NONFREE")
+ file(WRITE "${SOURCE_PATH}/${LICENSE_FILE}" "${LICENSE_STRING}")
+else()
+ message(FATAL_ERROR "Failed to identify license (${LICENSE_STRING})")
+endif()
+
+configure_file("${CMAKE_CURRENT_LIST_DIR}/FindFFMPEG.cmake.in" "${CURRENT_PACKAGES_DIR}/share/${PORT}/FindFFMPEG.cmake" @ONLY)
+configure_file("${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" "${CURRENT_PACKAGES_DIR}/share/${PORT}/vcpkg-cmake-wrapper.cmake" @ONLY)
+
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "static" AND NOT VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_OSX AND NOT VCPKG_TARGET_IS_IOS)
+ file(APPEND "${CURRENT_PACKAGES_DIR}/share/${PORT}/usage" "
+To use the static libraries to build your own shared library,
+you may need to add the following link option for your library:
+
+ -Wl,-Bsymbolic
+")
+endif()
+
+vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/${LICENSE_FILE}")
diff --git a/vcpkg/ports/ffmpeg/usage b/vcpkg/ports/ffmpeg/usage
new file mode 100644
index 0000000..b2d02a0
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/usage
@@ -0,0 +1,29 @@
+ffmpeg provides CMake integration:
+
+ find_package(FFMPEG REQUIRED)
+ target_include_directories(main PRIVATE ${FFMPEG_INCLUDE_DIRS})
+ target_link_directories(main PRIVATE ${FFMPEG_LIBRARY_DIRS})
+ target_link_libraries(main PRIVATE ${FFMPEG_LIBRARIES})
+
+ffmpeg provides pkg-config modules:
+
+ # FFmpeg codec library
+ libavcodec
+
+ # FFmpeg device handling library
+ libavdevice
+
+ # FFmpeg audio/video filtering library
+ libavfilter
+
+ # FFmpeg container format library
+ libavformat
+
+ # FFmpeg utility library
+ libavutil
+
+ # FFmpeg audio resampling library
+ libswresample
+
+ # FFmpeg image rescaling library
+ libswscale
diff --git a/vcpkg/ports/ffmpeg/vcpkg-cmake-wrapper.cmake b/vcpkg/ports/ffmpeg/vcpkg-cmake-wrapper.cmake
new file mode 100644
index 0000000..662ed28
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/vcpkg-cmake-wrapper.cmake
@@ -0,0 +1,318 @@
+set(FFMPEG_PREV_MODULE_PATH ${CMAKE_MODULE_PATH})
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
+
+cmake_policy(SET CMP0012 NEW)
+
+# Detect if we use "our" find module or a vendored one
+set(z_vcpkg_using_vcpkg_find_ffmpeg OFF)
+
+# Detect targets created e.g. by VTK/CMake/FindFFMPEG.cmake
+set(vcpkg_no_avcodec_target ON)
+set(vcpkg_no_avformat_target ON)
+set(vcpkg_no_avutil_target ON)
+set(vcpkg_no_swresample_target ON)
+if(TARGET FFmpeg::avcodec)
+ set(vcpkg_no_avcodec_target OFF)
+endif()
+if(TARGET FFmpeg::avformat)
+ set(vcpkg_no_avformat_target OFF)
+endif()
+if(TARGET FFmpeg::avutil)
+ set(vcpkg_no_avutil_target OFF)
+endif()
+if(TARGET FFmpeg::swresample)
+ set(vcpkg_no_swresample_target OFF)
+endif()
+
+_find_package(${ARGS})
+
+# Fixup of variables and targets for (some) vendored find modules
+if(NOT z_vcpkg_using_vcpkg_find_ffmpeg AND NOT "@BUILD_SHARED_LIBS@")
+
+include(SelectLibraryConfigurations)
+
+if(CMAKE_HOST_WIN32)
+ set(PKG_CONFIG_EXECUTABLE "${CMAKE_CURRENT_LIST_DIR}/../../../@_HOST_TRIPLET@/tools/pkgconf/pkgconf.exe" CACHE STRING "" FORCE)
+endif()
+set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON) # Required for CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 3.1 which otherwise ignores CMAKE_PREFIX_PATH
+find_package(PkgConfig)
+
+pkg_check_modules(PKG_libavcodec libavcodec)
+if(APPLE)
+ list(FILTER PKG_libavcodec_LIBRARIES INCLUDE REGEX "^-framework ")
+ if(PKG_libavcodec_LIBRARIES)
+ list(APPEND FFMPEG_LIBRARIES ${PKG_libavcodec_LIBRARIES})
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE ${PKG_libavcodec_LIBRARIES})
+ endif()
+ endif()
+elseif(WIN32)
+ foreach(z_libavcodec_link_lib IN ITEMS bcrypt crypt32 mfuuid psapi secur32 shlwapi strmiids vfw32 ws2_32 usp10 cfgmgr32 rpcrt4)
+ if("-l${z_libavcodec_link_lib}" IN_LIST PKG_libavcodec_LDFLAGS)
+ list(APPEND FFMPEG_LIBRARIES "${z_libavcodec_link_lib}")
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE "$<LINK_ONLY:${z_libavcodec_link_lib}>")
+ endif()
+ endif()
+ endforeach()
+endif()
+
+if(@WITH_MP3LAME@)
+ find_package(mp3lame CONFIG )
+ list(APPEND FFMPEG_LIBRARIES mp3lame::mp3lame)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ # target exists after find_package and wasn't defined before
+ target_link_libraries(FFmpeg::avcodec INTERFACE mp3lame::mp3lame)
+ endif()
+endif()
+
+if(@WITH_XML2@)
+ find_package(LibXml2 )
+ list(APPEND FFMPEG_LIBRARIES LibXml2::LibXml2)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE LibXml2::LibXml2)
+ endif()
+ if(vcpkg_no_avformat_target AND TARGET FFmpeg::avformat)
+ target_link_libraries(FFmpeg::avformat INTERFACE LibXml2::LibXml2)
+ endif()
+endif()
+
+if(@WITH_ICONV@)
+ find_package(Iconv )
+ list(APPEND FFMPEG_LIBRARIES Iconv::Iconv)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE Iconv::Iconv)
+ endif()
+ if(vcpkg_no_avformat_target AND TARGET FFmpeg::avformat)
+ target_link_libraries(FFmpeg::avformat INTERFACE Iconv::Iconv)
+ endif()
+endif()
+
+if(@WITH_LZMA@)
+ find_package(liblzma CONFIG )
+ list(APPEND FFMPEG_LIBRARIES liblzma::liblzma)
+ if(vcpkg_no_avformat_target AND TARGET FFmpeg::avformat)
+ target_link_libraries(FFmpeg::avformat INTERFACE liblzma::liblzma)
+ endif()
+endif()
+
+if(@WITH_SSH@)
+ find_package(libssh CONFIG )
+ list(APPEND FFMPEG_LIBRARIES ssh)
+ if(vcpkg_no_avformat_target AND TARGET FFmpeg::avformat)
+ target_link_libraries(FFmpeg::avformat INTERFACE ssh)
+ endif()
+endif()
+
+if(@WITH_OPENMPT@)
+ find_package(libopenmpt CONFIG )
+ list(APPEND FFMPEG_LIBRARIES libopenmpt::libopenmpt)
+ if(vcpkg_no_avformat_target AND TARGET FFmpeg::avformat)
+ target_link_libraries(FFmpeg::avformat INTERFACE libopenmpt::libopenmpt)
+ endif()
+endif()
+
+if(@WITH_MODPLUG@)
+ pkg_check_modules(modplug IMPORTED_TARGET libmodplug)
+ list(APPEND FFMPEG_LIBRARIES PkgConfig::modplug)
+ if(vcpkg_no_avformat_target AND TARGET FFmpeg::avformat)
+ target_link_libraries(FFmpeg::avformat INTERFACE PkgConfig::modplug)
+ endif()
+endif()
+
+if(@WITH_SRT@)
+ pkg_check_modules(srt IMPORTED_TARGET srt)
+ list(APPEND FFMPEG_LIBRARIES PkgConfig::srt)
+ if(vcpkg_no_avformat_target AND TARGET FFmpeg::avformat)
+ target_link_libraries(FFmpeg::avformat INTERFACE PkgConfig::srt)
+ endif()
+endif()
+
+if(@WITH_DAV1D@)
+ pkg_check_modules(dav1d IMPORTED_TARGET dav1d)
+ list(APPEND FFMPEG_LIBRARIES PkgConfig::dav1d)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE PkgConfig::dav1d)
+ endif()
+endif()
+
+if(@WITH_OPENH264@)
+ pkg_check_modules(openh264 IMPORTED_TARGET openh264)
+ list(APPEND FFMPEG_LIBRARIES PkgConfig::openh264)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE PkgConfig::openh264)
+ endif()
+endif()
+
+if(@WITH_WEBP@)
+ find_package(WebP CONFIG )
+ list(APPEND FFMPEG_LIBRARIES WebP::webp WebP::webpdecoder WebP::webpdemux WebP::libwebpmux)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE WebP::webp WebP::webpdecoder WebP::webpdemux WebP::libwebpmux)
+ endif()
+endif()
+
+if(@WITH_SOXR@)
+ find_library(SOXR_LIBRARY_RELEASE NAMES soxr PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" NO_DEFAULT_PATH)
+ find_library(SOXR_LIBRARY_DEBUG NAMES soxr PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib" NO_DEFAULT_PATH)
+ select_library_configurations(SOXR)
+ if(SOXR_LIBRARY_RELEASE)
+ list(APPEND FFMPEG_LIBRARIES $<$<NOT:$<CONFIG:DEBUG>>:${SOXR_LIBRARY_RELEASE}>)
+ endif()
+ if(SOXR_LIBRARY_DEBUG)
+ list(APPEND FFMPEG_LIBRARIES $<$<CONFIG:DEBUG>:${SOXR_LIBRARY_DEBUG}>)
+ endif()
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE ${SOXR_LIBRARIES})
+ endif()
+ if(vcpkg_no_swresample_target AND TARGET FFmpeg::swresample)
+ target_link_libraries(FFmpeg::swresample INTERFACE ${SOXR_LIBRARIES})
+ endif()
+endif()
+
+if(@WITH_THEORA@)
+ pkg_check_modules(theora IMPORTED_TARGET theora)
+ list(APPEND FFMPEG_LIBRARIES PkgConfig::theora)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE PkgConfig::theora)
+ endif()
+endif()
+
+if(@WITH_MFX@)
+ pkg_check_modules(libmfx IMPORTED_TARGET libmfx)
+ list(APPEND FFMPEG_LIBRARIES PkgConfig::libmfx)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE PkgConfig::libmfx)
+ endif()
+ if(vcpkg_no_avutil_target AND TARGET FFmpeg::avutil)
+ target_link_libraries(FFmpeg::avutil INTERFACE PkgConfig::libmfx)
+ endif()
+endif()
+
+if(@WITH_ILBC@)
+ pkg_check_modules(libilbc IMPORTED_TARGET libilbc)
+ list(APPEND FFMPEG_LIBRARIES PkgConfig::libilbc)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE PkgConfig::libilbc)
+ endif()
+endif()
+
+if(@WITH_THEORA@)
+ pkg_check_modules(theora IMPORTED_TARGET theora)
+ list(APPEND FFMPEG_LIBRARIES PkgConfig::theora)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE PkgConfig::theora)
+ endif()
+endif()
+
+if(@WITH_VORBIS@)
+ find_package(Vorbis CONFIG )
+ list(APPEND FFMPEG_LIBRARIES Vorbis::vorbis Vorbis::vorbisenc)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE Vorbis::vorbis Vorbis::vorbisenc)
+ endif()
+endif()
+
+if(@WITH_VPX@)
+ pkg_check_modules(vpx IMPORTED_TARGET vpx)
+ list(APPEND FFMPEG_LIBRARIES PkgConfig::vpx)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE PkgConfig::vpx)
+ endif()
+endif()
+
+if(@WITH_OPUS@)
+ find_package(Opus CONFIG )
+ list(APPEND FFMPEG_LIBRARIES Opus::opus)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE Opus::opus)
+ endif()
+endif()
+
+if(@WITH_SPEEX@)
+ pkg_check_modules(speex IMPORTED_TARGET speex)
+ list(APPEND FFMPEG_LIBRARIES PkgConfig::speex)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE PkgConfig::speex)
+ endif()
+endif()
+
+if(@WITH_OPENJPEG@)
+ find_package(OpenJPEG CONFIG )
+ list(APPEND FFMPEG_LIBRARIES openjp2)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE openjp2)
+ endif()
+endif()
+
+if(@WITH_SNAPPY@)
+ find_package(Snappy CONFIG )
+ list(APPEND FFMPEG_LIBRARIES Snappy::snappy)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE Snappy::snappy)
+ endif()
+endif()
+
+if(@WITH_AOM@)
+ pkg_check_modules(aom IMPORTED_TARGET aom)
+ list(APPEND FFMPEG_LIBRARIES PkgConfig::aom)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE PkgConfig::aom)
+ endif()
+endif()
+
+if(@WITH_X264@)
+ pkg_check_modules(x264 IMPORTED_TARGET x264)
+ list(APPEND FFMPEG_LIBRARIES PkgConfig::x264)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE PkgConfig::x264)
+ endif()
+endif()
+
+if(@WITH_X265@)
+ pkg_check_modules(x265 IMPORTED_TARGET x265)
+ list(APPEND FFMPEG_LIBRARIES PkgConfig::x265)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE PkgConfig::x265)
+ endif()
+endif()
+
+if(@WITH_AAC@)
+ find_package(fdk-aac CONFIG)
+ list(APPEND FFMPEG_LIBRARIES FDK-AAC::fdk-aac)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE FDK-AAC::fdk-aac)
+ endif()
+endif()
+
+if(@WITH_OPENCL@)
+ find_package(OpenCL )
+ list(APPEND FFMPEG_LIBRARIES OpenCL::OpenCL)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE OpenCL::OpenCL)
+ endif()
+ if(vcpkg_no_avutil_target AND TARGET FFmpeg::avutil)
+ target_link_libraries(FFmpeg::avutil INTERFACE OpenCL::OpenCL)
+ endif()
+endif()
+
+if(@WITH_VAAPI@)
+ pkg_check_modules(libva IMPORTED_TARGET libva)
+ pkg_check_modules(libva-drm IMPORTED_TARGET libva-drm)
+ list(APPEND FFMPEG_LIBRARIES PkgConfig::libva PkgConfig::libva-drm)
+ if(vcpkg_no_avcodec_target AND TARGET FFmpeg::avcodec)
+ target_link_libraries(FFmpeg::avcodec INTERFACE PkgConfig::libva PkgConfig::libva-drm)
+ endif()
+endif()
+
+endif(NOT z_vcpkg_using_vcpkg_find_ffmpeg)
+unset(z_vcpkg_using_vcpkg_find_ffmpeg)
+
+set(FFMPEG_LIBRARY ${FFMPEG_LIBRARIES})
+
+set(CMAKE_MODULE_PATH ${FFMPEG_PREV_MODULE_PATH})
+
+unset(vcpkg_no_avcodec_target)
+unset(vcpkg_no_avformat_target)
+unset(vcpkg_no_avutil_target)
+unset(vcpkg_no_swresample_target)
diff --git a/vcpkg/ports/ffmpeg/vcpkg.json b/vcpkg/ports/ffmpeg/vcpkg.json
new file mode 100644
index 0000000..b94838c
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/vcpkg.json
@@ -0,0 +1,735 @@
+{
+ "name": "ffmpeg",
+ "version": "7.1.2",
+ "port-version": 2,
+ "description": [
+ "A library to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created.",
+ "FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure ancient formats up to the cutting edge. No matter if they were designed by some standards committee, the community or a corporation. It is also highly portable: FFmpeg compiles, runs, and passes our testing infrastructure FATE across Linux, Mac OS X, Microsoft Windows, the BSDs, Solaris, etc. under a wide variety of build environments, machine architectures, and configurations."
+ ],
+ "homepage": "https://ffmpeg.org",
+ "license": null,
+ "dependencies": [
+ {
+ "name": "vcpkg-cmake-get-vars",
+ "host": true
+ },
+ {
+ "name": "vcpkg-pkgconfig-get-modules",
+ "host": true
+ }
+ ],
+ "default-features": [
+ "avcodec",
+ "avdevice",
+ "avfilter",
+ "avformat",
+ "swresample",
+ "swscale"
+ ],
+ "features": {
+ "all": {
+ "description": "Build with all allowed dependencies selected that are compatible with the lgpl license",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "sdl2"
+ ]
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "aom",
+ "avcodec",
+ "avdevice",
+ "avfilter",
+ "avformat",
+ "bzip2",
+ "freetype",
+ "iconv",
+ "lzma",
+ "mp3lame",
+ "openjpeg",
+ "openmpt",
+ "opus",
+ "snappy",
+ "soxr",
+ "speex",
+ "swresample",
+ "swscale",
+ "theora",
+ "vorbis",
+ "vpx",
+ "vulkan",
+ "webp",
+ "xml2",
+ "zlib"
+ ]
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "alsa"
+ ],
+ "platform": "linux"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "ass"
+ ],
+ "platform": "!uwp"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "fontconfig"
+ ],
+ "platform": "!uwp"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "fribidi"
+ ],
+ "platform": "!uwp"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "modplug"
+ ],
+ "platform": "!uwp"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "openh264"
+ ],
+ "platform": "!uwp"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "srt"
+ ],
+ "platform": "!uwp"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "ilbc"
+ ],
+ "platform": "!(arm & uwp)"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "ssh"
+ ],
+ "platform": "!(uwp | arm)"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "amf"
+ ],
+ "platform": "!osx & !uwp"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "opencl"
+ ],
+ "platform": "!uwp & !osx"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "opengl"
+ ],
+ "platform": "!uwp & !(arm64 & windows)"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "tensorflow"
+ ],
+ "platform": "x64 & !static & !uwp & !windows"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "dav1d"
+ ],
+ "platform": "!(uwp | (windows & x86 & !static))"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "tesseract"
+ ],
+ "platform": "!(windows & arm) & !static & !uwp"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "qsv"
+ ],
+ "platform": "linux | (!osx & !uwp & !(arm & windows))"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "nvcodec"
+ ],
+ "platform": "linux | (!osx & !uwp & !(arm64 & windows))"
+ }
+ ]
+ },
+ "all-gpl": {
+ "description": "Build with all allowed dependencies selected that are compatible with the gpl license",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "all",
+ "gpl",
+ "postproc"
+ ]
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "x264"
+ ],
+ "platform": "!(arm & windows)"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "x265"
+ ],
+ "platform": "!uwp & !(arm & windows)"
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "avisynthplus"
+ ],
+ "platform": "windows & !arm & !uwp & !static"
+ }
+ ]
+ },
+ "all-nonfree": {
+ "description": "Build with all allowed dependencies selected with a non-redistributable license",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "all-gpl",
+ "fdk-aac",
+ "nonfree",
+ "openssl"
+ ]
+ }
+ ]
+ },
+ "alsa": {
+ "description": "Enable ALSA support",
+ "dependencies": [
+ "alsa"
+ ]
+ },
+ "amf": {
+ "description": "AMD AMF codec support",
+ "dependencies": [
+ "amd-amf"
+ ]
+ },
+ "aom": {
+ "description": "AV1 video encoding/decoding via libaom support in ffmpeg",
+ "dependencies": [
+ "aom"
+ ]
+ },
+ "ass": {
+ "description": "Libass subtitles rendering, needed for subtitles and ass filter support in ffmpeg",
+ "dependencies": [
+ "libass"
+ ]
+ },
+ "avcodec": {
+ "description": "Build the avcodec library"
+ },
+ "avdevice": {
+ "description": "Build the avdevice library",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "avcodec",
+ "avformat"
+ ]
+ }
+ ]
+ },
+ "avfilter": {
+ "description": "Build the avfilter library"
+ },
+ "avformat": {
+ "description": "Build the avformat library",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "avcodec"
+ ]
+ }
+ ]
+ },
+ "avisynthplus": {
+ "description": "Reading of AviSynth script files",
+ "supports": "windows & !static",
+ "dependencies": [
+ "avisynthplus",
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "gpl"
+ ]
+ }
+ ]
+ },
+ "avresample": {
+ "description": "Build the avresample library"
+ },
+ "bzip2": {
+ "description": "Bzip2 support",
+ "dependencies": [
+ "bzip2"
+ ]
+ },
+ "dav1d": {
+ "description": "AV1 decoding via libdav1d",
+ "dependencies": [
+ "dav1d"
+ ]
+ },
+ "drawtext": {
+ "description": "Enable the drawtext filter",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "freetype"
+ ]
+ },
+ "harfbuzz"
+ ]
+ },
+ "dvdvideo": {
+ "description": "DVD-Video demuxer",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "gpl"
+ ]
+ },
+ "libdvdnav",
+ "libdvdread"
+ ]
+ },
+ "fdk-aac": {
+ "description": "AAC de/encoding via libfdk-aac, **including GPL-incompatible patent-encumbered HE-AAC**. If you do not require HE-AAC, use the built-in FFmpeg AAC codec.",
+ "dependencies": [
+ {
+ "name": "fdk-aac",
+ "default-features": false,
+ "features": [
+ "he-aac"
+ ]
+ },
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "nonfree"
+ ]
+ }
+ ]
+ },
+ "ffmpeg": {
+ "description": "Build the ffmpeg application",
+ "supports": "!uwp",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "avcodec",
+ "avfilter",
+ "avformat"
+ ]
+ }
+ ]
+ },
+ "ffplay": {
+ "description": "Build the ffplay application",
+ "supports": "!uwp",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "avcodec",
+ "avfilter",
+ "avformat",
+ "sdl2",
+ "swresample",
+ "swscale"
+ ]
+ }
+ ]
+ },
+ "ffprobe": {
+ "description": "Build the ffprobe application",
+ "supports": "!uwp",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "avcodec",
+ "avformat"
+ ]
+ }
+ ]
+ },
+ "fontconfig": {
+ "description": "Useful for drawtext filter",
+ "dependencies": [
+ "fontconfig"
+ ]
+ },
+ "freetype": {
+ "description": "Needed for drawtext filter",
+ "dependencies": [
+ "freetype"
+ ]
+ },
+ "fribidi": {
+ "description": "Improves drawtext filter",
+ "dependencies": [
+ "fribidi"
+ ]
+ },
+ "gpl": {
+ "description": "Allow use of GPL code, the resulting libs and binaries will be under GPL"
+ },
+ "iconv": {
+ "description": "Iconv support",
+ "dependencies": [
+ "libiconv"
+ ]
+ },
+ "ilbc": {
+ "description": "iLBC de/encoding via libilbc",
+ "dependencies": [
+ "libilbc"
+ ]
+ },
+ "lzma": {
+ "description": "lzma support",
+ "dependencies": [
+ "liblzma"
+ ]
+ },
+ "modplug": {
+ "description": "ModPlug via libmodplug",
+ "dependencies": [
+ "libmodplug"
+ ]
+ },
+ "mp3lame": {
+ "description": "MP3 encoding via libmp3lame",
+ "dependencies": [
+ "mp3lame"
+ ]
+ },
+ "nonfree": {
+ "description": "Allow use of nonfree code, the resulting libs and binaries will be unredistributable"
+ },
+ "nvcodec": {
+ "description": "Nvidia video decoding/encoding acceleration",
+ "supports": "linux | (!osx & !uwp & !(arm64 & windows))",
+ "dependencies": [
+ "ffnvcodec"
+ ]
+ },
+ "opencl": {
+ "description": "OpenCL processing",
+ "supports": "!uwp",
+ "dependencies": [
+ "opencl"
+ ]
+ },
+ "opengl": {
+ "description": "OpenGL rendering",
+ "supports": "!uwp",
+ "dependencies": [
+ "opengl",
+ "opengl-registry"
+ ]
+ },
+ "openh264": {
+ "description": "H.264 de/encoding via openh264",
+ "dependencies": [
+ "openh264"
+ ]
+ },
+ "openjpeg": {
+ "description": "JPEG 2000 de/encoding via OpenJPEG",
+ "dependencies": [
+ "openjpeg"
+ ]
+ },
+ "openmpt": {
+ "description": "Decoding tracked files via libopenmpt",
+ "dependencies": [
+ "libopenmpt"
+ ]
+ },
+ "openssl": {
+ "description": "Needed for https support if gnutls, libtls or mbedtls is not used",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "version3"
+ ]
+ },
+ "openssl"
+ ]
+ },
+ "opus": {
+ "description": "Opus de/encoding via libopus",
+ "dependencies": [
+ "opus"
+ ]
+ },
+ "postproc": {
+ "description": "Build the postproc library",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "gpl"
+ ]
+ }
+ ]
+ },
+ "qsv": {
+ "description": "Intel QSV Codec",
+ "dependencies": [
+ "mfx-dispatch"
+ ]
+ },
+ "sdl2": {
+ "description": "Sdl2 support",
+ "dependencies": [
+ {
+ "name": "sdl2",
+ "default-features": false,
+ "features": [
+ "x11"
+ ],
+ "platform": "linux"
+ },
+ {
+ "name": "sdl2",
+ "platform": "!linux"
+ }
+ ]
+ },
+ "snappy": {
+ "description": "Snappy compression, needed for hap encoding",
+ "dependencies": [
+ "snappy"
+ ]
+ },
+ "soxr": {
+ "description": "Include libsoxr resampling",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "swresample"
+ ]
+ },
+ "soxr"
+ ]
+ },
+ "speex": {
+ "description": "Speex de/encoding via libspeex",
+ "dependencies": [
+ "speex"
+ ]
+ },
+ "srt": {
+ "description": "Haivision SRT protocol",
+ "supports": "!uwp",
+ "dependencies": [
+ "libsrt"
+ ]
+ },
+ "ssh": {
+ "description": "SFTP protocol via libssh",
+ "dependencies": [
+ "libssh"
+ ]
+ },
+ "swresample": {
+ "description": "Build the swresample library"
+ },
+ "swscale": {
+ "description": "Build the swscale library"
+ },
+ "tensorflow": {
+ "description": "TensorFlow as a DNN module backend for DNN based filters like sr",
+ "supports": "!static",
+ "dependencies": [
+ "tensorflow"
+ ]
+ },
+ "tesseract": {
+ "description": "Tesseract, needed for ocr filter",
+ "supports": "!static",
+ "dependencies": [
+ "tesseract"
+ ]
+ },
+ "theora": {
+ "description": "Theora encoding via libtheora",
+ "dependencies": [
+ "libtheora"
+ ]
+ },
+ "vaapi": {
+ "description": "VAAPI video decoding/encoding acceleration",
+ "supports": "linux",
+ "dependencies": [
+ {
+ "name": "libva",
+ "default-features": false,
+ "platform": "linux"
+ }
+ ]
+ },
+ "version3": {
+ "description": "Upgrade (L)GPL to version 3"
+ },
+ "vorbis": {
+ "description": "Vorbis en/decoding via libvorbis, native implementation exists",
+ "dependencies": [
+ "libvorbis"
+ ]
+ },
+ "vpx": {
+ "description": "VP8 and VP9 de/encoding via libvpx",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "avcodec"
+ ]
+ },
+ "libvpx"
+ ]
+ },
+ "vulkan": {
+ "description": "H.264, HEVC and AV1 de/encoding via Vulkan",
+ "dependencies": [
+ "vulkan-headers"
+ ]
+ },
+ "webp": {
+ "description": "WebP encoding via libwebp",
+ "dependencies": [
+ "libwebp"
+ ]
+ },
+ "x264": {
+ "description": "H.264 encoding via x264",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "gpl"
+ ]
+ },
+ "x264"
+ ]
+ },
+ "x265": {
+ "description": "HEVC encoding via x265",
+ "dependencies": [
+ {
+ "name": "ffmpeg",
+ "default-features": false,
+ "features": [
+ "gpl"
+ ]
+ },
+ "x265"
+ ]
+ },
+ "xml2": {
+ "description": "XML parsing using the C library libxml2, needed for dash demuxing support",
+ "dependencies": [
+ "libxml2"
+ ]
+ },
+ "zlib": {
+ "description": "zlib support",
+ "dependencies": [
+ "zlib"
+ ]
+ }
+ }
+}