| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 return 0; | 142 return 0; |
| 143 case RentACodec::RegistrationResult::kBadFreq: | 143 case RentACodec::RegistrationResult::kBadFreq: |
| 144 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, dummy_id, | 144 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, dummy_id, |
| 145 "RegisterSendCodec() failed, invalid frequency for CNG" | 145 "RegisterSendCodec() failed, invalid frequency for CNG" |
| 146 " registration"); | 146 " registration"); |
| 147 return -1; | 147 return -1; |
| 148 case RentACodec::RegistrationResult::kSkip: | 148 case RentACodec::RegistrationResult::kSkip: |
| 149 break; | 149 break; |
| 150 } | 150 } |
| 151 | 151 |
| 152 // Set Stereo, and make sure VAD and DTX is turned off. | |
| 153 if (send_codec.channels != 1) { | |
| 154 if (codec_stack_params_.use_cng) { | |
| 155 WEBRTC_TRACE(webrtc::kTraceWarning, webrtc::kTraceAudioCoding, dummy_id, | |
| 156 "VAD/DTX is turned off, not supported when sending stereo."); | |
| 157 } | |
| 158 codec_stack_params_.use_cng = false; | |
| 159 } | |
| 160 | |
| 161 // Check if the codec is already registered as send codec. | 152 // Check if the codec is already registered as send codec. |
| 162 bool new_codec = true; | 153 bool new_codec = true; |
| 163 if (CurrentEncoder()) { | 154 if (CurrentEncoder()) { |
| 164 auto new_codec_id = RentACodec::CodecIdByInst(send_codec_inst_); | 155 auto new_codec_id = RentACodec::CodecIdByInst(send_codec_inst_); |
| 165 RTC_DCHECK(new_codec_id); | 156 RTC_DCHECK(new_codec_id); |
| 166 auto old_codec_id = RentACodec::CodecIdFromIndex(codec_id); | 157 auto old_codec_id = RentACodec::CodecIdFromIndex(codec_id); |
| 167 new_codec = !old_codec_id || *new_codec_id != *old_codec_id; | 158 new_codec = !old_codec_id || *new_codec_id != *old_codec_id; |
| 168 } | 159 } |
| 169 | 160 |
| 170 encoder_is_opus_ = IsOpus(send_codec); | 161 encoder_is_opus_ = IsOpus(send_codec); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 send_codec_inst_.plfreq = external_speech_encoder->SampleRateHz(); | 215 send_codec_inst_.plfreq = external_speech_encoder->SampleRateHz(); |
| 225 send_codec_inst_.pacsize = rtc::CheckedDivExact( | 216 send_codec_inst_.pacsize = rtc::CheckedDivExact( |
| 226 static_cast<int>(external_speech_encoder->Max10MsFramesInAPacket() * | 217 static_cast<int>(external_speech_encoder->Max10MsFramesInAPacket() * |
| 227 send_codec_inst_.plfreq), | 218 send_codec_inst_.plfreq), |
| 228 100); | 219 100); |
| 229 send_codec_inst_.pltype = -1; // Not valid. | 220 send_codec_inst_.pltype = -1; // Not valid. |
| 230 send_codec_inst_.rate = -1; // Not valid. | 221 send_codec_inst_.rate = -1; // Not valid. |
| 231 static const char kName[] = "external"; | 222 static const char kName[] = "external"; |
| 232 memcpy(send_codec_inst_.plname, kName, sizeof(kName)); | 223 memcpy(send_codec_inst_.plname, kName, sizeof(kName)); |
| 233 | 224 |
| 234 if (send_codec_inst_.channels != 1) | |
| 235 codec_stack_params_.use_cng = false; | |
| 236 if (codec_stack_params_.use_codec_fec) { | 225 if (codec_stack_params_.use_codec_fec) { |
| 237 // Switch FEC on. On failure, remember that FEC is off. | 226 // Switch FEC on. On failure, remember that FEC is off. |
| 238 if (!external_speech_encoder->SetFec(true)) | 227 if (!external_speech_encoder->SetFec(true)) |
| 239 codec_stack_params_.use_codec_fec = false; | 228 codec_stack_params_.use_codec_fec = false; |
| 240 } else { | 229 } else { |
| 241 // Switch FEC off. This shouldn't fail. | 230 // Switch FEC off. This shouldn't fail. |
| 242 const bool success = external_speech_encoder->SetFec(false); | 231 const bool success = external_speech_encoder->SetFec(false); |
| 243 RTC_DCHECK(success); | 232 RTC_DCHECK(success); |
| 244 } | 233 } |
| 245 | 234 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 CurrentEncoder()->SetFec(enable_codec_fec) && enable_codec_fec; | 322 CurrentEncoder()->SetFec(enable_codec_fec) && enable_codec_fec; |
| 334 return codec_stack_params_.use_codec_fec == enable_codec_fec ? 0 : -1; | 323 return codec_stack_params_.use_codec_fec == enable_codec_fec ? 0 : -1; |
| 335 } | 324 } |
| 336 | 325 |
| 337 AudioDecoder* CodecManager::GetAudioDecoder(const CodecInst& codec) { | 326 AudioDecoder* CodecManager::GetAudioDecoder(const CodecInst& codec) { |
| 338 return IsIsac(codec) ? rent_a_codec_.RentIsacDecoder() : nullptr; | 327 return IsIsac(codec) ? rent_a_codec_.RentIsacDecoder() : nullptr; |
| 339 } | 328 } |
| 340 | 329 |
| 341 } // namespace acm2 | 330 } // namespace acm2 |
| 342 } // namespace webrtc | 331 } // namespace webrtc |
| OLD | NEW |