Generalize TemporalLayerRateTracker into CbrLayerRateTracker. The tracker now covers spatial as well as temporal layers and produces an encoder agnostic CumulativeCbrAllocation: per spatial layer bitrates that are cumulative over the temporal layers, together with the temporal layer frame rate factors. Encoder wrappers only translate it to their own types and decide themselves when to apply it. - The tracker is fed once per temporal unit with the FrameEncodeSettings passed to Encode, instead of once per frame. Temporal unit boundaries are therefore known rather than guessed from the spatial ids. - Spatial layers without a frame in a temporal unit keep their last bitrate. Some rate controllers otherwise set the bitrate to zero, disabling the layer with unintended side effects. - The priming after a keyframe now applies to all spatial layers of the temporal unit that follows it, not only to single spatial layer streams. - The libaom wrapper only hands the encoder config and the SVC parameters to libaom when they differ from what was last applied. Both paths recompute the per layer rate control state from the frame rate of the most recently encoded frame, and reset the buffer of any layer whose per frame budget then appears to have changed by more than a factor of two. With spatial layers running at different frame rates this reset the lower layers before each of their frames, which made them overshoot their targets severalfold. Bug: webrtc:496266459 Change-Id: I260b348328ce9dfc2595a080b719e20b37b6890d Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/506562 Reviewed-by: Sergey Silkin <ssilkin@webrtc.org> Commit-Queue: Erik Språng <sprang@webrtc.org> Cr-Commit-Position: refs/heads/main@{#48812}
WebRTC is a free, open software project that provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimized to best serve this purpose.
Our mission: To enable rich, high-quality RTC applications to be developed for the browser, mobile platforms, and IoT devices, and allow them all to communicate via a common set of protocols.
The WebRTC initiative is a project supported by Google, Mozilla and Opera, amongst others.
See here for instructions on how to get started developing with the native code.
Authoritative list of directories that contain the native API header files.