summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2026-07-10 14:04:29 -0400
committerAndrew Opalach <andrew@akon.city> 2026-07-10 14:04:29 -0400
commit566c022572bbff8bb7ff105b9adbe74500b2c716 (patch)
tree6cc0942bdfcdcbf3b1df52c8436d1b0ea5f88c52
parentc60363d4652ff60826b29a2e75f53a78df0f44cb (diff)
downloadcamu-566c022572bbff8bb7ff105b9adbe74500b2c716.tar.gz
camu-566c022572bbff8bb7ff105b9adbe74500b2c716.tar.bz2
camu-566c022572bbff8bb7ff105b9adbe74500b2c716.zip
Build fixes, get LTO+Os working on Windows
Signed-off-by: Andrew Opalach <andrew@akon.city>
-rw-r--r--cross/i686-w64-mingw32.txt11
-rw-r--r--cross/x86_64-w64-clang-cl.txt (renamed from cross/x86_64-w64-msvc-clang.txt)11
-rw-r--r--cross/x86_64-w64-mingw32.txt5
-rw-r--r--env/build_cmds.txt8
-rw-r--r--env/msvc_build.sh10
-rw-r--r--flake.lock18
-rw-r--r--flake.nix2
-rw-r--r--meson.build3
-rw-r--r--meson_options.txt2
-rw-r--r--src/buffer/video.c4
-rw-r--r--src/codec/ffmpeg/common.h2
-rw-r--r--src/codec/ffmpeg/decoder.c4
-rw-r--r--src/fruits/cmsrv/meson.build5
-rw-r--r--src/fruits/meson.build9
-rw-r--r--src/render/meson.build2
-rw-r--r--src/render/queue_libplacebo.c4
-rw-r--r--src/render/renderer_libplacebo.c2
-rw-r--r--subprojects/SPIRV-Cross.wrap4
-rw-r--r--subprojects/harfbuzz.wrap2
-rw-r--r--subprojects/msvc-wine.wrap4
-rw-r--r--subprojects/notcurses.wrap4
-rw-r--r--subprojects/packagefiles/ffmpeg/meson.build14
-rw-r--r--subprojects/packagefiles/ffmpeg/meson_options.txt1
-rw-r--r--subprojects/packagefiles/ffmpeg/version_3.3.9.diff24
-rw-r--r--subprojects/packagefiles/shaderc/spirv_tools_build_version.diff13
25 files changed, 105 insertions, 63 deletions
diff --git a/cross/i686-w64-mingw32.txt b/cross/i686-w64-mingw32.txt
index 159c662..361578e 100644
--- a/cross/i686-w64-mingw32.txt
+++ b/cross/i686-w64-mingw32.txt
@@ -1,17 +1,22 @@
+# See x86_64-w64-mingw32.txt for references.
+
[binaries]
c = 'i686-w64-mingw32-gcc'
cpp = 'i686-w64-mingw32-g++'
-ar = 'i686-w64-mingw32-ar'
+ar = 'i686-w64-mingw32-gcc-ar'
strip = 'i686-w64-mingw32-strip'
windres = 'i686-w64-mingw32-windres'
dlltool = 'i686-w64-mingw32-dlltool'
exe_wrapper = 'wine'
[properties]
-ar = 'i686-w64-mingw32-ar'
-nm = 'i686-w64-mingw32-nm'
+ar = 'i686-w64-mingw32-gcc-ar'
+nm = 'i686-w64-mingw32-gcc-nm'
needs_exe_wrapper = true
+[built-in options]
+cpp_args = ['-fno-declone-ctor-dtor']
+
[host_machine]
system = 'windows'
cpu_family = 'x86'
diff --git a/cross/x86_64-w64-msvc-clang.txt b/cross/x86_64-w64-clang-cl.txt
index 284dab7..8298a16 100644
--- a/cross/x86_64-w64-msvc-clang.txt
+++ b/cross/x86_64-w64-clang-cl.txt
@@ -3,19 +3,26 @@ c = 'clang-cl'
c_ld = 'lld-link'
cpp = 'clang-cl'
cpp_ld = 'lld-link'
-ar = 'llvm-lib'
+ar = 'llvm-ar'
nm = 'llvm-objdump'
dlltool = 'llvm-dlltool'
windres = 'llvm-rc'
pkg-config = ''
+cmake = 'cmake'
exe_wrapper = 'wine64'
[properties]
ld = 'lld-link'
-ar = 'llvm-lib'
+ar = 'llvm-ar'
nm = 'llvm-objdump'
needs_exe_wrapper = true
+[cmake]
+CMAKE_C_COMPILER = 'clang-cl'
+CMAKE_CXX_COMPILER = 'clang-cl'
+CMAKE_C_COMPILER_LAUNCHER = ''
+CMAKE_CXX_COMPILER_LAUNCHER = ''
+
[built-in options]
c_args = ['--target=x86_64-windows-msvc', '-fuse-ld=lld']
cpp_args = ['--target=x86_64-windows-msvc', '-fuse-ld=lld']
diff --git a/cross/x86_64-w64-mingw32.txt b/cross/x86_64-w64-mingw32.txt
index e04d439..8d75e8d 100644
--- a/cross/x86_64-w64-mingw32.txt
+++ b/cross/x86_64-w64-mingw32.txt
@@ -5,7 +5,6 @@ c = 'x86_64-w64-mingw32-gcc'
cpp = 'x86_64-w64-mingw32-g++'
# https://github.com/msys2/MINGW-packages/issues/3516
# https://github.com/mesonbuild/meson/issues/13324
-# https://github.com/msys2/MINGW-packages/issues/11726
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106103
# https://embeddedartistry.com/blog/2020/04/13/prefer-gcc-ar-to-ar-in-your-buildsystems/
ar = 'x86_64-w64-mingw32-gcc-ar'
@@ -19,6 +18,10 @@ ar = 'x86_64-w64-mingw32-gcc-ar'
nm = 'x86_64-w64-mingw32-gcc-nm'
needs_exe_wrapper = true
+[built-in options]
+# https://github.com/msys2/MINGW-packages/issues/11726#issuecomment-1381836644
+cpp_args = ['-fno-declone-ctor-dtor']
+
[host_machine]
system = 'windows'
cpu_family = 'x86_64'
diff --git a/env/build_cmds.txt b/env/build_cmds.txt
index db1ffa7..06dab23 100644
--- a/env/build_cmds.txt
+++ b/env/build_cmds.txt
@@ -10,23 +10,23 @@ meson setup build-android -Dserver=disabled -Drenderer-api=gl -Dwindow=glfm \
# MingW DX11 (Preferred)
meson setup build-mingw64-dx11 -Drenderer-api=dx11 -Drenderer=libplacebo -Dwindow=win32 \
-Dsink-only=false -Dserver=enabled -Dportal=disabled -Dclient=disabled \
- -Dsources=file -Dcodecs=ffmpeg,stb_image -Dcodec-ffmpeg-version=8 -Dcodec-hwaccels=d3d11va -Dsubtitles=enabled \
+ -Dsources=file -Dcodecs=ffmpeg -Dcodec-ffmpeg-version=8 -Dcodec-hwaccels=d3d11va -Dsubtitles=enabled \
-Dtests=disabled -Dwin32-compat=false --cross-file ./cross/x86_64-w64-mingw32.txt \
- --default-library=static --strip --buildtype=release --optimization=s -Ddebug=false -Db_lto=false
+ --default-library=static --strip --buildtype=release -Ddebug=false --optimization=s -Db_lto=true
# MingW Vulkan
meson setup build-mingw64-vulkan -Drenderer-api=vulkan -Drenderer=libplacebo -Dwindow=win32 \
-Dsink-only=false -Dserver=enabled -Dportal=disabled -Dclient=disabled \
-Dsources=file -Dcodecs=ffmpeg,stb_image -Dcodec-ffmpeg-version=8 -Dcodec-hwaccels=vulkan -Dsubtitles=enabled \
-Dtests=disabled -Dwin32-compat=false --cross-file ./cross/x86_64-w64-mingw32.txt \
- --default-library=static --strip --buildtype=release --optimization=2 -Ddebug=false
+ --default-library=static --strip --buildtype=release -Ddebug=false --optimization=2
# Windows XP 32bit Support.
meson setup build-mingw32-min -Drenderer-api=gl -Drenderer=momo -Dwindow=win32 \
-Dsink-only=false -Dserver=enabled -Dportal=disabled -Dclient=disabled \
-Dsources=file -Dcodecs=ffmpeg -Dcodec-ffmpeg-version=3 -Dsubtitles=enabled \
-Dtests=disabled -Dwin32-compat=true --cross-file ./cross/i686-w64-mingw32.txt \
- --default-library=static --strip --buildtype=release --optimization=s -Ddebug=false
+ --default-library=static --strip --buildtype=release -Ddebug=false --optimization=s -Db_lto=true
# ASan
meson setup build-asan --buildtype=debug -Db_sanitize=address -Db_lundef=false \
diff --git a/env/msvc_build.sh b/env/msvc_build.sh
index ba73416..13c4eca 100644
--- a/env/msvc_build.sh
+++ b/env/msvc_build.sh
@@ -2,16 +2,16 @@
# nix develop .#mingw64
# meson subprojects download msvc-wine
-# cd subprojects/msvc-wine-32b504c/
+# cd subprojects/msvc-wine-514f8ea/
# ./vsdownload.py --dest ../../env/msvc-root
# ./install.sh ../../env/msvc-root
-export INCLUDE="$INCLUDE:$HOME/c/camu/subprojects/vulkan-headers-1.4.325/include"
+BIN=env/msvc-root/bin/x64 . subprojects/msvc-wine-514f8ea/msvcenv-native.sh
-BIN=env/msvc-root/bin/x64 . subprojects/msvc-wine-32b504c/msvcenv-native.sh
+export INCLUDE="$INCLUDE:$HOME/c/camu/subprojects/vulkan-headers-1.4.325/include"
-CC=clang-cl CXX=clang-cl meson setup build-clang-cl -Dwindow=win32 -Drenderer-api=dx11 \
+meson setup build-clang-cl -Dwindow=win32 -Drenderer-api=dx11 \
-Dsink-only=false -Dserver=enabled -Dportal=disabled -Dclient=disabled -Dsources=file \
-Dcodecs=ffmpeg -Dcodec-ffmpeg-version=8 -Dcodec-hwaccels=d3d11va -Dsubtitles=enabled -Dtests=disabled \
- --cross-file ./cross/x86_64-w64-msvc-clang.txt --default-library=static -Db_vscrt=static_from_buildtype \
+ --cross-file ./cross/x86_64-w64-clang-cl.txt --default-library=static -Db_vscrt=static_from_buildtype \
--buildtype=release --optimization=s -Ddebug=false --strip
diff --git a/flake.lock b/flake.lock
index 649ed7d..fcc10a7 100644
--- a/flake.lock
+++ b/flake.lock
@@ -41,11 +41,11 @@
]
},
"locked": {
- "lastModified": 1782749631,
- "narHash": "sha256-slFTUgDy0KTPA4LBAmC/9SngDq8GCPdX+ZR0yQHHN1E=",
+ "lastModified": 1783358420,
+ "narHash": "sha256-UEyBpf+XmQe8laXfDzIlo11Er7E0rKrLS8jeMnMj0Ds=",
"owner": "nix-community",
"repo": "home-manager",
- "rev": "5d72a29fc36ac21adae6ae35568fe5ee6700850f",
+ "rev": "0d33882bd46c1f9ef62276700f5e5f2bd6ff6604",
"type": "github"
},
"original": {
@@ -99,11 +99,11 @@
"nixpkgs": "nixpkgs_3"
},
"locked": {
- "lastModified": 1781182279,
- "narHash": "sha256-V5EQQbDnmdiXGQXrEF1PEL7QYsFqfH8N1E89Z5ONwFk=",
+ "lastModified": 1783336371,
+ "narHash": "sha256-ZisTtweyb7JUwPP54HAXE9TypT8m89dIxDI36Ak0hAs=",
"owner": "nix-community",
"repo": "NixOS-WSL",
- "rev": "5675822ba756e6e56f8f6a5a76e90e0da2ece94d",
+ "rev": "a9620cfa43f0c1c30a46c31ae3c6e58cdb124a14",
"type": "github"
},
"original": {
@@ -159,11 +159,11 @@
},
"nixpkgs_4": {
"locked": {
- "lastModified": 1782723713,
- "narHash": "sha256-oPXCU/SSUokcGaJREHibG1CBX3+s/W7orDWQOZDsEeQ=",
+ "lastModified": 1783224372,
+ "narHash": "sha256-8i/87eeoqiGE4yOTjwSA3Eh/ziJRQEmd/unYU+K27sk=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "b5aa0fbd538984f6e3d201be0005b4463d8b09f8",
+ "rev": "d407951447dcd00442e97087bf374aad70c04cea",
"type": "github"
},
"original": {
diff --git a/flake.nix b/flake.nix
index e035475..8caf0fa 100644
--- a/flake.nix
+++ b/flake.nix
@@ -178,7 +178,7 @@
xorg.libXfixes
xorg.libXcursor
libxkbcommon
- ] ++ lib.optionals (window == "x11") [
+ ] ++ lib.optionals (window == "glfw") [
glfw3
] ++ lib.optionals (renderer-api == "vulkan") [
vulkan-loader
diff --git a/meson.build b/meson.build
index 6eda9b8..e817842 100644
--- a/meson.build
+++ b/meson.build
@@ -5,8 +5,7 @@ project('camu', ['c', 'cpp'], # Marking cpp here is required for subproject cros
license: 'GPL-3.0-only')
# Fail early if 'Compiler for build machine not found'.
-add_languages('c', native: true)
-add_languages('cpp', native: true)
+add_languages('c', 'cpp', native: true)
compiler = meson.get_compiler('c')
cmake = import('cmake')
diff --git a/meson_options.txt b/meson_options.txt
index 959c100..f7d0f7d 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -7,7 +7,7 @@ option('audio-backends', type: 'array', choices: ['miniaudio'], value: ['miniaud
option('renderer', type: 'combo', choices: ['libplacebo', 'momo'], value: 'libplacebo')
option('renderer-api', type: 'combo', choices: ['vulkan', 'dx11', 'gl', 'gl-rpi'], value: 'vulkan', yield: true)
option('renderer-compiler', type: 'combo', choices: ['glslang', 'shaderc'], value: 'shaderc')
-option('subtitles', type: 'feature', value: 'enabled')
+option('subtitles', type: 'feature', value: 'enabled', yield: true)
option('window', type: 'combo', choices: ['wayland', 'x11', 'win32', 'glfw', 'glfm'], value: 'wayland')
option('win32-compat', type: 'boolean', value: false, yield: true)
option('release-asserts', type: 'boolean', value: true, yield: true)
diff --git a/src/buffer/video.c b/src/buffer/video.c
index 1c37403..0e9795f 100644
--- a/src/buffer/video.c
+++ b/src/buffer/video.c
@@ -23,10 +23,10 @@
#else
#define BUFFER_MARK_LOW 4
#define BUFFER_MARK_BUFFERED 7 // Must be >1.
-#define BUFFER_MARK_HIGH 9
+#define BUFFER_MARK_HIGH 8
// Keep MARK_RESET high because currently the decoder can produce an
// unpredictable amount of frames at any point.
-#define BUFFER_MARK_RESET (BUFFER_MARK_HIGH * 4)
+#define BUFFER_MARK_RESET (BUFFER_MARK_HIGH * 3)
#endif
bool camu_video_buffer_init(struct camu_video_buffer *buf, struct camu_clock *clock)
diff --git a/src/codec/ffmpeg/common.h b/src/codec/ffmpeg/common.h
index 26f807d..c40a38d 100644
--- a/src/codec/ffmpeg/common.h
+++ b/src/codec/ffmpeg/common.h
@@ -4,6 +4,8 @@
#include <libavutil/frame.h>
#include <libavcodec/avcodec.h>
+#define camu_ff_longest_name(desc) ((desc)->long_name ? (desc)->long_name : (desc)->name)
+
s64 camu_ff_frame_duration(AVFrame *frame);
// userdata, level, fmt, args
diff --git a/src/codec/ffmpeg/decoder.c b/src/codec/ffmpeg/decoder.c
index 3da0027..d24677a 100644
--- a/src/codec/ffmpeg/decoder.c
+++ b/src/codec/ffmpeg/decoder.c
@@ -28,7 +28,7 @@ static const char *hwdevices[] = {
static void log_codec_name(const AVCodec *codec, const char *hwdevice_name)
{
- const char *name = codec->long_name ? codec->long_name : codec->name;
+ const char *name = camu_ff_longest_name(codec);
if (hwdevice_name) {
log_info("Codec: %s (via %s hwaccel).", name, hwdevice_name);
} else {
@@ -141,6 +141,8 @@ static s32 init_hwdevice_context(struct camu_ff_decoder *av, AVCodecContext *con
#ifdef CAMU_HUGE_VIDEO_BUFFER
// Note that context->extra_hw_frames has the ability to cause corruption.
context->extra_hw_frames = 48;
+#else
+ context->extra_hw_frames = 4;
#endif
return ret;
diff --git a/src/fruits/cmsrv/meson.build b/src/fruits/cmsrv/meson.build
index bfeabe0..15b46b6 100644
--- a/src/fruits/cmsrv/meson.build
+++ b/src/fruits/cmsrv/meson.build
@@ -8,8 +8,9 @@ if use_tuis
cmsrv_args += ['-DCMSRV_USE_UI']
endif
+cmsrv_link_args = []
if is_windows and not is_msvc
- cmsrv_args += ['-static', '-static-libgcc', '-static-libstdc++', '-mwindows', '-municode']
+ cmsrv_link_args += ['-mconsole', '-municode', '-static', '-static-libgcc', '-static-libstdc++']
endif
-executable('cmsrv', cmsrv_src, dependencies: cmsrv_deps, c_args: cmsrv_args, link_args: cmsrv_args, install: true)
+executable('cmsrv', cmsrv_src, dependencies: cmsrv_deps, c_args: cmsrv_args, link_args: cmsrv_link_args, install: true)
diff --git a/src/fruits/meson.build b/src/fruits/meson.build
index c82d71d..f53a653 100644
--- a/src/fruits/meson.build
+++ b/src/fruits/meson.build
@@ -1,7 +1,4 @@
-use_tuis = true
-if is_windows
- use_tuis = false
-endif
+use_tuis = not is_windows
if use_tuis and (get_option('server').enabled() or get_option('client').enabled())
notcurses = dependency('notcurses', required: false, allow_fallback: false)
@@ -29,11 +26,11 @@ if use_tuis and (get_option('server').enabled() or get_option('client').enabled(
endif
endif
-if get_option('server').enabled() and not is_windows
+if get_option('server').enabled()
subdir('cmsrv')
endif
-if get_option('client').enabled() and not is_windows
+if get_option('client').enabled()
subdir('cmc')
endif
diff --git a/src/render/meson.build b/src/render/meson.build
index 9aee7af..d342312 100644
--- a/src/render/meson.build
+++ b/src/render/meson.build
@@ -56,7 +56,7 @@ elif get_option('renderer') == 'libplacebo'
shaderc_opts.add_cmake_defines({ 'ENABLE_EXCEPTIONS_ON_MSVC': false })
shaderc_proj = cmake.subproject('shaderc', options: shaderc_opts)
shaderc = shaderc_proj.dependency('shaderc')
- meson.override_dependency('shaderc', declare_dependency(dependencies: shaderc, version: '2026.1'))
+ meson.override_dependency('shaderc', declare_dependency(dependencies: shaderc, version: '2026.2'))
render_deps += [
shaderc_proj.dependency('shaderc_util'),
shaderc_proj.dependency('glslang'),
diff --git a/src/render/queue_libplacebo.c b/src/render/queue_libplacebo.c
index 57d60f6..f666560 100644
--- a/src/render/queue_libplacebo.c
+++ b/src/render/queue_libplacebo.c
@@ -39,7 +39,7 @@ static bool queue_lp_configure_subtitles(struct camu_frame_queue *queue, u32 wid
}
const AVCodec *codec = avcodec_find_decoder(codecpar->codec_id);
if (!codec) {
- log_error("Failed to find subtitle decoder.");
+ log_error("Failed to find subtitle transcoder.");
return false;
}
if (!(lq->subs.converter = camu_ff_alloc_codec_context(codec, codecpar))) {
@@ -51,7 +51,7 @@ static bool queue_lp_configure_subtitles(struct camu_frame_queue *queue, u32 wid
return false;
}
const AVCodecDescriptor *ass_desc = avcodec_descriptor_get(AV_CODEC_ID_ASS);
- log_info("Subtitle conversion: %s -> %s.", desc->long_name, ass_desc->long_name);
+ log_info("Subtitle conversion: %s -> %s.", camu_ff_longest_name(desc), camu_ff_longest_name(ass_desc));
// https://github.com/mpv-player/mpv/blob/266cb79f38fd1a5fd448b453dee5971795a145ca/sub/sd_ass.c#L634
#define MP_ASS_FONT_PLAYRESX 384.0
track->PlayResX = track->PlayResY * (f64)width / MAX(height, (u32)1);
diff --git a/src/render/renderer_libplacebo.c b/src/render/renderer_libplacebo.c
index 2bcbd64..6ddb972 100644
--- a/src/render/renderer_libplacebo.c
+++ b/src/render/renderer_libplacebo.c
@@ -429,7 +429,7 @@ static bool renderer_lp_render(struct camu_renderer *renderer, struct camu_scree
lr->params.num_hooks = 1;
lr->params.hooks[0]->parameters[0].data->f = (f32)mouse_x;
lr->params.hooks[0]->parameters[1].data->f = (f32)mouse_y;
- lr->params.hooks[0]->parameters[3].data->f = (scr->vr_emulation == CAMU_VR_360) ? 2.0 : 1.0 - (f32)scr->vr_left_eye;
+ lr->params.hooks[0]->parameters[3].data->f = (scr->vr_emulation == CAMU_VR_360) ? 2.f : (scr->vr_left_eye ? 0.f : 1.f);
}
enum {
diff --git a/subprojects/SPIRV-Cross.wrap b/subprojects/SPIRV-Cross.wrap
index 6532667..a0aa44a 100644
--- a/subprojects/SPIRV-Cross.wrap
+++ b/subprojects/SPIRV-Cross.wrap
@@ -1,7 +1,7 @@
[wrap-git]
-directory = SPIRV-Cross-7bfcf72
+directory = SPIRV-Cross-6c09849
url = https://github.com/KhronosGroup/SPIRV-Cross.git
-revision = 7bfcf72ad28d1429deddff6c71b71c81b40b7063
+revision = 6c09849fe88c48eaed08413aa022aaa136a3a057
depth = 1
method = cmake
patch_directory = SPIRV-Cross
diff --git a/subprojects/harfbuzz.wrap b/subprojects/harfbuzz.wrap
index 07c333c..5d721b0 100644
--- a/subprojects/harfbuzz.wrap
+++ b/subprojects/harfbuzz.wrap
@@ -3,3 +3,5 @@ directory = harfbuzz-14.2.1
url = https://github.com/harfbuzz/harfbuzz.git
revision = 14.2.1
depth = 1
+patch_directory = harfbuzz
+diff_files = harfbuzz/no_bigobj_windows.diff
diff --git a/subprojects/msvc-wine.wrap b/subprojects/msvc-wine.wrap
index feeace3..a1fca5e 100644
--- a/subprojects/msvc-wine.wrap
+++ b/subprojects/msvc-wine.wrap
@@ -1,5 +1,5 @@
[wrap-git]
-directory = msvc-wine-32b504c
+directory = msvc-wine-514f8ea
url = https://github.com/mstorsjo/msvc-wine.git
-revision = 32b504c63b869681cda6824a20e30b74cb718432
+revision = 514f8ea34842cd6d831804d0e9658d3a32870ae1
depth = 1
diff --git a/subprojects/notcurses.wrap b/subprojects/notcurses.wrap
index 9eecaa9..8d8e41d 100644
--- a/subprojects/notcurses.wrap
+++ b/subprojects/notcurses.wrap
@@ -1,7 +1,7 @@
[wrap-git]
-directory = notcurses-c951e0c
+directory = notcurses-b26048e
url = https://github.com/dankamongmen/notcurses.git
-revision = c951e0c3ebb4aa26cdaaa8e4a7bbf7d9e7d68cf3
+revision = b26048eebc74d5d254717d3332fa484718f9efe6
depth = 1
method = cmake
diff --git a/subprojects/packagefiles/ffmpeg/meson.build b/subprojects/packagefiles/ffmpeg/meson.build
index 7481dea..ed3617c 100644
--- a/subprojects/packagefiles/ffmpeg/meson.build
+++ b/subprojects/packagefiles/ffmpeg/meson.build
@@ -73,7 +73,9 @@ decoders += ',pcm_s32be,pcm_s32le,pcm_s24be,pcm_s24le,pcm_s16be,pcm_s16le'
decoders += ',dca,eac3'
decoders += ',pcm_dvd,mpegvideo,mpeg2video'
decoders += ',av1'
-#decoders += ',ass,srt'
+if get_option('subtitles').enabled()
+ decoders += ',ass,srt,webvtt'
+endif
#if get_option('codec-hwaccels').length() == 0
libdav1d = dependency('dav1d', required: false)
if libdav1d.found()
@@ -84,6 +86,7 @@ decoders += ',av1'
#endif
demuxers = ''
+muxers = ''
parsers = ''
if not get_option('sink-only')
demuxers += 'flac,mp3,aac,wav,matroska,mov,avi'
@@ -91,7 +94,10 @@ if not get_option('sink-only')
#demuxers += ',pcm_f32be,pcm_f32le,pcm_s32le_planar,pcm_s16be_planar,pcm_s16le_planar'
demuxers += ',eac3'
demuxers += ',mpegts,mpegtsraw,mpegps,mpegvideo'
- #demuxers += ',ass,srt'
+ if get_option('subtitles').enabled()
+ demuxers += ',ass,srt,webvtt'
+ muxers += ',ass,srt,webvtt'
+ endif
parsers += 'aac,opus,h264,hevc,av1,vp9'
parsers += ',dca'
parsers += ',mpegaudio,mpegvideo,dvd_nav'
@@ -222,6 +228,10 @@ if demuxers != ''
extra_options += ['--enable-demuxer=' + demuxers]
endif
+if muxers != ''
+ extra_options += ['--enable-muxer=' + muxers]
+endif
+
if parsers != ''
extra_options += ['--enable-parser=' + parsers]
endif
diff --git a/subprojects/packagefiles/ffmpeg/meson_options.txt b/subprojects/packagefiles/ffmpeg/meson_options.txt
index c06b276..d58d8fd 100644
--- a/subprojects/packagefiles/ffmpeg/meson_options.txt
+++ b/subprojects/packagefiles/ffmpeg/meson_options.txt
@@ -1,5 +1,6 @@
# Copy-paste from top-level project.
option('codec-hwaccels', type: 'array', choices: ['vulkan', 'vaapi', 'mediacodec', 'd3d11va', 'dxva2'], value: [], yield: true)
option('renderer-api', type: 'combo', choices: ['vulkan', 'dx11', 'gl', 'gl-rpi'], value: 'vulkan', yield: true)
+option('subtitles', type: 'feature', value: 'enabled', yield: true)
option('win32-compat', type: 'boolean', value: false, yield: true)
option('sink-only', type: 'boolean', value: false, yield: true)
diff --git a/subprojects/packagefiles/ffmpeg/version_3.3.9.diff b/subprojects/packagefiles/ffmpeg/version_3.3.9.diff
index 7e91e5d..bf31274 100644
--- a/subprojects/packagefiles/ffmpeg/version_3.3.9.diff
+++ b/subprojects/packagefiles/ffmpeg/version_3.3.9.diff
@@ -1,5 +1,5 @@
---- a/meson.build 2026-07-02 16:36:02.258920727 -0400
-+++ b/meson.build 2026-07-02 16:49:06.795636508 -0400
+--- a/meson.build 2026-07-04 12:03:17.942564661 -0400
++++ b/meson.build 2026-07-04 15:10:51.305639404 -0400
@@ -1,4 +1,4 @@
-project('ffmpeg', 'c', version: '', meson_version: '>=0.57.0')
+project('ffmpeg', 'c', version: '3.3.9', meson_version: '>=0.57.0')
@@ -17,10 +17,10 @@
extra_options += ['--enable-static', '--disable-shared']
if is_windows
-@@ -74,14 +70,6 @@
- decoders += ',pcm_dvd,mpegvideo,mpeg2video'
- decoders += ',av1'
- #decoders += ',ass,srt'
+@@ -76,14 +72,6 @@
+ if get_option('subtitles').enabled()
+ decoders += ',ass,srt,webvtt'
+ endif
-#if get_option('codec-hwaccels').length() == 0
- libdav1d = dependency('dav1d', required: false)
- if libdav1d.found()
@@ -31,8 +31,8 @@
-#endif
demuxers = ''
- parsers = ''
-@@ -197,12 +185,8 @@
+ muxers = ''
+@@ -203,12 +191,8 @@
# Disable unused hwaccels.
extra_options += [
@@ -45,7 +45,7 @@
'--disable-nvenc',
'--disable-vdpau',
'--disable-audiotoolbox',
-@@ -245,6 +229,15 @@
+@@ -255,6 +239,15 @@
args += ['-DCAMU_HAVE_SOXR']
endif
@@ -61,7 +61,7 @@
ext_proj = import('unstable-external_project')
proj = ext_proj.add_project('configure',
-@@ -254,7 +247,6 @@
+@@ -264,7 +257,6 @@
'--incdir=@PREFIX@/@INCLUDEDIR@',
'--enable-pic',
'--disable-all',
@@ -69,7 +69,7 @@
'--disable-everything',
'--disable-programs',
'--disable-doc',
-@@ -279,11 +271,14 @@
+@@ -289,11 +281,14 @@
'--enable-swscale',
'--disable-indevs',
'--disable-outdevs',
@@ -84,7 +84,7 @@
avutil = proj.dependency('avutil')
avformat = proj.dependency('avformat')
avcodec = proj.dependency('avcodec')
-@@ -292,14 +287,14 @@
+@@ -302,14 +297,14 @@
swscale = proj.dependency('swscale')
include = include_directories('.', 'build/')
meson.override_dependency('libavutil', declare_dependency(
diff --git a/subprojects/packagefiles/shaderc/spirv_tools_build_version.diff b/subprojects/packagefiles/shaderc/spirv_tools_build_version.diff
index de50787..ebd5cdc 100644
--- a/subprojects/packagefiles/shaderc/spirv_tools_build_version.diff
+++ b/subprojects/packagefiles/shaderc/spirv_tools_build_version.diff
@@ -19,3 +19,16 @@ index 8e918de0..5dbc0dd1 100644
endfunction()
# Always build ${SPIRV_TOOLS}-shared. This is expected distro packages, and
+diff --git a/source/opt/CMakeLists.txt b/source/opt/CMakeLists.txt
+index a0ca5b84..a6dd3f68 100644
+--- a/source/opt/CMakeLists.txt
++++ b/source/opt/CMakeLists.txt
+@@ -283,6 +283,8 @@ target_include_directories(SPIRV-Tools-opt
+ target_link_libraries(SPIRV-Tools-opt
+ PUBLIC ${SPIRV_TOOLS_FULL_VISIBILITY})
+
++add_dependencies(SPIRV-Tools-opt core_tables)
++
+ set_property(TARGET SPIRV-Tools-opt PROPERTY FOLDER "SPIRV-Tools libraries")
+ spvtools_check_symbol_exports(SPIRV-Tools-opt)
+