summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore6
-rw-r--r--README.txt6
-rw-r--r--TODO255
-rw-r--r--env/android_build.txt4
-rw-r--r--env/mingw_build.sh12
-rw-r--r--env/mingw_build.txt18
-rw-r--r--flake.lock30
-rw-r--r--flake.nix47
-rw-r--r--meson.build13
-rw-r--r--meson_options.txt6
-rwxr-xr-xscripts/line_count.sh1
-rw-r--r--src/cache/handlers/file.c2
-rw-r--r--src/codec/codec.h2
-rw-r--r--src/codec/ffmpeg/common.c16
-rw-r--r--src/codec/ffmpeg/decoder.c17
-rw-r--r--src/codec/ffmpeg/decoder.h2
-rw-r--r--src/codec/ffmpeg/demuxer.c12
-rw-r--r--src/codec/ffmpeg/meson.build157
-rw-r--r--src/codec/ffmpeg/packet_ext.c8
-rw-r--r--src/fruits/cmsrv/ui.c2
-rw-r--r--src/fruits/cmv/cmv.c12
-rw-r--r--src/liana/list_cmp.h6
-rw-r--r--src/libsink/desktop.c4
-rw-r--r--src/mixer/audio_miniaudio.c3
-rw-r--r--src/mixer/meson.build20
-rw-r--r--src/render/meson.build215
-rw-r--r--subprojects/SPIRV-Cross.wrap4
-rw-r--r--subprojects/ffmpeg-compat.wrap7
-rw-r--r--subprojects/ffmpeg.wrap43
-rw-r--r--subprojects/ffmpeg2.wrap8
-rw-r--r--subprojects/ffmpeg3.wrap13
-rw-r--r--subprojects/ffmpeg4.wrap8
-rw-r--r--subprojects/ffmpeg5.wrap8
-rw-r--r--subprojects/ffmpeg6.wrap8
-rw-r--r--subprojects/ffmpeg7.wrap8
-rw-r--r--subprojects/ffmpeg8.wrap8
-rw-r--r--subprojects/fontconfig.wrap4
-rw-r--r--subprojects/harfbuzz.wrap4
-rw-r--r--subprojects/libalabaster.wrap4
-rw-r--r--subprojects/libnaunet.wrap4
-rw-r--r--subprojects/libplacebo.wrap6
-rw-r--r--subprojects/miniaudio.wrap4
-rw-r--r--subprojects/notcurses.wrap4
-rw-r--r--subprojects/packagefiles/ffmpeg-compat/meson.build197
-rw-r--r--subprojects/packagefiles/ffmpeg-compat/meson_options.txt4
-rw-r--r--subprojects/packagefiles/ffmpeg-compat/meson_project.diff16
-rw-r--r--subprojects/packagefiles/ffmpeg/ffmpeg.git-effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch (renamed from subprojects/packagefiles/ffmpeg-compat/ffmpeg.git-effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch)0
-rw-r--r--subprojects/packagefiles/ffmpeg/meson.build147
-rw-r--r--subprojects/packagefiles/ffmpeg/meson_options.txt3
-rw-r--r--subprojects/packagefiles/ffmpeg/version_2.8.22.diff58
-rw-r--r--subprojects/packagefiles/ffmpeg/version_3.3.9.diff79
-rw-r--r--subprojects/packagefiles/ffmpeg/version_3.4.14.diff29
-rw-r--r--subprojects/packagefiles/ffmpeg/version_4.2.11.diff29
-rw-r--r--subprojects/packagefiles/ffmpeg/version_5.1.7.diff29
-rw-r--r--subprojects/packagefiles/ffmpeg/version_6.1.3.diff29
-rw-r--r--subprojects/packagefiles/ffmpeg/version_7.1.1.diff29
-rw-r--r--subprojects/packagefiles/ffmpeg/version_8.0.diff29
-rw-r--r--subprojects/packagefiles/libplacebo/dependency_version_override.diff37
-rw-r--r--subprojects/packagefiles/miniaudio/meson.build2
-rw-r--r--subprojects/shaderc.wrap4
-rw-r--r--subprojects/stela.wrap4
61 files changed, 1144 insertions, 602 deletions
diff --git a/.gitignore b/.gitignore
index e2836a2..f1b2c2e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,7 +40,7 @@ subprojects/jansson.wrap
subprojects/jsmn-*/
subprojects/jsmn.wrap
subprojects/libalabaster
-subprojects/libalabaster/
+subprojects/libalabaster-*/
subprojects/libass-*/
subprojects/libcdio-paranoia-*/
subprojects/libcurl-*/
@@ -53,7 +53,7 @@ subprojects/libev.wrap
subprojects/libffi.wrap
subprojects/libffi/
subprojects/libnaunet
-subprojects/libnaunet/
+subprojects/libnaunet-*/
subprojects/libplacebo-*/
subprojects/libpng-*/
subprojects/libpng.wrap
@@ -69,7 +69,7 @@ subprojects/pcre2.wrap
subprojects/shaderc-*/
subprojects/stb-*/
subprojects/stela
-subprojects/stela/
+subprojects/stela-*/
subprojects/vulkan-headers-*/
subprojects/vulkan.wrap
subprojects/wayland-protocols-*/
diff --git a/README.txt b/README.txt
index c0ce8f0..4255481 100644
--- a/README.txt
+++ b/README.txt
@@ -1,7 +1,7 @@
:source-highlighter: pygments
== Simple Build and Test
-[source,console]
+[source,sh]
----
$ (optional) nix develop .
$ meson setup build
@@ -9,7 +9,7 @@ $ cd build && ninja
$ ./src/fruits/cmv/cmv [path_to_file]
----
=== MinGW
-[source,console]
+[source,sh]
----
$ nix develop .#mingw64
$ meson setup build-mingw64 --cross-file ./cross/x86_64-w64-mingw32.txt --default-library=static
@@ -20,6 +20,6 @@ $ wine ./src/fruits/cmv/cmv.exe [path_to_file]
== Keybinds
*Left/Right Arrow* - Next/Previous +
*Space* - Pause/Resume +
-*Control + Left Click* - Seek to percentage of screen width (temp) +
+*Middle Click or Control + Left Click* - Seek to percentage of screen width (temp) +
// vim: set syntax=asciidoc:
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..a25cfd3
--- /dev/null
+++ b/TODO
@@ -0,0 +1,255 @@
+== Colors
+#f0e6dc #412f2d #934a5b #5a6811
+
+== Names
+ * camu
+ - liana
+ * libalabaster
+ * libnaunet
+ - nnwt
+ * stela
+
+== Webite/Manual
+=== Website
+ * Landing Page
+ - Video Demo
+ * Products Page
+ * Downloads
+ * Contact
+ * Source Code
+ * Design Documents
+
+=== Manual:
+ * Installation and Usage
+
+== TODO
+=== TODAY
+ - [x] Commit libalabaster build update.
+ - [x] Commit stela changes.
+ - [ ] Commit ffmpeg build update.
+ - [ ] Consolidate spng, stb_img, and wuffs into one file with server/client ifdefs
+ - [ ] Startup timing information
+ - From main() to window_system_main() then everything in desktop_open().
+ - Might as well work on the cleanup part too.
+ - [ ] Packet benchmark.
+ - Create packet, write bunch of ints, send to another thread, thread adds everything.
+ - [ ] RPC header packing.
+ - [ ] Look for more obvious packet_stream/rpc optimizations.
+
+=== DMMN
+ - [ ] List lock.
+ - [ ] Reconnect/Reseek.
+ - [ ] Verbose connection logging.
+ - [ ] List clear.
+
+=== List
+ - [x] list.c:294 assert.
+ - Very common in testing with remote client (SINK_LOCAL-only theory still possible).
+ - [ ] Better name for set_current() type functions.
+ - [ ] Fix ref counting and unloading.
+ - [ ] List unset.
+ - [ ] Cleanup pizzabot.
+ - [ ] Gapless/Queued.
+ - Consider case where an entry gets queued on the sink at a point when the list already
+ expects it to be playing.
+ - [ ] list_close(): Free resources if no sinks or wait for all sinks to be removed then free resources.
+ - [ ] End on a paused entry should advance with the next entry starting paused.
+ - [ ] Allow ended entry to be unpaused (skip to next).
+ - [ ] Factor in estimated ping.
+ - Per-sink?
+ - [ ] Use ended state sink-side?
+ - Never set ended entry?
+ - [ ] Docs.
+
+=== Sink
+ - [x] CTRL+C twice forces SIGINT.
+ - [ ] Synced pausing is broken when video processing falls massively behind.
+ - Will cause 'Requested PTS is lower than oldest frame in video_buffer'.
+ - [ ] Mark entries for removal rather than remove in-place.
+ - [ ] More optimal command queue.
+
+=== Cache
+ - See cache/entry.h.
+ - [ ] EOF when seeking forward in slow http source.
+ - [ ] HTTP timeout.
+
+=== Liana
+ - [ ] Node connection pool.
+ - [ ] One "connection" object should suffice for retrieving duration, handling stream, and loading visual data for client.
+
+=== VCR
+ - Proper "Whole File" implementation.
+ - [ ] Track loop count, reset on flush?
+ - [ ] Reject images.
+ - [ ] Internalize "packet cache" logic.
+
+=== Codecs
+ - [ ] Better wuffs support.
+ - [ ] https://snisurset.net/code/abydos
+
+=== Desktop/CMV
+ - [ ] Consistent cleanup on errors.
+ - Start from desktop.c:camu_desktop_open().
+ - [ ] More visual sink-only status.
+ - [ ] mpv/libplacebo shaders.
+ - [ ] Diagonal swipe for pause.
+ - [ ] Motion blur for next/prev.
+ - Nintendo switch photo viewer-like.
+ - [ ] Overlay text for volume.
+ - [ ] Idle animation.
+ - https://www.shadertoy.com/view/wtsXRX
+
+=== Renderer
+ - [ ] vaapi fallback if Vulkan decoding not available.
+ - [ ] Command queue.
+ - [ ] Queue creation/deletion.
+ - [ ] Texture upload.
+ - [ ] MOMO frame queue.
+ - [ ] Log when scaling flips from required to not and vice versa.
+
+=== CMC
+ - [ ] Browse pane.
+ - [ ] Tile implementation.
+ - [ ] Flesh out "user" concept enough to be usable.
+
+=== Portal
+ - [ ] Post cache thread-safety.
+ - [ ] https://github.com/lwthiker/curl-impersonate
+
+=== Node
+ - [ ] Implement node paradigm.
+ - [ ] Allow cmv to act as a node.
+
+=== libnaunet
+ - [ ] Native Windows file backend.
+ - https://learn.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-win32_find_dataa
+
+=== Stela
+ - [x] X11/common nix Vulkan.
+ - [x] GLFW Vulkan destroy surface.
+ - [-] X11 and GLFW cursor.
+ - [x] Xcursor
+ - [-] Fix vaapi on x11.
+ - It's actually Xwayland lacking dma import extension.
+ - [ ] Configurable depth and stencil buffer.
+ - [ ] Consider server-side transcode in terms of the build.
+ - If video decode specific GPU device wiring is needed, should it be in stela?
+ - [ ] Latency tweaking.
+ - Wayland presentation timing.
+ - https://github.com/ishitatsuyuki/LatencyFleX
+
+=== Other Optimizations
+ - [ ] Walk up cmv and document program design.
+ - [ ] Memory pool for al_alloc_object.
+ - [ ] alloca str_to_c_str.
+
+=== Style
+ - [ ] Pass on log levels.
+ - [ ] Rename mutex variables to lock.
+
+=== Tests
+ - [ ] Emulate slow packet stream connection.
+ - ev_set_io_collect_interval() in loop.c.
+ - [ ] Fast open -> shuffle spam -> disconnect deadlock.
+ - [ ] Simulate ping, connection speed, connection instablitiy.
+ - [ ] Seek again before slow client can respond to the first seek.
+ - [ ] al_array_contains
+ - [ ] al_array_unsorted_search_by_key
+
+=== Build
+ - [x] Allow forcing ffmpeg-compat.
+ - 3 levels? latest, 4, 3.
+ - [x] allow --force-fallback-for=libavcodec.
+ - [x] Allow selecting window from camu.
+ - [x] 'guess' option
+ - [x] Don't require shaderc if libplacebo found.
+ - [x] Audio optional based on if libpulse/libasound are found.
+ - [x] libalabaster option for release build with asserts (al_assert only).
+
+=== External
+ - [ ] miniaudio dsound flush.
+ - [ ] notcurses ffmpeg flush/reset.
+
+=== camu_db
+==== Transfer
+ - [ ] json.dumps(d).decode('unicode-escape').encode('utf8')
+ - [ ] Index all posts.
+ - [ ] Impement remake_post() using raw responses.
+ - [ ] Estimate size requirement.
+ - [ ] Re-write database using moves for resources.
+
+==== Status
+ - [ ] Merge run/* in some way that respects the file dates.
+ - [ ] Move original pixiv into proper DB.
+ - [ ] Verify whether pixiv_app returns updated date or created date.
+ - [ ] Flag with unchecked updated date.
+ - [ ] Move in twitterN/pixivN temporary directories.
+ - Clear up significant space.
+ - Rewrite everything with moves.
+ - [ ] Setup system for downloading a list of tweet IDs.
+ - [ ] Download likes.
+ - [ ] Download missing? Twitter posts.
+ - [ ] Proper format for TikTok.
+ - [ ] Proper format for Youtube.
+ - [ ] Sort out and attempt to source various loose files.
+
+== References
+=== egl_resize
+ * https://gitlab.freedesktop.org/mesa/mesa/-/issues/6547
+ * https://github.com/KhronosGroup/EGL-Registry/pull/160/files
+ * https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18984
+ * https://gitlab.freedesktop.org/mesa/mesa/-/issues/7217
+
+=== hwdec
+ * https://gitlab.freedesktop.org/gstreamer/meson-ports/ffmpeg/-/blob/meson-4.4/meson.build
+ * https://ffmpeg.org/doxygen/trunk/qsv_decode_8c-example.html
+ * https://github.com/Themaister/Granite/blob/master/video/ffmpeg_hw_device.cpp
+ * https://trac.ffmpeg.org/wiki/HWAccelIntro
+ * https://github.com/mpv-player/mpv/blob/master/video/decode/vd_lavc.c#L699
+ * https://trac.ffmpeg.org/wiki/Hardware/VAAPI
+
+=== subs
+* Get subtitles.
+ffmpeg -i <path>.mkv -map 0:s:2 -vn -an -codec:s ass <output>.ass
+* Detect type.
+uchardet subs.srt
+* Re-encode subs.
+ffmpeg -sub_charenc ISO-8859-1 -i <path>.srt <output>.ass
+* Single audio and video streams.
+ffmpeg -i <path>.mkv -map 0:v -map 0:a -c:v copy -c:a copy <output>.mkv
+* Add subtitles.
+ffmpeg -i <path>.mkv -i <path>.ass -map 0:v -map 0:a -map 1:s -c:v copy -c:a copy -c:s copy <output>.mkv
+
+=== No stdlib
+https://github.com/mjansson/rpmalloc
+
+=== Android
+https://blog.differentpla.net/blog/2022/05/10/nvidia-shield-adb/
+https://github.com/brackeen/glfm/blob/main/examples/touch.c
+https://developer.android.com/ndk/reference/group/audio#aaudiostream_gettimestamp
+https://github.com/googlearchive/android-audio-high-performance/blob/master/aaudio/hello-aaudio/src/main/cpp/PlayAudioEngine.cpp
+https://github.com/google/ExoPlayer/blob/release-v1/library/src/main/java/com/google/android/exoplayer/audio/AudioTrack.java
+https://www.youtube.com/watch?v=FJW8nGV4jxY
+
+=== Audio
+https://github.com/lipnitsk/mocp/blob/master/equalizer.c#L10
+
+=== cmsb
+https://github.com/NixOS/nixpkgs/pull/37730/files
+Could help with iteration.
+
+== Ideas/Plans
+ - [ ] Stela KMS backend.
+ - [ ] XMB (XrossMediaBar) spiritual succesor.
+ - [ ] Minecraft mod.
+ - [ ] Non-TCP (UDP, QUIC?) protocol support.
+ - [ ] NDS client.
+
+=== JSON parsing lib
+ - Reference serde_json?
+ - https://old.reddit.com/r/C_Programming/comments/wjoghd/implementing_an_optional_type_in_c/
+ - https://github.com/serde-rs/json
+ - https://old.reddit.com/r/embedded/comments/1byxt04/attribute_packed_in_embedded_systems_pros_and_cons/
+ - https://www.gnu.org/software/c-intro-and-ref/manual/html_node/Attributes.html
+
+// vim: set ft=asciidoc:
diff --git a/env/android_build.txt b/env/android_build.txt
new file mode 100644
index 0000000..7855be7
--- /dev/null
+++ b/env/android_build.txt
@@ -0,0 +1,4 @@
+#! /usr/bin/env sh
+meson setup build-android -Dserver=disabled -Drenderer-api=gl -Dwindow=glfm \
+ -Dcodec-ffmpeg-version=8 -Dcodec-hwaccels=mediacodec \
+ --cross-file ./cross/aarch64-linux-android.txt --default-library=static
diff --git a/env/mingw_build.sh b/env/mingw_build.sh
deleted file mode 100644
index 805c4f5..0000000
--- a/env/mingw_build.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#! /usr/bin/env sh
-meson setup build-mingw64 -Drenderer-api=vulkan -Drenderer=libplacebo \
- -Dsink-only=false -Dserver=enabled -Dportal=disabled -Dclient=disabled \
- -Dcodecs=ffmpeg -Dcodec-hwaccel=enabled -Dsubtitles=enabled \
- -Dtests=disabled -Dwin32-compat=false --cross-file ./cross/x86_64-w64-mingw32.txt \
- --default-library=static --buildtype=release --optimization=2 -Ddebug=false --strip
-
-meson setup build-mingw32-min -Drenderer-api=gl -Drenderer=momo \
- -Dsink-only=false -Dserver=enabled -Dportal=disabled -Dclient=disabled \
- -Dcodecs=ffmpeg -Dcodec-hwaccel=disabled -Dsubtitles=enabled \
- -Dtests=disabled -Dwin32-compat=true --cross-file ./cross/i686-w64-mingw32.txt \
- --default-library=static --buildtype=release --optimization=s -Ddebug=false --strip
diff --git a/env/mingw_build.txt b/env/mingw_build.txt
new file mode 100644
index 0000000..e091f9a
--- /dev/null
+++ b/env/mingw_build.txt
@@ -0,0 +1,18 @@
+meson setup build-mingw64-vulkan -Drenderer-api=vulkan -Drenderer=libplacebo -Dwindow=win32 \
+ -Dsink-only=false -Dserver=enabled -Dportal=disabled -Dclient=disabled \
+ -Dcodecs=ffmpeg -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 --buildtype=release --optimization=2 -Ddebug=false --strip
+
+meson setup build-mingw64-dx11 -Drenderer-api=dx11 -Drenderer=libplacebo -Dwindow=win32 \
+ -Dsink-only=false -Dserver=enabled -Dportal=disabled -Dclient=disabled \
+ -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 --buildtype=release --optimization=s -Ddebug=false --strip
+
+# 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 \
+ -Dcodecs=ffmpeg -Dcodec-ffmpeg-version=3 -Dsubtitles=enabled \
+ -Dtests=disabled -Dwin32-compat=true --cross-file ./cross/i686-w64-mingw32.txt \
+ --default-library=static --buildtype=release --optimization=s -Ddebug=false --strip
diff --git a/flake.lock b/flake.lock
index 54cc0e7..b6fbabd 100644
--- a/flake.lock
+++ b/flake.lock
@@ -41,11 +41,11 @@
]
},
"locked": {
- "lastModified": 1755121891,
- "narHash": "sha256-UtYkukiGnPRJ5rpd4W/wFVrLMh8fqtNkqHTPgHEtrqU=",
+ "lastModified": 1757256385,
+ "narHash": "sha256-WK7tOhWwr15mipcckhDg2no/eSpM1nIh4C9le8HgHhk=",
"owner": "nix-community",
"repo": "home-manager",
- "rev": "279ca5addcdcfa31ac852b3ecb39fc372684f426",
+ "rev": "f35703b412c67b48e97beb6e27a6ab96a084cd37",
"type": "github"
},
"original": {
@@ -76,11 +76,11 @@
},
"nixos-hardware": {
"locked": {
- "lastModified": 1754564048,
- "narHash": "sha256-dz303vGuzWjzOPOaYkS9xSW+B93PSAJxvBd6CambXVA=",
+ "lastModified": 1757103352,
+ "narHash": "sha256-PtT7ix43ss8PONJ1VJw3f6t2yAoGH+q462Sn8lrmWmk=",
"owner": "NixOS",
"repo": "nixos-hardware",
- "rev": "26ed7a0d4b8741fe1ef1ee6fa64453ca056ce113",
+ "rev": "11b2a10c7be726321bb854403fdeec391e798bf0",
"type": "github"
},
"original": {
@@ -96,11 +96,11 @@
"nixpkgs": "nixpkgs_2"
},
"locked": {
- "lastModified": 1755128472,
- "narHash": "sha256-BVjUDSHplAJKNdSVYrucM6XVYdBepv5LsuFuWcRyil8=",
+ "lastModified": 1757331535,
+ "narHash": "sha256-YYw87rHNMkp6NxT0hThxY5E6zXsQpDtCyWqUNViAmVQ=",
"owner": "nix-community",
"repo": "NixOS-WSL",
- "rev": "8f9cb0d5cc32c364be4348d7bf497c51361ba5bb",
+ "rev": "dedb70d7fa9f06d9bac5e75481af4685415de49c",
"type": "github"
},
"original": {
@@ -127,11 +127,11 @@
},
"nixpkgs_2": {
"locked": {
- "lastModified": 1754725699,
- "narHash": "sha256-iAcj9T/Y+3DBy2J0N+yF9XQQQ8IEb5swLFzs23CdP88=",
+ "lastModified": 1757068644,
+ "narHash": "sha256-NOrUtIhTkIIumj1E/Rsv1J37Yi3xGStISEo8tZm3KW4=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "85dbfc7aaf52ecb755f87e577ddbe6dbbdbc1054",
+ "rev": "8eb28adfa3dc4de28e792e3bf49fcf9007ca8ac9",
"type": "github"
},
"original": {
@@ -143,11 +143,11 @@
},
"nixpkgs_3": {
"locked": {
- "lastModified": 1755027561,
- "narHash": "sha256-IVft239Bc8p8Dtvf7UAACMG5P3ZV+3/aO28gXpGtMXI=",
+ "lastModified": 1757068644,
+ "narHash": "sha256-NOrUtIhTkIIumj1E/Rsv1J37Yi3xGStISEo8tZm3KW4=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "005433b926e16227259a1843015b5b2b7f7d1fc3",
+ "rev": "8eb28adfa3dc4de28e792e3bf49fcf9007ca8ac9",
"type": "github"
},
"original": {
diff --git a/flake.nix b/flake.nix
index 7147cb0..6b8d9ed 100644
--- a/flake.nix
+++ b/flake.nix
@@ -21,20 +21,15 @@
outputs = { self, nixpkgs, nixgl, nixos-hardware, nixos-wsl, home-manager }: let
overlays = [
(self: super: {
- libplacebo = super.libplacebo.overrideAttrs (oldAttrs: {
- patches = [
- ./subprojects/packagefiles/libplacebo/cache_ref_rect.diff
- ./subprojects/packagefiles/libplacebo/compiler_warnings.diff
- ./subprojects/packagefiles/libplacebo/fix_rotate.diff
- ./subprojects/packagefiles/libplacebo/glClientWaitSync_0_return.diff
- ./subprojects/packagefiles/libplacebo/info_priv_hash.diff
- ];
- });
- #libass = super.libass.overrideAttrs (oldAttrs: {
+ #libplacebo = super.libplacebo.overrideAttrs (oldAttrs: {
# patches = [
- # ./subprojects/packagefiles/libass/raw_text_fallback.diff
+ # ./subprojects/packagefiles/libplacebo/cache_ref_rect.diff
+ # ./subprojects/packagefiles/libplacebo/fix_rotate.diff
+ # ./subprojects/packagefiles/libplacebo/glClientWaitSync_0_return.diff
+ # ./subprojects/packagefiles/libplacebo/info_priv_hash.diff
# ];
#});
+ #libass = super.libass.overrideAttrs (oldAttrs: { patches = []; });
libcue = super.libcue.overrideAttrs (oldAttrs: {
patches = [
./subprojects/packagefiles/libcue/55.diff
@@ -154,25 +149,30 @@
alsa-lib
pipewire
libpulseaudio
- libplacebo
+ libva
+ #libplacebo
xxHash
lcms
shaderc
+ glslang.dev
libGL
vulkan-loader
vulkan-headers
vulkan-validation-layers
- libxkbcommon
- glib
- dbus
- gtk3
- glew
- glfw3
- xorg.libX11
wayland
wayland-protocols
wlr-protocols
egl-wayland
+ xorg.libX11
+ xorg.libXext
+ xorg.libXrandr
+ xorg.libXfixes
+ xorg.libXcursor
+ libxkbcommon
+ glfw3
+ # glfw3 build
+ xorg.xinput
+ xorg.libXinerama
# notcurses build
libunistring
ncurses
@@ -216,6 +216,9 @@
perl
asciidoctor
pandoc
+ pkgs.nixgl.nixGLIntel
+ pkgs.nixgl.nixVulkanIntel
+ mesa-demos
#makemkv
# mesa build
#buildPackages.mesa.cross_tools
@@ -252,10 +255,12 @@
buildInputs = packages.${system}.default.buildInputs;
shellHook = ''
export SHELL="${pkgs.bashInteractive}/bin/bash"
- # Vulkan ICDs
+ # Vulkan ICDs.
export XDG_DATA_DIRS="${pkgs.mesa}/share:$XDG_DATA_DIRS"
- # EGL from Nix
+ # EGL from Nix.
export __EGL_VENDOR_LIBRARY_DIRS="${pkgs.mesa}/share/glvnd/egl_vendor.d:$__EGL_VENDOR_LIBRARY_DIRS"
+ # libva from Nix.
+ export LIBVA_DRIVERS_PATH="${pkgs.mesa}/lib/dri"
export NIX_BUILD_SHELL=$SHELL
export NIX_SHELL="camu-${system}+dev"
export PS1="(\$NIX_SHELL)"$PS1
diff --git a/meson.build b/meson.build
index 5a9619f..6eda9b8 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
project('camu', ['c', 'cpp'], # Marking cpp here is required for subproject cross-builds.
version: '0.01',
- meson_version: '>=0.63.0',
+ meson_version: '>=0.63.0', # Wrap diff_files (0.63.0).
default_options: ['warning_level=2', 'c_std=c99'],
license: 'GPL-3.0-only')
@@ -31,16 +31,7 @@ common_deps = [alabaster.get_variable('alabaster'), naunet.get_variable('naunet'
no_video = meson.is_subproject()
# @TODO: Does it make sense for stela to be a dependency for server-side (headless) transcode.
#if not no_video
- stela_opts = ['poll=inline', 'event-buffer=false', 'pause=true']
- if is_linux
- stela_opts += ['window=wayland']
- elif is_android
- stela_opts += ['window=glfm']
- elif is_windows
- stela_opts += ['window=win32']
- else
- stela_opts += ['window=glfw']
- endif
+ stela_opts = ['poll=inline', 'event-buffer=false', 'pause=true', 'window=' + get_option('window')]
if get_option('renderer-api') == 'vulkan'
stela_opts += ['api=vulkan']
elif get_option('renderer-api') == 'dx11'
diff --git a/meson_options.txt b/meson_options.txt
index b179bb5..79fe3e7 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,10 +1,14 @@
# Options
option('codecs', type: 'array', choices: ['ffmpeg', 'stb_image', 'wuffs', 'spng'], value: ['ffmpeg'])
-option('codec-hwaccel', type: 'feature', value: 'disabled', yield: true)
+option('codec-hwaccels', type: 'array', choices: ['vulkan', 'vaapi', 'mediacodec', 'd3d11va', 'dxva2'], value: [], yield: true)
+option('codec-ffmpeg-version', type: 'combo', choices: ['system', '8', '7', '6', '5', '4', '3', '2'], value: 'system')
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('window', type: 'combo', choices: ['wayland', 'x11', 'win32', 'glfw', 'glfm'], value: 'x11')
option('win32-compat', type: 'boolean', value: false, yield: true)
+option('release-asserts', type: 'boolean', value: false, yield: true)
option('tests', type: 'feature', value: 'auto', yield: true)
# Executables ("Fruits")
diff --git a/scripts/line_count.sh b/scripts/line_count.sh
index 2ff0e9c..c2bed2c 100755
--- a/scripts/line_count.sh
+++ b/scripts/line_count.sh
@@ -2,6 +2,7 @@
export LC_ALL="C"
find ./src ./scripts ./env -type f \
-not -path "*__pycache__*" \
+ -not -path "./env/nixpkgs-patches/*" \
-not -path "./src/fruits/droid/*" \
-not -path "./src/portal/cpy/portal.c" \
-not -path "./src/portal/cpy/portal.h" \
diff --git a/src/cache/handlers/file.c b/src/cache/handlers/file.c
index dba5649..1a70350 100644
--- a/src/cache/handlers/file.c
+++ b/src/cache/handlers/file.c
@@ -30,7 +30,7 @@ static s32 handler_file_guess_format(struct cch_handler *handler)
struct cch_backing_file *backing = (struct cch_backing_file *)file->backing;
str *path = &backing->file.path;
u32 dot = al_str_rfind(path, '.');
- if (dot != AL_STR_NPOS) {
+ if (dot != AL_STR_NO_POS) {
str ext = al_str_substr(path, dot, path->length);
return camu_guess_format(NULL, &ext, NULL);
}
diff --git a/src/codec/codec.h b/src/codec/codec.h
index 701ef16..9820316 100644
--- a/src/codec/codec.h
+++ b/src/codec/codec.h
@@ -56,8 +56,10 @@ enum {
CAMU_SAMPLE_FORMAT_S32P = AV_SAMPLE_FMT_S32P,
CAMU_SAMPLE_FORMAT_FLTP = AV_SAMPLE_FMT_FLTP,
CAMU_SAMPLE_FORMAT_DBLP = AV_SAMPLE_FMT_DBLP,
+#ifndef CAMU_OLD_FFMPEG
CAMU_SAMPLE_FORMAT_S64 = AV_SAMPLE_FMT_S64,
CAMU_SAMPLE_FORMAT_S64P = AV_SAMPLE_FMT_S64P
+#endif
};
enum {
diff --git a/src/codec/ffmpeg/common.c b/src/codec/ffmpeg/common.c
index 5226df6..e697a00 100644
--- a/src/codec/ffmpeg/common.c
+++ b/src/codec/ffmpeg/common.c
@@ -1,4 +1,5 @@
#define AL_LOG_SECTION "ff"
+//#define AL_LOG_ENABLE_TRACE
#include <al/log.h>
#include <al/lib.h>
#include <libavutil/log.h>
@@ -27,10 +28,6 @@ static void av_log_callback(void *userdata, s32 level, const char *fmt, va_list
{
(void)userdata;
- if (level >= AV_LOG_DEBUG) {
- return;
- }
-
char *offset = log_context.buf + log_context.pos;
s32 ret = al_vsnprintf(offset, AV_LOG_MAX_CHUNK, fmt, args);
al_assert(ret > 0);
@@ -41,8 +38,10 @@ static void av_log_callback(void *userdata, s32 level, const char *fmt, va_list
if ((log_context.pos > 0 && *(offset - 1) == '\n') || log_context.pos >= AV_LOG_MAX_CHUNK) {
if (level < AV_LOG_WARNING) {
log_info(log_context.buf);
- } else {
+ } else if (level < AL_LOG_DEBUG) {
log_debug(log_context.buf);
+ } else {
+ log_trace(log_context.buf);
}
log_context.pos = 0;
}
@@ -55,9 +54,14 @@ void camu_ff_set_log_callback(void (*callback)(void *, s32, const char *, va_lis
void camu_ff_common_init(void)
{
- log_info("Using FFmpeg version "FFMPEG_VERSION".");
+
#ifdef CAMU_OLD_FFMPEG
+ log_info("Using FFmpeg version "FFMPEG_VERSION" (old).");
+ AL_IGNORE_WARNING("-Wdeprecated-declarations")
av_register_all();
+ AL_IGNORE_WARNING_END
+#else
+ log_info("Using FFmpeg version "FFMPEG_VERSION".");
#endif
camu_ff_set_log_callback(av_log_callback);
}
diff --git a/src/codec/ffmpeg/decoder.c b/src/codec/ffmpeg/decoder.c
index 7be21a2..47bab44 100644
--- a/src/codec/ffmpeg/decoder.c
+++ b/src/codec/ffmpeg/decoder.c
@@ -5,17 +5,20 @@
#include "decoder.h"
-#if !defined CAMU_SINK_NO_VIDEO && defined CAMU_FF_DECODER_HWACCEL
+#ifdef CAMU_FF_DECODER_HWACCEL
#include "../../render/renderer.h"
static const char *hwdevces[] = {
-#if defined STELA_API_VULKAN
+#ifdef CAMU_HAVE_VULKAN_DECODE
"vulkan",
-#else
-#if defined NAUNET_ON_WINDOWS
- "d3d11va",
-#else
+#endif
+#ifdef CAMU_HAVE_VAAPI
"vaapi",
#endif
+#ifdef CAMU_HAVE_D3D11VA
+ "d3d11va",
+#endif
+#ifdef CAMU_HAVE_DXVA2
+ "dxva2",
#endif
};
#endif
@@ -179,6 +182,8 @@ static bool get_hwdevice_config(struct camu_ff_decoder *av, const AVCodec *codec
return true;
}
}
+ const char *hwdevice_name = av_hwdevice_get_type_name(hw_device_type);
+ log_warn("No hw_config for device type %s (type: %d).", hwdevice_name, hw_device_type);
return false;
}
diff --git a/src/codec/ffmpeg/decoder.h b/src/codec/ffmpeg/decoder.h
index 85b88dc..ff513b9 100644
--- a/src/codec/ffmpeg/decoder.h
+++ b/src/codec/ffmpeg/decoder.h
@@ -4,7 +4,7 @@
#include "../codec.h"
-#ifdef CAMU_USE_HWACCEL
+#if defined CAMU_TRY_HWACCEL && !defined CAMU_SINK_NO_VIDEO
#define CAMU_FF_DECODER_HWACCEL
#endif
diff --git a/src/codec/ffmpeg/demuxer.c b/src/codec/ffmpeg/demuxer.c
index f05cfa9..a8f1df7 100644
--- a/src/codec/ffmpeg/demuxer.c
+++ b/src/codec/ffmpeg/demuxer.c
@@ -1,4 +1,5 @@
#define AL_LOG_SECTION "ff_demuxer"
+//#define AL_LOG_ENABLE_TRACE
#include <al/log.h>
#include <al/lib.h>
@@ -9,7 +10,12 @@ static void close_internal(struct camu_ff_demuxer *av)
{
if (av->io_context) {
av_free(av->io_context->buffer);
+#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(57, 80, 100)
avio_context_free(&av->io_context);
+#else
+ av_free(av->io_context);
+ av->io_context = NULL;
+#endif
}
if (av->format_context) {
avformat_flush(av->format_context);
@@ -126,9 +132,13 @@ static bool ff_demuxer_init(struct camu_demuxer *demux, struct cch_handle *handl
}));
}
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(60, 30, 100)
av_format_inject_global_side_data(av->format_context);
+#endif
- //av_dump_format(av->format_context, 0, "", 0);
+#ifdef AL_LOG_ENABLE_TRACE
+ av_dump_format(av->format_context, 0, "", 0);
+#endif
av->eof = false;
diff --git a/src/codec/ffmpeg/meson.build b/src/codec/ffmpeg/meson.build
index 56a75b2..6482426 100644
--- a/src/codec/ffmpeg/meson.build
+++ b/src/codec/ffmpeg/meson.build
@@ -1,97 +1,88 @@
-ffmpeg_src = [
- 'common.c',
- 'packet_ext.c',
-]
+ffmpeg_src = ['common.c', 'packet_ext.c']
ffmpeg_args = ['-DCAMU_HAVE_FFMPEG']
-if get_option('codec-hwaccel').enabled()
- ffmpeg_args += ['-DCAMU_USE_HWACCEL']
-endif
-ffmpeg_deps = []
-
-ffmpeg_server_src = [
- ffmpeg_src,
- 'demuxer.c',
- 'avio.c'
-]
-ffmpeg_server_deps = []
-
-ffmpeg_client_src = [
- ffmpeg_src,
- 'decoder.c',
- 'resampler.c',
- 'scaler.c'
-]
-ffmpeg_client_deps = []
+ffmpeg_server_src = [ffmpeg_src, 'demuxer.c', 'avio.c']
server_transcode = not get_option('sink-only')
if server_transcode
- ffmpeg_server_src += [
- 'decoder.c',
- 'resampler.c',
- 'scaler.c',
- 'encoder.c'
- ]
+ ffmpeg_server_src += ['decoder.c', 'resampler.c', 'scaler.c', 'encoder.c']
endif
+ffmpeg_server_deps = []
+
+ffmpeg_client_src = [ffmpeg_src, 'decoder.c', 'resampler.c', 'scaler.c']
+ffmpeg_client_deps = []
-libavutil = dependency('libavutil', required: false)
-libavformat = dependency('libavformat', required: false)
-libavcodec = dependency('libavcodec', required: false)
-#libavdevice = dependency('libavdevice', required: false)
-libswresample = dependency('libswresample', required: false)
-libswscale = dependency('libswscale', required: false)
-if not (libavutil.found() and libavformat.found() and libavcodec.found() and libswresample.found() and libswscale.found())
- if get_option('win32-compat')
- ffmpeg_proj = subproject('ffmpeg-compat', required: false)
- ffmpeg_args += ['-DCAMU_OLD_FFMPEG']
+ffmpeg_force_fallback = false
+foreach dep: ['ffmpeg', 'libavutil', 'libavformat', 'libavcodec', 'libavdevice', 'libswresample', 'libswscale']
+ if dep in get_option('force_fallback_for')
+ ffmpeg_force_fallback = true
+ break
+ endif
+endforeach
+ffmpeg_version_option = get_option('codec-ffmpeg-version')
+# Check for FFmpeg version in the environment.
+if not ffmpeg_force_fallback
+ libavutil_version_map = { '54': '2', '55': '3', '56': '4', '57': '5', '58': '6', '59': '7', '60': '8' }
+ libavutil_version_rev = { '2': '54', '3': '55', '4': '56', '5': '57', '6': '58', '7': '59', '8': '60' }
+ if ffmpeg_version_option != 'system'
+ ffmpeg_version_int = ffmpeg_version_option.to_int()
+ # Overriding a found dependency will error but overriding a found dependency of the wrong version is allowed.
+ libavutil_version_request = ['>=' + libavutil_version_rev[(ffmpeg_version_int).to_string()] + '.0.0']
+ if ffmpeg_version_int < 8
+ libavutil_version_request += ['<' + libavutil_version_rev[(ffmpeg_version_int + 1).to_string()] + '.0.0']
+ endif
+ libavutil = dependency('libavutil', required: false, allow_fallback: false, version: libavutil_version_request)
else
- ffmpeg_proj = subproject('ffmpeg', required: false)
+ libavutil = dependency('libavutil', required: false, allow_fallback: false)
endif
- if ffmpeg_proj.found()
- libavutil = ffmpeg_proj.get_variable('avutil')
- libavformat = ffmpeg_proj.get_variable('avformat')
- libavcodec = ffmpeg_proj.get_variable('avcodec')
- #libavdevice = ffmpeg_proj.get_variable('avdevice')
- libswresample = ffmpeg_proj.get_variable('swresample')
- libswscale = ffmpeg_proj.get_variable('swscale')
- # Only used to set include dirs for FFmpeg.
- ffmpeg_deps += [ffmpeg_proj.get_variable('ffmpeg_include')]
- # We explicitly enable zlib and maybe bzlib in the FFmpeg build.
- ffmpeg_deps += [dependency('zlib')]
- if not get_option('sink-only')
- ffmpeg_deps += [dependency('bzip2')]
+ if libavutil.found()
+ ffmpeg_version_string = run_command('sh', join_paths(meson.current_source_dir(), 'version.sh'), check: true).stdout().strip()
+ if ffmpeg_version_string == '(unknown)'
+ ffmpeg_version_string = libavutil_version_map[libavutil.version().split('.')[0]] + '.x'
endif
- if is_windows and not get_option('win32-compat')
- # Extra static dependencies for Windows.
- ffmpeg_client_deps += [compiler.find_library('bcrypt')]
- elif is_android
- # Android MediaCodec HW decoding.
- ffmpeg_client_deps += [compiler.find_library('mediandk')]
+ ffmpeg_args += ['-DFFMPEG_VERSION="' + ffmpeg_version_string + '"']
+ if get_option('codec-hwaccels').length() > 0
+ hwaccel_map = {
+ 'vulkan': '-DCAMU_HAVE_VULKAN_DECODE',
+ 'vaapi': '-DCAMU_HAVE_VAAPI',
+ 'd3d11va': '-DCAMU_HAVE_D3D11VA',
+ 'dxva2': '-DCAMU_HAVE_DXVA2',
+ 'mediacodec': '-DCAMU_HAVE_MEDIACODEC',
+ }
+ foreach hwaccel: get_option('codec-hwaccels')
+ if hwaccel in hwaccel_map
+ ffmpeg_args += hwaccel_map[hwaccel]
+ endif
+ endforeach
+ ffmpeg_args += ['-DCAMU_TRY_HWACCEL']
endif
- ffmpeg_version_string = ffmpeg_proj.get_variable('ffmpeg_version_string')
+ elif ffmpeg_version_option == 'system'
+ error('System FFmpeg requested but not found. Add \'--force-fallback-for=ffmpeg\' or \'-Dcodec-ffmpeg-version=[8,7,6,...]\'.')
endif
-else
- ffmpeg_version_string = run_command('sh', join_paths(meson.current_source_dir(), 'version.sh'), check: true).stdout().strip()
endif
-
-if libavutil.found() and libavformat.found() and libavcodec.found() and libswresample.found() and libswscale.found()
- # This is probably meaningless compared to libav* versions, it's just something I wanted.
- ffmpeg_args += ['-DFFMPEG_VERSION="' + ffmpeg_version_string + '"']
- ffmpeg_server_deps += [libavutil, libavformat, libavcodec]
- if server_transcode
- ffmpeg_server_deps += [libswresample, libswscale]
- endif
- ffmpeg_client_deps += [libavutil, libavformat, libavcodec, libswresample, libswscale]
- soxr = compiler.find_library('soxr', required: false)
- if soxr.found()
- ffmpeg_client_deps += [soxr]
- ffmpeg_args += ['-DCAMU_HAVE_SOXR']
+# Fallback if requested or necessary.
+if ffmpeg_force_fallback or not libavutil.found()
+ if ffmpeg_version_option == 'system'
+ ffmpeg_version_option = '8' # Default to current latest.
endif
- codec_server_deps += [
- declare_dependency(sources: ffmpeg_server_src,
- dependencies: [ffmpeg_deps, ffmpeg_server_deps], compile_args: ffmpeg_args)
- ]
- codec_client_deps += [
- declare_dependency(sources: ffmpeg_client_src,
- dependencies: [ffmpeg_deps, ffmpeg_client_deps], compile_args: ffmpeg_args)
- ]
+ subproject('ffmpeg' + ffmpeg_version_option) # Override libav dependencies.
+endif
+
+libavutil = dependency('libavutil')
+libavutil_version = libavutil.version().split('.')[0].to_int()
+if libavutil_version <= 54
+ error('FFmpeg version 2.x and lower currently unsupported.')
+elif libavutil_version <= 56
+ ffmpeg_args += ['-DCAMU_OLD_FFMPEG']
+endif
+libavformat = dependency('libavformat')
+libavcodec = dependency('libavcodec')
+libavdevice = dependency('libavdevice')
+libswresample = dependency('libswresample')
+libswscale = dependency('libswscale')
+ffmpeg_server_deps += [libavutil, libavformat, libavcodec]
+if server_transcode
+ ffmpeg_server_deps += [libswresample, libswscale]
endif
+ffmpeg_client_deps += [libavutil, libavformat, libavcodec, libswresample, libswscale]
+codec_server_deps += [declare_dependency(sources: ffmpeg_server_src, dependencies: ffmpeg_server_deps, compile_args: ffmpeg_args)]
+codec_client_deps += [declare_dependency(sources: ffmpeg_client_src, dependencies: ffmpeg_client_deps, compile_args: ffmpeg_args)]
diff --git a/src/codec/ffmpeg/packet_ext.c b/src/codec/ffmpeg/packet_ext.c
index 7dcda88..6b66dd1 100644
--- a/src/codec/ffmpeg/packet_ext.c
+++ b/src/codec/ffmpeg/packet_ext.c
@@ -16,7 +16,7 @@ void nn_packet_write_av_codec_parameters(struct nn_packet *packet, AVCodecParame
NNWT_PACKET_WRITE_TYPE(packet, s32, codecpar->width);
NNWT_PACKET_WRITE_TYPE(packet, s32, codecpar->height);
NNWT_PACKET_WRITE_TYPE(packet, AVRational, codecpar->sample_aspect_ratio);
-#if !defined CAMU_OLD_FFMPEG && LIBAVCODEC_VERSION_INT >= 60
+#if !defined CAMU_OLD_FFMPEG && LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(60, 11, 100)
NNWT_PACKET_WRITE_TYPE(packet, AVRational, codecpar->framerate);
#endif
NNWT_PACKET_WRITE_TYPE(packet, enum AVFieldOrder, codecpar->field_order);
@@ -108,6 +108,10 @@ void nn_packet_write_av_packet(struct nn_packet *packet, AVPacket *pkt)
#endif
}
+// @TODO: coded_side_data
+// https://github.com/FFmpeg/FFmpeg/blob/f62d8789116fef8d8cd7f20062b16ccd93f7ce23/doc/APIchanges#L537
+// https://ffmpeg.org/doxygen/8.0/structAVCodecParameters.html#ad54da9241deabb3601e6e0e8fa832c19
+// #if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(60, 30, 100)
void nn_packet_read_av_codec_parameters(struct nn_packet *packet, AVCodecParameters *codecpar)
{
NNWT_PACKET_READ_TYPE(packet, enum AVMediaType, codecpar->codec_type);
@@ -127,7 +131,7 @@ void nn_packet_read_av_codec_parameters(struct nn_packet *packet, AVCodecParamet
NNWT_PACKET_READ_TYPE(packet, s32, codecpar->width);
NNWT_PACKET_READ_TYPE(packet, s32, codecpar->height);
NNWT_PACKET_READ_TYPE(packet, AVRational, codecpar->sample_aspect_ratio);
-#if !defined CAMU_OLD_FFMPEG && LIBAVCODEC_VERSION_INT >= 60
+#if !defined CAMU_OLD_FFMPEG && LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(60, 11, 100)
NNWT_PACKET_READ_TYPE(packet, AVRational, codecpar->framerate);
#endif
NNWT_PACKET_READ_TYPE(packet, enum AVFieldOrder, codecpar->field_order);
diff --git a/src/fruits/cmsrv/ui.c b/src/fruits/cmsrv/ui.c
index 4f1ece4..1dd5fa2 100644
--- a/src/fruits/cmsrv/ui.c
+++ b/src/fruits/cmsrv/ui.c
@@ -158,9 +158,11 @@ static void render_lists(struct cmsrv_ui *ui)
if (resource->type == CAMU_RESOURCE_PORTAL) {
putnwstr_maxwidth_yx(n, y, x, max_width - x, &resource->post->title);
} else {
+#endif
char *c_str = al_str_to_c_str(&entry->brief);
ncplane_putstr_yx(n, y, x, c_str);
al_free(c_str);
+#ifdef CAMU_HAVE_PORTAL
}
#endif
if (++current_line >= max_height) break;
diff --git a/src/fruits/cmv/cmv.c b/src/fruits/cmv/cmv.c
index 6875dd1..63e035d 100644
--- a/src/fruits/cmv/cmv.c
+++ b/src/fruits/cmv/cmv.c
@@ -49,9 +49,9 @@ static nn_thread_result NNWT_THREADCALL event_loop_thread(void *userdata)
static bool parse_exe_name_params(str *exe_name, str *addr, struct lia_prefs *prefs)
{
u32 index = al_str_rfind(exe_name, '/');
- if (index == AL_STR_NPOS) {
+ if (index == AL_STR_NO_POS) {
index = al_str_rfind(exe_name, '\\');
- if (index == AL_STR_NPOS) goto def;
+ if (index == AL_STR_NO_POS) goto def;
}
str sub = al_str_substr(exe_name, index + 1, exe_name->length);
@@ -62,19 +62,19 @@ static bool parse_exe_name_params(str *exe_name, str *addr, struct lia_prefs *pr
// Skip version.
index = al_str_find(&sub, '-');
- if (index == AL_STR_NPOS) goto def;
+ if (index == AL_STR_NO_POS) goto def;
sub = al_str_substr(&sub, index + 1, sub.length);
index = al_str_find(&sub, '-');
- if (index == AL_STR_NPOS) goto def;
+ if (index == AL_STR_NO_POS) goto def;
*addr = al_str_substr(&sub, 0, index);
for (;;) {
sub = al_str_substr(&sub, index + 1, sub.length);
index = al_str_find(&sub, '-');
- if (index == AL_STR_NPOS) {
+ if (index == AL_STR_NO_POS) {
index = al_str_find(&sub, '.');
- if (index == AL_STR_NPOS) {
+ if (index == AL_STR_NO_POS) {
index = sub.length;
} else {
sub.length = index;
diff --git a/src/liana/list_cmp.h b/src/liana/list_cmp.h
index ee9b3f8..30f6e7d 100644
--- a/src/liana/list_cmp.h
+++ b/src/liana/list_cmp.h
@@ -9,7 +9,7 @@ AL_IGNORE_WARNING("-Wunused-function")
static void camu_db_num_from_path(str *path, s64 *id, s64 *index)
{
u32 last_slash = al_str_rfind(path, '/');
- if (last_slash == AL_WSTR_NPOS) {
+ if (last_slash == AL_WSTR_NO_POS) {
return;
}
str sub = al_str_substr(path, last_slash + 1, path->length);
@@ -20,7 +20,7 @@ static void camu_db_num_from_path(str *path, s64 *id, s64 *index)
}
u32 target = al_str_find(&sub, '_');
- if (target == AL_WSTR_NPOS) {
+ if (target == AL_WSTR_NO_POS) {
return;
}
sub = al_str_substr(&sub, 0, target);
@@ -32,7 +32,7 @@ static void camu_db_num_from_path(str *path, s64 *id, s64 *index)
u32 ext_dot = al_str_rfind(path, '.');
u32 a_of_media = al_str_rfind(path, 'a');
- if (ext_dot == AL_WSTR_NPOS || a_of_media == AL_WSTR_NPOS) {
+ if (ext_dot == AL_WSTR_NO_POS || a_of_media == AL_WSTR_NO_POS) {
return;
}
sub = al_str_substr(path, a_of_media + 1, ext_dot);
diff --git a/src/libsink/desktop.c b/src/libsink/desktop.c
index 6dee662..35c0b1b 100644
--- a/src/libsink/desktop.c
+++ b/src/libsink/desktop.c
@@ -1,7 +1,9 @@
#define AL_LOG_SECTION "desktop"
#include <al/log.h>
-//#define DESKTOP_NULL_AUDIO
+#ifdef CAMU_NO_MINIAUDIO_BACKENDS
+#define DESKTOP_NULL_AUDIO
+#endif
#ifdef DESKTOP_NULL_AUDIO
#include "../mixer/audio_null.h"
diff --git a/src/mixer/audio_miniaudio.c b/src/mixer/audio_miniaudio.c
index bc2da0d..9355f35 100644
--- a/src/mixer/audio_miniaudio.c
+++ b/src/mixer/audio_miniaudio.c
@@ -74,6 +74,9 @@ static void miniaudio_log_callback(void *userdata, u32 level, const char *messag
static bool audio_miniaudio_init(struct camu_audio *audio, str *name)
{
struct camu_audio_miniaudio *ma = (struct camu_audio_miniaudio *)audio;
+#ifdef CAMU_NO_MINIAUDIO_BACKENDS
+ al_assert_and_return(false);
+#endif
ma_log_init(&alloc_callbacks, &ma->log);
ma_log_register_callback(&ma->log, ma_log_callback_init(miniaudio_log_callback, NULL));
ma->context_config = ma_context_config_init();
diff --git a/src/mixer/meson.build b/src/mixer/meson.build
index e4840c1..f65d624 100644
--- a/src/mixer/meson.build
+++ b/src/mixer/meson.build
@@ -17,10 +17,20 @@ if use_miniaudio
'-DMA_NO_GENERATION',
]
if is_linux
- libpulse = dependency('libpulse')
- alsa = dependency('alsa')
- mixer_deps += [libpulse, alsa]
- mixer_args += ['-DMA_ENABLE_ALSA', '-DMA_ENABLE_PULSEAUDIO', '-DMA_NO_RUNTIME_LINKING']
+ mixer_args += ['-DMA_NO_RUNTIME_LINKING']
+ libpulse = dependency('libpulse', required: false)
+ if libpulse.found()
+ mixer_deps += [libpulse]
+ mixer_args += ['-DMA_ENABLE_PULSEAUDIO']
+ endif
+ alsa = dependency('alsa', required: false)
+ if alsa.found()
+ mixer_deps += [alsa]
+ mixer_args += ['-DMA_ENABLE_ALSA']
+ endif
+ if not (libpulse.found() or alsa.found())
+ mixer_args += ['-DCAMU_NO_MINIAUDIO_BACKENDS']
+ endif
elif is_windows
if get_option('win32-compat')
mixer_args += ['-DMA_ENABLE_DSOUND']
@@ -29,6 +39,8 @@ if use_miniaudio
endif
elif is_android
mixer_args += ['-DMA_ENABLE_AAUDIO']
+ else
+ mixer_args += ['-DCAMU_NO_MINIAUDIO_BACKENDS']
endif
endif
diff --git a/src/render/meson.build b/src/render/meson.build
index b567a03..4274758 100644
--- a/src/render/meson.build
+++ b/src/render/meson.build
@@ -8,118 +8,127 @@ if get_option('renderer') == 'momo'
render_deps += [momo]
render_args += ['-DCAMU_RENDERER_MOMO']
elif get_option('renderer') == 'libplacebo'
- libplacebo_opts = ['warning_level=2', 'demos=false', 'tests=false', 'bench=false', 'fuzz=false',
- 'glslang=disabled',
- 'gl-proc-addr=disabled',
- 'vk-proc-addr=disabled',
- 'lcms=auto',
- 'dovi=auto',
- 'libdovi=auto',
- 'xxhash=auto'
- ]
+ libplacebo_found = false
+ if 'libplacebo' not in get_option('force_fallback_for')
+ libplacebo = dependency('libplacebo', required: false, allow_fallback: false)
+ if libplacebo.found()
+ libplacebo_found = true
+ endif
+ endif
+ if not libplacebo_found
+ libplacebo_opts = ['warning_level=2', 'demos=false', 'tests=false', 'bench=false', 'fuzz=false',
+ 'gl-proc-addr=disabled',
+ 'vk-proc-addr=disabled',
+ 'lcms=auto',
+ 'dovi=auto',
+ 'libdovi=auto',
+ 'xxhash=auto'
+ ]
- if get_option('renderer-api') == 'vulkan' or get_option('renderer-api') == 'dx11'
- if is_windows
- shaderc = dependency('shaderc_combined', required: false, allow_fallback: false)
+ if get_option('renderer-api') == 'vulkan' or get_option('renderer-api') == 'dx11'
+ if get_option('renderer-compiler') == 'shaderc'
+ if is_windows
+ shaderc = dependency('shaderc_combined', required: false, allow_fallback: false)
+ else
+ shaderc = dependency('shaderc', required: false, allow_fallback: false)
+ endif
+ if shaderc.found()
+ render_deps += [shaderc]
+ else
+ shaderc_opts = cmake.subproject_options()
+ shaderc_opts.set_override_option('warning_level', '0') # Doesn't work.
+ reltype = is_minsize ? 'MinSizeRel' : 'Release'
+ shaderc_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype })
+ shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_INSTALL': true })
+ shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_TESTS': true })
+ shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_EXAMPLES': true })
+ shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_COPYRIGHT_CHECK': true })
+ shaderc_opts.add_cmake_defines({ 'ENABLE_GLSLANG_BINARIES': false })
+ shaderc_opts.add_cmake_defines({ 'ENABLE_SPVREMAPPER': false })
+ shaderc_opts.add_cmake_defines({ 'ENABLE_HLSL': false })
+ spirv_optimizer = true
+ shaderc_opts.add_cmake_defines({ 'ENABLE_OPT': spirv_optimizer })
+ 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', shaderc)
+ render_deps += [
+ shaderc_proj.dependency('shaderc_util'),
+ shaderc_proj.dependency('glslang'),
+ shaderc_proj.dependency('MachineIndependent'),
+ shaderc_proj.dependency('OSDependent'),
+ shaderc_proj.dependency('GenericCodeGen'),
+ shaderc_proj.dependency('SPIRV'),
+ shaderc_proj.dependency('SPIRV-Tools-static')
+ ]
+ if spirv_optimizer
+ render_deps += [
+ shaderc_proj.dependency('SPIRV-Tools-opt'),
+ ]
+ endif
+ endif
+ libplacebo_opts += ['shaderc=enabled', 'glslang=disabled']
+ else
+ glslang = dependency('glslang', required: false, allow_fallback: false)
+ if glslang.found()
+ render_deps += [glslang]
+ else
+ glslang_opts = cmake.subproject_options()
+ glslang_opts.set_override_option('warning_level', '0')
+ reltype = is_minsize ? 'MinSizeRel' : 'Release'
+ glslang_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype })
+ spirv_optimizer = false
+ glslang_opts.add_cmake_defines({ 'ENABLE_OPT': spirv_optimizer })
+ glslang_proj = cmake.subproject('glslang', options: glslang_opts)
+ spirv = glslang_proj.dependency('SPIRV')
+ glslang = glslang_proj.dependency('glslang')
+ glslang_default_resource_limits = glslang_proj.dependency('glslang-default-resource-limits')
+ meson.override_dependency('SPIRV', spirv)
+ meson.override_dependency('glslang', glslang)
+ meson.override_dependency('glslang-default-resource-limits', glslang_default_resource_limits)
+ render_deps += [
+ glslang_proj.dependency('MachineIndependent'),
+ glslang_proj.dependency('OSDependent'),
+ glslang_proj.dependency('GenericCodeGen'),
+ spirv,
+ glslang,
+ glslang_default_resource_limits
+ ]
+ endif
+ libplacebo_opts += ['glslang=enabled', 'shaderc=disabled']
+ endif
else
- shaderc = dependency('shaderc', required: false, allow_fallback: false)
+ libplacebo_opts += ['glslang=disabled', 'shaderc=disabled']
endif
- if shaderc.found()
- render_deps += [shaderc]
- else
- shaderc_opts = cmake.subproject_options()
- shaderc_opts.set_override_option('warning_level', '0') # Doesn't work.
+
+ if get_option('renderer-api') == 'vulkan'
+ libplacebo_opts += ['vulkan=enabled', 'd3d11=disabled', 'opengl=disabled']
+ elif get_option('renderer-api') == 'dx11'
+ spirv_cross_opts = cmake.subproject_options()
reltype = is_minsize ? 'MinSizeRel' : 'Release'
- shaderc_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype })
- shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_INSTALL': true })
- shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_TESTS': true })
- shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_EXAMPLES': true })
- shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_COPYRIGHT_CHECK': true })
- shaderc_opts.add_cmake_defines({ 'ENABLE_GLSLANG_BINARIES': false })
- shaderc_opts.add_cmake_defines({ 'ENABLE_SPVREMAPPER': false })
- shaderc_opts.add_cmake_defines({ 'ENABLE_HLSL': false })
- spirv_optimizer = true
- shaderc_opts.add_cmake_defines({ 'ENABLE_OPT': spirv_optimizer })
- 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', shaderc)
+ spirv_cross_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype })
+ spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_CLI': false })
+ spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_TESTS': false })
+ spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_MSL': false })
+ spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_CPP': false })
+ spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_REFLECT': false })
+ spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_UTIL': false })
+ spirv_cross_proj = cmake.subproject('SPIRV-Cross', options: spirv_cross_opts)
+ spirv_cross_c_shared = spirv_cross_proj.dependency('spirv-cross-c')
render_deps += [
- shaderc_proj.dependency('shaderc_util'),
- shaderc_proj.dependency('glslang'),
- shaderc_proj.dependency('MachineIndependent'),
- shaderc_proj.dependency('OSDependent'),
- shaderc_proj.dependency('GenericCodeGen'),
- shaderc_proj.dependency('SPIRV'),
- shaderc_proj.dependency('SPIRV-Tools-static')
+ spirv_cross_proj.dependency('spirv-cross-glsl'),
+ spirv_cross_proj.dependency('spirv-cross-hlsl'),
+ spirv_cross_proj.dependency('spirv-cross-core'),
+ spirv_cross_c_shared
]
- if spirv_optimizer
- render_deps += [
- shaderc_proj.dependency('SPIRV-Tools-opt'),
- ]
- endif
+ meson.override_dependency('spirv-cross-c-shared', spirv_cross_c_shared)
+ libplacebo_opts += ['d3d11=enabled', 'vulkan=disabled', 'opengl=disabled']
+ else
+ libplacebo_opts += ['opengl=enabled', 'vulkan=disabled', 'd3d11=disabled']
endif
- #glslang = dependency('glslang', required: false, allow_fallback: false)
- #if glslang.found()
- # render_deps += [glslang]
- #else
- # #spirv_tools_opts = cmake.subproject_options()
- # #spirv_tools_opts.set_override_option('warning_level', '0')
- # #reltype = is_minsize ? 'MinSizeRel' : 'Release'
- # #spirv_tools_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype })
- # #spirv_tools_proj = cmake.subproject('SPIRV-Tools', options: spirv_tools_opts)
- # glslang_opts = cmake.subproject_options()
- # glslang_opts.set_override_option('warning_level', '0')
- # reltype = is_minsize ? 'MinSizeRel' : 'Release'
- # glslang_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype })
- # #glslang_opts.add_cmake_defines({ 'ALLOW_EXTERNAL_SPIRV_TOOLS': true })
- # glslang_opts.add_cmake_defines({ 'ENABLE_OPT': '0' })
- # glslang_proj = cmake.subproject('glslang', options: glslang_opts)
- # #message('CMake targets:\n - ' + '\n - '.join(glslang_proj.target_list()))
- # glslang = glslang_proj.dependency('glslang')
- # spirv = glslang_proj.dependency('SPIRV')
- # glslang_default_resource_limits = glslang_proj.dependency('glslang-default-resource-limits')
- # meson.override_dependency('glslang', glslang)
- # meson.override_dependency('SPIRV', spirv)
- # meson.override_dependency('glslang-default-resource-limits', glslang_default_resource_limits)
- # render_deps += [
- # glslang_proj.dependency('MachineIndependent'),
- # glslang_proj.dependency('OSDependent'),
- # glslang_proj.dependency('GenericCodeGen'),
- # glslang,
- # spirv,
- # glslang_default_resource_limits
- # ]
- #endif
- endif
- if get_option('renderer-api') == 'vulkan'
- libplacebo_opts += ['shaderc=enabled', 'vulkan=enabled', 'd3d11=disabled', 'opengl=disabled']
- elif get_option('renderer-api') == 'dx11'
- spirv_cross_opts = cmake.subproject_options()
- reltype = is_minsize ? 'MinSizeRel' : 'Release'
- spirv_cross_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype })
- spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_CLI': false })
- spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_TESTS': false })
- spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_MSL': false })
- spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_CPP': false })
- spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_REFLECT': false })
- spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_UTIL': false })
- spirv_cross_proj = cmake.subproject('SPIRV-Cross', options: spirv_cross_opts)
- spirv_cross_c_shared = spirv_cross_proj.dependency('spirv-cross-c')
- render_deps += [
- spirv_cross_proj.dependency('spirv-cross-glsl'),
- spirv_cross_proj.dependency('spirv-cross-hlsl'),
- spirv_cross_proj.dependency('spirv-cross-core'),
- spirv_cross_c_shared
- ]
- meson.override_dependency('spirv-cross-c-shared', spirv_cross_c_shared)
- libplacebo_opts += ['shaderc=enabled', 'd3d11=enabled', 'vulkan=disabled', 'opengl=disabled']
- else
- libplacebo_opts += ['shaderc=disabled', 'opengl=enabled', 'vulkan=disabled', 'd3d11=disabled']
+ libplacebo = dependency('libplacebo', default_options: libplacebo_opts)
endif
-
- libplacebo = dependency('libplacebo', default_options: libplacebo_opts)
render_src += ['renderer_libplacebo.c', 'queue_libplacebo.c']
render_deps += [libplacebo]
render_args += ['-DCAMU_RENDERER_LIBPLACEBO']
diff --git a/subprojects/SPIRV-Cross.wrap b/subprojects/SPIRV-Cross.wrap
index a74d4be..31f579f 100644
--- a/subprojects/SPIRV-Cross.wrap
+++ b/subprojects/SPIRV-Cross.wrap
@@ -1,7 +1,7 @@
[wrap-git]
-directory = SPIRV-Cross-ccff428
+directory = SPIRV-Cross-0a88b2d
url = https://github.com/KhronosGroup/SPIRV-Cross.git
-revision = ccff428086b625241de9f225dab0a53269b4d12c
+revision = 0a88b2d5c08708d45692b7096a0a84e7bfae366c
depth = 1
method = cmake
patch_directory = SPIRV-Cross
diff --git a/subprojects/ffmpeg-compat.wrap b/subprojects/ffmpeg-compat.wrap
deleted file mode 100644
index dc3402b..0000000
--- a/subprojects/ffmpeg-compat.wrap
+++ /dev/null
@@ -1,7 +0,0 @@
-[wrap-file]
-directory = ffmpeg-3.4.14
-source_url = https://ffmpeg.org/releases/ffmpeg-3.4.14.tar.gz
-source_filename = ffmpeg-3.4.14.tar.gz
-source_hash = 61e255e824341e62fbc83365d84eb754fa558f53985d28ad610d13aeee895d5a
-patch_directory = ffmpeg-compat
-diff_files = ffmpeg/msvc_build_conform.diff, ffmpeg-compat/ffmpeg.git-effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch
diff --git a/subprojects/ffmpeg.wrap b/subprojects/ffmpeg.wrap
deleted file mode 100644
index 21eaac9..0000000
--- a/subprojects/ffmpeg.wrap
+++ /dev/null
@@ -1,43 +0,0 @@
-[wrap-file]
-directory = ffmpeg-7.1.1
-#directory = ffmpeg-7.1
-#directory = ffmpeg-5.1.6
-#directory = ffmpeg-7.0.2
-#directory = ffmpeg-7.0.1
-#directory = ffmpeg-7.0
-#directory = ffmpeg-6.1.1
-#directory = ffmpeg-5.1.4
-#directory = ffmpeg-4.4.5
-
-source_url = https://ffmpeg.org/releases/ffmpeg-7.1.1.tar.gz
-#source_url = https://ffmpeg.org/releases/ffmpeg-7.1.tar.gz
-#source_url = https://www.ffmpeg.org/releases/ffmpeg-5.1.6.tar.gz
-#source_url = https://ffmpeg.org/releases/ffmpeg-7.0.2.tar.gz
-#source_url = https://ffmpeg.org/releases/ffmpeg-7.0.1.tar.gz
-#source_url = https://www.ffmpeg.org/releases/ffmpeg-7.0.tar.gz
-#source_url = https://www.ffmpeg.org/releases/ffmpeg-6.1.1.tar.gz
-#source_url = https://www.ffmpeg.org/releases/ffmpeg-5.1.4.tar.gz
-#source_url = https://www.ffmpeg.org/releases/ffmpeg-4.4.5.tar.gz
-
-source_filename = ffmpeg-7.1.1.tar.gz
-#source_filename = ffmpeg-7.1.tar.gz
-#source_filename = ffmpeg-5.1.6.tar.gz
-#source_filename = ffmpeg-7.0.2.tar.gz
-#source_filename = ffmpeg-7.0.1.tar.gz
-#source_filename = ffmpeg-7.0.tar.gz
-#source_filename = ffmpeg-6.1.1.tar.gz
-#source_filename = ffmpeg-5.1.4.tar.gz
-#source_filename = ffmpeg-4.4.5.tar.gz
-
-source_hash = 9a6e57a446b671012612aaeb9df5126794d5ac8f2015ca220934f99a6a4e0601
-#source_hash = 42a7dc0d1583885d1b8f6559fa7ce28f97acafea6803de6a8f73e3ba229348bd
-#source_hash = 2a963f9f627dc55cac7ce4d2bb2e063ce52c8ab57185d2b592a631c36be56fda
-#source_hash = 1233b3a93dd7517cc3c56b72a67f64041c044848d981e3deff4bebffa25f1054
-#source_hash = e273eae00b4f833595654c1ee2b2349240e0332f9dbf3c4cadd39df9819ff052
-#source_hash = 943a2a28044947c17a905c39075494b0da46ec0795224c2c61eff986518321eb
-#source_hash = b0aee531e4a91fed6bc031445dfc3ad8eb36de1fcb0fa2acdb589ecc9f8dc9cb
-#source_hash = ad1d83e0f022ba405928ea4985c9cab978c4698bb7937738a1085808c3eb78b4
-#source_hash = 77e0eedd8ebeafde5807011e700fdea82b306b9f76fe469b4abc5dfefd9579bd
-
-patch_directory = ffmpeg
-diff_files = ffmpeg/msvc_build_conform.diff
diff --git a/subprojects/ffmpeg2.wrap b/subprojects/ffmpeg2.wrap
new file mode 100644
index 0000000..753e7de
--- /dev/null
+++ b/subprojects/ffmpeg2.wrap
@@ -0,0 +1,8 @@
+[wrap-file]
+directory = ffmpeg-2.8.22
+source_url = https://ffmpeg.org/releases/ffmpeg-2.8.22.tar.gz
+source_filename = ffmpeg-2.8.22.tar.gz
+source_hash = d1adc01d275cc15978afc78cc6e2c98a07a8dd6ba96b6217aeb9a1a26d89d213
+
+patch_directory = ffmpeg
+diff_files = ffmpeg/version_2.8.22.diff, ffmpeg/msvc_build_conform.diff, ffmpeg/ffmpeg.git-effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch
diff --git a/subprojects/ffmpeg3.wrap b/subprojects/ffmpeg3.wrap
new file mode 100644
index 0000000..71d9908
--- /dev/null
+++ b/subprojects/ffmpeg3.wrap
@@ -0,0 +1,13 @@
+[wrap-file]
+directory = ffmpeg-3.4.14
+#directory = ffmpeg-3.3.9
+source_url = https://ffmpeg.org/releases/ffmpeg-3.4.14.tar.gz
+#source_url = https://ffmpeg.org/releases/ffmpeg-3.3.9.tar.gz
+source_filename = ffmpeg-3.4.14.tar.gz
+#source_filename = ffmpeg-3.3.9.tar.gz
+source_hash = 61e255e824341e62fbc83365d84eb754fa558f53985d28ad610d13aeee895d5a
+#source_hash = f79ef311f55303dbc692014d609ec44a609adcea6ded5f5507b6e220068521a3
+
+patch_directory = ffmpeg
+diff_files = ffmpeg/version_3.4.14.diff, ffmpeg/msvc_build_conform.diff, ffmpeg/ffmpeg.git-effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch
+#diff_files = ffmpeg/version_3.3.9.diff, ffmpeg/msvc_build_conform.diff, ffmpeg/ffmpeg.git-effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch
diff --git a/subprojects/ffmpeg4.wrap b/subprojects/ffmpeg4.wrap
new file mode 100644
index 0000000..a9c4dc7
--- /dev/null
+++ b/subprojects/ffmpeg4.wrap
@@ -0,0 +1,8 @@
+[wrap-file]
+directory = ffmpeg-4.2.11
+source_url = https://ffmpeg.org/releases/ffmpeg-4.2.11.tar.gz
+source_filename = ffmpeg-4.2.11.tar.gz
+source_hash = 93ad3689249984016c04cb0a0e02e5e22077a4d0204ca26bb604b0b7f0418eeb
+
+patch_directory = ffmpeg
+diff_files = ffmpeg/version_4.2.11.diff, ffmpeg/msvc_build_conform.diff
diff --git a/subprojects/ffmpeg5.wrap b/subprojects/ffmpeg5.wrap
new file mode 100644
index 0000000..6ae62ca
--- /dev/null
+++ b/subprojects/ffmpeg5.wrap
@@ -0,0 +1,8 @@
+[wrap-file]
+directory = ffmpeg-5.1.7
+source_url = https://ffmpeg.org/releases/ffmpeg-5.1.7.tar.gz
+source_filename = ffmpeg-5.1.7.tar.gz
+source_hash = 75f25adaac2fe64f5c078b1ec3c89863353eb07f6e6a9e38898d79d2fc9527c8
+
+patch_directory = ffmpeg
+diff_files = ffmpeg/version_5.1.7.diff, ffmpeg/msvc_build_conform.diff
diff --git a/subprojects/ffmpeg6.wrap b/subprojects/ffmpeg6.wrap
new file mode 100644
index 0000000..9c76e9c
--- /dev/null
+++ b/subprojects/ffmpeg6.wrap
@@ -0,0 +1,8 @@
+[wrap-file]
+directory = ffmpeg-6.1.3
+source_url = https://ffmpeg.org/releases/ffmpeg-6.1.3.tar.gz
+source_filename = ffmpeg-6.1.3.tar.gz
+source_hash = 3be466dfd1a312d752c20ece5b413248a5808fba3c967da0624bac48a4380857
+
+patch_directory = ffmpeg
+diff_files = ffmpeg/version_6.1.3.diff, ffmpeg/msvc_build_conform.diff
diff --git a/subprojects/ffmpeg7.wrap b/subprojects/ffmpeg7.wrap
new file mode 100644
index 0000000..8187b07
--- /dev/null
+++ b/subprojects/ffmpeg7.wrap
@@ -0,0 +1,8 @@
+[wrap-file]
+directory = ffmpeg-7.1.1
+source_url = https://ffmpeg.org/releases/ffmpeg-7.1.1.tar.gz
+source_filename = ffmpeg-7.1.1.tar.gz
+source_hash = 9a6e57a446b671012612aaeb9df5126794d5ac8f2015ca220934f99a6a4e0601
+
+patch_directory = ffmpeg
+diff_files = ffmpeg/version_7.1.1.diff, ffmpeg/msvc_build_conform.diff
diff --git a/subprojects/ffmpeg8.wrap b/subprojects/ffmpeg8.wrap
new file mode 100644
index 0000000..64d4d47
--- /dev/null
+++ b/subprojects/ffmpeg8.wrap
@@ -0,0 +1,8 @@
+[wrap-file]
+directory = ffmpeg-8.0
+source_url = https://ffmpeg.org/releases/ffmpeg-8.0.tar.gz
+source_filename = ffmpeg-8.0.tar.gz
+source_hash = cce1136d38c389e6baaa452d6babc384cb2d3a9406ebe48c36a48f3ee115d8df
+
+patch_directory = ffmpeg
+diff_files = ffmpeg/version_8.0.diff
diff --git a/subprojects/fontconfig.wrap b/subprojects/fontconfig.wrap
index 16ea256..c6a95ed 100644
--- a/subprojects/fontconfig.wrap
+++ b/subprojects/fontconfig.wrap
@@ -1,7 +1,7 @@
[wrap-git]
-directory = fontconfig-2.16.2
+directory = fontconfig-2.17.1
url = https://gitlab.freedesktop.org/fontconfig/fontconfig.git
-revision = 2.16.2
+revision = 2.17.1
depth = 1
[provide]
diff --git a/subprojects/harfbuzz.wrap b/subprojects/harfbuzz.wrap
index 59a132d..c53702e 100644
--- a/subprojects/harfbuzz.wrap
+++ b/subprojects/harfbuzz.wrap
@@ -1,5 +1,5 @@
[wrap-git]
-directory = harfbuzz-11.2.1
+directory = harfbuzz-11.4.1
url = https://github.com/harfbuzz/harfbuzz.git
-revision = 11.2.1
+revision = 11.4.1
depth = 1
diff --git a/subprojects/libalabaster.wrap b/subprojects/libalabaster.wrap
index 5457b48..8f26eb0 100644
--- a/subprojects/libalabaster.wrap
+++ b/subprojects/libalabaster.wrap
@@ -1,4 +1,6 @@
[wrap-git]
+directory = libalabaster-ed6fc17
url = https://git.akon.city/libalabaster.git
-revision = 492f4a38f7b7f32727ab678f333eff840d968d74
+push-url = git@git.akon.city:libalabaster.git
+revision = ed6fc176a1ef6afd43eaa198c43eb813c3a81d99
depth = 1
diff --git a/subprojects/libnaunet.wrap b/subprojects/libnaunet.wrap
index 57a13ac..e4f9e1d 100644
--- a/subprojects/libnaunet.wrap
+++ b/subprojects/libnaunet.wrap
@@ -1,4 +1,6 @@
[wrap-git]
+directory = libnaunet-4aea807
url = https://git.akon.city/libnaunet.git
-revision = ab75884371a3545f7548498549e2faebbc465ed6
+push-url = git@git.akon.city:libnaunet.git
+revision = 4aea807a167a894fd264718efc8c9fa8bced7dcb
depth = 1
diff --git a/subprojects/libplacebo.wrap b/subprojects/libplacebo.wrap
index 33e3323..9e0e839 100644
--- a/subprojects/libplacebo.wrap
+++ b/subprojects/libplacebo.wrap
@@ -1,11 +1,11 @@
[wrap-git]
-directory = libplacebo-4ff55e0
+directory = libplacebo-a0fd4f3
url = https://code.videolan.org/videolan/libplacebo.git
-revision = 4ff55e04264e8c650b9de097d91f17bcd820fb31
+revision = a0fd4f3dbee547edcd777e81a424ce366751d27b
clone-recursive = true
depth = 1
-diff_files = libplacebo/cache_ref_rect.diff, libplacebo/fix_rotate.diff, libplacebo/dependency_version_override.diff, libplacebo/compiler_warnings.diff, libplacebo/glClientWaitSync_0_return.diff, libplacebo/info_priv_hash.diff, libplacebo/d3d11_scaling_none.diff
+diff_files = libplacebo/cache_ref_rect.diff, libplacebo/fix_rotate.diff, libplacebo/dependency_version_override.diff, libplacebo/glClientWaitSync_0_return.diff, libplacebo/info_priv_hash.diff, libplacebo/d3d11_scaling_none.diff
[provide]
dependency_names = libplacebo
diff --git a/subprojects/miniaudio.wrap b/subprojects/miniaudio.wrap
index dc57800..7a4073d 100644
--- a/subprojects/miniaudio.wrap
+++ b/subprojects/miniaudio.wrap
@@ -1,7 +1,7 @@
[wrap-git]
-directory = miniaudio-e543369
+directory = miniaudio-78cdb9c
url = https://github.com/mackron/miniaudio.git
-revision = e54336996d3f57f2d47f80013049fd7559031778
+revision = 78cdb9c1cb1de054cf9c9b6202387eb2921158be
depth = 1
patch_directory = miniaudio
diff_files = miniaudio/miniaudio_pulse_flush.diff, miniaudio/miniaudio_wasapi_drain_tweak.diff
diff --git a/subprojects/notcurses.wrap b/subprojects/notcurses.wrap
index bc58274..4c481f9 100644
--- a/subprojects/notcurses.wrap
+++ b/subprojects/notcurses.wrap
@@ -1,7 +1,7 @@
[wrap-git]
-directory = notcurses-93a4890
+directory = notcurses-e6aeee5
url = https://github.com/dankamongmen/notcurses.git
-revision = 93a4890f4c2b491cda62fea5110995c6a25691e2
+revision = e6aeee519c90ad1be4397c63c995541af3d42c5f
depth = 1
method = cmake
diff --git a/subprojects/packagefiles/ffmpeg-compat/meson.build b/subprojects/packagefiles/ffmpeg-compat/meson.build
deleted file mode 100644
index 7aeeb71..0000000
--- a/subprojects/packagefiles/ffmpeg-compat/meson.build
+++ /dev/null
@@ -1,197 +0,0 @@
-project('ffmpeg', 'c', version: '3.4.14', meson_version: '>=0.57.0')
-
-ffmpeg_version_string = meson.project_version()
-
-compiler = meson.get_compiler('c')
-
-cpu = target_machine.cpu_family()
-is_64bit = (cpu == 'x86_64' or cpu == 'aarch64')
-is_debug = get_option('debug')
-is_minsize = get_option('optimization') == 's'
-is_linux = host_machine.system() == 'linux'
-is_windows = host_machine.system() == 'windows'
-is_msvc = compiler.get_id() == 'msvc' or compiler.get_id() == 'clang-cl'
-is_mingw = is_windows and not is_msvc
-is_android = host_machine.system() == 'android'
-
-extra_options = []
-
-if not is_debug
- extra_options += ['--disable-debug']
-endif
-
-if is_minsize
- extra_options += ['--enable-small']
-endif
-
-extra_options += ['--arch=' + cpu]
-extra_options += ['--cc=' + compiler.cmd_array()[0]]
-if meson.is_cross_build()
- if is_msvc
- extra_options += ['--ld=' + compiler.get_linker_id()]
- endif
- extra_options += ['--ar=' + meson.get_external_property('ar', 'ar')]
- extra_options += ['--nm=' + meson.get_external_property('nm', 'nm')]
-endif
-
-if cpu == 'x86_64' or cpu == 'x86'
- extra_options += ['--enable-x86asm']
-endif
-
-if is_windows
- extra_options += ['--extra-cflags=-D_WIN32_WINNT=0x0502'] # Windows Server 2003 with SP1, Windows XP with SP2.
- if is_64bit
- extra_options += ['--target-os=win64']
- else
- extra_options += ['--target-os=win32']
- endif
- if is_msvc
- extra_options += ['--toolchain=msvc']
- endif
- extra_options += ['--enable-w32threads']
-elif is_android
- extra_options += ['--target-os=android']
-endif
-
-#'--extra-ldflags=-Lbuild/subprojects/libalabaster -l:libalabaster.a',
-#'--malloc-prefix=al_',
-
-decoders = 'flac,mp3,mp3float,aac,opus,vorbis,h264,hevc,av1,vp9'
-decoders += ',pcm_s32be,pcm_s32le,pcm_s24be,pcm_s24le,pcm_s16be,pcm_s16le'
-#decoders += ',pcm_f32be,pcm_f32le,pcm_s32le_planar,pcm_s16be_planar,pcm_s16le_planar'
-decoders += ',dca,eac3'
-decoders += ',pcm_dvd,mpegvideo,mpeg2video'
-#decoders += ',ass,srt'
-
-demuxers = ''
-parsers = ''
-if not get_option('sink-only')
- demuxers += 'flac,mp3,aac,wav,matroska,mov,avi'
- demuxers += ',pcm_s32be,pcm_s32le,pcm_s24be,pcm_s24le,pcm_s16be,pcm_s16le'
- #demuxers += ',pcm_f32be,pcm_f32le,pcm_s32le_planar,pcm_s16be_planar,pcm_s16le_planar'
- demuxers += ',eac3'
- demuxers += ',mpegts,mpegtsraw,mpegps,mpegvideo'
- #demuxers += ',ass,srt'
- parsers += 'aac,opus,h264,hevc,av1,vp9'
- parsers += ',dca'
- parsers += ',mpegaudio,mpegvideo,dvd_nav'
- extra_options += ['--enable-bzlib'] # matroska
-endif
-
-extra_options += ['--enable-zlib']
-decoders += ',png,apng,mjpeg,jpeg2000,gif,'
-if not get_option('sink-only')
- demuxers += ',image_png_pipe,image2,mjpeg,image2pipe,image_jpeg_pipe,gif'
- parsers += ',png,mjpeg,jpeg2000,gif'
-endif
-
-bsfs = ''
-if not get_option('sink-only')
- bsfs += 'extract_extradata,mp3_header_decompress'
-endif
-
-hwaccels = ''
-if get_option('codec-hwaccel').enabled()
- if get_option('renderer-api') == 'vulkan'
- extra_options += ['--enable-vulkan']
- hwaccels += 'h264_vulkan,hevc_vulkan,av1_vulkan,vp9_vulkan'
- elif is_windows
- extra_options += ['--enable-d3d11va']
- hwaccels += 'h264_d3d11va,hevc_d3d11va,av1_d3d11va,vp9_d3d11va'
- hwaccels += ',h264_d3d11va2,hevc_d3d11va2,av1_d3d11va2,vp9_d3d11va2'
- #extra_options += ['--enable-dxva2']
- #hwaccels += ',h264_dxva2,hevc_dxva2,av1_dxva2,vp9_dxva2'
- elif is_android
- extra_options += ['--enable-jni', '--enable-mediacodec']
- decoders += ',h264_mediacodec,hevc_mediacodec,av1_mediacodec,vp9_mediacodec'
- elif is_linux
- extra_options += ['--enable-vaapi']
- endif
-else
- extra_options += ['--disable-hwaccels']
-endif
-
-protocols = ''
-if not get_option('sink-only')
- protocols += 'cache'
-endif
-
-if decoders != ''
- extra_options += ['--enable-decoder=' + decoders]
-endif
-
-if demuxers != ''
- extra_options += ['--enable-demuxer=' + demuxers]
-endif
-
-if parsers != ''
- extra_options += ['--enable-parser=' + parsers]
-endif
-
-if bsfs != ''
- extra_options += ['--enable-bsf=' + bsfs]
-endif
-
-if protocols != ''
- extra_options += ['--enable-protocol=' + protocols]
-endif
-
-if hwaccels != ''
- extra_options += ['--enable-hwaccel=' + hwaccels]
-endif
-
-if is_linux or is_mingw
- extra_options += ['--enable-libsoxr']
-endif
-
-ext_proj = import('unstable-external_project')
-
-proj = ext_proj.add_project('configure',
- configure_options: [
- '--prefix=@PREFIX@',
- '--libdir=@PREFIX@/@LIBDIR@',
- '--incdir=@PREFIX@/@INCLUDEDIR@',
- '--enable-pic',
- '--enable-static',
- '--disable-shared',
- '--disable-logging',
- '--disable-all',
- '--disable-autodetect',
- '--disable-everything',
- '--disable-programs',
- '--disable-doc',
- '--disable-htmlpages',
- '--disable-manpages',
- '--disable-podpages',
- '--disable-txtpages',
- '--disable-safe-bitstream-reader',
- '--disable-schannel',
- '--disable-network',
- '--disable-securetransport',
- #'--disable-iconv',
- '--enable-gpl',
- '--enable-version3',
- '--disable-nonfree',
- '--enable-runtime-cpudetect',
- '--enable-asm',
- '--enable-inline-asm',
- '--enable-avutil',
- '--enable-avformat',
- '--enable-avcodec',
- #'--enable-avdevice',
- '--enable-swresample',
- '--enable-swscale',
- '--disable-indevs',
- '--disable-outdevs',
- extra_options
- ],
- cross_configure_options: ['--enable-cross-compile'],
- verbose: true)
-
-avutil = proj.dependency('avutil')
-avformat = proj.dependency('avformat')
-avcodec = proj.dependency('avcodec')
-#avdevice = proj.dependency('avdevice')
-swresample = proj.dependency('swresample')
-swscale = proj.dependency('swscale')
-ffmpeg_include = declare_dependency(include_directories: include_directories('.', 'build/'))
diff --git a/subprojects/packagefiles/ffmpeg-compat/meson_options.txt b/subprojects/packagefiles/ffmpeg-compat/meson_options.txt
deleted file mode 100644
index eb4b08b..0000000
--- a/subprojects/packagefiles/ffmpeg-compat/meson_options.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-# Copy-paste from top-level project.
-option('codec-hwaccel', type: 'feature', value: 'disabled', yield: true)
-option('renderer-api', type: 'combo', choices: ['vulkan', 'dx11', 'gl', 'gl-rpi'], value: 'vulkan', yield: true)
-option('sink-only', type: 'boolean', value: false, yield: true)
diff --git a/subprojects/packagefiles/ffmpeg-compat/meson_project.diff b/subprojects/packagefiles/ffmpeg-compat/meson_project.diff
deleted file mode 100644
index 5646fe1..0000000
--- a/subprojects/packagefiles/ffmpeg-compat/meson_project.diff
+++ /dev/null
@@ -1,16 +0,0 @@
---- meson.build 2025-05-25 19:32:01.080982098 -0400
-+++ meson.build 2025-05-25 19:32:01.080982098 -0400
-@@ -1,4 +1,4 @@
--project('ffmpeg', 'c', version: '7.1.1', meson_version: '>=0.57.0')
-+project('ffmpeg', 'c', version: '3.4.14', meson_version: '>=0.57.0')
-
- ffmpeg_version_string = meson.project_version()
-
-@@ -39,6 +39,7 @@
- endif
-
- if is_windows
-+ extra_options += ['--extra-cflags=-D_WIN32_WINNT=0x0502'] # Windows Server 2003 with SP1, Windows XP with SP2.
- if is_64bit
- extra_options += ['--target-os=win64']
- else
diff --git a/subprojects/packagefiles/ffmpeg-compat/ffmpeg.git-effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch b/subprojects/packagefiles/ffmpeg/ffmpeg.git-effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch
index b4fec43..b4fec43 100644
--- a/subprojects/packagefiles/ffmpeg-compat/ffmpeg.git-effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch
+++ b/subprojects/packagefiles/ffmpeg/ffmpeg.git-effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch
diff --git a/subprojects/packagefiles/ffmpeg/meson.build b/subprojects/packagefiles/ffmpeg/meson.build
index 8bcce34..46f2d31 100644
--- a/subprojects/packagefiles/ffmpeg/meson.build
+++ b/subprojects/packagefiles/ffmpeg/meson.build
@@ -1,6 +1,4 @@
-project('ffmpeg', 'c', version: '7.1.1', meson_version: '>=0.57.0')
-
-ffmpeg_version_string = meson.project_version()
+project('ffmpeg', 'c', version: '', meson_version: '>=0.57.0')
compiler = meson.get_compiler('c')
@@ -14,6 +12,9 @@ is_msvc = compiler.get_id() == 'msvc' or compiler.get_id() == 'clang-cl'
is_mingw = is_windows and not is_msvc
is_android = host_machine.system() == 'android'
+args = ['-DFFMPEG_VERSION="' + meson.project_version() + '"']
+deps = []
+
extra_options = []
if not is_debug
@@ -38,7 +39,12 @@ if cpu == 'x86_64' or cpu == 'x86'
extra_options += ['--enable-x86asm']
endif
+extra_options += ['--enable-static', '--disable-shared']
+
if is_windows
+ if get_option('win32-compat')
+ extra_options += ['--extra-cflags=-D_WIN32_WINNT=0x0502'] # Windows Server 2003 with SP1, Windows XP with SP2.
+ endif
if is_64bit
extra_options += ['--target-os=win64']
else
@@ -48,6 +54,7 @@ if is_windows
extra_options += ['--toolchain=msvc']
endif
extra_options += ['--enable-w32threads']
+ deps += [compiler.find_library('bcrypt')]
elif is_android
extra_options += ['--target-os=android']
endif
@@ -74,14 +81,22 @@ if not get_option('sink-only')
parsers += 'aac,opus,h264,hevc,av1,vp9'
parsers += ',dca'
parsers += ',mpegaudio,mpegvideo,dvd_nav'
- extra_options += ['--enable-bzlib'] # matroska
+ bzlib = dependency('bzip2', required: false)
+ if bzlib.found()
+ extra_options += ['--enable-bzlib'] # matroska
+ deps += [bzlib]
+ endif
endif
-extra_options += ['--enable-zlib']
-decoders += ',png,apng,mjpeg,jpeg2000,gif,'
-if not get_option('sink-only')
- demuxers += ',image_png_pipe,image2,mjpeg,image2pipe,image_jpeg_pipe,gif'
- parsers += ',png,mjpeg,jpeg2000,gif'
+zlib = dependency('zlib', required: false)
+if zlib.found()
+ extra_options += ['--enable-zlib']
+ decoders += ',png,apng,mjpeg,jpeg2000,gif,'
+ if not get_option('sink-only')
+ demuxers += ',image_png_pipe,image2,mjpeg,image2pipe,image_jpeg_pipe,gif'
+ parsers += ',png,mjpeg,jpeg2000,gif'
+ endif
+ deps += [zlib]
endif
bsfs = ''
@@ -90,26 +105,85 @@ if not get_option('sink-only')
endif
hwaccels = ''
-if get_option('codec-hwaccel').enabled()
- if get_option('renderer-api') == 'vulkan'
+if meson.project_version().split('.')[0].to_int() <= 4
+ if 'vulkan' in get_option('codec-hwaccels')
+ error('vulkan not supported in FFmpeg version ' + meson.project_version() + '.')
+ endif
+else
+ if 'vulkan' in get_option('codec-hwaccels')
extra_options += ['--enable-vulkan']
- hwaccels += 'h264_vulkan,hevc_vulkan,av1_vulkan,vp9_vulkan'
- elif is_windows
- extra_options += ['--enable-d3d11va']
- hwaccels += 'h264_d3d11va,hevc_d3d11va,av1_d3d11va,vp9_d3d11va'
- hwaccels += ',h264_d3d11va2,hevc_d3d11va2,av1_d3d11va2,vp9_d3d11va2'
- #extra_options += ['--enable-dxva2']
- #hwaccels += ',h264_dxva2,hevc_dxva2,av1_dxva2,vp9_dxva2'
- elif is_android
- extra_options += ['--enable-jni', '--enable-mediacodec']
- decoders += ',h264_mediacodec,hevc_mediacodec,av1_mediacodec,vp9_mediacodec'
- elif is_linux
- extra_options += ['--enable-vaapi']
+ hwaccels += ',h264_vulkan,hevc_vulkan,av1_vulkan,vp9_vulkan'
+ args += ['-DCAMU_HAVE_VULKAN_DECODE']
+ else
+ extra_options += ['--disable-vulkan']
+ endif
+endif
+
+if meson.project_version().split('.')[0].to_int() <= 3
+ if 'vaapi' in get_option('codec-hwaccels')
+ error('vaapi not supported (by camu) in FFmpeg version ' + meson.project_version() + '.')
endif
else
+ if 'vaapi' in get_option('codec-hwaccels')
+ extra_options += ['--enable-libdrm', '--enable-vaapi']
+ hwaccels += ',h264_vaapi,hevc_vaapi,av1_vaapi,vp9_vaapi'
+ deps += [dependency('libdrm'), dependency('libva'), dependency('libva-drm')]
+ args += ['-DCAMU_HAVE_VAAPI']
+ else
+ extra_options += ['--disable-libdrm', '--disable-vaapi']
+ endif
+endif
+
+if 'd3d11va' in get_option('codec-hwaccels')
+ if not is_windows
+ error('d3d11va not supported on ' + host_machine.system() + '.')
+ endif
+ extra_options += ['--enable-d3d11va']
+ hwaccels += ',h264_d3d11va,hevc_d3d11va,av1_d3d11va,vp9_d3d11va'
+ hwaccels += ',h264_d3d11va2,hevc_d3d11va2,av1_d3d11va2,vp9_d3d11va2'
+ args += ['-DCAMU_HAVE_D3D11VA']
+else
+ extra_options += ['--disable-d3d11va']
+endif
+
+if 'dxva2' in get_option('codec-hwaccels')
+ if not is_windows
+ error('dxva2 not supported on ' + host_machine.system() + '.')
+ endif
+ extra_options += ['--enable-dxva2']
+ hwaccels += ',h264_dxva2,hevc_dxva2,av1_dxva2,vp9_dxva2'
+ args += ['-DCAMU_HAVE_DXVA2']
+else
+ extra_options += ['--disable-dxva2']
+endif
+
+if 'mediacodec' in get_option('codec-hwaccels')
+ if not is_android
+ error('mediacodec not supported on ' + host_machine.system() + '.')
+ endif
+ extra_options += ['--enable-jni', '--enable-mediacodec']
+ decoders += ',h264_mediacodec,hevc_mediacodec,av1_mediacodec,vp9_mediacodec'
+ deps += [compiler.find_library('mediandk')]
+ args += ['-DCAMU_HAVE_MEDIACODEC']
+else
+ extra_options += ['--disable-jni', '--disable-mediacodec']
+endif
+
+if get_option('codec-hwaccels').length() == 0
extra_options += ['--disable-hwaccels']
+else
+ args += ['-DCAMU_TRY_HWACCEL']
endif
+# Disable unused hwaccels.
+extra_options += [
+ '--disable-cuvid',
+ '--disable-nvenc',
+ '--disable-vdpau',
+ '--disable-audiotoolbox',
+ '--disable-videotoolbox'
+]
+
protocols = ''
if not get_option('sink-only')
protocols += 'cache'
@@ -139,8 +213,11 @@ if hwaccels != ''
extra_options += ['--enable-hwaccel=' + hwaccels]
endif
-if is_linux or is_mingw
+soxr = compiler.find_library('soxr', required: false)
+if soxr.found()
extra_options += ['--enable-libsoxr']
+ deps += [soxr]
+ args += ['-DCAMU_HAVE_SOXR']
endif
ext_proj = import('unstable-external_project')
@@ -151,9 +228,6 @@ proj = ext_proj.add_project('configure',
'--libdir=@PREFIX@/@LIBDIR@',
'--incdir=@PREFIX@/@INCLUDEDIR@',
'--enable-pic',
- '--enable-static',
- '--disable-shared',
- '--disable-logging',
'--disable-all',
'--disable-autodetect',
'--disable-everything',
@@ -167,7 +241,6 @@ proj = ext_proj.add_project('configure',
'--disable-schannel',
'--disable-network',
'--disable-securetransport',
- #'--disable-iconv',
'--enable-gpl',
'--enable-version3',
'--disable-nonfree',
@@ -177,7 +250,7 @@ proj = ext_proj.add_project('configure',
'--enable-avutil',
'--enable-avformat',
'--enable-avcodec',
- #'--enable-avdevice',
+ '--enable-avdevice',
'--enable-swresample',
'--enable-swscale',
'--disable-indevs',
@@ -190,7 +263,19 @@ proj = ext_proj.add_project('configure',
avutil = proj.dependency('avutil')
avformat = proj.dependency('avformat')
avcodec = proj.dependency('avcodec')
-#avdevice = proj.dependency('avdevice')
+avdevice = proj.dependency('avdevice')
swresample = proj.dependency('swresample')
swscale = proj.dependency('swscale')
-ffmpeg_include = declare_dependency(include_directories: include_directories('.', 'build/'))
+include = include_directories('.', 'build/')
+meson.override_dependency('libavutil', declare_dependency(
+ dependencies: [avutil, deps], compile_args: args, include_directories: include, version: ''))
+meson.override_dependency('libavformat', declare_dependency(
+ dependencies: [avformat], include_directories: include, version: ''))
+meson.override_dependency('libavcodec', declare_dependency(
+ dependencies: [avcodec], include_directories: include, version: ''))
+meson.override_dependency('libavdevice', declare_dependency(
+ dependencies: [avdevice], include_directories: include, version: ''))
+meson.override_dependency('libswresample', declare_dependency(
+ dependencies: [swresample], include_directories: include, version: ''))
+meson.override_dependency('libswscale', declare_dependency(
+ dependencies: [swscale], include_directories: include, version: ''))
diff --git a/subprojects/packagefiles/ffmpeg/meson_options.txt b/subprojects/packagefiles/ffmpeg/meson_options.txt
index eb4b08b..c06b276 100644
--- a/subprojects/packagefiles/ffmpeg/meson_options.txt
+++ b/subprojects/packagefiles/ffmpeg/meson_options.txt
@@ -1,4 +1,5 @@
# Copy-paste from top-level project.
-option('codec-hwaccel', type: 'feature', value: 'disabled', yield: true)
+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('win32-compat', type: 'boolean', value: false, yield: true)
option('sink-only', type: 'boolean', value: false, yield: true)
diff --git a/subprojects/packagefiles/ffmpeg/version_2.8.22.diff b/subprojects/packagefiles/ffmpeg/version_2.8.22.diff
new file mode 100644
index 0000000..8530b6d
--- /dev/null
+++ b/subprojects/packagefiles/ffmpeg/version_2.8.22.diff
@@ -0,0 +1,58 @@
+--- a/meson.build 2025-08-23 18:44:34.634014892 -0400
++++ b/meson.build 2025-08-25 15:47:10.979206957 -0400
+@@ -1,4 +1,6 @@
+-project('ffmpeg', 'c', version: '', meson_version: '>=0.57.0')
++project('ffmpeg', 'c', version: '2.8.22', meson_version: '>=0.57.0')
++
++error('FFmpeg version 2.x currently unsupported.')
+
+ compiler = meson.get_compiler('c')
+
+@@ -35,10 +37,6 @@
+ extra_options += ['--nm=' + meson.get_external_property('nm', 'nm')]
+ endif
+
+-if cpu == 'x86_64' or cpu == 'x86'
+- extra_options += ['--enable-x86asm']
+-endif
+-
+ extra_options += ['--enable-static', '--disable-shared']
+
+ if is_windows
+@@ -229,7 +227,6 @@
+ '--incdir=@PREFIX@/@INCLUDEDIR@',
+ '--enable-pic',
+ '--disable-all',
+- '--disable-autodetect',
+ '--disable-everything',
+ '--disable-programs',
+ '--disable-doc',
+@@ -238,7 +235,6 @@
+ '--disable-podpages',
+ '--disable-txtpages',
+ '--disable-safe-bitstream-reader',
+- '--disable-schannel',
+ '--disable-network',
+ '--disable-securetransport',
+ '--enable-gpl',
+@@ -268,14 +264,14 @@
+ swscale = proj.dependency('swscale')
+ include = include_directories('.', 'build/')
+ meson.override_dependency('libavutil', declare_dependency(
+- dependencies: [avutil, deps], compile_args: args, include_directories: include, version: ''))
++ dependencies: [avutil, deps], compile_args: args, include_directories: include, version: '54.31.100'))
+ meson.override_dependency('libavformat', declare_dependency(
+- dependencies: [avformat], include_directories: include, version: ''))
++ dependencies: [avformat], include_directories: include, version: '56.40.101'))
+ meson.override_dependency('libavcodec', declare_dependency(
+- dependencies: [avcodec], include_directories: include, version: ''))
++ dependencies: [avcodec], include_directories: include, version: '56.60.100'))
+ meson.override_dependency('libavdevice', declare_dependency(
+- dependencies: [avdevice], include_directories: include, version: ''))
++ dependencies: [avdevice], include_directories: include, version: '56.4.100'))
+ meson.override_dependency('libswresample', declare_dependency(
+- dependencies: [swresample], include_directories: include, version: ''))
++ dependencies: [swresample], include_directories: include, version: '1.2.101'))
+ meson.override_dependency('libswscale', declare_dependency(
+- dependencies: [swscale], include_directories: include, version: ''))
++ dependencies: [swscale], include_directories: include, version: '3.1.101'))
diff --git a/subprojects/packagefiles/ffmpeg/version_3.3.9.diff b/subprojects/packagefiles/ffmpeg/version_3.3.9.diff
new file mode 100644
index 0000000..3887a2f
--- /dev/null
+++ b/subprojects/packagefiles/ffmpeg/version_3.3.9.diff
@@ -0,0 +1,79 @@
+--- a/meson.build 2025-08-23 18:44:34.634014892 -0400
++++ b/meson.build 2025-08-25 15:51:35.605178588 -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')
+
+ compiler = meson.get_compiler('c')
+
+@@ -35,10 +35,6 @@
+ extra_options += ['--nm=' + meson.get_external_property('nm', 'nm')]
+ endif
+
+-if cpu == 'x86_64' or cpu == 'x86'
+- extra_options += ['--enable-x86asm']
+-endif
+-
+ extra_options += ['--enable-static', '--disable-shared']
+
+ if is_windows
+@@ -220,6 +216,15 @@
+ args += ['-DCAMU_HAVE_SOXR']
+ endif
+
++# Manual version of "--disable-autodetect". Needs more testing.
++extra_options += [
++ '--disable-lzma',
++ '--disable-sdl2',
++ '--disable-xlib',
++ '--disable-cuda',
++ '--disable-vda'
++]
++
+ ext_proj = import('unstable-external_project')
+
+ proj = ext_proj.add_project('configure',
+@@ -229,7 +234,6 @@
+ '--incdir=@PREFIX@/@INCLUDEDIR@',
+ '--enable-pic',
+ '--disable-all',
+- '--disable-autodetect',
+ '--disable-everything',
+ '--disable-programs',
+ '--disable-doc',
+@@ -255,11 +259,14 @@
+ '--enable-swscale',
+ '--disable-indevs',
+ '--disable-outdevs',
++ '--extra-cflags=-Wno-attributes',
+ extra_options
+ ],
+ cross_configure_options: ['--enable-cross-compile'],
+ verbose: true)
+
++args += ['-Wno-attributes']
++
+ avutil = proj.dependency('avutil')
+ avformat = proj.dependency('avformat')
+ avcodec = proj.dependency('avcodec')
+@@ -268,14 +275,14 @@
+ swscale = proj.dependency('swscale')
+ include = include_directories('.', 'build/')
+ meson.override_dependency('libavutil', declare_dependency(
+- dependencies: [avutil, deps], compile_args: args, include_directories: include, version: ''))
++ dependencies: [avutil, deps], compile_args: args, include_directories: include, version: '55.58.100'))
+ meson.override_dependency('libavformat', declare_dependency(
+- dependencies: [avformat], include_directories: include, version: ''))
++ dependencies: [avformat], include_directories: include, version: '57.71.100'))
+ meson.override_dependency('libavcodec', declare_dependency(
+- dependencies: [avcodec], include_directories: include, version: ''))
++ dependencies: [avcodec], include_directories: include, version: '57.89.100'))
+ meson.override_dependency('libavdevice', declare_dependency(
+- dependencies: [avdevice], include_directories: include, version: ''))
++ dependencies: [avdevice], include_directories: include, version: '57.6.100'))
+ meson.override_dependency('libswresample', declare_dependency(
+- dependencies: [swresample], include_directories: include, version: ''))
++ dependencies: [swresample], include_directories: include, version: '2.7.100'))
+ meson.override_dependency('libswscale', declare_dependency(
+- dependencies: [swscale], include_directories: include, version: ''))
++ dependencies: [swscale], include_directories: include, version: '4.6.100'))
diff --git a/subprojects/packagefiles/ffmpeg/version_3.4.14.diff b/subprojects/packagefiles/ffmpeg/version_3.4.14.diff
new file mode 100644
index 0000000..fa3622a
--- /dev/null
+++ b/subprojects/packagefiles/ffmpeg/version_3.4.14.diff
@@ -0,0 +1,29 @@
+--- a/meson.build 2025-08-23 18:44:34.634014892 -0400
++++ b/meson.build 2025-08-25 15:58:06.264562637 -0400
+@@ -1,4 +1,4 @@
+-project('ffmpeg', 'c', version: '', meson_version: '>=0.57.0')
++project('ffmpeg', 'c', version: '3.4.14', meson_version: '>=0.57.0')
+
+ compiler = meson.get_compiler('c')
+
+@@ -268,14 +268,14 @@
+ swscale = proj.dependency('swscale')
+ include = include_directories('.', 'build/')
+ meson.override_dependency('libavutil', declare_dependency(
+- dependencies: [avutil, deps], compile_args: args, include_directories: include, version: ''))
++ dependencies: [avutil, deps], compile_args: args, include_directories: include, version: '55.78.100'))
+ meson.override_dependency('libavformat', declare_dependency(
+- dependencies: [avformat], include_directories: include, version: ''))
++ dependencies: [avformat], include_directories: include, version: '57.83.100'))
+ meson.override_dependency('libavcodec', declare_dependency(
+- dependencies: [avcodec], include_directories: include, version: ''))
++ dependencies: [avcodec], include_directories: include, version: '57.107.100'))
+ meson.override_dependency('libavdevice', declare_dependency(
+- dependencies: [avdevice], include_directories: include, version: ''))
++ dependencies: [avdevice], include_directories: include, version: '57.10.100'))
+ meson.override_dependency('libswresample', declare_dependency(
+- dependencies: [swresample], include_directories: include, version: ''))
++ dependencies: [swresample], include_directories: include, version: '2.9.100'))
+ meson.override_dependency('libswscale', declare_dependency(
+- dependencies: [swscale], include_directories: include, version: ''))
++ dependencies: [swscale], include_directories: include, version: '4.8.100'))
diff --git a/subprojects/packagefiles/ffmpeg/version_4.2.11.diff b/subprojects/packagefiles/ffmpeg/version_4.2.11.diff
new file mode 100644
index 0000000..27d5ceb
--- /dev/null
+++ b/subprojects/packagefiles/ffmpeg/version_4.2.11.diff
@@ -0,0 +1,29 @@
+--- a/meson.build 2025-08-23 18:44:34.634014892 -0400
++++ b/meson.build 2025-08-25 15:42:23.161139654 -0400
+@@ -1,4 +1,4 @@
+-project('ffmpeg', 'c', version: '', meson_version: '>=0.57.0')
++project('ffmpeg', 'c', version: '4.2.11', meson_version: '>=0.57.0')
+
+ compiler = meson.get_compiler('c')
+
+@@ -268,14 +268,14 @@
+ swscale = proj.dependency('swscale')
+ include = include_directories('.', 'build/')
+ meson.override_dependency('libavutil', declare_dependency(
+- dependencies: [avutil, deps], compile_args: args, include_directories: include, version: ''))
++ dependencies: [avutil, deps], compile_args: args, include_directories: include, version: '56.31.100'))
+ meson.override_dependency('libavformat', declare_dependency(
+- dependencies: [avformat], include_directories: include, version: ''))
++ dependencies: [avformat], include_directories: include, version: '58.29.100'))
+ meson.override_dependency('libavcodec', declare_dependency(
+- dependencies: [avcodec], include_directories: include, version: ''))
++ dependencies: [avcodec], include_directories: include, version: '58.54.100'))
+ meson.override_dependency('libavdevice', declare_dependency(
+- dependencies: [avdevice], include_directories: include, version: ''))
++ dependencies: [avdevice], include_directories: include, version: '58.8.100'))
+ meson.override_dependency('libswresample', declare_dependency(
+- dependencies: [swresample], include_directories: include, version: ''))
++ dependencies: [swresample], include_directories: include, version: '3.5.100'))
+ meson.override_dependency('libswscale', declare_dependency(
+- dependencies: [swscale], include_directories: include, version: ''))
++ dependencies: [swscale], include_directories: include, version: '5.5.100'))
diff --git a/subprojects/packagefiles/ffmpeg/version_5.1.7.diff b/subprojects/packagefiles/ffmpeg/version_5.1.7.diff
new file mode 100644
index 0000000..f48d522
--- /dev/null
+++ b/subprojects/packagefiles/ffmpeg/version_5.1.7.diff
@@ -0,0 +1,29 @@
+--- a/meson.build 2025-08-23 18:44:34.634014892 -0400
++++ b/meson.build 2025-08-25 15:40:17.065798145 -0400
+@@ -1,4 +1,4 @@
+-project('ffmpeg', 'c', version: '', meson_version: '>=0.57.0')
++project('ffmpeg', 'c', version: '5.1.7', meson_version: '>=0.57.0')
+
+ compiler = meson.get_compiler('c')
+
+@@ -268,14 +268,14 @@
+ swscale = proj.dependency('swscale')
+ include = include_directories('.', 'build/')
+ meson.override_dependency('libavutil', declare_dependency(
+- dependencies: [avutil, deps], compile_args: args, include_directories: include, version: ''))
++ dependencies: [avutil, deps], compile_args: args, include_directories: include, version: '57.28.100'))
+ meson.override_dependency('libavformat', declare_dependency(
+- dependencies: [avformat], include_directories: include, version: ''))
++ dependencies: [avformat], include_directories: include, version: '59.27.100'))
+ meson.override_dependency('libavcodec', declare_dependency(
+- dependencies: [avcodec], include_directories: include, version: ''))
++ dependencies: [avcodec], include_directories: include, version: '59.37.100'))
+ meson.override_dependency('libavdevice', declare_dependency(
+- dependencies: [avdevice], include_directories: include, version: ''))
++ dependencies: [avdevice], include_directories: include, version: '59.7.100'))
+ meson.override_dependency('libswresample', declare_dependency(
+- dependencies: [swresample], include_directories: include, version: ''))
++ dependencies: [swresample], include_directories: include, version: '4.7.100'))
+ meson.override_dependency('libswscale', declare_dependency(
+- dependencies: [swscale], include_directories: include, version: ''))
++ dependencies: [swscale], include_directories: include, version: '6.7.100'))
diff --git a/subprojects/packagefiles/ffmpeg/version_6.1.3.diff b/subprojects/packagefiles/ffmpeg/version_6.1.3.diff
new file mode 100644
index 0000000..6193dfe
--- /dev/null
+++ b/subprojects/packagefiles/ffmpeg/version_6.1.3.diff
@@ -0,0 +1,29 @@
+--- a/meson.build 2025-08-23 18:44:34.634014892 -0400
++++ b/meson.build 2025-08-25 15:37:56.556303265 -0400
+@@ -1,4 +1,4 @@
+-project('ffmpeg', 'c', version: '', meson_version: '>=0.57.0')
++project('ffmpeg', 'c', version: '6.1.3', meson_version: '>=0.57.0')
+
+ compiler = meson.get_compiler('c')
+
+@@ -268,14 +268,14 @@
+ swscale = proj.dependency('swscale')
+ include = include_directories('.', 'build/')
+ meson.override_dependency('libavutil', declare_dependency(
+- dependencies: [avutil, deps], compile_args: args, include_directories: include, version: ''))
++ dependencies: [avutil, deps], compile_args: args, include_directories: include, version: '58.29.100'))
+ meson.override_dependency('libavformat', declare_dependency(
+- dependencies: [avformat], include_directories: include, version: ''))
++ dependencies: [avformat], include_directories: include, version: '60.16.100'))
+ meson.override_dependency('libavcodec', declare_dependency(
+- dependencies: [avcodec], include_directories: include, version: ''))
++ dependencies: [avcodec], include_directories: include, version: '60.31.102'))
+ meson.override_dependency('libavdevice', declare_dependency(
+- dependencies: [avdevice], include_directories: include, version: ''))
++ dependencies: [avdevice], include_directories: include, version: '60.3.100'))
+ meson.override_dependency('libswresample', declare_dependency(
+- dependencies: [swresample], include_directories: include, version: ''))
++ dependencies: [swresample], include_directories: include, version: '4.12.100'))
+ meson.override_dependency('libswscale', declare_dependency(
+- dependencies: [swscale], include_directories: include, version: ''))
++ dependencies: [swscale], include_directories: include, version: '7.5.100'))
diff --git a/subprojects/packagefiles/ffmpeg/version_7.1.1.diff b/subprojects/packagefiles/ffmpeg/version_7.1.1.diff
new file mode 100644
index 0000000..74a41fe
--- /dev/null
+++ b/subprojects/packagefiles/ffmpeg/version_7.1.1.diff
@@ -0,0 +1,29 @@
+--- a/meson.build 2025-08-23 18:44:34.634014892 -0400
++++ b/meson.build 2025-08-25 15:35:33.498781349 -0400
+@@ -1,4 +1,4 @@
+-project('ffmpeg', 'c', version: '', meson_version: '>=0.57.0')
++project('ffmpeg', 'c', version: '7.1.1', meson_version: '>=0.57.0')
+
+ compiler = meson.get_compiler('c')
+
+@@ -268,14 +268,14 @@
+ swscale = proj.dependency('swscale')
+ include = include_directories('.', 'build/')
+ meson.override_dependency('libavutil', declare_dependency(
+- dependencies: [avutil, deps], compile_args: args, include_directories: include, version: ''))
++ dependencies: [avutil, deps], compile_args: args, include_directories: include, version: '59.39.100'))
+ meson.override_dependency('libavformat', declare_dependency(
+- dependencies: [avformat], include_directories: include, version: ''))
++ dependencies: [avformat], include_directories: include, version: '61.7.100'))
+ meson.override_dependency('libavcodec', declare_dependency(
+- dependencies: [avcodec], include_directories: include, version: ''))
++ dependencies: [avcodec], include_directories: include, version: '61.19.100'))
+ meson.override_dependency('libavdevice', declare_dependency(
+- dependencies: [avdevice], include_directories: include, version: ''))
++ dependencies: [avdevice], include_directories: include, version: '61.3.100'))
+ meson.override_dependency('libswresample', declare_dependency(
+- dependencies: [swresample], include_directories: include, version: ''))
++ dependencies: [swresample], include_directories: include, version: '5.3.100'))
+ meson.override_dependency('libswscale', declare_dependency(
+- dependencies: [swscale], include_directories: include, version: ''))
++ dependencies: [swscale], include_directories: include, version: '8.3.100'))
diff --git a/subprojects/packagefiles/ffmpeg/version_8.0.diff b/subprojects/packagefiles/ffmpeg/version_8.0.diff
new file mode 100644
index 0000000..ad3b77b
--- /dev/null
+++ b/subprojects/packagefiles/ffmpeg/version_8.0.diff
@@ -0,0 +1,29 @@
+--- a/meson.build 2025-08-23 18:44:34.634014892 -0400
++++ b/meson.build 2025-08-25 15:33:36.209533531 -0400
+@@ -1,4 +1,4 @@
+-project('ffmpeg', 'c', version: '', meson_version: '>=0.57.0')
++project('ffmpeg', 'c', version: '8.0', meson_version: '>=0.57.0')
+
+ compiler = meson.get_compiler('c')
+
+@@ -268,14 +268,14 @@
+ swscale = proj.dependency('swscale')
+ include = include_directories('.', 'build/')
+ meson.override_dependency('libavutil', declare_dependency(
+- dependencies: [avutil, deps], compile_args: args, include_directories: include, version: ''))
++ dependencies: [avutil, deps], compile_args: args, include_directories: include, version: '60.8.100'))
+ meson.override_dependency('libavformat', declare_dependency(
+- dependencies: [avformat], include_directories: include, version: ''))
++ dependencies: [avformat], include_directories: include, version: '62.3.100'))
+ meson.override_dependency('libavcodec', declare_dependency(
+- dependencies: [avcodec], include_directories: include, version: ''))
++ dependencies: [avcodec], include_directories: include, version: '62.11.100'))
+ meson.override_dependency('libavdevice', declare_dependency(
+- dependencies: [avdevice], include_directories: include, version: ''))
++ dependencies: [avdevice], include_directories: include, version: '62.1.100'))
+ meson.override_dependency('libswresample', declare_dependency(
+- dependencies: [swresample], include_directories: include, version: ''))
++ dependencies: [swresample], include_directories: include, version: '6.1.100'))
+ meson.override_dependency('libswscale', declare_dependency(
+- dependencies: [swscale], include_directories: include, version: ''))
++ dependencies: [swscale], include_directories: include, version: '9.1.100'))
diff --git a/subprojects/packagefiles/libplacebo/dependency_version_override.diff b/subprojects/packagefiles/libplacebo/dependency_version_override.diff
index f9a0688..1ee6169 100644
--- a/subprojects/packagefiles/libplacebo/dependency_version_override.diff
+++ b/subprojects/packagefiles/libplacebo/dependency_version_override.diff
@@ -12,7 +12,7 @@ index d4c4b44..ef96256 100644
]
diff --git a/src/glsl/meson.build b/src/glsl/meson.build
-index 8fb5e69..4adfa18 100644
+index b1f4c8d..9b3a5bb 100644
--- a/src/glsl/meson.build
+++ b/src/glsl/meson.build
@@ -1,5 +1,5 @@
@@ -22,3 +22,38 @@ index 8fb5e69..4adfa18 100644
components.set('shaderc', shaderc.found())
if shaderc.found()
build_deps += shaderc
+@@ -29,8 +29,9 @@ if glslang_req.auto() and shaderc.found()
+
+ elif not glslang_req.disabled()
+
++ prefer_static = get_option('prefer_static')
+ glslang_deps = [
+- cxx.find_library('glslang-default-resource-limits', required: false)
++ dependency('glslang-default-resource-limits', static: prefer_static)
+ ]
+
+ # meson doesn't respect generator expressions in INTERFACE_LINK_LIBRARIES
+@@ -38,13 +39,12 @@ elif not glslang_req.disabled()
+ # TODO: Use the following once it's fixed
+ # glslang = dependency('glslang', method: 'cmake', modules: ['glslang::SPIRV'])
+
+- prefer_static = get_option('prefer_static')
+ found_lib = false
+ foreach arg : [[prefer_static, false], [not prefer_static, glslang_req]]
+ static = arg[0]
+ required = arg[1]
+
+- spirv = cxx.find_library('SPIRV', required: required, static: static)
++ spirv = dependency('SPIRV', static: static)
+
+ if not spirv.found()
+ continue
+@@ -54,7 +54,7 @@ elif not glslang_req.disabled()
+
+ # Glslang 15.0.0 moved some code around, add also linking to glslang, while
+ # this is not needed for older versions, it will still work.
+- glslang_deps += cxx.find_library('glslang', required: required, static: static)
++ glslang_deps += dependency('glslang', static: static)
+
+ if static
+ glslang_deps += [
diff --git a/subprojects/packagefiles/miniaudio/meson.build b/subprojects/packagefiles/miniaudio/meson.build
index 1bd17f5..8522b5f 100644
--- a/subprojects/packagefiles/miniaudio/meson.build
+++ b/subprojects/packagefiles/miniaudio/meson.build
@@ -1,2 +1,2 @@
-project('miniaudio', 'c', version: 'git-e543369')
+project('miniaudio', 'c', version: 'git-78cdb9c')
miniaudio = declare_dependency(include_directories: include_directories('.'))
diff --git a/subprojects/shaderc.wrap b/subprojects/shaderc.wrap
index 5be87c2..e64974a 100644
--- a/subprojects/shaderc.wrap
+++ b/subprojects/shaderc.wrap
@@ -1,7 +1,7 @@
[wrap-git]
-directory = shaderc-v2025.2
+directory = shaderc-v2025.3
url = https://github.com/google/shaderc.git
-revision = v2025.2
+revision = v2025.3
depth = 1
method = cmake
patch_directory = shaderc
diff --git a/subprojects/stela.wrap b/subprojects/stela.wrap
index e193667..e90a60e 100644
--- a/subprojects/stela.wrap
+++ b/subprojects/stela.wrap
@@ -1,4 +1,6 @@
[wrap-git]
+directory = stela-133eca8
url = https://git.akon.city/stela.git
-revision = a4be897cf71e2e6d4a98c0be612da7e01e3273f5
+push-url = git@git.akon.city:stela.git
+revision = 133eca8c1fc95c5b0d093ce7b7331aac42feac5d
depth = 1