Stop DCHECK which occurs in ANA BitrateController when overhead is zero.

https://webrtc-review.googlesource.com/c/src/+/119121 added two calls to set the observed overhead.  Both SetupSendCodec() and ReconfigureSendCodec() update the encoder's overhead.  However, these calls happen before RTP has issued any callbacks to set the overhead, so they tell the encoder that the overhead is zero.

This change checks whether the overhead has been set to a non-zero value before each of the new calls and adds a DCHECK to quickly catch future cases which attempt to set overhead to zero.

Bug: webrtc:10150
Change-Id: Ieb3345ecfcda1cf25538d5d424383df17a71b4a2
TBR: solenberg@webrtc.org
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/134260
Commit-Queue: Bjorn Mellem <mellem@webrtc.org>
Reviewed-by: Anton Sukhanov <sukhanov@webrtc.org>
Reviewed-by: Minyue Li <minyue@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27793}
This commit is contained in:
Bjorn A Mellem
2019-04-26 15:41:05 -07:00
committed by Commit Bot
parent f36f5e8806
commit 413ccc49ec
3 changed files with 9 additions and 5 deletions

View File

@ -517,6 +517,9 @@ void AudioSendStream::OnOverheadChanged(
void AudioSendStream::UpdateOverheadForEncoder() { void AudioSendStream::UpdateOverheadForEncoder() {
const size_t overhead_per_packet_bytes = GetPerPacketOverheadBytes(); const size_t overhead_per_packet_bytes = GetPerPacketOverheadBytes();
if (overhead_per_packet_bytes == 0) {
return; // Overhead is not known yet, do not tell the encoder.
}
channel_send_->CallEncoder([&](AudioEncoder* encoder) { channel_send_->CallEncoder([&](AudioEncoder* encoder) {
encoder->OnReceivedOverhead(overhead_per_packet_bytes); encoder->OnReceivedOverhead(overhead_per_packet_bytes);
}); });
@ -626,7 +629,9 @@ bool AudioSendStream::SetupSendCodec(AudioSendStream* stream,
// If overhead changes later, it will be updated in UpdateOverheadForEncoder. // If overhead changes later, it will be updated in UpdateOverheadForEncoder.
{ {
rtc::CritScope cs(&stream->overhead_per_packet_lock_); rtc::CritScope cs(&stream->overhead_per_packet_lock_);
encoder->OnReceivedOverhead(stream->GetPerPacketOverheadBytes()); if (stream->GetPerPacketOverheadBytes() > 0) {
encoder->OnReceivedOverhead(stream->GetPerPacketOverheadBytes());
}
} }
stream->StoreEncoderProperties(encoder->SampleRateHz(), stream->StoreEncoderProperties(encoder->SampleRateHz(),

View File

@ -536,9 +536,6 @@ TEST(AudioSendStreamTest, ReconfigureTransportCcResetsFirst) {
.Times(1); .Times(1);
} }
// CallEncoder will be called to re-set overhead.
EXPECT_CALL(*helper.channel_send(), CallEncoder(::testing::_)).Times(1);
send_stream->Reconfigure(new_config); send_stream->Reconfigure(new_config);
} }

View File

@ -43,8 +43,10 @@ void BitrateController::UpdateNetworkMetrics(
const NetworkMetrics& network_metrics) { const NetworkMetrics& network_metrics) {
if (network_metrics.target_audio_bitrate_bps) if (network_metrics.target_audio_bitrate_bps)
target_audio_bitrate_bps_ = network_metrics.target_audio_bitrate_bps; target_audio_bitrate_bps_ = network_metrics.target_audio_bitrate_bps;
if (network_metrics.overhead_bytes_per_packet) if (network_metrics.overhead_bytes_per_packet) {
RTC_DCHECK_GT(*network_metrics.overhead_bytes_per_packet, 0);
overhead_bytes_per_packet_ = network_metrics.overhead_bytes_per_packet; overhead_bytes_per_packet_ = network_metrics.overhead_bytes_per_packet;
}
} }
void BitrateController::MakeDecision(AudioEncoderRuntimeConfig* config) { void BitrateController::MakeDecision(AudioEncoderRuntimeConfig* config) {