Skip to content

Preserve queued input when upmixing mono audio to stereo - #288

Open
kinetiknz wants to merge 1 commit into
trailblazerfrom
fix-upmix-input-consumption
Open

kinetiknz wants to merge 1 commit into
trailblazerfrom
fix-upmix-input-consumption

Conversation

@kinetiknz

Copy link
Copy Markdown
Contributor

When mono input is expanded to stereo, BufferManager::pull_data() gives pop_slice() the full stereo-sized output slice. With four mono frames queued, a request for two stereo frames consumes all four input frames and silently discards the last two during expansion.

Limit both the integer and float reads to to_pull, the required number of stored input samples, before expanding into the output slice. Add tests that read a mono buffer in two batches and verify the remaining frame count, exact stereo samples, and silence on underrun. Both tests fail before the fix with zero frames remaining instead of two.

Found while testing #287, but this is a separate issue also present before the ringbuf 0.5.2 update. This PR is based directly on trailblazer and does not include the ringbuf race fix.

Validation: formatting and Clippy pass; buffer-manager tests pass in debug, release, and AddressSanitizer builds. Full-suite TSan currently has the separate upstream consumer-cache race addressed by #287.

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