upstream contributions

Bugs reported to, and fixed in, other people's projects.


Most of these came out of building something else and hitting a wall: a spatial-audio streaming stack, a studio monitoring setup, a listening-test harness, a home network. The pattern is usually the same – a thing behaves impossibly, the cause turns out to be upstream, and the fix belongs there rather than in a local workaround.

Status is hand-maintained; follow the links for the real, current state.

Spatial audio and rendering

google/eclipsa-audio-plugin

  • Binaural rendering silently outputs digital black below 32-sample host buffers, with no error, log or UI indication – #126, open
  • Renderer leaves output channels above its bus count unwritten, passing raw pre-render substream audio downstream – #127, open
  • Bundled Boost 1.86.0 fails to compile under recent Clang: template keyword misuse in boost::qvm, fixed upstream in 1.87.0+ – #128, open
  • CGWindowListCreateImage obsoleted under the macOS 15 SDK, blocking the build – #10, open

leomccormack/SPARTA

  • Powermap’s webcam selector opens the wrong device, and a failed or cleared switch leaves stale video on screen with no indication – #123, open

leomccormack/sparta-reaper-examples

  • Powermap visualisations over video or a still image – #1, open

chris-hld/spaudiopy

  • Version mismatch in package metadata – #19, closed

Streaming stack

The HOA 360 livestream work. See ambisonic-box for what these were found with.

EnvelopSound/Earshot – maintainer since August 2026. 12 merged pull requests:

  • Align track starts at the relay so DASH output carries no video edit list, the server-side half of a cross-browser A/V desync – #53, merged
  • Enable libvpx in ffmpeg so VP9 is actually available – #54, merged
  • Clear the DASH directory contents instead of rm -rf on the mount – #55, merged
  • nginx: emit relative redirects so a mapped host port survives directory redirects – #56, merged
  • Allow building without --enable-nonfree for a redistributable image – #57, merged
  • Floor DASH suggestedPresentationDelay to avoid live-join gap-jumps – #58, merged
  • Decouple the DASH manifest filename from the RTMP stream key – #59, merged
  • Raise RTMP max_message so 4K keyframes are not dropped – #60, merged
  • Raise the yarn network timeout so slower hosts can build the webtools image – #61, merged
  • CI: make the workflows run again (actions v4, Compose v2, failure diagnostics) – #62, merged
  • Test: push a real video track in CI, matching the default -c:v copy path, so test goes green again after #62 – #63, merged
  • Resume the AudioContext from the gain slider’s onChange instead of a leaking window listener; supersedes #26, closes a “no audio playback in Chrome” bug open since 2021 and previously misdiagnosed as an HTTPS/CDN problem – #64, merged

thomasdeppisch/hoast360

  • Resume the AudioContext on the combined-MPD path, which was silent on every browser enforcing the autoplay policy – #30, open
  • HoastLoader.concatBuffers() reads source channel 0 for every destination in a higher-order group, so 10 of 12 third-order filter channels load the wrong decoding filter – #31, open
  • Gate on a real Opus decode – decodeAudioData on an OfflineAudioContext, which needs no user gesture and no MediaSource – instead of an advisory canPlayType/isTypeSupported check that a browser can pass and then still fail to decode; separates the Chrome DirectOpusAudioDecoding field-trial failure from a browser with no usable Opus decode at all, and names the flag that restores playback – #32, open

thomasdeppisch/videojs-xr

  • Mobile orientation controls, renderer sizing and a three.js deprecation: Math.clamp does not exist, rotateLeft/rotateUp are never exposed on the OrbitControls instance so the render loop dies on any device with an orientation sensor, and the mono renderer is never resized after a zero-size init – #28, open

Browsers and standards

MSE empty-edit presentation offset – the same underlying finding, filed against every engine it touches. Each one turned out to be inconsistent in its own direction; see the engineering write-up for the technical detail.

  • Chromium – drops the offset in MSE, applies it in progressive <video src> playback – 537235698, open, engaged
  • Firefox (Mozilla) – the mirror image: applies the offset in MSE, drops it in progressive <video src> playback – 2056945, open (triaged, low priority)
  • Safari (WebKit) – same inconsistency as Chromium’s – 319998, closed as a duplicate: already fixed by unrelated work (bug 316870)
  • w3c/media-source – spec-clarification issue on the same divergence – #377, open

Multichannel Opus decode regression – a Chrome 151 field trial, DirectOpusAudioDecoding, breaks every Opus decode above 2 channels in both decodeAudioData and MSE playback.

Capture and encoding

pkviet/obs-studio

  • The hexadecagonal (16-channel) format disappeared from audio device properties in 27.0.x – #66, closed
  • 20-channel audio streaming – #67, closed
  • Failed to create audio encoder on the advanced output – #70, closed
  • Virtual camera installation – #71, open

ittiam-systems/libmpeghe

  • ffmpeg compilation for MPEG-H 3D Audio support – #8, open

m-ab-s/media-autobuild_suite

  • Request: MPEG-H 3D Audio – #2654, open

GyanD/codexffmpeg

  • MPEG-H 3D Audio – #128, closed

lsp-plugins/lsp-plugins

  • Windows 10 build stops with 'test' is not recognized#382, closed

Infrastructure and networking

Found running a studio monitoring stack.

netalertx/NetAlertX

  • A device with a nic-typed parent gets an endless one-directional Connected/Disconnected event stream instead of tracking its own presence – #1736, open
  • Skip Repeated Notifications is silently inert in most timezones, a UTC/localtime mismatch in the cooldown comparison – #1737, open
  • A device’s free-text devComments containing a bare < crashes the whole notification build, silently dropping every pending alert in that cycle – #1743, open

tailscale/tailscale

  • tailscaled SIGBUS on 32-bit ARM during an ML-KEM (X25519MLKEM768) TLS handshake – #20827, open. A community write-up of the practical fix is under Community and hardware.

gnuton/asuswrt-merlin.ng

  • Access Restrictions’ SSH checkbox generates RETURN instead of ACCEPT, so the rule does nothing – #989, open

Statistics and plotting

goodekat/ggResidpanel

  • missing value where TRUE/FALSE needed#15, open

chrimaho/PlottingNPS

  • Counting zero occurrences of promoters, passives and detractors – #1, open

Community and hardware

Not an issue tracker, but the same pattern: hit a wall, worked out why, shared the fix.

Seeed Studio Grove Water Level Sensor

  • The official library was Arduino-only; wrote and shared a working MicroPython port for Raspberry Pi, with a demo video. Seeed’s own staff asked to adopt it into their wiki – forum thread, shared

Asuswrt-Merlin community (SNBForums)

  • A persistent, working Tailscale setup for 32-bit ARM Merlin firmware (RT-AX58U_V2, gnuton fork), including the fix for the SIGBUS crash reported as tailscale/tailscale#20827 above – forum thread, shared

Prepared, not yet sent

Dash-Industry-Forum/dash.js

  • Two crash guards: a SegmentTimeline that may carry no S elements, and the embedded-caption path assuming ISOBMFF and crashing on WebM segments. Written against current development with four unit tests that fail without the change – waiting on the DASH-IF Feedback Agreement, required before review