commit | 70cd086644f883d28eb1f01d859c2950abe08e47 | [log] [tgz] |
---|---|---|
author | Henrik Boström <hbos@webrtc.org> | Fri May 21 09:58:17 2021 |
committer | WebRTC LUCI CQ <webrtc-scoped@luci-project-accounts.iam.gserviceaccount.com> | Sun May 23 10:38:17 2021 |
tree | 1c4bed7574e1b32d2585bd92986363cc7b99e5e4 | |
parent | bcadacdb0f11e2b866ff5ca88c545b8b032c2178 [diff] |
SEA: Only spawn multi-layered encoders if active layers > 1. With this CL, SimulcastEncoderAdapter no longer configures its encoder as multi-layered if we only have a single active layer. Instead we create a single single-layered encoder for that one and only active layer. When using VP8 SW encoder this means that LibvpxVp8Encoder is configured to only prepare a single video frame which avoids the cost of scaling down to layers that we do not send. (A multi-layered LibvpxVp8Encoder is required to scale even layers we don't encode.) When profiling this CL I found very small but measurable gains for representative downscale factors of 20.1 ms of 60 s profile. This is just 0.0335% CPU so it's not much, but skipping a downscale might be worth a lot more if we have to map/unmap buffers or do GPU round-trips in the future (which I have not measured). When downscaling to factors 4 and 2 due to libyuv having a "fast-path" for these (i.e. no adaptation active), zero difference was found for NV12. For I420 there was small regression of 16.1 ms (0.026% CPU) for this one edge-case. It's possible to work around this, but considering the tiny changes we're talking about, I really don't think it's worth the additional complexity. I'll file a bug on libyuv about scaling factors 2+2 vs 4 and leave it at that. Bug: webrtc:12603 Change-Id: Id462140c6a829cf6b460baae868e94243f477db3 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/219683 Commit-Queue: Henrik Boström <hbos@webrtc.org> Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> Cr-Commit-Position: refs/heads/master@{#34092}
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.