Revert of Removed the legacy behavior of stopping playout when setting new receive codecs. (patchset #1 id:1 of https://codereview.webrtc.org/2409483003/ )

Reason for revert:
Reverting because of the reasons given in comment #16:

"This change breaks a scenario that is unfortunately not covered by unit tests,
but can easily happen in a real call.

The scenario that is broken by the change is this:
1. A sends an offer to B, with a set of codecs C_a (which is a subset of C_b,
the codecs supported by B)
2. B responds with an answer, and sets the receive codecs to C_a.
3. At a later time, B generates a new offer which by default includes all codecs
in C_b.
4. B calls SetLocalDescription() with this offer, that adds new receive codecs.
5. Adding the new codecs fails, because of the check at
https://cs.chromium.org/chromium/src/third_party/webrtc/voice_engine/channel.....
This causes SetLocalDescription() itself to fail. The net effect is that B
cannot set a local description it just generated.

Before the CL mentioned above, we'd stop playout before changing the codecs, and
the operation would succeed."

Original issue's description:
> Removed the legacy behavior of stopping playout when setting new receive codecs.
>
> BUG=webrtc:4690
>
> Committed: https://crrev.com/917d4e1e7131f35764cff932a8793151585e8179
> Cr-Commit-Position: refs/heads/master@{#14610}

TBR=solenberg@webrtc.org
# Not skipping CQ checks because original CL landed more than 1 days ago.
BUG=webrtc:4690

Review-Url: https://codereview.webrtc.org/2478433003
Cr-Commit-Position: refs/heads/master@{#14905}
This commit is contained in:
kwiberg 2016-11-03 02:46:53 -07:00 committed by Commit bot
parent af38847c02
commit 37b8b11661
2 changed files with 17 additions and 1 deletions

View File

@ -1801,6 +1801,12 @@ bool WebRtcVoiceMediaChannel::SetRecvCodecs(
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};
@ -1825,6 +1831,9 @@ bool WebRtcVoiceMediaChannel::SetRecvCodecs(
recv_codecs_ = codecs;
}
if (desired_playout_ && !playout_) {
ChangePlayout(desired_playout_);
}
return result;
}
@ -1953,7 +1962,12 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs(
}
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;

View File

@ -226,6 +226,7 @@ class WebRtcVoiceMediaChannel final : public VoiceMediaChannel,
WebRtcVoiceEngine* engine() { return engine_; }
int GetLastEngineError() { return engine()->GetLastEngineError(); }
int GetOutputLevel(int channel);
void ChangePlayout(bool playout);
int CreateVoEChannel();
bool DeleteVoEChannel(int channel);
bool IsDefaultRecvStream(uint32_t ssrc) {
@ -243,6 +244,7 @@ class WebRtcVoiceMediaChannel final : public VoiceMediaChannel,
int max_send_bitrate_bps_ = 0;
AudioOptions options_;
rtc::Optional<int> dtmf_payload_type_;
bool desired_playout_ = false;
bool recv_transport_cc_enabled_ = false;
bool recv_nack_enabled_ = false;
bool playout_ = false;