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:

committed by
Commit Bot

parent
f36f5e8806
commit
413ccc49ec
@ -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,8 +629,10 @@ 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_);
|
||||||
|
if (stream->GetPerPacketOverheadBytes() > 0) {
|
||||||
encoder->OnReceivedOverhead(stream->GetPerPacketOverheadBytes());
|
encoder->OnReceivedOverhead(stream->GetPerPacketOverheadBytes());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
stream->StoreEncoderProperties(encoder->SampleRateHz(),
|
stream->StoreEncoderProperties(encoder->SampleRateHz(),
|
||||||
encoder->NumChannels());
|
encoder->NumChannels());
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,9 +43,11 @@ 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) {
|
||||||
// Decision on |bitrate_bps| should not have been made.
|
// Decision on |bitrate_bps| should not have been made.
|
||||||
|
Reference in New Issue
Block a user