Pass FecControllerOverride to Vp8FrameBufferControllerFactory::Create

Previously, FecControllerOverride was passed to
Vp8FrameBufferController::SetFecControllerOverride. Passing to
the factory is a more elegant way, since it's only used when
the controller is constructed.

TBR=kwiberg@webrtc.org

Bug: webrtc:10769
Change-Id: Iae599889e7ca9003e3200c2911239cbb763ee65a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/144380
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Elad Alon <eladalon@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28443}
diff --git a/api/video_codecs/vp8_frame_buffer_controller.h b/api/video_codecs/vp8_frame_buffer_controller.h
index 94e08a9..f304413 100644
--- a/api/video_codecs/vp8_frame_buffer_controller.h
+++ b/api/video_codecs/vp8_frame_buffer_controller.h
@@ -106,13 +106,6 @@
   // The limits are suggestion-only; the controller is allowed to exceed them.
   virtual void SetQpLimits(size_t stream_index, int min_qp, int max_qp) = 0;
 
-  // Set a FecControllerOverride, through which the bandwidth allocation
-  // decisions made by FecController may be overridden.
-  // TODO(bugs.webrtc.org/10769): Update downstream projects, then make
-  // this pure-virtual.
-  virtual void SetFecControllerOverride(
-      FecControllerOverride* fec_controller_override) {}
-
   // Number of streamed controlled by |this|.
   virtual size_t StreamCount() const = 0;
 
@@ -188,9 +181,24 @@
   virtual std::unique_ptr<Vp8FrameBufferControllerFactory> Clone() const = 0;
 
   // Create a Vp8FrameBufferController instance.
+  // TODO(bugs.webrtc.org/10769): Update downstream projects, then remove
+  // version without |fec_controller_override| and make the other version
+  // pure-virtual.
+  // (In theory, if neither version is overridden, stack overflow would occur.
+  // In practice, all subclasses override at least one version, and following
+  // the update of downstream projects, only one pure-virtual version will
+  // remain.)
   virtual std::unique_ptr<Vp8FrameBufferController> Create(
       const VideoCodec& codec,
-      const VideoEncoder::Settings& settings) = 0;
+      const VideoEncoder::Settings& settings) {
+    return Create(codec, settings, nullptr);
+  }
+  virtual std::unique_ptr<Vp8FrameBufferController> Create(
+      const VideoCodec& codec,
+      const VideoEncoder::Settings& settings,
+      FecControllerOverride* fec_controller_override) {
+    return Create(codec, settings);
+  }
 };
 
 }  // namespace webrtc