Skip to content

Dependencies 1.7.0

Choose a tag to compare

@StuartCameronCode StuartCameronCode released this 01 Aug 13:36
9186a14

Dependency bundle 1.7.0. Not an app release — this is downloaded automatically by VapourBox on launch when app/assets/deps-version.json points at it.

Fixes QTGMC preset brightening on Apple Silicon

On macos-arm64 and linux-arm64, QTGMC's Very Slow and Placebo presets brightened the picture by roughly +10/255, and the Draft preset came out nearly black. Windows, macos-x64 and linux-x64 were never affected.

The cause was in fmtconv, not QTGMC. Scaler::process_plane_int_cpp applied the sign-conversion constants that only its SSE2/AVX2 siblings need, while using unsigned C++ proxies — so the accumulator went negative and write_clip clipped it to zero. Any resample whose kernel ran with a source bitdepth below 16 returned a black plane. On x86 that function is dead code, because the SSE2/AVX2 scalers replace it, which is why the bug was arm64-only.

That destroyed havsfunc's Bob(), which bobs fields with fmtc.resample(scalev=2, ...). Placebo and Very Slow are the only presets that default NoiseProcess=2, and that noise pass calls Bob() before extracting noise; the near-black intermediate made MakeDiff clip hard, so grain restoration merged a large positive bias back in. Draft interpolates through Bob() directly, hence near-black rather than merely bright. Slower and every faster preset were unaffected.

Measured on a PAL interlaced test source (source luma 130.896):

preset before after
Very Slow 140.794 130.895
Placebo 140.825 130.910
Draft 36.752 131.032
Slower (control) 130.930 130.994

Fixed by Scripts/patches/fmtconv-r31-arm-int-scaler.patch, applied when the macOS and Linux bundles build fmtconv from source. Upstream r31 does not fix this. havsfunc also gains a patch making Bob() resample at 16-bit, as defence in depth and to cover the prebuilt Windows DLL.

fmtconv r30 → r31, now pinned

fmtconv development moved to GitLab in Aug 2023; the GitHub repo is an abandoned mirror, so macOS and Linux were cloning an unpinned stale post-r30 snapshot while Windows took the r30 release zip. All platforms now pin r31.

r31 also fixes interlaced PAL-DV chroma placement (U/V vertical positions were swapped, and vertical subsampling greater than 2 was unhandled), so interlaced chroma output may differ slightly from 1.6.0 on affected sources. All platforms move together so this stays consistent across operating systems.

Assets

One zip per platform plus a .sha256.json sidecar. The app fetches the sidecar at download time and verifies the zip's checksum before installing.