Call OnReceivedOverhead after audio network adaptor is created.

This prevents ending up in a state where audio network adaptor never
receives the current packet overhead and therefore doesn't work.

Bug: chromium:1086942
Change-Id: I8ee2ffbb7741b342b3ec93fc89f2859a146f4ba7
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/181583
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31951}
This commit is contained in:
Jakob Ivarsson 2020-08-14 11:21:20 +02:00 committed by Commit Bot
parent 7dbcf9923f
commit a135557b3c
3 changed files with 52 additions and 0 deletions

View File

@ -739,6 +739,11 @@ void AudioSendStream::ReconfigureANA(const Config& new_config) {
*new_config.audio_network_adaptor_config, event_log_)) {
RTC_LOG(LS_INFO) << "Audio network adaptor enabled on SSRC "
<< new_config.rtp.ssrc;
MutexLock lock(&overhead_per_packet_lock_);
size_t overhead = GetPerPacketOverheadBytes();
if (overhead > 0) {
encoder->OnReceivedOverhead(overhead);
}
} else {
RTC_LOG(LS_INFO) << "Failed to enable Audio network adaptor on SSRC "
<< new_config.rtp.ssrc;

View File

@ -45,6 +45,7 @@ using ::testing::_;
using ::testing::AnyNumber;
using ::testing::Eq;
using ::testing::Field;
using ::testing::InSequence;
using ::testing::Invoke;
using ::testing::Ne;
using ::testing::Return;
@ -556,6 +557,48 @@ TEST(AudioSendStreamTest, SendCodecAppliesAudioNetworkAdaptor) {
}
}
TEST(AudioSendStreamTest, AudioNetworkAdaptorReceivesOverhead) {
for (bool use_null_audio_processing : {false, true}) {
ConfigHelper helper(false, true, use_null_audio_processing);
helper.config().send_codec_spec =
AudioSendStream::Config::SendCodecSpec(0, kOpusFormat);
const std::string kAnaConfigString = "abcde";
helper.config().rtp.extensions.push_back(RtpExtension(
RtpExtension::kTransportSequenceNumberUri, kTransportSequenceNumberId));
EXPECT_CALL(helper.mock_encoder_factory(), MakeAudioEncoderMock(_, _, _, _))
.WillOnce(Invoke(
[&kAnaConfigString](int payload_type, const SdpAudioFormat& format,
absl::optional<AudioCodecPairId> codec_pair_id,
std::unique_ptr<AudioEncoder>* return_value) {
auto mock_encoder = SetupAudioEncoderMock(payload_type, format);
InSequence s;
EXPECT_CALL(
*mock_encoder,
OnReceivedOverhead(Eq(kOverheadPerPacket.bytes<size_t>())))
.Times(2);
EXPECT_CALL(*mock_encoder,
EnableAudioNetworkAdaptor(StrEq(kAnaConfigString), _))
.WillOnce(Return(true));
// Note: Overhead is received AFTER ANA has been enabled.
EXPECT_CALL(
*mock_encoder,
OnReceivedOverhead(Eq(kOverheadPerPacket.bytes<size_t>())))
.WillOnce(Return());
*return_value = std::move(mock_encoder);
}));
EXPECT_CALL(*helper.rtp_rtcp(), ExpectedPerPacketOverhead)
.WillRepeatedly(Return(kOverheadPerPacket.bytes<size_t>()));
auto send_stream = helper.CreateAudioSendStream();
auto stream_config = helper.config();
stream_config.audio_network_adaptor_config = kAnaConfigString;
send_stream->Reconfigure(stream_config);
}
}
// VAD is applied when codec is mono and the CNG frequency matches the codec
// clock rate.
TEST(AudioSendStreamTest, SendCodecCanApplyVad) {

View File

@ -48,6 +48,10 @@ class MockAudioEncoder : public AudioEncoder {
OnReceivedUplinkPacketLossFraction,
(float uplink_packet_loss_fraction),
(override));
MOCK_METHOD(void,
OnReceivedOverhead,
(size_t overhead_bytes_per_packet),
(override));
MOCK_METHOD(bool,
EnableAudioNetworkAdaptor,