Add audio level to CSRC class

This patch adds (optional) csrc to ContributingSources.
This will be used if using virtual audio ssrc, since
the audio level is otherwise unaccessible in that configuration.

BUG=webrtc:3333

Change-Id: Ied263b8f0850553cd637fd6bead373ed4252fd1e
Reviewed-on: https://webrtc-review.googlesource.com/c/109281
Reviewed-by: Oskar Sundbom <ossu@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Jonas Oreland <jonaso@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25516}
diff --git a/modules/rtp_rtcp/source/contributing_sources.h b/modules/rtp_rtcp/source/contributing_sources.h
index b6201ce..5e34539 100644
--- a/modules/rtp_rtcp/source/contributing_sources.h
+++ b/modules/rtp_rtcp/source/contributing_sources.h
@@ -32,18 +32,25 @@
   ContributingSources();
   ~ContributingSources();
 
-  // TODO(bugs.webrtc.org/3333): Needs to be extended with audio-level, to
-  // support RFC6465.
-  void Update(int64_t now_ms, rtc::ArrayView<const uint32_t> csrcs);
+  void Update(int64_t now_ms, rtc::ArrayView<const uint32_t> csrcs,
+              absl::optional<uint8_t> audio_level);
 
   // Returns contributing sources seen the last 10 s.
   std::vector<RtpSource> GetSources(int64_t now_ms) const;
 
  private:
+  struct Entry {
+    Entry();
+    Entry(int64_t timestamp_ms, absl::optional<uint8_t> audio_level);
+
+    int64_t last_seen_ms;
+    absl::optional<uint8_t> audio_level;
+  };
+
   void DeleteOldEntries(int64_t now_ms);
 
   // Indexed by csrc.
-  std::map<uint32_t, int64_t> last_seen_ms_;
+  std::map<uint32_t, Entry> active_csrcs_;
   absl::optional<int64_t> next_pruning_ms_;
 };