Per temporal layer rate control in the V2 libaom AV1 encoder.

The encoder reported every frame as belonging to temporal layer 0, so
libaom ran a single rate control context for the whole stream and sized
every frame against the same budget regardless of how the bitrate was
distributed across the layers. The per frame budget was communicated by
scaling the frame duration, which left the duration meaning something
other than the interval between frames.

Signal the real temporal id instead, declare the layer configuration to
libaom, and derive the cumulative layer bitrates and frame rate factors
it expects via the new TemporalLayerRateTracker. Cbr::duration is now
passed through verbatim, and the meaning of both Cbr fields is spelled
out in video_encoder_interface.h.

The existing rate control tests are adjusted to allow the total to
overshoot by what the keyframes were actually allowed, which the
microsecond precision duration no longer leaves room for.

This is a precursor to
https://webrtc-review.git.corp.google.com/c/src/+/503780

Bug: webrtc:496266459
Change-Id: Ic9183a9757d624293148ec28af0b6adfcd0f2e1c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/504280
Commit-Queue: Erik Språng <sprang@webrtc.org>
Reviewed-by: Sergey Silkin <ssilkin@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#48659}
8 files changed
tree: a1bce866889a7179b62a8d72326d1822f14b8cf8
  1. .agents/
  2. agents/
  3. api/
  4. audio/
  5. build_overrides/
  6. call/
  7. common_audio/
  8. common_video/
  9. data/
  10. docs/
  11. examples/
  12. experiments/
  13. g3doc/
  14. infra/
  15. logging/
  16. media/
  17. modules/
  18. net/
  19. p2p/
  20. pc/
  21. resources/
  22. rtc_base/
  23. rtc_tools/
  24. rust/
  25. sdk/
  26. stats/
  27. system_wrappers/
  28. test/
  29. tools_webrtc/
  30. video/
  31. .clang-format
  32. .clang-tidy
  33. .git-blame-ignore-revs
  34. .gitignore
  35. .gn
  36. .mailmap
  37. .rustfmt.toml
  38. .style.mdformat
  39. .style.yapf
  40. .yapfignore
  41. AUTHORS
  42. BUILD.gn
  43. CODE_OF_CONDUCT.md
  44. codereview.settings
  45. DEPS
  46. DIR_METADATA
  47. ENG_REVIEW_OWNERS
  48. GEMINI.md
  49. LICENSE
  50. license_template.txt
  51. native-api.md
  52. OWNERS
  53. OWNERS_INFRA
  54. PATENTS
  55. PRESUBMIT.py
  56. presubmit_test.py
  57. presubmit_test_mocks.py
  58. pylintrc
  59. pylintrc_old_style
  60. README.chromium
  61. README.md
  62. unsafe_buffers_paths.txt
  63. vpython.toml
  64. vpython.toml.uv.lock
  65. WATCHLISTS
  66. webrtc.gni
  67. webrtc_lib_link_test.cc
  68. whitespace.txt
README.md

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.

Development

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.

More info