teamsiso/src
Zac Gaetano 2c607a70ff
Some checks failed
CI / build-and-test (push) Failing after 31s
Audio peak: high-water mark across UI poll interval
The audio capture loop runs at ~50Hz publishing every buffer's peak via overwrite; the UI stats poll reads at 1Hz. With overwrite semantics the UI sees one of every ~50 audio frames per second — loud transients between reads were invisible to the VU meter.

New design: NdiReceiver maintains an atomic high-water mark, max-updated on each audio frame via CompareExchange CAS loop. IsoPipeline.GetStats now calls ConsumeAudioPeak() which atomically reads + resets to 0, so the next UI tick reflects the loudest sample seen in the next 1s window.

Added PeekAudioPeak() for non-consuming reads (e.g. external diagnostics dashboards that poll faster than the UI).

FakeNdiInterop gained a ReceiverAudioPeaks queue + CaptureAudioPeak override so tests can drive the audio path. 4 new tests in NdiReceiverTests cover: empty case, single-frame consume+reset, max-hold across 3 frames, no-frame leaves high-water mark untouched. 104 + 46 + 9 = 159/159 passing.
2026-05-10 14:04:04 -04:00
..
TeamsISO.App Wd.Button.Primary: add disabled / pressed / focus states 2026-05-10 13:36:27 -04:00
TeamsISO.Console feat(engine+console): SMPTE test-pattern generator + --test-pattern flag 2026-05-10 09:41:33 -04:00
TeamsISO.Engine Audio peak: high-water mark across UI poll interval 2026-05-10 14:04:04 -04:00
TeamsISO.Engine.NdiInterop Wire engine audio peak metering — UI VU bars now animate 2026-05-10 13:28:26 -04:00
tests Audio peak: high-water mark across UI poll interval 2026-05-10 14:04:04 -04:00
.gitkeep chore: add empty TeamsISO solution 2026-05-07 15:07:58 +00:00