| 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 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 #if defined(WEBRTC_CODEC_ISACFX) | 87 #if defined(WEBRTC_CODEC_ISACFX) |
| 88 return rtc_make_scoped_ptr(new AudioDecoderIsacFix(bwinfo)); | 88 return rtc_make_scoped_ptr(new AudioDecoderIsacFix(bwinfo)); |
| 89 #elif defined(WEBRTC_CODEC_ISAC) | 89 #elif defined(WEBRTC_CODEC_ISAC) |
| 90 return rtc_make_scoped_ptr(new AudioDecoderIsac(bwinfo)); | 90 return rtc_make_scoped_ptr(new AudioDecoderIsac(bwinfo)); |
| 91 #else | 91 #else |
| 92 FATAL() << "iSAC is not supported."; | 92 FATAL() << "iSAC is not supported."; |
| 93 return rtc::scoped_ptr<AudioDecoder>(); | 93 return rtc::scoped_ptr<AudioDecoder>(); |
| 94 #endif | 94 #endif |
| 95 } | 95 } |
| 96 | 96 |
| 97 rtc::scoped_ptr<AudioEncoderMutable> CreateIsacEncoder( | 97 rtc::scoped_ptr<AudioEncoder> CreateIsacEncoder( |
| 98 const CodecInst& speech_inst, | 98 const CodecInst& speech_inst, |
| 99 LockedIsacBandwidthInfo* bwinfo) { | 99 LockedIsacBandwidthInfo* bwinfo) { |
| 100 #if defined(WEBRTC_CODEC_ISACFX) | 100 #if defined(WEBRTC_CODEC_ISACFX) |
| 101 return rtc_make_scoped_ptr( | 101 return rtc_make_scoped_ptr(new AudioEncoderIsacFix(speech_inst, bwinfo)); |
| 102 new AudioEncoderMutableIsacFix(speech_inst, bwinfo)); | |
| 103 #elif defined(WEBRTC_CODEC_ISAC) | 102 #elif defined(WEBRTC_CODEC_ISAC) |
| 104 return rtc_make_scoped_ptr( | 103 return rtc_make_scoped_ptr(new AudioEncoderIsac(speech_inst, bwinfo)); |
| 105 new AudioEncoderMutableIsacFloat(speech_inst, bwinfo)); | |
| 106 #else | 104 #else |
| 107 FATAL() << "iSAC is not supported."; | 105 FATAL() << "iSAC is not supported."; |
| 108 return rtc::scoped_ptr<AudioEncoderMutable>(); | 106 return rtc::scoped_ptr<AudioEncoderMutable>(); |
| 109 #endif | 107 #endif |
| 110 } | 108 } |
| 111 | 109 |
| 112 rtc::scoped_ptr<AudioEncoderMutable> CreateSpeechEncoder( | 110 rtc::scoped_ptr<AudioEncoder> CreateSpeechEncoder( |
| 113 const CodecInst& speech_inst, | 111 const CodecInst& speech_inst, |
| 114 LockedIsacBandwidthInfo* bwinfo) { | 112 LockedIsacBandwidthInfo* bwinfo) { |
| 115 if (IsIsac(speech_inst)) { | 113 if (IsIsac(speech_inst)) { |
| 116 return CreateIsacEncoder(speech_inst, bwinfo); | 114 return CreateIsacEncoder(speech_inst, bwinfo); |
| 117 } else if (IsOpus(speech_inst)) { | 115 } else if (IsOpus(speech_inst)) { |
| 118 return rtc_make_scoped_ptr(new AudioEncoderMutableOpus(speech_inst)); | 116 return rtc_make_scoped_ptr(new AudioEncoderOpus(speech_inst)); |
| 119 } else if (IsPcmU(speech_inst)) { | 117 } else if (IsPcmU(speech_inst)) { |
| 120 return rtc_make_scoped_ptr(new AudioEncoderMutablePcmU(speech_inst)); | 118 return rtc_make_scoped_ptr(new AudioEncoderPcmU(speech_inst)); |
| 121 } else if (IsPcmA(speech_inst)) { | 119 } else if (IsPcmA(speech_inst)) { |
| 122 return rtc_make_scoped_ptr(new AudioEncoderMutablePcmA(speech_inst)); | 120 return rtc_make_scoped_ptr(new AudioEncoderPcmA(speech_inst)); |
| 123 } else if (IsPcm16B(speech_inst)) { | 121 } else if (IsPcm16B(speech_inst)) { |
| 124 return rtc_make_scoped_ptr(new AudioEncoderMutablePcm16B(speech_inst)); | 122 return rtc_make_scoped_ptr(new AudioEncoderPcm16B(speech_inst)); |
| 125 } else if (IsIlbc(speech_inst)) { | 123 } else if (IsIlbc(speech_inst)) { |
| 126 return rtc_make_scoped_ptr(new AudioEncoderMutableIlbc(speech_inst)); | 124 return rtc_make_scoped_ptr(new AudioEncoderIlbc(speech_inst)); |
| 127 } else if (IsG722(speech_inst)) { | 125 } else if (IsG722(speech_inst)) { |
| 128 return rtc_make_scoped_ptr(new AudioEncoderMutableG722(speech_inst)); | 126 return rtc_make_scoped_ptr(new AudioEncoderG722(speech_inst)); |
| 129 } else { | 127 } else { |
| 130 FATAL() << "Could not create encoder of type " << speech_inst.plname; | 128 FATAL() << "Could not create encoder of type " << speech_inst.plname; |
| 131 return rtc::scoped_ptr<AudioEncoderMutable>(); | 129 return rtc::scoped_ptr<AudioEncoder>(); |
| 132 } | 130 } |
| 133 } | 131 } |
| 134 | 132 |
| 135 AudioEncoder* CreateRedEncoder(int red_payload_type, | 133 AudioEncoder* CreateRedEncoder(int red_payload_type, |
| 136 AudioEncoder* encoder, | 134 AudioEncoder* encoder, |
| 137 rtc::scoped_ptr<AudioEncoder>* red_encoder) { | 135 rtc::scoped_ptr<AudioEncoder>* red_encoder) { |
| 138 if (red_payload_type == -1) { | 136 if (red_payload_type == -1) { |
| 139 red_encoder->reset(); | 137 red_encoder->reset(); |
| 140 return encoder; | 138 return encoder; |
| 141 } | 139 } |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 | 178 |
| 181 void CodecOwner::SetEncoders(const CodecInst& speech_inst, | 179 void CodecOwner::SetEncoders(const CodecInst& speech_inst, |
| 182 int cng_payload_type, | 180 int cng_payload_type, |
| 183 ACMVADMode vad_mode, | 181 ACMVADMode vad_mode, |
| 184 int red_payload_type) { | 182 int red_payload_type) { |
| 185 speech_encoder_ = CreateSpeechEncoder(speech_inst, &isac_bandwidth_info_); | 183 speech_encoder_ = CreateSpeechEncoder(speech_inst, &isac_bandwidth_info_); |
| 186 external_speech_encoder_ = nullptr; | 184 external_speech_encoder_ = nullptr; |
| 187 ChangeCngAndRed(cng_payload_type, vad_mode, red_payload_type); | 185 ChangeCngAndRed(cng_payload_type, vad_mode, red_payload_type); |
| 188 } | 186 } |
| 189 | 187 |
| 190 void CodecOwner::SetEncoders(AudioEncoderMutable* external_speech_encoder, | 188 void CodecOwner::SetEncoders(AudioEncoder* external_speech_encoder, |
| 191 int cng_payload_type, | 189 int cng_payload_type, |
| 192 ACMVADMode vad_mode, | 190 ACMVADMode vad_mode, |
| 193 int red_payload_type) { | 191 int red_payload_type) { |
| 194 external_speech_encoder_ = external_speech_encoder; | 192 external_speech_encoder_ = external_speech_encoder; |
| 195 speech_encoder_.reset(); | 193 speech_encoder_.reset(); |
| 196 ChangeCngAndRed(cng_payload_type, vad_mode, red_payload_type); | 194 ChangeCngAndRed(cng_payload_type, vad_mode, red_payload_type); |
| 197 } | 195 } |
| 198 | 196 |
| 199 void CodecOwner::ChangeCngAndRed(int cng_payload_type, | 197 void CodecOwner::ChangeCngAndRed(int cng_payload_type, |
| 200 ACMVADMode vad_mode, | 198 ACMVADMode vad_mode, |
| 201 int red_payload_type) { | 199 int red_payload_type) { |
| 202 AudioEncoderMutable* speech_encoder = SpeechEncoder(); | 200 AudioEncoder* speech_encoder = SpeechEncoder(); |
| 203 if (cng_payload_type != -1 || red_payload_type != -1) { | 201 if (cng_payload_type != -1 || red_payload_type != -1) { |
| 204 // The RED and CNG encoders need to be in sync with the speech encoder, so | 202 // The RED and CNG encoders need to be in sync with the speech encoder, so |
| 205 // reset the latter to ensure its buffer is empty. | 203 // reset the latter to ensure its buffer is empty. |
| 206 speech_encoder->Reset(); | 204 speech_encoder->Reset(); |
| 207 } | 205 } |
| 208 AudioEncoder* encoder = | 206 AudioEncoder* encoder = |
| 209 CreateRedEncoder(red_payload_type, speech_encoder, &red_encoder_); | 207 CreateRedEncoder(red_payload_type, speech_encoder, &red_encoder_); |
| 210 CreateCngEncoder(cng_payload_type, vad_mode, encoder, &cng_encoder_); | 208 CreateCngEncoder(cng_payload_type, vad_mode, encoder, &cng_encoder_); |
| 211 DCHECK_EQ(!!speech_encoder_ + !!external_speech_encoder_, 1); | 209 DCHECK_EQ(!!speech_encoder_ + !!external_speech_encoder_, 1); |
| 212 } | 210 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 223 } | 221 } |
| 224 | 222 |
| 225 const AudioEncoder* CodecOwner::Encoder() const { | 223 const AudioEncoder* CodecOwner::Encoder() const { |
| 226 if (cng_encoder_) | 224 if (cng_encoder_) |
| 227 return cng_encoder_.get(); | 225 return cng_encoder_.get(); |
| 228 if (red_encoder_) | 226 if (red_encoder_) |
| 229 return red_encoder_.get(); | 227 return red_encoder_.get(); |
| 230 return SpeechEncoder(); | 228 return SpeechEncoder(); |
| 231 } | 229 } |
| 232 | 230 |
| 233 AudioEncoderMutable* CodecOwner::SpeechEncoder() { | 231 AudioEncoder* CodecOwner::SpeechEncoder() { |
| 234 const auto& const_this = *this; | 232 const auto* const_this = this; |
| 235 return const_cast<AudioEncoderMutable*>(const_this.SpeechEncoder()); | 233 return const_cast<AudioEncoder*>(const_this->SpeechEncoder()); |
| 236 } | 234 } |
| 237 | 235 |
| 238 const AudioEncoderMutable* CodecOwner::SpeechEncoder() const { | 236 const AudioEncoder* CodecOwner::SpeechEncoder() const { |
| 239 DCHECK(!speech_encoder_ || !external_speech_encoder_); | 237 DCHECK(!speech_encoder_ || !external_speech_encoder_); |
| 240 return external_speech_encoder_ ? external_speech_encoder_ | 238 return external_speech_encoder_ ? external_speech_encoder_ |
| 241 : speech_encoder_.get(); | 239 : speech_encoder_.get(); |
| 242 } | 240 } |
| 243 | 241 |
| 244 } // namespace acm2 | 242 } // namespace acm2 |
| 245 } // namespace webrtc | 243 } // namespace webrtc |
| OLD | NEW |