Exposing video bitrate allocator into API

In order to have public video bitrate allocator factory, the video bitrate allocator has be part of
the api.

Bug: webrtc:9513
Change-Id: Ia2e5ab9eb988c710c1ac492afccc470a92544aa2
Reviewed-on: https://webrtc-review.googlesource.com/88083
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Jiawei Ou <ouj@fb.com>
Cr-Commit-Position: refs/heads/master@{#24073}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index d4cd733..e385c3c 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -425,6 +425,18 @@
     ]
   }
 
+  rtc_source_set("mock_video_bitrate_allocator") {
+    testonly = true
+    sources = [
+      "test/mock_video_bitrate_allocator.h",
+    ]
+
+    deps = [
+      "../api/video:video_bitrate_allocator",
+      "../test:test_support",
+    ]
+  }
+
   rtc_source_set("mock_video_codec_factory") {
     testonly = true
     sources = [
diff --git a/api/test/mock_video_bitrate_allocator.h b/api/test/mock_video_bitrate_allocator.h
new file mode 100644
index 0000000..d25537a
--- /dev/null
+++ b/api/test/mock_video_bitrate_allocator.h
@@ -0,0 +1,28 @@
+/*
+ *  Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef API_TEST_MOCK_VIDEO_BITRATE_ALLOCATOR_H_
+#define API_TEST_MOCK_VIDEO_BITRATE_ALLOCATOR_H_
+
+#include "api/video/video_bitrate_allocator.h"
+#include "test/gmock.h"
+
+namespace webrtc {
+
+class MockVideoBitrateAllocator : public webrtc::VideoBitrateAllocator {
+  MOCK_METHOD2(GetAllocation,
+               VideoBitrateAllocation(uint32_t total_bitrate,
+                                      uint32_t framerate));
+  MOCK_METHOD1(GetPreferredBitrateBps, uint32_t(uint32_t framerate));
+};
+
+}  // namespace webrtc
+
+#endif  // API_TEST_MOCK_VIDEO_BITRATE_ALLOCATOR_H_
diff --git a/api/video/BUILD.gn b/api/video/BUILD.gn
index d767048..73f477a 100644
--- a/api/video/BUILD.gn
+++ b/api/video/BUILD.gn
@@ -92,6 +92,16 @@
   ]
 }
 
+rtc_source_set("video_bitrate_allocator") {
+  visibility = [ "*" ]
+  sources = [
+    "video_bitrate_allocator.h",
+  ]
+  deps = [
+    ":video_bitrate_allocation",
+  ]
+}
+
 rtc_source_set("video_stream_decoder") {
   visibility = [ "*" ]
   sources = [
diff --git a/api/video/video_bitrate_allocator.h b/api/video/video_bitrate_allocator.h
new file mode 100644
index 0000000..f85c633
--- /dev/null
+++ b/api/video/video_bitrate_allocator.h
@@ -0,0 +1,38 @@
+/*
+ *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef API_VIDEO_VIDEO_BITRATE_ALLOCATOR_H_
+#define API_VIDEO_VIDEO_BITRATE_ALLOCATOR_H_
+
+#include "api/video/video_bitrate_allocation.h"
+
+namespace webrtc {
+
+class VideoBitrateAllocator {
+ public:
+  VideoBitrateAllocator() {}
+  virtual ~VideoBitrateAllocator() {}
+
+  virtual VideoBitrateAllocation GetAllocation(uint32_t total_bitrate_bps,
+                                               uint32_t framerate) = 0;
+};
+
+class VideoBitrateAllocationObserver {
+ public:
+  VideoBitrateAllocationObserver() {}
+  virtual ~VideoBitrateAllocationObserver() {}
+
+  virtual void OnBitrateAllocationUpdated(
+      const VideoBitrateAllocation& allocation) = 0;
+};
+
+}  // namespace webrtc
+
+#endif  // API_VIDEO_VIDEO_BITRATE_ALLOCATOR_H_
diff --git a/common_video/BUILD.gn b/common_video/BUILD.gn
index 3e06cb8..4cca478 100644
--- a/common_video/BUILD.gn
+++ b/common_video/BUILD.gn
@@ -45,6 +45,7 @@
     "..:webrtc_common",
     "../:typedefs",
     "../api/video:video_bitrate_allocation",
+    "../api/video:video_bitrate_allocator",
     "../api/video:video_frame",
     "../api/video:video_frame_i420",
     "../media:rtc_h264_profile_id",
diff --git a/common_video/include/video_bitrate_allocator.h b/common_video/include/video_bitrate_allocator.h
index 13b01ae..77a0fef 100644
--- a/common_video/include/video_bitrate_allocator.h
+++ b/common_video/include/video_bitrate_allocator.h
@@ -11,28 +11,6 @@
 #ifndef COMMON_VIDEO_INCLUDE_VIDEO_BITRATE_ALLOCATOR_H_
 #define COMMON_VIDEO_INCLUDE_VIDEO_BITRATE_ALLOCATOR_H_
 
-#include "api/video/video_bitrate_allocation.h"
-
-namespace webrtc {
-
-class VideoBitrateAllocator {
- public:
-  VideoBitrateAllocator() {}
-  virtual ~VideoBitrateAllocator() {}
-
-  virtual VideoBitrateAllocation GetAllocation(uint32_t total_bitrate,
-                                               uint32_t framerate) = 0;
-};
-
-class VideoBitrateAllocationObserver {
- public:
-  VideoBitrateAllocationObserver() {}
-  virtual ~VideoBitrateAllocationObserver() {}
-
-  virtual void OnBitrateAllocationUpdated(
-      const VideoBitrateAllocation& allocation) = 0;
-};
-
-}  // namespace webrtc
+#include "api/video/video_bitrate_allocator.h"
 
 #endif  // COMMON_VIDEO_INCLUDE_VIDEO_BITRATE_ALLOCATOR_H_
diff --git a/modules/rtp_rtcp/BUILD.gn b/modules/rtp_rtcp/BUILD.gn
index da546cd..b6dd965 100644
--- a/modules/rtp_rtcp/BUILD.gn
+++ b/modules/rtp_rtcp/BUILD.gn
@@ -202,6 +202,7 @@
     "../../api:transport_api",
     "../../api/audio_codecs:audio_codecs_api",
     "../../api/video:video_bitrate_allocation",
+    "../../api/video:video_bitrate_allocator",
     "../../api/video_codecs:video_codecs_api",
     "../../common_video",
     "../../logging:rtc_event_audio",
@@ -426,6 +427,7 @@
       "../../api:libjingle_peerconnection_api",
       "../../api:transport_api",
       "../../api/video:video_bitrate_allocation",
+      "../../api/video:video_bitrate_allocator",
       "../../api/video:video_frame",
       "../../api/video_codecs:video_codecs_api",
       "../../call:rtp_receiver",
diff --git a/modules/rtp_rtcp/source/rtcp_receiver.cc b/modules/rtp_rtcp/source/rtcp_receiver.cc
index 491bd45..4966754 100644
--- a/modules/rtp_rtcp/source/rtcp_receiver.cc
+++ b/modules/rtp_rtcp/source/rtcp_receiver.cc
@@ -19,8 +19,8 @@
 #include <vector>
 
 #include "api/video/video_bitrate_allocation.h"
+#include "api/video/video_bitrate_allocator.h"
 #include "common_types.h"  // NOLINT(build/include)
-#include "common_video/include/video_bitrate_allocator.h"
 #include "modules/rtp_rtcp/source/rtcp_packet/bye.h"
 #include "modules/rtp_rtcp/source/rtcp_packet/common_header.h"
 #include "modules/rtp_rtcp/source/rtcp_packet/compound_packet.h"
diff --git a/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc b/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
index 41d4725..91ffd73 100644
--- a/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
+++ b/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
@@ -12,8 +12,8 @@
 
 #include "api/array_view.h"
 #include "api/video/video_bitrate_allocation.h"
+#include "api/video/video_bitrate_allocator.h"
 #include "common_types.h"  // NOLINT(build/include)
-#include "common_video/include/video_bitrate_allocator.h"
 #include "modules/rtp_rtcp/mocks/mock_rtcp_bandwidth_observer.h"
 #include "modules/rtp_rtcp/source/byte_io.h"
 #include "modules/rtp_rtcp/source/rtcp_packet.h"
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index 21d8490..7437603 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -159,6 +159,7 @@
     "../../:typedefs",
     "../../api:fec_controller_api",
     "../../api/video:encoded_frame",
+    "../../api/video:video_bitrate_allocator",
     "../../api/video:video_frame",
     "../../api/video:video_frame_i420",
     "../../api/video_codecs:video_codecs_api",
@@ -261,6 +262,7 @@
     "..:module_api",
     "../..:webrtc_common",
     "../../:typedefs",
+    "../../api/video:video_bitrate_allocator",
     "../../api/video_codecs:video_codecs_api",
     "../../common_video",
     "../../modules/rtp_rtcp",
@@ -445,6 +447,7 @@
   deps = [
     ":video_codec_interface",
     "../..:webrtc_common",
+    "../../api/video:video_bitrate_allocator",
     "../../api/video_codecs:video_codecs_api",
     "../../common_video",
     "../../rtc_base:checks",
@@ -596,6 +599,7 @@
       "../..:webrtc_common",
       "../../:typedefs",
       "../../api:videocodec_test_fixture_api",
+      "../../api/video:video_bitrate_allocator",
       "../../api/video:video_frame",
       "../../api/video:video_frame_i420",
       "../../api/video_codecs:video_codecs_api",
@@ -834,6 +838,7 @@
       "../../api:create_simulcast_test_fixture_api",
       "../../api:simulcast_test_fixture_api",
       "../../api:videocodec_test_fixture_api",
+      "../../api/video:video_bitrate_allocator",
       "../../api/video:video_frame",
       "../../api/video:video_frame_i420",
       "../../api/video_codecs:video_codecs_api",
diff --git a/modules/video_coding/codecs/test/videoprocessor.h b/modules/video_coding/codecs/test/videoprocessor.h
index f3808f8..9f1fa13 100644
--- a/modules/video_coding/codecs/test/videoprocessor.h
+++ b/modules/video_coding/codecs/test/videoprocessor.h
@@ -18,8 +18,8 @@
 
 #include "api/test/videocodec_test_fixture.h"
 #include "api/test/videocodec_test_stats.h"
+#include "api/video/video_bitrate_allocator.h"
 #include "api/video/video_frame.h"
-#include "common_video/include/video_bitrate_allocator.h"
 #include "modules/video_coding/include/video_codec_interface.h"
 #include "modules/video_coding/utility/ivf_file_writer.h"
 #include "rtc_base/buffer.h"
diff --git a/modules/video_coding/codecs/vp9/svc_rate_allocator.h b/modules/video_coding/codecs/vp9/svc_rate_allocator.h
index 68ff0e5..10e22ed 100644
--- a/modules/video_coding/codecs/vp9/svc_rate_allocator.h
+++ b/modules/video_coding/codecs/vp9/svc_rate_allocator.h
@@ -15,8 +15,8 @@
 
 #include <vector>
 
+#include "api/video/video_bitrate_allocator.h"
 #include "api/video_codecs/video_codec.h"
-#include "common_video/include/video_bitrate_allocator.h"
 
 namespace webrtc {
 
diff --git a/modules/video_coding/utility/default_video_bitrate_allocator.h b/modules/video_coding/utility/default_video_bitrate_allocator.h
index 56666da..6a9d040 100644
--- a/modules/video_coding/utility/default_video_bitrate_allocator.h
+++ b/modules/video_coding/utility/default_video_bitrate_allocator.h
@@ -11,8 +11,8 @@
 #ifndef MODULES_VIDEO_CODING_UTILITY_DEFAULT_VIDEO_BITRATE_ALLOCATOR_H_
 #define MODULES_VIDEO_CODING_UTILITY_DEFAULT_VIDEO_BITRATE_ALLOCATOR_H_
 
+#include "api/video/video_bitrate_allocator.h"
 #include "api/video_codecs/video_codec.h"
-#include "common_video/include/video_bitrate_allocator.h"
 
 namespace webrtc {
 
diff --git a/modules/video_coding/utility/simulcast_rate_allocator.h b/modules/video_coding/utility/simulcast_rate_allocator.h
index 5aaf515..594e88b 100644
--- a/modules/video_coding/utility/simulcast_rate_allocator.h
+++ b/modules/video_coding/utility/simulcast_rate_allocator.h
@@ -17,9 +17,9 @@
 #include <memory>
 #include <vector>
 
+#include "api/video/video_bitrate_allocator.h"
 #include "api/video_codecs/video_encoder.h"
 #include "common_types.h"  // NOLINT(build/include)
-#include "common_video/include/video_bitrate_allocator.h"
 #include "rtc_base/constructormagic.h"
 
 namespace webrtc {
diff --git a/modules/video_coding/video_codec_initializer.cc b/modules/video_coding/video_codec_initializer.cc
index fa8572a..fe59afc 100644
--- a/modules/video_coding/video_codec_initializer.cc
+++ b/modules/video_coding/video_codec_initializer.cc
@@ -10,9 +10,9 @@
 
 #include "modules/video_coding/include/video_codec_initializer.h"
 
+#include "api/video/video_bitrate_allocator.h"
 #include "api/video_codecs/video_encoder.h"
 #include "common_types.h"  // NOLINT(build/include)
-#include "common_video/include/video_bitrate_allocator.h"
 #include "modules/video_coding/codecs/vp9/svc_config.h"
 #include "modules/video_coding/codecs/vp9/svc_rate_allocator.h"
 #include "modules/video_coding/include/video_coding_defines.h"
diff --git a/modules/video_coding/video_codec_initializer_unittest.cc b/modules/video_coding/video_codec_initializer_unittest.cc
index 9b3cf3e..80a3016 100644
--- a/modules/video_coding/video_codec_initializer_unittest.cc
+++ b/modules/video_coding/video_codec_initializer_unittest.cc
@@ -9,9 +9,9 @@
  */
 
 #include "modules/video_coding/include/video_codec_initializer.h"
+#include "api/video/video_bitrate_allocator.h"
 #include "api/video_codecs/video_encoder.h"
 #include "common_types.h"  // NOLINT(build/include)
-#include "common_video/include/video_bitrate_allocator.h"
 #include "modules/video_coding/codecs/vp8/temporal_layers.h"
 #include "modules/video_coding/codecs/vp9/include/vp9_globals.h"
 #include "rtc_base/refcountedobject.h"
diff --git a/modules/video_coding/video_coding_impl.cc b/modules/video_coding/video_coding_impl.cc
index 77bd288..e02d4c0 100644
--- a/modules/video_coding/video_coding_impl.cc
+++ b/modules/video_coding/video_coding_impl.cc
@@ -13,8 +13,8 @@
 #include <algorithm>
 #include <utility>
 
+#include "api/video/video_bitrate_allocator.h"
 #include "common_types.h"  // NOLINT(build/include)
-#include "common_video/include/video_bitrate_allocator.h"
 #include "common_video/libyuv/include/webrtc_libyuv.h"
 #include "modules/video_coding/encoded_frame.h"
 #include "modules/video_coding/include/video_codec_initializer.h"
diff --git a/modules/video_coding/video_sender.cc b/modules/video_coding/video_sender.cc
index ec24a97..bae60ed 100644
--- a/modules/video_coding/video_sender.cc
+++ b/modules/video_coding/video_sender.cc
@@ -11,8 +11,8 @@
 
 #include <algorithm>  // std::max
 
+#include "api/video/video_bitrate_allocator.h"
 #include "common_types.h"  // NOLINT(build/include)
-#include "common_video/include/video_bitrate_allocator.h"
 #include "common_video/libyuv/include/webrtc_libyuv.h"
 #include "modules/video_coding/encoded_frame.h"
 #include "modules/video_coding/include/video_codec_interface.h"
diff --git a/video/BUILD.gn b/video/BUILD.gn
index a135696..844941a 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -61,6 +61,7 @@
     "../api:fec_controller_api",
     "../api:libjingle_peerconnection_api",
     "../api:transport_api",
+    "../api/video:video_bitrate_allocator",
     "../api/video:video_frame",
     "../api/video:video_frame_i420",
     "../api/video:video_stream_encoder",
diff --git a/video/video_send_stream_impl.h b/video/video_send_stream_impl.h
index 322c89a..f87356e 100644
--- a/video/video_send_stream_impl.h
+++ b/video/video_send_stream_impl.h
@@ -15,10 +15,10 @@
 #include <unordered_set>
 #include <vector>
 
+#include "api/video/video_bitrate_allocator.h"
 #include "call/bitrate_allocator.h"
 #include "call/rtp_video_sender_interface.h"
 #include "common_types.h"  // NOLINT(build/include)
-#include "common_video/include/video_bitrate_allocator.h"
 #include "modules/utility/include/process_thread.h"
 #include "modules/video_coding/utility/ivf_file_writer.h"
 #include "rtc_base/weak_ptr.h"
diff --git a/video/video_stream_encoder.cc b/video/video_stream_encoder.cc
index 48b823a..69d3284 100644
--- a/video/video_stream_encoder.cc
+++ b/video/video_stream_encoder.cc
@@ -16,7 +16,7 @@
 #include <utility>
 
 #include "api/video/i420_buffer.h"
-#include "common_video/include/video_bitrate_allocator.h"
+#include "api/video/video_bitrate_allocator.h"
 #include "common_video/include/video_frame.h"
 #include "modules/video_coding/include/video_codec_initializer.h"
 #include "modules/video_coding/include/video_coding.h"
diff --git a/video/video_stream_encoder.h b/video/video_stream_encoder.h
index ea4c6e2..e9558ba 100644
--- a/video/video_stream_encoder.h
+++ b/video/video_stream_encoder.h
@@ -17,13 +17,13 @@
 #include <string>
 #include <vector>
 
+#include "api/video/video_bitrate_allocator.h"
 #include "api/video/video_rotation.h"
 #include "api/video/video_sink_interface.h"
 #include "api/video/video_stream_encoder_interface.h"
 #include "api/video_codecs/video_encoder.h"
 #include "call/video_send_stream.h"
 #include "common_types.h"  // NOLINT(build/include)
-#include "common_video/include/video_bitrate_allocator.h"
 #include "modules/video_coding/include/video_coding_defines.h"
 #include "modules/video_coding/utility/quality_scaler.h"
 #include "modules/video_coding/video_coding_impl.h"