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

Unified Diff: webrtc/voice_engine/channel.cc

Issue 1677013002: Switch to using new ACM methods for encoder management (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@acm-13
Patch Set: Created 4 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/voice_engine/channel.cc
diff --git a/webrtc/voice_engine/channel.cc b/webrtc/voice_engine/channel.cc
index 5bbbce3c406b1c8ebfbbd3ef2e7533e335e836de..ed1a64b337da0057a27e2a963a2fe3fea1f701fa 100644
--- a/webrtc/voice_engine/channel.cc
+++ b/webrtc/voice_engine/channel.cc
@@ -391,7 +391,9 @@ int32_t Channel::OnInitializeDecoder(
receiveCodec.pacsize = dummyCodec.pacsize;
// Register the new codec to the ACM
- if (audio_coding_->RegisterReceiveCodec(receiveCodec) == -1) {
+ if (audio_coding_->RegisterReceiveCodec(receiveCodec, [&] {
+ return rent_a_codec_.RentIsacDecoder();
+ }) == -1) {
WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, _channelId),
"Channel::OnInitializeDecoder() invalid codec ("
"pt=%d, name=%s) received - 1",
@@ -966,8 +968,9 @@ int32_t Channel::Init() {
// Register default PT for outband 'telephone-event'
if (!STR_CASE_CMP(codec.plname, "telephone-event")) {
- if ((_rtpRtcpModule->RegisterSendPayload(codec) == -1) ||
- (audio_coding_->RegisterReceiveCodec(codec) == -1)) {
+ if (_rtpRtcpModule->RegisterSendPayload(codec) == -1 ||
+ audio_coding_->RegisterReceiveCodec(
+ codec, [&] { return rent_a_codec_.RentIsacDecoder(); }) == -1) {
WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, _channelId),
"Channel::Init() failed to register outband "
"'telephone-event' (%d/%d) correctly",
@@ -976,9 +979,15 @@ int32_t Channel::Init() {
}
if (!STR_CASE_CMP(codec.plname, "CN")) {
- if ((audio_coding_->RegisterSendCodec(codec) == -1) ||
- (audio_coding_->RegisterReceiveCodec(codec) == -1) ||
- (_rtpRtcpModule->RegisterSendPayload(codec) == -1)) {
+ if (!codec_manager_.RegisterEncoder(codec) ||
+ !codec_manager_.MakeEncoder(&rent_a_codec_,
+ [&](std::unique_ptr<AudioEncoder> enc) {
+ audio_coding_->SetEncoder(
+ std::move(enc));
+ }) ||
+ audio_coding_->RegisterReceiveCodec(
+ codec, [&] { return rent_a_codec_.RentIsacDecoder(); }) == -1 ||
+ _rtpRtcpModule->RegisterSendPayload(codec) == -1) {
WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, _channelId),
"Channel::Init() failed to register CN (%d/%d) "
"correctly - 1",
@@ -1195,7 +1204,7 @@ int32_t Channel::DeRegisterVoiceEngineObserver() {
}
int32_t Channel::GetSendCodec(CodecInst& codec) {
- auto send_codec = audio_coding_->SendCodec();
+ auto send_codec = codec_manager_.GetCodecInst();
if (send_codec) {
codec = *send_codec;
return 0;
@@ -1211,7 +1220,11 @@ int32_t Channel::SetSendCodec(const CodecInst& codec) {
WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
"Channel::SetSendCodec()");
- if (audio_coding_->RegisterSendCodec(codec) != 0) {
+ if (!codec_manager_.RegisterEncoder(codec) ||
+ !codec_manager_.MakeEncoder(
+ &rent_a_codec_, [&](std::unique_ptr<AudioEncoder> new_enc) {
+ audio_coding_->SetEncoder(std::move(new_enc));
+ })) {
WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_instanceId, _channelId),
"SetSendCodec() failed to register codec to ACM");
return -1;
@@ -1258,10 +1271,11 @@ int32_t Channel::SetVADStatus(bool enableVAD,
bool disableDTX) {
WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
"Channel::SetVADStatus(mode=%d)", mode);
- assert(!(disableDTX && enableVAD)); // disableDTX mode is deprecated.
hlundin-webrtc 2016/03/29 20:23:32 Why did the assert have to go? The last parameter
kwiberg-webrtc 2016/03/29 23:25:32 Good question. I remember removing it for a reason
hlundin-webrtc 2016/03/30 08:36:10 Good.
kwiberg-webrtc 2016/03/30 10:53:50 Done.
- // To disable VAD, DTX must be disabled too
- disableDTX = ((enableVAD == false) ? true : disableDTX);
- if (audio_coding_->SetVAD(!disableDTX, enableVAD, mode) != 0) {
+ if (!codec_manager_.SetVAD(enableVAD, mode) ||
+ !codec_manager_.MakeEncoder(
+ &rent_a_codec_, [&](std::unique_ptr<AudioEncoder> new_enc) {
+ audio_coding_->SetEncoder(std::move(new_enc));
+ })) {
_engineStatisticsPtr->SetLastError(VE_AUDIO_CODING_MODULE_ERROR,
kTraceError,
"SetVADStatus() failed to set VAD");
@@ -1273,13 +1287,10 @@ int32_t Channel::SetVADStatus(bool enableVAD,
int32_t Channel::GetVADStatus(bool& enabledVAD,
ACMVADMode& mode,
bool& disabledDTX) {
- if (audio_coding_->VAD(&disabledDTX, &enabledVAD, &mode) != 0) {
- _engineStatisticsPtr->SetLastError(
- VE_AUDIO_CODING_MODULE_ERROR, kTraceError,
- "GetVADStatus() failed to get VAD status");
- return -1;
- }
- disabledDTX = !disabledDTX;
+ const auto* params = codec_manager_.GetStackParams();
+ enabledVAD = params->use_cng;
+ mode = params->vad_mode;
+ disabledDTX = !params->use_cng;
return 0;
}
@@ -1342,9 +1353,11 @@ int32_t Channel::SetRecPayloadType(const CodecInst& codec) {
return -1;
}
}
- if (audio_coding_->RegisterReceiveCodec(codec) != 0) {
+ if (audio_coding_->RegisterReceiveCodec(
hlundin-webrtc 2016/03/29 20:23:32 One could wonder if there is any valid case for re
kwiberg-webrtc 2016/03/29 23:25:32 I don’t know of a valid case either.
hlundin-webrtc 2016/03/30 08:36:10 Right. You may want to add a TODO that this is ess
kwiberg-webrtc 2016/03/30 10:53:50 Done.
+ codec, [&] { return rent_a_codec_.RentIsacDecoder(); }) != 0) {
audio_coding_->UnregisterReceiveCodec(codec.pltype);
- if (audio_coding_->RegisterReceiveCodec(codec) != 0) {
+ if (audio_coding_->RegisterReceiveCodec(
+ codec, [&] { return rent_a_codec_.RentIsacDecoder(); }) != 0) {
_engineStatisticsPtr->SetLastError(
VE_AUDIO_CODING_MODULE_ERROR, kTraceError,
"SetRecPayloadType() ACM registration failed - 1");
@@ -1391,7 +1404,11 @@ int32_t Channel::SetSendCNPayloadType(int type, PayloadFrequencies frequency) {
// Modify the payload type (must be set to dynamic range)
codec.pltype = type;
- if (audio_coding_->RegisterSendCodec(codec) != 0) {
+ if (!codec_manager_.RegisterEncoder(codec) ||
+ !codec_manager_.MakeEncoder(&rent_a_codec_,
+ [&](std::unique_ptr<AudioEncoder> enc) {
+ audio_coding_->SetEncoder(std::move(enc));
+ })) {
_engineStatisticsPtr->SetLastError(
VE_AUDIO_CODING_MODULE_ERROR, kTraceError,
"SetSendCNPayloadType() failed to register CN to ACM");
@@ -2854,7 +2871,11 @@ int Channel::SetREDStatus(bool enable, int redPayloadtype) {
}
}
- if (audio_coding_->SetREDStatus(enable) != 0) {
+ if (!codec_manager_.SetCopyRed(enable) ||
+ !codec_manager_.MakeEncoder(
+ &rent_a_codec_, [&](std::unique_ptr<AudioEncoder> new_enc) {
+ audio_coding_->SetEncoder(std::move(new_enc));
+ })) {
_engineStatisticsPtr->SetLastError(
VE_AUDIO_CODING_MODULE_ERROR, kTraceError,
"SetREDStatus() failed to set RED state in the ACM");
@@ -2864,7 +2885,7 @@ int Channel::SetREDStatus(bool enable, int redPayloadtype) {
}
int Channel::GetREDStatus(bool& enabled, int& redPayloadtype) {
- enabled = audio_coding_->REDStatus();
+ enabled = codec_manager_.GetStackParams()->use_red;
if (enabled) {
int8_t payloadType = 0;
if (_rtpRtcpModule->SendREDPayloadType(&payloadType) != 0) {
@@ -2884,7 +2905,11 @@ int Channel::SetCodecFECStatus(bool enable) {
WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
"Channel::SetCodecFECStatus()");
- if (audio_coding_->SetCodecFEC(enable) != 0) {
+ if (!codec_manager_.SetCodecFEC(enable) ||
+ !codec_manager_.MakeEncoder(
+ &rent_a_codec_, [&](std::unique_ptr<AudioEncoder> new_enc) {
+ audio_coding_->SetEncoder(std::move(new_enc));
+ })) {
_engineStatisticsPtr->SetLastError(
VE_AUDIO_CODING_MODULE_ERROR, kTraceError,
"SetCodecFECStatus() failed to set FEC state");
@@ -2894,8 +2919,7 @@ int Channel::SetCodecFECStatus(bool enable) {
}
bool Channel::GetCodecFECStatus() {
- bool enabled = audio_coding_->CodecFEC();
- return enabled;
+ return codec_manager_.GetStackParams()->use_codec_fec;
}
void Channel::SetNACKStatus(bool enable, int maxNumberOfPackets) {
@@ -3437,7 +3461,11 @@ int Channel::SetRedPayloadType(int red_payload_type) {
}
codec.pltype = red_payload_type;
- if (audio_coding_->RegisterSendCodec(codec) < 0) {
+ if (!codec_manager_.RegisterEncoder(codec) ||
+ !codec_manager_.MakeEncoder(
+ &rent_a_codec_, [&](std::unique_ptr<AudioEncoder> new_enc) {
+ audio_coding_->SetEncoder(std::move(new_enc));
+ })) {
_engineStatisticsPtr->SetLastError(
VE_AUDIO_CODING_MODULE_ERROR, kTraceError,
"SetRedPayloadType() RED registration in ACM module failed");
« webrtc/modules/audio_coding/acm2/codec_manager.h ('K') | « webrtc/voice_engine/channel.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698