Index: webrtc/media/engine/webrtcvoiceengine.cc |
diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc |
index 9636ff32fc4fc98a21402e6d11c4d1433da6ed10..71803cbee38c845e1cf4afbfa90c15ca94f062e3 100644 |
--- a/webrtc/media/engine/webrtcvoiceengine.cc |
+++ b/webrtc/media/engine/webrtcvoiceengine.cc |
@@ -1705,6 +1705,12 @@ |
return true; |
} |
+ if (playout_) { |
+ // Receive codecs can not be changed while playing. So we temporarily |
+ // pause playout. |
+ ChangePlayout(false); |
+ } |
+ |
bool result = true; |
for (const AudioCodec& codec : new_codecs) { |
webrtc::CodecInst voe_codec = {0}; |
@@ -1729,6 +1735,9 @@ |
recv_codecs_ = codecs; |
} |
+ if (desired_playout_ && !playout_) { |
+ ChangePlayout(desired_playout_); |
+ } |
return result; |
} |
@@ -1983,7 +1992,12 @@ |
} |
void WebRtcVoiceMediaChannel::SetPlayout(bool playout) { |
- TRACE_EVENT0("webrtc", "WebRtcVoiceMediaChannel::SetPlayout"); |
+ desired_playout_ = playout; |
+ return ChangePlayout(desired_playout_); |
+} |
+ |
+void WebRtcVoiceMediaChannel::ChangePlayout(bool playout) { |
+ TRACE_EVENT0("webrtc", "WebRtcVoiceMediaChannel::ChangePlayout"); |
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
if (playout_ == playout) { |
return; |