Set ViEEncoder sink_ on construction.

Removes sink_crit_ and makes sink_ const.

webrtc:5687

R=perkj@webrtc.org

Review URL: https://codereview.webrtc.org/1984243003 .

Cr-Commit-Position: refs/heads/master@{#12813}
diff --git a/webrtc/call/bitrate_allocator.h b/webrtc/call/bitrate_allocator.h
index 3bafcd7..bf26a6a 100644
--- a/webrtc/call/bitrate_allocator.h
+++ b/webrtc/call/bitrate_allocator.h
@@ -112,7 +112,7 @@
 
   rtc::CriticalSection crit_sect_;
   // Stored in a list to keep track of the insertion order.
-  ObserverConfigList bitrate_observer_configs_;
+  ObserverConfigList bitrate_observer_configs_ GUARDED_BY(crit_sect_);
   bool enforce_min_bitrate_ GUARDED_BY(crit_sect_);
   uint32_t last_bitrate_bps_ GUARDED_BY(crit_sect_);
   uint32_t last_non_zero_bitrate_bps_ GUARDED_BY(crit_sect_);
diff --git a/webrtc/video/encoder_state_feedback_unittest.cc b/webrtc/video/encoder_state_feedback_unittest.cc
index 7e6ec71..5351e15 100644
--- a/webrtc/video/encoder_state_feedback_unittest.cc
+++ b/webrtc/video/encoder_state_feedback_unittest.cc
@@ -22,7 +22,7 @@
 class MockVieEncoder : public ViEEncoder {
  public:
   explicit MockVieEncoder(ProcessThread* process_thread)
-      : ViEEncoder(1, process_thread, nullptr, nullptr) {}
+      : ViEEncoder(1, process_thread, nullptr, nullptr, nullptr) {}
   ~MockVieEncoder() {}
 
   MOCK_METHOD1(OnReceivedIntraFrameRequest, void(size_t));
diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc
index 9555270..31ba5ee 100644
--- a/webrtc/video/video_send_stream.cc
+++ b/webrtc/video/video_send_stream.cc
@@ -379,7 +379,8 @@
       vie_encoder_(num_cpu_cores,
                    module_process_thread_,
                    &stats_proxy_,
-                   &overuse_detector_),
+                   &overuse_detector_,
+                   this),
       encoder_feedback_(Clock::GetRealTimeClock(),
                         config.rtp.ssrcs,
                         &vie_encoder_),
@@ -554,7 +555,7 @@
       payload_router_.SetSendStreams(encoder_settings->streams);
       vie_encoder_.SetEncoder(encoder_settings->video_codec,
                               encoder_settings->min_transmit_bitrate_bps,
-                              payload_router_.MaxPayloadLength(), this);
+                              payload_router_.MaxPayloadLength());
 
       // vie_encoder_.SetEncoder must be called before this.
       if (config_.suspend_below_min_bitrate)
diff --git a/webrtc/video/vie_encoder.cc b/webrtc/video/vie_encoder.cc
index 2871c40..d10e8fc 100644
--- a/webrtc/video/vie_encoder.cc
+++ b/webrtc/video/vie_encoder.cc
@@ -33,8 +33,10 @@
 ViEEncoder::ViEEncoder(uint32_t number_of_cores,
                        ProcessThread* module_process_thread,
                        SendStatisticsProxy* stats_proxy,
-                       OveruseFrameDetector* overuse_detector)
+                       OveruseFrameDetector* overuse_detector,
+                       EncodedImageCallback* sink)
     : number_of_cores_(number_of_cores),
+      sink_(sink),
       vp_(VideoProcessing::Create()),
       video_sender_(Clock::GetRealTimeClock(), this, this, this),
       stats_proxy_(stats_proxy),
@@ -84,10 +86,10 @@
   video_sender_.RegisterExternalEncoder(nullptr, pl_type, false);
   return 0;
 }
+
 void ViEEncoder::SetEncoder(const webrtc::VideoCodec& video_codec,
                             int min_transmit_bitrate_bps,
-                            size_t max_data_payload_length,
-                            EncodedImageCallback* sink) {
+                            size_t max_data_payload_length) {
   // Setting target width and height for VPM.
   RTC_CHECK_EQ(VPM_OK,
                vp_->SetTargetResolution(video_codec.width, video_codec.height,
@@ -100,10 +102,6 @@
     encoder_config_ = video_codec;
     min_transmit_bitrate_bps_ = min_transmit_bitrate_bps;
   }
-  {
-    rtc::CritScope lock(&sink_cs_);
-    sink_ = sink;
-  }
 
   bool success = video_sender_.RegisterSendCodec(
                      &video_codec, number_of_cores_,
@@ -294,11 +292,8 @@
     stats_proxy_->OnSendEncodedImage(encoded_image, codec_specific_info);
   }
 
-  int success = 0;
-  {
-    rtc::CritScope lock(&sink_cs_);
-    success = sink_->Encoded(encoded_image, codec_specific_info, fragmentation);
-  }
+  int success =
+      sink_->Encoded(encoded_image, codec_specific_info, fragmentation);
 
   overuse_detector_->FrameSent(encoded_image._timeStamp);
   return success;
diff --git a/webrtc/video/vie_encoder.h b/webrtc/video/vie_encoder.h
index 556ed44..2129623 100644
--- a/webrtc/video/vie_encoder.h
+++ b/webrtc/video/vie_encoder.h
@@ -58,7 +58,9 @@
   ViEEncoder(uint32_t number_of_cores,
              ProcessThread* module_process_thread,
              SendStatisticsProxy* stats_proxy,
-             OveruseFrameDetector* overuse_detector);
+             OveruseFrameDetector* overuse_detector,
+             EncodedImageCallback* sink);
+
   ~ViEEncoder();
 
   vcm::VideoSender* video_sender();
@@ -77,8 +79,7 @@
   int32_t DeRegisterExternalEncoder(uint8_t pl_type);
   void SetEncoder(const VideoCodec& video_codec,
                   int min_transmit_bitrate_bps,
-                  size_t max_data_payload_length,
-                  EncodedImageCallback* sink);
+                  size_t max_data_payload_length);
 
   void EncodeVideoFrame(const VideoFrame& video_frame);
   void SendKeyFrame();
@@ -119,6 +120,7 @@
   void TraceFrameDropEnd() EXCLUSIVE_LOCKS_REQUIRED(data_cs_);
 
   const uint32_t number_of_cores_;
+  EncodedImageCallback* const sink_;
 
   const std::unique_ptr<VideoProcessing> vp_;
   vcm::VideoSender video_sender_;
@@ -138,9 +140,6 @@
   bool encoder_paused_ GUARDED_BY(data_cs_);
   bool encoder_paused_and_dropped_frame_ GUARDED_BY(data_cs_);
 
-  rtc::CriticalSection sink_cs_;
-  EncodedImageCallback* sink_ GUARDED_BY(sink_cs_);
-
   ProcessThread* module_process_thread_;
 
   bool has_received_sli_ GUARDED_BY(data_cs_);