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 ac21020dc2e3847b4e79b2dde50fad31f405092b..47bbbde1d5bc482b34ff8565650c9efe18f02aa7 100644 |
--- a/webrtc/modules/audio_coding/main/acm2/codec_manager.cc |
+++ b/webrtc/modules/audio_coding/main/acm2/codec_manager.cc |
@@ -240,7 +240,7 @@ int CodecManager::RegisterEncoder(const CodecInst& send_codec) { |
// Check if the codec is already registered as send codec. |
bool new_codec = true; |
- if (codec_owner_.Encoder()) { |
+ if (CurrentEncoder()) { |
auto new_codec_id = RentACodec::CodecIdByInst(send_codec_inst_); |
RTC_DCHECK(new_codec_id); |
auto old_codec_id = RentACodec::CodecIdFromIndex(codec_id); |
@@ -263,10 +263,8 @@ int CodecManager::RegisterEncoder(const CodecInst& send_codec) { |
AudioEncoder* enc = rent_a_codec_.RentEncoder(send_codec); |
if (!enc) |
return -1; |
- codec_owner_.SetEncoders( |
- enc, dtx_enabled_ ? CngPayloadType(send_codec.plfreq) : -1, |
- vad_mode_, red_enabled_ ? RedPayloadType(send_codec.plfreq) : -1); |
- RTC_DCHECK(codec_owner_.Encoder()); |
+ RentEncoderStack(enc, send_codec.plfreq); |
+ RTC_DCHECK(CurrentEncoder()); |
codec_fec_enabled_ = codec_fec_enabled_ && |
enc->SetFec(codec_fec_enabled_); |
@@ -282,10 +280,8 @@ int CodecManager::RegisterEncoder(const CodecInst& send_codec) { |
AudioEncoder* enc = rent_a_codec_.RentEncoder(send_codec); |
if (!enc) |
return -1; |
- codec_owner_.SetEncoders( |
- enc, dtx_enabled_ ? CngPayloadType(send_codec.plfreq) : -1, |
- vad_mode_, red_enabled_ ? RedPayloadType(send_codec.plfreq) : -1); |
- RTC_DCHECK(codec_owner_.Encoder()); |
+ RentEncoderStack(enc, send_codec.plfreq); |
+ RTC_DCHECK(CurrentEncoder()); |
} |
send_codec_inst_.plfreq = send_codec.plfreq; |
send_codec_inst_.pacsize = send_codec.pacsize; |
@@ -294,12 +290,12 @@ int CodecManager::RegisterEncoder(const CodecInst& send_codec) { |
// Check if a change in Rate is required. |
if (send_codec.rate != send_codec_inst_.rate) { |
- codec_owner_.Encoder()->SetTargetBitrate(send_codec.rate); |
+ CurrentEncoder()->SetTargetBitrate(send_codec.rate); |
send_codec_inst_.rate = send_codec.rate; |
} |
codec_fec_enabled_ = |
- codec_fec_enabled_ && codec_owner_.Encoder()->SetFec(codec_fec_enabled_); |
+ codec_fec_enabled_ && CurrentEncoder()->SetFec(codec_fec_enabled_); |
return 0; |
} |
@@ -328,11 +324,9 @@ void CodecManager::RegisterEncoder(AudioEncoder* external_speech_encoder) { |
const bool success = external_speech_encoder->SetFec(false); |
RTC_DCHECK(success); |
} |
- int cng_pt = dtx_enabled_ |
- ? CngPayloadType(external_speech_encoder->SampleRateHz()) |
- : -1; |
- int red_pt = red_enabled_ ? RedPayloadType(send_codec_inst_.plfreq) : -1; |
- codec_owner_.SetEncoders(external_speech_encoder, cng_pt, vad_mode_, red_pt); |
+ |
+ RentEncoderStack(external_speech_encoder, |
+ external_speech_encoder->SampleRateHz()); |
} |
rtc::Optional<CodecInst> CodecManager::GetCodecInst() const { |
@@ -340,7 +334,7 @@ rtc::Optional<CodecInst> CodecManager::GetCodecInst() const { |
WEBRTC_TRACE(webrtc::kTraceStream, webrtc::kTraceAudioCoding, dummy_id, |
"SendCodec()"); |
- if (!codec_owner_.Encoder()) { |
+ if (!CurrentEncoder()) { |
WEBRTC_TRACE(webrtc::kTraceStream, webrtc::kTraceAudioCoding, dummy_id, |
"SendCodec Failed, no codec is registered"); |
return rtc::Optional<CodecInst>(); |
@@ -361,11 +355,8 @@ bool CodecManager::SetCopyRed(bool enable) { |
} |
if (red_enabled_ != enable) { |
red_enabled_ = enable; |
- if (codec_owner_.Encoder()) { |
- int cng_pt = dtx_enabled_ ? CngPayloadType(send_codec_inst_.plfreq) : -1; |
- int red_pt = red_enabled_ ? RedPayloadType(send_codec_inst_.plfreq) : -1; |
- codec_owner_.ChangeCngAndRed(cng_pt, vad_mode_, red_pt); |
- } |
+ if (CurrentEncoder()) |
+ RentEncoderStack(rent_a_codec_.GetEncoder(), send_codec_inst_.plfreq); |
} |
return true; |
} |
@@ -377,7 +368,7 @@ int CodecManager::SetVAD(bool enable, ACMVADMode mode) { |
// Check that the send codec is mono. We don't support VAD/DTX for stereo |
// sending. |
- const auto* enc = codec_owner_.Encoder(); |
+ auto* enc = rent_a_codec_.GetEncoder(); |
const bool stereo_send = enc ? (enc->NumChannels() != 1) : false; |
if (enable && stereo_send) { |
WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, 0, |
@@ -396,11 +387,8 @@ int CodecManager::SetVAD(bool enable, ACMVADMode mode) { |
if (dtx_enabled_ != enable || vad_mode_ != mode) { |
dtx_enabled_ = enable; |
vad_mode_ = mode; |
- if (enc) { |
- int cng_pt = dtx_enabled_ ? CngPayloadType(send_codec_inst_.plfreq) : -1; |
- int red_pt = red_enabled_ ? RedPayloadType(send_codec_inst_.plfreq) : -1; |
- codec_owner_.ChangeCngAndRed(cng_pt, vad_mode_, red_pt); |
- } |
+ if (enc) |
+ RentEncoderStack(enc, send_codec_inst_.plfreq); |
} |
return 0; |
} |
@@ -420,9 +408,9 @@ int CodecManager::SetCodecFEC(bool enable_codec_fec) { |
return -1; |
} |
- RTC_CHECK(codec_owner_.Encoder()); |
+ RTC_CHECK(CurrentEncoder()); |
codec_fec_enabled_ = |
- codec_owner_.Encoder()->SetFec(enable_codec_fec) && enable_codec_fec; |
+ CurrentEncoder()->SetFec(enable_codec_fec) && enable_codec_fec; |
return codec_fec_enabled_ == enable_codec_fec ? 0 : -1; |
} |
@@ -460,5 +448,17 @@ int CodecManager::RedPayloadType(int sample_rate_hz) const { |
} |
} |
+void CodecManager::RentEncoderStack(AudioEncoder* speech_encoder, |
+ int sample_rate_hz) { |
hlundin-webrtc
2015/11/16 12:28:06
I'd argue that the name should be rtp_timestamp_ra
|
+ auto cng_config = |
+ dtx_enabled_ ? rtc::Optional<RentACodec::CngConfig>(RentACodec::CngConfig{ |
+ CngPayloadType(sample_rate_hz), vad_mode_}) |
+ : rtc::Optional<RentACodec::CngConfig>(); |
+ auto red_pt = red_enabled_ |
+ ? rtc::Optional<int>(RedPayloadType(sample_rate_hz)) |
+ : rtc::Optional<int>(); |
+ rent_a_codec_.RentEncoderStack(speech_encoder, cng_config, red_pt); |
+} |
+ |
} // namespace acm2 |
} // namespace webrtc |