Reland "Call OnReceivedOverhead after audio network adaptor is created."
Potential deadlock fixed by acquiring lock before calling encoder.
This is a reland of a135557b3c7ffa4fb1710d2d907c3cb86c5d5913
Original change's description:
> 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}
Bug: chromium:1086942
Change-Id: I514e523c6607cee0099b87919f0f77ebec966ddd
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/181888
Reviewed-by: Per Åhgren <peah@webrtc.org>
Reviewed-by: Minyue Li <minyue@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31971}
diff --git a/audio/audio_send_stream.cc b/audio/audio_send_stream.cc
index 24f8ce9..3fcdbf4 100644
--- a/audio/audio_send_stream.cc
+++ b/audio/audio_send_stream.cc
@@ -734,11 +734,19 @@
return;
}
if (new_config.audio_network_adaptor_config) {
+ // This lock needs to be acquired before CallEncoder, since it aquires
+ // another lock and we need to maintain the same order at all call sites to
+ // avoid deadlock.
+ MutexLock lock(&overhead_per_packet_lock_);
+ size_t overhead = GetPerPacketOverheadBytes();
channel_send_->CallEncoder([&](AudioEncoder* encoder) {
if (encoder->EnableAudioNetworkAdaptor(
*new_config.audio_network_adaptor_config, event_log_)) {
RTC_LOG(LS_INFO) << "Audio network adaptor enabled on SSRC "
<< new_config.rtp.ssrc;
+ if (overhead > 0) {
+ encoder->OnReceivedOverhead(overhead);
+ }
} else {
RTC_LOG(LS_INFO) << "Failed to enable Audio network adaptor on SSRC "
<< new_config.rtp.ssrc;