This is a nightly release of Vibepollo and contains several bug fixes and may contain new features. Check the commit log for more information.
Windows installer · Linux (Arch x86_64)
Nightly Windows installers are unsigned and include self-signed gamepad components. They may cause false-positive antivirus alerts.
Source: 484463b6400e
Since the preceding successfully published nightly Commit log
2.0.2-nightly.d20261025.ed7f5b2d04cf: compare exact sources.
feat(stream): opt-in host adaptive packet pacing (#364)
* feat(stream): add host adaptive pacing controller and FEC status parser
Port the experimental adaptive pacing state machine (start rate, guarded
probes, loss-driven cuts and recovery holds) as a pure header, together
with the validated, de-duplicated parser for the client SS_FRAME_FEC_STATUS
(0x5502) report that feeds it. Nothing is wired in yet. Tests cover the
controller rules, the report parser and its de-duplication.
Signed-off-by: Ramazan Kara <github@r-kara.de>
* feat(stream): add host_adaptive_pacing option
Off by default. Registers the option in the config, the documentation and
the English locale so the config catalog contract stays satisfied.
Signed-off-by: Ramazan Kara <github@r-kara.de>
* feat(stream): drive video packet spacing from host adaptive pacing
When host_adaptive_pacing is on, ordinary H.264/HEVC/AV1 sessions feed
control pings and client FEC status reports to the controller, tick it from
the control loop, and let the send loop read the resulting rate instead of
the fixed pace. Encoder bitrate and FPS are untouched; PyroWave and the
option-off send path are unchanged. Start rate, probe results and cuts are
logged once per event.
Signed-off-by: Ramazan Kara <github@r-kara.de>
* fix(stream): address review of host adaptive pacing
- Report the configured FEC percentage to the wire-demand estimate, so a
frame over four FEC blocks (which zeroes its own percentage) no longer
moves the floor, withdraws a probe or sets the fence.
- Log a cut only when the rate actually changed.
- Fence client reports on the index written when a frame starts sending,
stored only when adaptive pacing is on.
- With the option off, 0x5502 falls through to the unknown-packet debug
dump again, and the report tracker keeps a vector so a disabled session
allocates nothing.
- Drop the unused preview_rate, enabled, ceiling and wire_floor accessors
and their tests; add the oversized-frame regression test.
Signed-off-by: Ramazan Kara <github@r-kara.de>
* fix(stream): pace adaptive video at the controller's exact rate
The sender turned the adaptive pacing rate into whole packets per
millisecond, rounding down. At 10 Mbps/60 fps with 1392-byte packets the
controller chose 20 Mbps but the sender paced 1 packet/ms (11.8 Mbps),
below the 14.15 Mbps the stream needs, so frames queued behind each other.
Deadlines now charge each packet its exact wire time at the chosen rate,
as Rubylight's pacer does. Whole packets per millisecond only bound the
burst between waits. Paths without adaptive pacing keep the old math.
Tests model the sender's FEC block split and check from rate() through
the applied deadlines that frames keep up at startup without pings and at
the wire floor through a loss cut and recovery hold, across bitrates,
60/120 fps, LAN/WAN packet sizes, IPv4/IPv6 and encryption.
Signed-off-by: Ramazan Kara <github@r-kara.de>
---------
Signed-off-by: Ramazan Kara <github@r-kara.de>
(cherry picked from commit 07366c503ee22402dc93abf302c4c2c77b0f7b56)
Pollo adaptation: preserve the hard UDP operator ceiling and cumulative frame
deadlines while adding exact adaptive wire pacing. Keep the independent
per-call demand bound and PyroWave path; extend the real sender replay.
Co-authored-by: Codex <noreply@openai.com>
Optional Dolby Digital (AC-3) and Dolby Digital Plus (E-AC-3) Audio Output (#365)
* Add optional Dolby audio settings to web UI
* Add Dolby audio configuration fields
* Parse Dolby audio settings
* Document optional Dolby audio settings
* Declare optional Dolby audio encoder API
* Track per-client Dolby codec offer
* Add optional FFmpeg AC-3 and E-AC-3 encoding
* Negotiate optional AC-3 and E-AC-3 audio streams
* Add Dolby audio settings translations (cs)
* Add Dolby audio settings translations (en)
* Add Dolby audio settings translations (bg)
* Add Dolby audio settings translations (en_GB)
* Add Dolby audio settings translations (de)
* Add Dolby audio settings translations (it)
* Add Dolby audio settings translations (en_US)
* Add Dolby audio settings translations (es)
* Add Dolby audio settings translations (fr)
* Add Dolby audio settings translations (hu)
* Add Dolby audio settings translations (ja)
* Add Dolby audio settings translations (ko)
* Add Dolby audio settings translations (pl)
* Add Dolby audio settings translations (pt)
* Add Dolby audio settings translations (pt_BR)
* Add Dolby audio settings translations (ru)
* Add Dolby audio settings translations (sv)
* Add Dolby audio settings translations (tr)
* Add Dolby audio settings translations (uk)
* Add Dolby audio settings translations (vi)
* Add Dolby audio settings translations (zh)
* Add Dolby audio settings translations (zh_TW)
* Reject unsupported accepted Dolby audio negotiations
* Allow larger encrypted Dolby audio packets
* Include string_view for Dolby codec API
* Add Dolby session isolation regression test
* Fix Dolby test extraction boundary
* Register Dolby session isolation regression test
* Support MSVC in Dolby isolation test
* Extract testable Dolby session worker control flow
* Use shared Dolby worker and capture cleanup paths
* Test Dolby failure paths through production worker lifecycle
(cherry picked from commit a60d99958e9abcf51e38a5e2baa8990c653eabfd)
Pollo adaptation: preserve input-only audio layout, sink options, launch
claim/clone/resource ownership, pacing admission statuses and lifecycle unlock
ordering. Carry the codec offer into the existing metadata-only snapshot.
Existing translations and downstream settings remain intact.
Co-authored-by: Codex <noreply@openai.com>
build(ffmpeg): Integrate verified Dolby packages into nightly
Replace stock Windows AMD64 and Linux x86_64 dependencies with the
reviewed immutable native AC3/EAC3 maintenance release and hash-isolated
cache loader. Preserve the exact-source nightly controls and other
platform pins, plus the prepared-package override and Opus linkage.
Integrates reviewed source commits bc431a76d529b057db3d8a1e10e92389d0d98df7 and cc5c10a974aeb37ba712e6b1a28f79d055c8db66.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit fa3adc9bc06f4a34f3d741c143bced3966017e4d)
test(rtsp): Compose production Dolby negotiation in terminal fixture
The terminal composition harness extracts the current ANNOUNCE parser but
omitted its Dolby interfaces. Extract the production audio types and helpers,
control encoder discovery at the fixture boundary, and cover negotiation and
resource retirement while preserving the existing terminal cleanup checks.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit ddf42cfa263db350718ebd8d3f2889ff95d49627)
test(web): Include the accepted Steam profile in parity coverage
Pollo already exposes vhf_steam from the accepted Steam Controller change,
but its Windows-only option expectation omitted the profile. Port the missing
assertion from reviewed Shine source dd91f2abfc0f37c892cc851d19adcafe7a5fd5cb.
Keep every existing option and the Linux platform assertions unchanged.
Co-authored-by: Codex <noreply@openai.com>
fix(release): Order distinct same-day host nightlies
The date-only identity hid later same-day source updates. Allocate numeric
revisions before the source hash so shipped clients can discover the bridge,
while validating exact identities and refusing duplicate or rewound sources.
Preserve existing MSI transactions, signing policy and published releases.
Co-authored-by: Codex <noreply@openai.com>
ci(nightly): Run qualified releases from confirmed Canary
Manual and scheduled launches must execute the same reviewed Canary workflow,
without promoting product changes to the protected default branch. Pin source
to the dispatched workflow SHA, reject moved refs, and keep disabled or
validation-only runs from reserving release tags.
Co-authored-by: Codex <noreply@openai.com>
fix(nightly): Preserve updater qualification and CRT include lookup
The frozen compatibility fixture must not add src to the system header search
path, where it shadows MinGW's process.h. Resolve its comparator locally while
retaining every assertion and the byte-identical shipped updater fixture.
Align web UI nightly metadata and revision validation with the backend.
Co-authored-by: Codex <noreply@openai.com>