From 00b9d210c4b15f66942691efe577d701e9c99e7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20Bostr=C3=B6m?= Date: Thu, 19 May 2016 16:59:03 +0200 Subject: [PATCH] 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} --- webrtc/call/bitrate_allocator.h | 2 +- .../video/encoder_state_feedback_unittest.cc | 2 +- webrtc/video/video_send_stream.cc | 5 +++-- webrtc/video/vie_encoder.cc | 19 +++++++------------ webrtc/video/vie_encoder.h | 11 +++++------ 5 files changed, 17 insertions(+), 22 deletions(-) diff --git a/webrtc/call/bitrate_allocator.h b/webrtc/call/bitrate_allocator.h index 3bafcd756b..bf26a6ae9b 100644 --- a/webrtc/call/bitrate_allocator.h +++ b/webrtc/call/bitrate_allocator.h @@ -112,7 +112,7 @@ class BitrateAllocator { 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 7e6ec71d6e..5351e1516b 100644 --- a/webrtc/video/encoder_state_feedback_unittest.cc +++ b/webrtc/video/encoder_state_feedback_unittest.cc @@ -22,7 +22,7 @@ namespace webrtc { 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 95552704b8..31ba5ee31c 100644 --- a/webrtc/video/video_send_stream.cc +++ b/webrtc/video/video_send_stream.cc @@ -379,7 +379,8 @@ VideoSendStream::VideoSendStream( 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 @@ void VideoSendStream::EncoderProcess() { 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 2871c4045c..d10e8fc5cd 100644 --- a/webrtc/video/vie_encoder.cc +++ b/webrtc/video/vie_encoder.cc @@ -33,8 +33,10 @@ static const float kStopPaddingThresholdMs = 2000; 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 @@ int32_t ViEEncoder::DeRegisterExternalEncoder(uint8_t pl_type) { 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 @@ void ViEEncoder::SetEncoder(const webrtc::VideoCodec& video_codec, 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 @@ int32_t ViEEncoder::Encoded(const EncodedImage& encoded_image, 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 556ed44995..212962348a 100644 --- a/webrtc/video/vie_encoder.h +++ b/webrtc/video/vie_encoder.h @@ -58,7 +58,9 @@ class ViEEncoder : public VideoEncoderRateObserver, 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 @@ class ViEEncoder : public VideoEncoderRateObserver, 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 @@ class ViEEncoder : public VideoEncoderRateObserver, void TraceFrameDropEnd() EXCLUSIVE_LOCKS_REQUIRED(data_cs_); const uint32_t number_of_cores_; + EncodedImageCallback* const sink_; const std::unique_ptr vp_; vcm::VideoSender video_sender_; @@ -138,9 +140,6 @@ class ViEEncoder : public VideoEncoderRateObserver, 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_);