Adds CallEncoder to ChannelSend.
Since it's a common pattern it makes sense to explicitly provide the interface rather than reimplementing it every time it's used. Bug: webrtc:9883 Change-Id: I4dca84bd7c8616fcbcbaba511718671a3668e743 Reviewed-on: https://webrtc-review.googlesource.com/c/122300 Commit-Queue: Sebastian Jansson <srte@webrtc.org> Reviewed-by: Oskar Sundbom <ossu@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26664}
This commit is contained in:
parent
cbf5949fff
commit
14a7cf9ba7
@ -48,14 +48,6 @@ constexpr size_t kPacketLossTrackerMaxWindowSizeMs = 15000;
|
||||
constexpr size_t kPacketLossRateMinNumAckedPackets = 50;
|
||||
constexpr size_t kRecoverablePacketLossRateMinNumAckedPairs = 40;
|
||||
|
||||
void CallEncoder(const std::unique_ptr<voe::ChannelSendInterface>& channel_send,
|
||||
rtc::FunctionView<void(AudioEncoder*)> lambda) {
|
||||
channel_send->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder_ptr) {
|
||||
RTC_DCHECK(encoder_ptr);
|
||||
lambda(encoder_ptr->get());
|
||||
});
|
||||
}
|
||||
|
||||
void UpdateEventLogStreamConfig(RtcEventLog* event_log,
|
||||
const AudioSendStream::Config& config,
|
||||
const AudioSendStream::Config* old_config) {
|
||||
@ -506,10 +498,8 @@ void AudioSendStream::OnOverheadChanged(
|
||||
|
||||
void AudioSendStream::UpdateOverheadForEncoder() {
|
||||
const size_t overhead_per_packet_bytes = GetPerPacketOverheadBytes();
|
||||
CallEncoder(channel_send_, [&](AudioEncoder* encoder) {
|
||||
if (encoder) {
|
||||
encoder->OnReceivedOverhead(overhead_per_packet_bytes);
|
||||
}
|
||||
channel_send_->CallEncoder([&](AudioEncoder* encoder) {
|
||||
encoder->OnReceivedOverhead(overhead_per_packet_bytes);
|
||||
});
|
||||
}
|
||||
|
||||
@ -657,7 +647,7 @@ bool AudioSendStream::ReconfigureSendCodec(AudioSendStream* stream,
|
||||
new_target_bitrate_bps &&
|
||||
new_target_bitrate_bps !=
|
||||
old_config.send_codec_spec->target_bitrate_bps) {
|
||||
CallEncoder(stream->channel_send_, [&](AudioEncoder* encoder) {
|
||||
stream->channel_send_->CallEncoder([&](AudioEncoder* encoder) {
|
||||
encoder->OnReceivedTargetAudioBitrate(*new_target_bitrate_bps);
|
||||
});
|
||||
}
|
||||
@ -681,7 +671,7 @@ void AudioSendStream::ReconfigureANA(AudioSendStream* stream,
|
||||
return;
|
||||
}
|
||||
if (new_config.audio_network_adaptor_config) {
|
||||
CallEncoder(stream->channel_send_, [&](AudioEncoder* encoder) {
|
||||
stream->channel_send_->CallEncoder([&](AudioEncoder* encoder) {
|
||||
if (encoder->EnableAudioNetworkAdaptor(
|
||||
*new_config.audio_network_adaptor_config, stream->event_log_)) {
|
||||
RTC_DLOG(LS_INFO) << "Audio network adaptor enabled on SSRC "
|
||||
@ -691,9 +681,8 @@ void AudioSendStream::ReconfigureANA(AudioSendStream* stream,
|
||||
}
|
||||
});
|
||||
} else {
|
||||
CallEncoder(stream->channel_send_, [&](AudioEncoder* encoder) {
|
||||
encoder->DisableAudioNetworkAdaptor();
|
||||
});
|
||||
stream->channel_send_->CallEncoder(
|
||||
[&](AudioEncoder* encoder) { encoder->DisableAudioNetworkAdaptor(); });
|
||||
RTC_DLOG(LS_INFO) << "Audio network adaptor disabled on SSRC "
|
||||
<< new_config.rtp.ssrc;
|
||||
}
|
||||
|
||||
@ -222,14 +222,13 @@ struct ConfigHelper {
|
||||
}
|
||||
}
|
||||
|
||||
void SetupMockForModifyEncoder() {
|
||||
void SetupMockForCallEncoder() {
|
||||
// Let ModifyEncoder to invoke mock audio encoder.
|
||||
EXPECT_CALL(*channel_send_, ModifyEncoder(_))
|
||||
EXPECT_CALL(*channel_send_, CallEncoder(_))
|
||||
.WillRepeatedly(
|
||||
[this](rtc::FunctionView<void(std::unique_ptr<AudioEncoder>*)>
|
||||
modifier) {
|
||||
[this](rtc::FunctionView<void(AudioEncoder*)> modifier) {
|
||||
if (this->audio_encoder_)
|
||||
modifier(&this->audio_encoder_);
|
||||
modifier(this->audio_encoder_.get());
|
||||
});
|
||||
}
|
||||
|
||||
@ -426,7 +425,7 @@ TEST(AudioSendStreamTest, SendCodecAppliesAudioNetworkAdaptor) {
|
||||
auto stream_config = helper.config();
|
||||
stream_config.audio_network_adaptor_config = kAnaReconfigString;
|
||||
|
||||
helper.SetupMockForModifyEncoder();
|
||||
helper.SetupMockForCallEncoder();
|
||||
send_stream->Reconfigure(stream_config);
|
||||
}
|
||||
|
||||
@ -521,8 +520,8 @@ TEST(AudioSendStreamTest, ReconfigureTransportCcResetsFirst) {
|
||||
.Times(1);
|
||||
}
|
||||
|
||||
// ModifyEncoder will be called to re-set overhead.
|
||||
EXPECT_CALL(*helper.channel_send(), ModifyEncoder(testing::_)).Times(1);
|
||||
// CallEncoder will be called to re-set overhead.
|
||||
EXPECT_CALL(*helper.channel_send(), CallEncoder(testing::_)).Times(1);
|
||||
|
||||
send_stream->Reconfigure(new_config);
|
||||
}
|
||||
@ -532,8 +531,8 @@ TEST(AudioSendStreamTest, OnTransportOverheadChanged) {
|
||||
auto send_stream = helper.CreateAudioSendStream();
|
||||
auto new_config = helper.config();
|
||||
|
||||
// ModifyEncoder will be called on overhead change.
|
||||
EXPECT_CALL(*helper.channel_send(), ModifyEncoder(testing::_)).Times(1);
|
||||
// CallEncoder will be called on overhead change.
|
||||
EXPECT_CALL(*helper.channel_send(), CallEncoder(testing::_)).Times(1);
|
||||
|
||||
const size_t transport_overhead_per_packet_bytes = 333;
|
||||
send_stream->SetTransportOverhead(transport_overhead_per_packet_bytes);
|
||||
@ -547,8 +546,8 @@ TEST(AudioSendStreamTest, OnAudioOverheadChanged) {
|
||||
auto send_stream = helper.CreateAudioSendStream();
|
||||
auto new_config = helper.config();
|
||||
|
||||
// ModifyEncoder will be called on overhead change.
|
||||
EXPECT_CALL(*helper.channel_send(), ModifyEncoder(testing::_)).Times(1);
|
||||
// CallEncoder will be called on overhead change.
|
||||
EXPECT_CALL(*helper.channel_send(), CallEncoder(testing::_)).Times(1);
|
||||
|
||||
const size_t audio_overhead_per_packet_bytes = 555;
|
||||
send_stream->OnOverheadChanged(audio_overhead_per_packet_bytes);
|
||||
@ -561,8 +560,8 @@ TEST(AudioSendStreamTest, OnAudioAndTransportOverheadChanged) {
|
||||
auto send_stream = helper.CreateAudioSendStream();
|
||||
auto new_config = helper.config();
|
||||
|
||||
// ModifyEncoder will be called when each of overhead changes.
|
||||
EXPECT_CALL(*helper.channel_send(), ModifyEncoder(testing::_)).Times(2);
|
||||
// CallEncoder will be called when each of overhead changes.
|
||||
EXPECT_CALL(*helper.channel_send(), CallEncoder(testing::_)).Times(2);
|
||||
|
||||
const size_t transport_overhead_per_packet_bytes = 333;
|
||||
send_stream->SetTransportOverhead(transport_overhead_per_packet_bytes);
|
||||
|
||||
@ -105,6 +105,7 @@ class ChannelSend
|
||||
std::unique_ptr<AudioEncoder> encoder) override;
|
||||
void ModifyEncoder(rtc::FunctionView<void(std::unique_ptr<AudioEncoder>*)>
|
||||
modifier) override;
|
||||
void CallEncoder(rtc::FunctionView<void(AudioEncoder*)> modifier) override;
|
||||
|
||||
// API methods
|
||||
void StartSend() override;
|
||||
@ -811,6 +812,16 @@ void ChannelSend::ModifyEncoder(
|
||||
audio_coding_->ModifyEncoder(modifier);
|
||||
}
|
||||
|
||||
void ChannelSend::CallEncoder(rtc::FunctionView<void(AudioEncoder*)> modifier) {
|
||||
ModifyEncoder([modifier](std::unique_ptr<AudioEncoder>* encoder_ptr) {
|
||||
if (*encoder_ptr) {
|
||||
modifier(encoder_ptr->get());
|
||||
} else {
|
||||
RTC_DLOG(LS_WARNING) << "Trying to call unset encoder.";
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void ChannelSend::OnBitrateAllocation(BitrateAllocationUpdate update) {
|
||||
// This method can be called on the worker thread, module process thread
|
||||
// or on a TaskQueue via VideoSendStreamImpl::OnEncoderConfigurationChanged.
|
||||
@ -820,10 +831,8 @@ void ChannelSend::OnBitrateAllocation(BitrateAllocationUpdate update) {
|
||||
// module_process_thread_checker_.CalledOnValidThread());
|
||||
rtc::CritScope lock(&bitrate_crit_section_);
|
||||
|
||||
audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) {
|
||||
if (*encoder) {
|
||||
(*encoder)->OnReceivedUplinkAllocation(update);
|
||||
}
|
||||
CallEncoder([&](AudioEncoder* encoder) {
|
||||
encoder->OnReceivedUplinkAllocation(update);
|
||||
});
|
||||
retransmission_rate_limiter_->SetMaxRate(update.target_bitrate.bps());
|
||||
configured_bitrate_bps_ = update.target_bitrate.bps();
|
||||
@ -838,31 +847,25 @@ void ChannelSend::OnTwccBasedUplinkPacketLossRate(float packet_loss_rate) {
|
||||
RTC_DCHECK_RUN_ON(&worker_thread_checker_);
|
||||
if (!use_twcc_plr_for_ana_)
|
||||
return;
|
||||
audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) {
|
||||
if (*encoder) {
|
||||
(*encoder)->OnReceivedUplinkPacketLossFraction(packet_loss_rate);
|
||||
}
|
||||
CallEncoder([&](AudioEncoder* encoder) {
|
||||
encoder->OnReceivedUplinkPacketLossFraction(packet_loss_rate);
|
||||
});
|
||||
}
|
||||
|
||||
void ChannelSend::OnRecoverableUplinkPacketLossRate(
|
||||
float recoverable_packet_loss_rate) {
|
||||
RTC_DCHECK_RUN_ON(&worker_thread_checker_);
|
||||
audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) {
|
||||
if (*encoder) {
|
||||
(*encoder)->OnReceivedUplinkRecoverablePacketLossFraction(
|
||||
recoverable_packet_loss_rate);
|
||||
}
|
||||
CallEncoder([&](AudioEncoder* encoder) {
|
||||
encoder->OnReceivedUplinkRecoverablePacketLossFraction(
|
||||
recoverable_packet_loss_rate);
|
||||
});
|
||||
}
|
||||
|
||||
void ChannelSend::OnUplinkPacketLossRate(float packet_loss_rate) {
|
||||
if (use_twcc_plr_for_ana_)
|
||||
return;
|
||||
audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) {
|
||||
if (*encoder) {
|
||||
(*encoder)->OnReceivedUplinkPacketLossFraction(packet_loss_rate);
|
||||
}
|
||||
CallEncoder([&](AudioEncoder* encoder) {
|
||||
encoder->OnReceivedUplinkPacketLossFraction(packet_loss_rate);
|
||||
});
|
||||
}
|
||||
|
||||
@ -1222,12 +1225,8 @@ void ChannelSend::OnTargetTransferRate(TargetTransferRate rate) {
|
||||
|
||||
void ChannelSend::OnReceivedRtt(int64_t rtt_ms) {
|
||||
// Invoke audio encoders OnReceivedRtt().
|
||||
audio_coding_->ModifyEncoder(
|
||||
[rtt_ms](std::unique_ptr<AudioEncoder>* encoder) {
|
||||
if (*encoder) {
|
||||
(*encoder)->OnReceivedRtt(rtt_ms);
|
||||
}
|
||||
});
|
||||
CallEncoder(
|
||||
[rtt_ms](AudioEncoder* encoder) { encoder->OnReceivedRtt(rtt_ms); });
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
@ -63,6 +63,7 @@ class ChannelSendInterface {
|
||||
std::unique_ptr<AudioEncoder> encoder) = 0;
|
||||
virtual void ModifyEncoder(
|
||||
rtc::FunctionView<void(std::unique_ptr<AudioEncoder>*)> modifier) = 0;
|
||||
virtual void CallEncoder(rtc::FunctionView<void(AudioEncoder*)> modifier) = 0;
|
||||
|
||||
virtual void SetLocalSSRC(uint32_t ssrc) = 0;
|
||||
// Use 0 to indicate that the extension should not be registered.
|
||||
|
||||
@ -76,6 +76,8 @@ class MockChannelSend : public voe::ChannelSendInterface {
|
||||
MOCK_METHOD1(
|
||||
ModifyEncoder,
|
||||
void(rtc::FunctionView<void(std::unique_ptr<AudioEncoder>*)> modifier));
|
||||
MOCK_METHOD1(CallEncoder,
|
||||
void(rtc::FunctionView<void(AudioEncoder*)> modifier));
|
||||
MOCK_METHOD3(SetRid,
|
||||
void(const std::string& rid,
|
||||
int extension_id,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user