diff options
61 files changed, 1144 insertions, 602 deletions
@@ -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-*/ @@ -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: @@ -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 @@ -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": { @@ -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 |