| Index: webrtc/voice_engine/channel.cc
|
| diff --git a/webrtc/voice_engine/channel.cc b/webrtc/voice_engine/channel.cc
|
| index 68f2e2d95c34e2ece65ed4008c57b716994e3a91..5231691b552d62b11eccee9e874b517058522388 100644
|
| --- a/webrtc/voice_engine/channel.cc
|
| +++ b/webrtc/voice_engine/channel.cc
|
| @@ -1372,6 +1372,11 @@ int32_t Channel::GetVADStatus(bool& enabledVAD,
|
| }
|
|
|
| int32_t Channel::SetRecPayloadType(const CodecInst& codec) {
|
| + return SetRecPayloadType(codec.pltype, CodecInstToSdp(codec));
|
| +}
|
| +
|
| +int32_t Channel::SetRecPayloadType(int payload_type,
|
| + const SdpAudioFormat& format) {
|
| WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
|
| "Channel::SetRecPayloadType()");
|
|
|
| @@ -1382,7 +1387,22 @@ int32_t Channel::SetRecPayloadType(const CodecInst& codec) {
|
| return -1;
|
| }
|
|
|
| - if (codec.pltype == -1) {
|
| + const CodecInst codec = [&] {
|
| + CodecInst c = SdpToCodecInst(payload_type, format);
|
| +
|
| + // Bug 6986: Emulate an old bug that caused us to always choose to decode
|
| + // Opus in stereo. To be able to remove this, we first need to fix the
|
| + // other half of bug 6986, which is about losing the Opus "stereo"
|
| + // parameter.
|
| + // TODO(kwiberg): Remove this special case, a.k.a. fix bug 6986.
|
| + if (STR_CASE_CMP(codec.plname, "opus") == 0) {
|
| + c.channels = 2;
|
| + }
|
| +
|
| + return c;
|
| + }();
|
| +
|
| + if (payload_type == -1) {
|
| // De-register the selected codec (RTP/RTCP module and ACM)
|
|
|
| int8_t pltype(-1);
|
| @@ -1420,11 +1440,9 @@ int32_t Channel::SetRecPayloadType(const CodecInst& codec) {
|
| return -1;
|
| }
|
| }
|
| - if (!audio_coding_->RegisterReceiveCodec(codec.pltype,
|
| - CodecInstToSdp(codec))) {
|
| - audio_coding_->UnregisterReceiveCodec(codec.pltype);
|
| - if (!audio_coding_->RegisterReceiveCodec(codec.pltype,
|
| - CodecInstToSdp(codec))) {
|
| + if (!audio_coding_->RegisterReceiveCodec(payload_type, format)) {
|
| + audio_coding_->UnregisterReceiveCodec(payload_type);
|
| + if (!audio_coding_->RegisterReceiveCodec(payload_type, format)) {
|
| _engineStatisticsPtr->SetLastError(
|
| VE_AUDIO_CODING_MODULE_ERROR, kTraceError,
|
| "SetRecPayloadType() ACM registration failed - 1");
|
|
|