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}
This commit is contained in:
Markus Handell 2020-05-18 23:15:21 +02:00 committed by Commit Bot
parent fde94a72d1
commit 409784d0c4
2 changed files with 20 additions and 11 deletions

View File

@ -69,7 +69,7 @@ void FakeEncoder::SetMaxBitrate(int max_kbps) {
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 @@ int32_t FakeEncoder::Release() {
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();

View File

@ -40,21 +40,23 @@ class FakeEncoder : public VideoEncoder {
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 @@ class FakeEncoder : public VideoEncoder {
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 @@ class FakeEncoder : public VideoEncoder {
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_;