Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Side by Side Diff: webrtc/modules/audio_coding/main/acm2/codec_owner.cc

Issue 1322973004: Fold AudioEncoderMutable into AudioEncoder (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: review fixes Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « webrtc/modules/audio_coding/main/acm2/codec_owner.h ('k') | webrtc/modules/audio_coding/main/acm2/codec_owner_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698