Reduce redundant flags for audio stream playout state.
Bug: none
Change-Id: Idbcb19cf415dd1fadfe54d01294bb62b8ba9012f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/202244
Reviewed-by: Jakob Ivarsson <jakobi@webrtc.org>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33015}
diff --git a/audio/audio_receive_stream.cc b/audio/audio_receive_stream.cc
index 54c8a02..d6f6140 100644
--- a/audio/audio_receive_stream.cc
+++ b/audio/audio_receive_stream.cc
@@ -173,6 +173,11 @@
audio_state()->RemoveReceivingStream(this);
}
+bool AudioReceiveStream::IsRunning() const {
+ RTC_DCHECK_RUN_ON(&worker_thread_checker_);
+ return playing_;
+}
+
webrtc::AudioReceiveStream::Stats AudioReceiveStream::GetStats(
bool get_and_clear_legacy_stats) const {
RTC_DCHECK_RUN_ON(&worker_thread_checker_);
diff --git a/audio/audio_receive_stream.h b/audio/audio_receive_stream.h
index 32f8b60..7cafc38 100644
--- a/audio/audio_receive_stream.h
+++ b/audio/audio_receive_stream.h
@@ -71,6 +71,8 @@
void Reconfigure(const webrtc::AudioReceiveStream::Config& config) override;
void Start() override;
void Stop() override;
+ bool IsRunning() const override;
+
webrtc::AudioReceiveStream::Stats GetStats(
bool get_and_clear_legacy_stats) const override;
void SetSink(AudioSinkInterface* sink) override;
diff --git a/call/audio_receive_stream.h b/call/audio_receive_stream.h
index eee62e9..c53791e 100644
--- a/call/audio_receive_stream.h
+++ b/call/audio_receive_stream.h
@@ -167,6 +167,9 @@
// When a stream is stopped, it can't receive, process or deliver packets.
virtual void Stop() = 0;
+ // Returns true if the stream has been started.
+ virtual bool IsRunning() const = 0;
+
virtual Stats GetStats(bool get_and_clear_legacy_stats) const = 0;
Stats GetStats() { return GetStats(/*get_and_clear_legacy_stats=*/true); }
diff --git a/media/engine/fake_webrtc_call.h b/media/engine/fake_webrtc_call.h
index 385bbcd7..b0d797b 100644
--- a/media/engine/fake_webrtc_call.h
+++ b/media/engine/fake_webrtc_call.h
@@ -104,6 +104,7 @@
void Reconfigure(const webrtc::AudioReceiveStream::Config& config) override;
void Start() override { started_ = true; }
void Stop() override { started_ = false; }
+ bool IsRunning() const override { return started_; }
webrtc::AudioReceiveStream::Stats GetStats(
bool get_and_clear_legacy_stats) const override;
diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc
index 2ed78b4..72871d2 100644
--- a/media/engine/webrtc_voice_engine.cc
+++ b/media/engine/webrtc_voice_engine.cc
@@ -1304,7 +1304,6 @@
} else {
stream_->Stop();
}
- playout_ = playout;
}
bool SetBaseMinimumPlayoutDelayMs(int delay_ms) {
@@ -1355,13 +1354,16 @@
private:
void RecreateAudioReceiveStream() {
RTC_DCHECK(worker_thread_checker_.IsCurrent());
+ bool was_running = false;
if (stream_) {
+ was_running = stream_->IsRunning();
call_->DestroyAudioReceiveStream(stream_);
}
stream_ = call_->CreateAudioReceiveStream(config_);
RTC_CHECK(stream_);
stream_->SetGain(output_volume_);
- SetPlayout(playout_);
+ if (was_running)
+ SetPlayout(was_running);
stream_->SetSink(raw_audio_sink_.get());
}
@@ -1377,7 +1379,6 @@
// The stream is owned by WebRtcAudioReceiveStream and may be reallocated if
// configuration changes.
webrtc::AudioReceiveStream* stream_ = nullptr;
- bool playout_ = false;
float output_volume_ = 1.0;
std::unique_ptr<webrtc::AudioSinkInterface> raw_audio_sink_;
};
@@ -1689,21 +1690,22 @@
return true;
}
- if (playout_) {
- // Receive codecs can not be changed while playing. So we temporarily
- // pause playout.
- ChangePlayout(false);
- }
+ bool playout_enabled = playout_;
+ // Receive codecs can not be changed while playing. So we temporarily
+ // pause playout.
+ SetPlayout(false);
+ RTC_DCHECK(!playout_);
decoder_map_ = std::move(decoder_map);
for (auto& kv : recv_streams_) {
kv.second->SetDecoderMap(decoder_map_);
}
+
recv_codecs_ = codecs;
- if (desired_playout_ && !playout_) {
- ChangePlayout(desired_playout_);
- }
+ SetPlayout(playout_enabled);
+ RTC_DCHECK_EQ(playout_, playout_enabled);
+
return true;
}
@@ -1858,12 +1860,7 @@
}
void WebRtcVoiceMediaChannel::SetPlayout(bool playout) {
- desired_playout_ = playout;
- return ChangePlayout(desired_playout_);
-}
-
-void WebRtcVoiceMediaChannel::ChangePlayout(bool playout) {
- TRACE_EVENT0("webrtc", "WebRtcVoiceMediaChannel::ChangePlayout");
+ TRACE_EVENT0("webrtc", "WebRtcVoiceMediaChannel::SetPlayout");
RTC_DCHECK(worker_thread_checker_.IsCurrent());
if (playout_ == playout) {
return;
diff --git a/media/engine/webrtc_voice_engine.h b/media/engine/webrtc_voice_engine.h
index c2da3b9..81254e3 100644
--- a/media/engine/webrtc_voice_engine.h
+++ b/media/engine/webrtc_voice_engine.h
@@ -276,7 +276,6 @@
bool MuteStream(uint32_t ssrc, bool mute);
WebRtcVoiceEngine* engine() { return engine_; }
- void ChangePlayout(bool playout);
int CreateVoEChannel();
bool DeleteVoEChannel(int channel);
bool SetMaxSendBitrate(int bps);
@@ -301,7 +300,6 @@
int dtmf_payload_freq_ = -1;
bool recv_transport_cc_enabled_ = false;
bool recv_nack_enabled_ = false;
- bool desired_playout_ = false;
bool playout_ = false;
bool send_ = false;
webrtc::Call* const call_ = nullptr;