Index: webrtc/modules/audio_coding/main/acm2/codec_manager.cc |
diff --git a/webrtc/modules/audio_coding/main/acm2/codec_manager.cc b/webrtc/modules/audio_coding/main/acm2/codec_manager.cc |
index 47bbbde1d5bc482b34ff8565650c9efe18f02aa7..efc2bf99d6d0fe140e344969d0c9e77ecd3388b3 100644 |
--- a/webrtc/modules/audio_coding/main/acm2/codec_manager.cc |
+++ b/webrtc/modules/audio_coding/main/acm2/codec_manager.cc |
@@ -132,33 +132,16 @@ const CodecInst kEmptyCodecInst = {-1, "noCodecRegistered", 0, 0, 0, 0}; |
} // namespace |
CodecManager::CodecManager() |
- : cng_nb_pltype_(255), |
- cng_wb_pltype_(255), |
- cng_swb_pltype_(255), |
- cng_fb_pltype_(255), |
- red_nb_pltype_(255), |
- dtx_enabled_(false), |
+ : dtx_enabled_(false), |
vad_mode_(VADNormal), |
send_codec_inst_(kEmptyCodecInst), |
red_enabled_(false), |
codec_fec_enabled_(false), |
encoder_is_opus_(false) { |
- // Register the default payload type for RED and for CNG at sampling rates of |
- // 8, 16, 32 and 48 kHz. |
+ // Register the default payload types for RED and CNG. |
for (const CodecInst& ci : RentACodec::Database()) { |
- if (IsCodecRED(ci) && ci.plfreq == 8000) { |
- red_nb_pltype_ = static_cast<uint8_t>(ci.pltype); |
- } else if (IsCodecCN(ci)) { |
- if (ci.plfreq == 8000) { |
- cng_nb_pltype_ = static_cast<uint8_t>(ci.pltype); |
- } else if (ci.plfreq == 16000) { |
- cng_wb_pltype_ = static_cast<uint8_t>(ci.pltype); |
- } else if (ci.plfreq == 32000) { |
- cng_swb_pltype_ = static_cast<uint8_t>(ci.pltype); |
- } else if (ci.plfreq == 48000) { |
- cng_fb_pltype_ = static_cast<uint8_t>(ci.pltype); |
- } |
- } |
+ RentACodec::RegisterCngPayloadType(&cng_payload_types_, ci); |
+ RentACodec::RegisterRedPayloadType(&red_payload_types_, ci); |
} |
thread_checker_.DetachFromThread(); |
} |
@@ -175,58 +158,27 @@ int CodecManager::RegisterEncoder(const CodecInst& send_codec) { |
} |
int dummy_id = 0; |
- // RED can be registered with other payload type. If not registered a default |
- // payload type is used. |
- if (IsCodecRED(send_codec)) { |
- // TODO(tlegrand): Remove this check. Already taken care of in |
- // ACMCodecDB::CodecNumber(). |
- // Check if the payload-type is valid |
- if (!RentACodec::IsPayloadTypeValid(send_codec.pltype)) { |
+ switch (RentACodec::RegisterRedPayloadType(&red_payload_types_, send_codec)) { |
+ case RentACodec::RegistrationResult::kOk: |
+ return 0; |
+ case RentACodec::RegistrationResult::kBadFreq: |
WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, dummy_id, |
- "Invalid payload-type %d for %s.", send_codec.pltype, |
- send_codec.plname); |
+ "RegisterSendCodec() failed, invalid frequency for RED" |
+ " registration"); |
return -1; |
- } |
- // Set RED payload type. |
- if (send_codec.plfreq == 8000) { |
- red_nb_pltype_ = static_cast<uint8_t>(send_codec.pltype); |
- } else { |
+ case RentACodec::RegistrationResult::kSkip: |
+ break; |
+ } |
+ switch (RentACodec::RegisterCngPayloadType(&cng_payload_types_, send_codec)) { |
+ case RentACodec::RegistrationResult::kOk: |
+ return 0; |
+ case RentACodec::RegistrationResult::kBadFreq: |
WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, dummy_id, |
- "RegisterSendCodec() failed, invalid frequency for RED " |
- "registration"); |
+ "RegisterSendCodec() failed, invalid frequency for CNG" |
+ " registration"); |
return -1; |
- } |
- return 0; |
- } |
- |
- // CNG can be registered with other payload type. If not registered the |
- // default payload types from codec database will be used. |
- if (IsCodecCN(send_codec)) { |
- // CNG is registered. |
- switch (send_codec.plfreq) { |
- case 8000: { |
- cng_nb_pltype_ = static_cast<uint8_t>(send_codec.pltype); |
- return 0; |
- } |
- case 16000: { |
- cng_wb_pltype_ = static_cast<uint8_t>(send_codec.pltype); |
- return 0; |
- } |
- case 32000: { |
- cng_swb_pltype_ = static_cast<uint8_t>(send_codec.pltype); |
- return 0; |
- } |
- case 48000: { |
- cng_fb_pltype_ = static_cast<uint8_t>(send_codec.pltype); |
- return 0; |
- } |
- default: { |
- WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, dummy_id, |
- "RegisterSendCodec() failed, invalid frequency for CNG " |
- "registration"); |
- return -1; |
- } |
- } |
+ case RentACodec::RegistrationResult::kSkip: |
+ break; |
} |
// Set Stereo, and make sure VAD and DTX is turned off. |
@@ -418,34 +370,20 @@ AudioDecoder* CodecManager::GetAudioDecoder(const CodecInst& codec) { |
return IsIsac(codec) ? rent_a_codec_.RentIsacDecoder() : nullptr; |
} |
-int CodecManager::CngPayloadType(int sample_rate_hz) const { |
- switch (sample_rate_hz) { |
- case 8000: |
- return cng_nb_pltype_; |
- case 16000: |
- return cng_wb_pltype_; |
- case 32000: |
- return cng_swb_pltype_; |
- case 48000: |
- return cng_fb_pltype_; |
- default: |
- FATAL() << sample_rate_hz << " Hz is not supported"; |
- return -1; |
- } |
+int CodecManager::CngPayloadType(int rtp_timestamp_rate_hz) const { |
+ RTC_CHECK(rtp_timestamp_rate_hz == 8000 || rtp_timestamp_rate_hz == 16000 || |
+ rtp_timestamp_rate_hz == 32000 || rtp_timestamp_rate_hz == 48000) |
+ << rtp_timestamp_rate_hz << " Hz is not supported"; |
+ auto it = cng_payload_types_.find(rtp_timestamp_rate_hz); |
+ return it == cng_payload_types_.end() ? -1 : it->second; |
} |
-int CodecManager::RedPayloadType(int sample_rate_hz) const { |
- switch (sample_rate_hz) { |
- case 8000: |
- return red_nb_pltype_; |
- case 16000: |
- case 32000: |
- case 48000: |
- return -1; |
- default: |
- FATAL() << sample_rate_hz << " Hz is not supported"; |
- return -1; |
- } |
+int CodecManager::RedPayloadType(int rtp_timestamp_rate_hz) const { |
+ RTC_CHECK(rtp_timestamp_rate_hz == 8000 || rtp_timestamp_rate_hz == 16000 || |
+ rtp_timestamp_rate_hz == 32000 || rtp_timestamp_rate_hz == 48000) |
+ << rtp_timestamp_rate_hz << " Hz is not supported"; |
+ auto it = red_payload_types_.find(rtp_timestamp_rate_hz); |
+ return it == red_payload_types_.end() ? -1 : it->second; |
} |
void CodecManager::RentEncoderStack(AudioEncoder* speech_encoder, |