Add TargetBitrate callback to MediaTransportInterface.

Clients of media_transport_interface need the ability to monitor BWE
estimates, and this change adds a TargetBitrate observer to the media
transport interface.

Bug: webrtc:9719
Change-Id: I90ebbf684c6f269e0c3cd58428010cfa511cc970
Reviewed-on: https://webrtc-review.googlesource.com/c/108106
Reviewed-by: Bjorn Mellem <mellem@webrtc.org>
Reviewed-by: Seth Hampson <shampson@webrtc.org>
Commit-Queue: Peter Slatala <psla@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25415}
diff --git a/api/media_transport_interface.h b/api/media_transport_interface.h
index b388ac9..0e6a3fc 100644
--- a/api/media_transport_interface.h
+++ b/api/media_transport_interface.h
@@ -17,6 +17,7 @@
 #ifndef API_MEDIA_TRANSPORT_INTERFACE_H_
 #define API_MEDIA_TRANSPORT_INTERFACE_H_
 
+#include <api/transport/network_control.h>
 #include <memory>
 #include <string>
 #include <utility>
@@ -240,8 +241,14 @@
   // pass a nullptr.
   virtual void SetReceiveVideoSink(MediaTransportVideoSinkInterface* sink) = 0;
 
+  // Sets a target bitrate observer. Before media transport is destructed
+  // the observer must be unregistered (set to nullptr).
+  // A newly registered observer will be called back with the latest recorded
+  // target rate, if available.
+  virtual void SetTargetTransferRateObserver(
+      webrtc::TargetTransferRateObserver* observer) = 0;
+
   // TODO(sukhanov): RtcEventLogs.
-  // TODO(sukhanov): Bandwidth updates.
 };
 
 // If media transport factory is set in peer connection factory, it will be
diff --git a/api/test/fake_media_transport.h b/api/test/fake_media_transport.h
index 4930a30..956316d 100644
--- a/api/test/fake_media_transport.h
+++ b/api/test/fake_media_transport.h
@@ -49,6 +49,9 @@
   // Returns true if fake media trasport was created as a caller.
   bool is_caller() const { return is_caller_; }
 
+  void SetTargetTransferRateObserver(
+      webrtc::TargetTransferRateObserver* observer) override {}
+
  private:
   const bool is_caller_;
 };
diff --git a/api/test/loopback_media_transport.h b/api/test/loopback_media_transport.h
index 04e14b2..3195f97 100644
--- a/api/test/loopback_media_transport.h
+++ b/api/test/loopback_media_transport.h
@@ -61,6 +61,9 @@
 
     void SetReceiveVideoSink(MediaTransportVideoSinkInterface* sink) override {}
 
+    void SetTargetTransferRateObserver(
+        webrtc::TargetTransferRateObserver* observer) override {}
+
    private:
     void OnData(uint64_t channel_id, MediaTransportEncodedAudioFrame frame) {
       if (sink_) {