Skip to content

feat(vision-mixer): per-input VU meters on multiview overlay#511

Merged
srperens merged 1 commit intomainfrom
feat/vision-mixer-vu-meters
Apr 17, 2026
Merged

feat(vision-mixer): per-input VU meters on multiview overlay#511
srperens merged 1 commit intomainfrom
feat/vision-mixer-vu-meters

Conversation

@srperens
Copy link
Copy Markdown
Collaborator

Summary

  • Adds per-video-input audio pads + a dedicated pgm_audio_in pad on the vision mixer; each audio branch runs queue → audioconvert → level → fakesink and feeds the overlay via bus messages.
  • Cairo overlay renders VU meters (bar = peak, tick = decay) in the bottom-left of every multiview tile. Grouped PVW/PGM layouts draw one meter per sub-tile using each source's own audio input; a single-source PGM keeps using the dedicated master-mix port.
  • New show_vu_meters block property (default on) togglable live via an AtomicBool. Dirty-check hashes quantized meter values so idle/silent audio doesn't trigger unnecessary re-renders; meter values are stored as AtomicU8 slots so the bus handler writes lock-free.

Test plan

  • cargo check from workspace root
  • cargo test --test openapi_test (snapshot unchanged)
  • cargo test --test pipeline_lifecycle_test (no circular references)
  • cargo test vision_mixer (15 passed)
  • Manual: wire audio into a vision mixer input, verify meters animate at 10 Hz in the multiview overlay
  • Manual: verify PVW/PGM group switches show the correct per-tile meters (2, 3, 4-source layouts)
  • Manual: toggle show_vu_meters=false, confirm meters disappear and no re-renders are triggered

🤖 Generated with Claude Code

Adds one audio input pad per video input plus a dedicated pgm_audio_in
pad, wires each through queue -> audioconvert -> level -> fakesink, and
renders peak/decay meters in the bottom-left of every multiview tile
(plus PVW and PGM). Grouped PVW/PGM layouts get one meter per sub-tile.
Gated by a new show_vu_meters block property (default on).

Bar fill tracks peak, tick tracks decay, both driven by the level
element at 100 ms intervals. Overlay state uses AtomicU8 slots so the
bus handler writes lock-free and the Cairo render stays off the hot
streaming path. Dirty check hashes quantized meter values so idle or
silent audio does not trigger re-renders.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@srperens srperens force-pushed the feat/vision-mixer-vu-meters branch from a677c5f to 58b8e74 Compare April 17, 2026 14:27
@srperens srperens merged commit ea97836 into main Apr 17, 2026
7 checks passed
@srperens srperens deleted the feat/vision-mixer-vu-meters branch April 23, 2026 12:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant