Skip to content

Fix WMF AAC chunk boundary overshoot on Windows#44

Open
EliStoreplay wants to merge 1 commit into
sjoenk:mainfrom
EliStoreplay:fix-wmf-aac-chunk-boundary
Open

Fix WMF AAC chunk boundary overshoot on Windows#44
EliStoreplay wants to merge 1 commit into
sjoenk:mainfrom
EliStoreplay:fix-wmf-aac-chunk-boundary

Conversation

@EliStoreplay
Copy link
Copy Markdown

Description

When decoding AAC audio in chunks on Windows, the decoded PCM at the chunk's boundary's either overshoot the end time or start before the initial chunk position. To my understanding, this is because the Windows Media Foundation (WMF) doesn't honour the AAC edit list, which usually accounts for the 1024 sample encoder delay prepended to every AAC stream.

Because of this, the timestamps are frame-count based rather than presentation-time based. This means the timestamp boundary check consistently includes one extra AAC frame (1024 samples, about 23ms) past the requested end. Essentially, this causes audible "stutters" when decoding chunks of audio.

Here's an example of the WMF bug in other cases.

Changes

Compute the number of PCM bytes that correspond to the startMs, endMs window using the sample rate, channel count and bit depth. Then, use this to skip any leading bytes that WMF returned before startMs, and crop output to never exceed the expected byte count.

Tests

  • flutter test - All tests pass
  • flutter analyze - No issues found
  • Tested on windows, decoding audio in 5 second chunks. No more audible stutter between chunks.

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.

2 participants