Propagate base minimum delay to audio_receiver_stream
Bug: webrtc:10287
Change-Id: Id7914976ef5b7eb708802119932b554d9ce4879e
Reviewed-on: https://webrtc-review.googlesource.com/c/121563
Commit-Queue: Ruslan Burakov <kuddai@google.com>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26563}
diff --git a/audio/audio_receive_stream.cc b/audio/audio_receive_stream.cc
index 58eca4f..a6c81fc 100644
--- a/audio/audio_receive_stream.cc
+++ b/audio/audio_receive_stream.cc
@@ -239,6 +239,16 @@
channel_receive_->SetChannelOutputVolumeScaling(gain);
}
+bool AudioReceiveStream::SetBaseMinimumPlayoutDelayMs(int delay_ms) {
+ RTC_DCHECK_RUN_ON(&worker_thread_checker_);
+ return channel_receive_->SetBaseMinimumPlayoutDelayMs(delay_ms);
+}
+
+int AudioReceiveStream::GetBaseMinimumPlayoutDelayMs() const {
+ RTC_DCHECK_RUN_ON(&worker_thread_checker_);
+ return channel_receive_->GetBaseMinimumPlayoutDelayMs();
+}
+
std::vector<RtpSource> AudioReceiveStream::GetSources() const {
RTC_DCHECK_RUN_ON(&worker_thread_checker_);
return channel_receive_->GetSources();
diff --git a/audio/audio_receive_stream.h b/audio/audio_receive_stream.h
index 6596cb4..b6d0aa5 100644
--- a/audio/audio_receive_stream.h
+++ b/audio/audio_receive_stream.h
@@ -64,6 +64,8 @@
webrtc::AudioReceiveStream::Stats GetStats() const override;
void SetSink(AudioSinkInterface* sink) override;
void SetGain(float gain) override;
+ bool SetBaseMinimumPlayoutDelayMs(int delay_ms) override;
+ int GetBaseMinimumPlayoutDelayMs() const override;
std::vector<webrtc::RtpSource> GetSources() const override;
// TODO(nisse): We don't formally implement RtpPacketSinkInterface, and this
diff --git a/audio/channel_receive.cc b/audio/channel_receive.cc
index 9c8aaa6..b899dcf 100644
--- a/audio/channel_receive.cc
+++ b/audio/channel_receive.cc
@@ -144,6 +144,10 @@
void SetMinimumPlayoutDelay(int delayMs) override;
uint32_t GetPlayoutTimestamp() const override;
+ // Audio quality.
+ bool SetBaseMinimumPlayoutDelayMs(int delay_ms) override;
+ int GetBaseMinimumPlayoutDelayMs() const override;
+
// Produces the transport-related timestamps; current_delay_ms is left unset.
absl::optional<Syncable::Info> GetSyncInfo() const override;
@@ -865,6 +869,14 @@
}
}
+bool ChannelReceive::SetBaseMinimumPlayoutDelayMs(int delay_ms) {
+ return audio_coding_->SetBaseMinimumPlayoutDelayMs(delay_ms);
+}
+
+int ChannelReceive::GetBaseMinimumPlayoutDelayMs() const {
+ return audio_coding_->GetBaseMinimumPlayoutDelayMs();
+}
+
absl::optional<Syncable::Info> ChannelReceive::GetSyncInfo() const {
RTC_DCHECK(module_process_thread_checker_.CalledOnValidThread());
Syncable::Info info;
diff --git a/audio/channel_receive.h b/audio/channel_receive.h
index d93ddad..28c7c06 100644
--- a/audio/channel_receive.h
+++ b/audio/channel_receive.h
@@ -102,6 +102,12 @@
virtual void SetMinimumPlayoutDelay(int delay_ms) = 0;
virtual uint32_t GetPlayoutTimestamp() const = 0;
+ // Audio quality.
+ // Base minimum delay sets lower bound on minimum delay value which
+ // determines minimum delay until audio playout.
+ virtual bool SetBaseMinimumPlayoutDelayMs(int delay_ms) = 0;
+ virtual int GetBaseMinimumPlayoutDelayMs() const = 0;
+
// Produces the transport-related timestamps; current_delay_ms is left unset.
virtual absl::optional<Syncable::Info> GetSyncInfo() const = 0;
diff --git a/audio/mock_voe_channel_proxy.h b/audio/mock_voe_channel_proxy.h
index 3aa9bf1..4aea131 100644
--- a/audio/mock_voe_channel_proxy.h
+++ b/audio/mock_voe_channel_proxy.h
@@ -53,6 +53,8 @@
MOCK_CONST_METHOD0(GetPlayoutTimestamp, uint32_t());
MOCK_CONST_METHOD0(GetSyncInfo, absl::optional<Syncable::Info>());
MOCK_METHOD1(SetMinimumPlayoutDelay, void(int delay_ms));
+ MOCK_METHOD1(SetBaseMinimumPlayoutDelayMs, bool(int delay_ms));
+ MOCK_CONST_METHOD0(GetBaseMinimumPlayoutDelayMs, int());
MOCK_CONST_METHOD0(GetReceiveCodec,
absl::optional<std::pair<int, SdpAudioFormat>>());
MOCK_METHOD1(SetReceiveCodecs,
diff --git a/call/audio_receive_stream.h b/call/audio_receive_stream.h
index 88a16ed..64934b4 100644
--- a/call/audio_receive_stream.h
+++ b/call/audio_receive_stream.h
@@ -164,6 +164,15 @@
// is potentially forwarded to any attached AudioSinkInterface implementation.
virtual void SetGain(float gain) = 0;
+ // Sets a base minimum for the playout delay. Base minimum delay sets lower
+ // bound on minimum delay value determining lower bound on playout delay.
+ //
+ // Returns true if value was successfully set, false overwise.
+ virtual bool SetBaseMinimumPlayoutDelayMs(int delay_ms) = 0;
+
+ // Returns current value of base minimum delay in milliseconds.
+ virtual int GetBaseMinimumPlayoutDelayMs() const = 0;
+
virtual std::vector<RtpSource> GetSources() const = 0;
protected:
diff --git a/media/engine/fake_webrtc_call.h b/media/engine/fake_webrtc_call.h
index 4e8aa03..a0147e9 100644
--- a/media/engine/fake_webrtc_call.h
+++ b/media/engine/fake_webrtc_call.h
@@ -104,6 +104,13 @@
webrtc::AudioReceiveStream::Stats GetStats() const override;
void SetSink(webrtc::AudioSinkInterface* sink) override;
void SetGain(float gain) override;
+ bool SetBaseMinimumPlayoutDelayMs(int delay_ms) override {
+ base_minimum_playout_delay_ms_ = delay_ms;
+ return true;
+ }
+ int GetBaseMinimumPlayoutDelayMs() const override {
+ return base_minimum_playout_delay_ms_;
+ }
std::vector<webrtc::RtpSource> GetSources() const override {
return std::vector<webrtc::RtpSource>();
}
@@ -116,6 +123,7 @@
float gain_ = 1.0f;
rtc::Buffer last_packet_;
bool started_ = false;
+ int base_minimum_playout_delay_ms_ = 0;
};
class FakeVideoSendStream final
diff --git a/modules/audio_coding/acm2/audio_coding_module.cc b/modules/audio_coding/acm2/audio_coding_module.cc
index 2ce768b..9e4ac89 100644
--- a/modules/audio_coding/acm2/audio_coding_module.cc
+++ b/modules/audio_coding/acm2/audio_coding_module.cc
@@ -100,6 +100,10 @@
// Maximum playout delay.
int SetMaximumPlayoutDelay(int time_ms) override;
+ bool SetBaseMinimumPlayoutDelayMs(int delay_ms) override;
+
+ int GetBaseMinimumPlayoutDelayMs() const override;
+
absl::optional<uint32_t> PlayoutTimestamp() override;
int FilteredCurrentDelayMs() const override;
@@ -708,6 +712,15 @@
return receiver_.SetMaximumDelay(time_ms);
}
+bool AudioCodingModuleImpl::SetBaseMinimumPlayoutDelayMs(int delay_ms) {
+ // All necessary validation happens on NetEq level.
+ return receiver_.SetBaseMinimumDelayMs(delay_ms);
+}
+
+int AudioCodingModuleImpl::GetBaseMinimumPlayoutDelayMs() const {
+ return receiver_.GetBaseMinimumDelayMs();
+}
+
// Get 10 milliseconds of raw audio data to play out.
// Automatic resample to the requested frequency.
int AudioCodingModuleImpl::PlayoutData10Ms(int desired_freq_hz,
diff --git a/modules/audio_coding/include/audio_coding_module.h b/modules/audio_coding/include/audio_coding_module.h
index 89c3b01..7d11d70 100644
--- a/modules/audio_coding/include/audio_coding_module.h
+++ b/modules/audio_coding/include/audio_coding_module.h
@@ -275,6 +275,15 @@
//
virtual int SetMaximumPlayoutDelay(int time_ms) = 0;
+ // Sets a base minimum for the playout delay. Base minimum delay sets lower
+ // bound minimum delay value which is set via SetMinimumPlayoutDelay.
+ //
+ // Returns true if value was successfully set, false overwise.
+ virtual bool SetBaseMinimumPlayoutDelayMs(int delay_ms) = 0;
+
+ // Returns current value of base minimum delay in milliseconds.
+ virtual int GetBaseMinimumPlayoutDelayMs() const = 0;
+
///////////////////////////////////////////////////////////////////////////
// int32_t PlayoutTimestamp()
// The send timestamp of an RTP packet is associated with the decoded