Handle "w" properly in the AV1 packetizer #1305
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The AV1 packetizer did not properly packetize all AV1 bitstreams. It incorrectly calculated the "w" field from the AV1 RTP spec once and applied it to all RTP packets. This field needs to be determined on a per-packet basis. In practice, this meant the packetizer generated invalid RTP packets if w = 0 for the first packet (i.e. 4 or more OBUs).
Rewrite the packetizer to accurately determine how many OBU fragments are present in each RTP packet. The general idea is:
Update the tests to get wider coverage of this new algorithm. Add another stream with more OBUs and test each stream with varying packet sizes. Also, fix the frame re-assembly code in the test to conform to the spec.
Name this new algorithm av1_packetize_new and keep the old av1_packetize_high around for now. Library users can switch to the new implementation for testing until it replaces av1_packetize_high.
AV1 RTP spec: https://aomediacodec.github.io/av1-rtp-spec/