FakeEncoder: remove lock recursions.
This change removes lock recursions and adds thread annotations.
Bug: webrtc:11567
Change-Id: I88561102c31156718fbb175a9a38f2cc89c6d9dc
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/175642
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Markus Handell <handellm@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31316}
diff --git a/test/fake_encoder.cc b/test/fake_encoder.cc
index 64b4a4e..2959559 100644
--- a/test/fake_encoder.cc
+++ b/test/fake_encoder.cc
@@ -69,7 +69,7 @@
RTC_DCHECK_GE(max_kbps, -1); // max_kbps == -1 disables it.
rtc::CritScope cs(&crit_sect_);
max_target_bitrate_kbps_ = max_kbps;
- SetRates(current_rate_settings_);
+ SetRatesLocked(current_rate_settings_);
}
void FakeEncoder::SetQp(int qp) {
@@ -243,6 +243,10 @@
void FakeEncoder::SetRates(const RateControlParameters& parameters) {
rtc::CritScope cs(&crit_sect_);
+ SetRatesLocked(parameters);
+}
+
+void FakeEncoder::SetRatesLocked(const RateControlParameters& parameters) {
current_rate_settings_ = parameters;
int allocated_bitrate_kbps = parameters.bitrate.get_sum_kbps();
diff --git a/test/fake_encoder.h b/test/fake_encoder.h
index 39838d1..ade0e35 100644
--- a/test/fake_encoder.h
+++ b/test/fake_encoder.h
@@ -40,21 +40,23 @@
virtual ~FakeEncoder() = default;
// Sets max bitrate. Not thread-safe, call before registering the encoder.
- void SetMaxBitrate(int max_kbps);
- void SetQp(int qp);
+ void SetMaxBitrate(int max_kbps) RTC_LOCKS_EXCLUDED(crit_sect_);
+ void SetQp(int qp) RTC_LOCKS_EXCLUDED(crit_sect_);
void SetFecControllerOverride(
FecControllerOverride* fec_controller_override) override;
- int32_t InitEncode(const VideoCodec* config,
- const Settings& settings) override;
+ int32_t InitEncode(const VideoCodec* config, const Settings& settings)
+ RTC_LOCKS_EXCLUDED(crit_sect_) override;
int32_t Encode(const VideoFrame& input_image,
- const std::vector<VideoFrameType>* frame_types) override;
- int32_t RegisterEncodeCompleteCallback(
- EncodedImageCallback* callback) override;
+ const std::vector<VideoFrameType>* frame_types)
+ RTC_LOCKS_EXCLUDED(crit_sect_) override;
+ int32_t RegisterEncodeCompleteCallback(EncodedImageCallback* callback)
+ RTC_LOCKS_EXCLUDED(crit_sect_) override;
int32_t Release() override;
- void SetRates(const RateControlParameters& parameters) override;
- int GetConfiguredInputFramerate() const;
+ void SetRates(const RateControlParameters& parameters)
+ RTC_LOCKS_EXCLUDED(crit_sect_) override;
+ int GetConfiguredInputFramerate() const RTC_LOCKS_EXCLUDED(crit_sect_);
EncoderInfo GetEncoderInfo() const override;
static const char* kImplementationName;
@@ -79,7 +81,7 @@
uint8_t num_simulcast_streams,
const VideoBitrateAllocation& target_bitrate,
SimulcastStream simulcast_streams[kMaxSimulcastStreams],
- int framerate);
+ int framerate) RTC_LOCKS_EXCLUDED(crit_sect_);
// Called before the frame is passed to callback_->OnEncodedImage, to let
// subclasses fill out codec_specific, possibly modify encodedImage.
@@ -88,6 +90,9 @@
EncodedImage* encoded_image,
CodecSpecificInfo* codec_specific);
+ void SetRatesLocked(const RateControlParameters& parameters)
+ RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
+
FrameInfo last_frame_info_ RTC_GUARDED_BY(crit_sect_);
Clock* const clock_;