Make sure that the audio stream is allocated with the correct overhead.

This fixes two cases when the allocation is not updated correctly:
- The frame length range is not updated when audio network adaptor is enabled.
- The per-packet overhead is not updated unless the bitrate observer has been reconfigured.

Bug: webrtc:11001
Change-Id: I2ee25f956741a4be08661f874556582dd60a3bd0
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/169848
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30709}
This commit is contained in:
Jakob Ivarsson 2020-03-06 09:49:29 +01:00 committed by Commit Bot
parent b0f2e0ced4
commit d14525eb59
2 changed files with 16 additions and 8 deletions

View File

@ -338,6 +338,17 @@ void AudioSendStream::ConfigureStream(
RTC_LOG(LS_ERROR) << "Failed to set up send codec state."; RTC_LOG(LS_ERROR) << "Failed to set up send codec state.";
} }
channel_send_->CallEncoder([this](AudioEncoder* encoder) {
if (!encoder) {
return;
}
worker_queue_->PostTask(
[this, length_range = encoder->GetFrameLengthRange()] {
RTC_DCHECK_RUN_ON(worker_queue_);
frame_length_range_ = length_range;
});
});
if (sending_) { if (sending_) {
ReconfigureBitrateObserver(new_config); ReconfigureBitrateObserver(new_config);
} }
@ -635,11 +646,6 @@ bool AudioSendStream::SetupSendCodec(const Config& new_config) {
encoder->OnReceivedOverhead(GetPerPacketOverheadBytes()); encoder->OnReceivedOverhead(GetPerPacketOverheadBytes());
} }
} }
worker_queue_->PostTask(
[this, length_range = encoder->GetFrameLengthRange()] {
RTC_DCHECK_RUN_ON(worker_queue_);
frame_length_range_ = length_range;
});
StoreEncoderProperties(encoder->SampleRateHz(), encoder->NumChannels()); StoreEncoderProperties(encoder->SampleRateHz(), encoder->NumChannels());
channel_send_->SetEncoder(new_config.send_codec_spec->payload_type, channel_send_->SetEncoder(new_config.send_codec_spec->payload_type,
@ -771,7 +777,9 @@ void AudioSendStream::ReconfigureBitrateObserver(
config_.max_bitrate_bps == new_config.max_bitrate_bps && config_.max_bitrate_bps == new_config.max_bitrate_bps &&
config_.bitrate_priority == new_config.bitrate_priority && config_.bitrate_priority == new_config.bitrate_priority &&
(TransportSeqNumId(config_) == TransportSeqNumId(new_config) || (TransportSeqNumId(config_) == TransportSeqNumId(new_config) ||
!audio_send_side_bwe_)) { !audio_send_side_bwe_) &&
config_.audio_network_adaptor_config ==
new_config.audio_network_adaptor_config) {
return; return;
} }
@ -783,7 +791,6 @@ void AudioSendStream::ReconfigureBitrateObserver(
rtc::Event thread_sync_event; rtc::Event thread_sync_event;
worker_queue_->PostTask([&] { worker_queue_->PostTask([&] {
RTC_DCHECK_RUN_ON(worker_queue_); RTC_DCHECK_RUN_ON(worker_queue_);
registered_with_allocator_ = true;
// We may get a callback immediately as the observer is registered, so // We may get a callback immediately as the observer is registered, so
// make // make
// sure the bitrate limits in config_ are up-to-date. // sure the bitrate limits in config_ are up-to-date.
@ -835,6 +842,7 @@ void AudioSendStream::ConfigureBitrateObserver() {
priority_bitrate.bps(), true, priority_bitrate.bps(), true,
allocation_settings_.bitrate_priority.value_or( allocation_settings_.bitrate_priority.value_or(
config_.bitrate_priority)}); config_.bitrate_priority)});
registered_with_allocator_ = true;
} }
void AudioSendStream::RemoveBitrateObserver() { void AudioSendStream::RemoveBitrateObserver() {

View File

@ -162,6 +162,7 @@ struct ConfigHelper {
SetupDefaultChannelSend(audio_bwe_enabled); SetupDefaultChannelSend(audio_bwe_enabled);
SetupMockForSetupSendCodec(expect_set_encoder_call); SetupMockForSetupSendCodec(expect_set_encoder_call);
SetupMockForCallEncoder();
// Use ISAC as default codec so as to prevent unnecessary |channel_proxy_| // Use ISAC as default codec so as to prevent unnecessary |channel_proxy_|
// calls from the default ctor behavior. // calls from the default ctor behavior.
@ -514,7 +515,6 @@ TEST(AudioSendStreamTest, SendCodecAppliesAudioNetworkAdaptor) {
auto stream_config = helper.config(); auto stream_config = helper.config();
stream_config.audio_network_adaptor_config = kAnaReconfigString; stream_config.audio_network_adaptor_config = kAnaReconfigString;
helper.SetupMockForCallEncoder();
send_stream->Reconfigure(stream_config); send_stream->Reconfigure(stream_config);
} }