Index: webrtc/modules/audio_processing/aec/echo_cancellation.c |
diff --git a/webrtc/modules/audio_processing/aec/echo_cancellation.c b/webrtc/modules/audio_processing/aec/echo_cancellation.c |
index 0f5cd31ddb28ba5e7de636e4b0d4556cae3ac212..175ef3d798ea650c769327ee4b0a7bed2120b80f 100644 |
--- a/webrtc/modules/audio_processing/aec/echo_cancellation.c |
+++ b/webrtc/modules/audio_processing/aec/echo_cancellation.c |
@@ -146,7 +146,6 @@ void* WebRtcAec_Create() { |
} |
aecpc->initFlag = 0; |
- aecpc->lastError = 0; |
#ifdef WEBRTC_AEC_DEBUG_DUMP |
{ |
@@ -192,26 +191,22 @@ int32_t WebRtcAec_Init(void* aecInst, int32_t sampFreq, int32_t scSampFreq) { |
sampFreq != 16000 && |
sampFreq != 32000 && |
sampFreq != 48000) { |
- aecpc->lastError = AEC_BAD_PARAMETER_ERROR; |
- return -1; |
+ return AEC_BAD_PARAMETER_ERROR; |
} |
aecpc->sampFreq = sampFreq; |
if (scSampFreq < 1 || scSampFreq > 96000) { |
- aecpc->lastError = AEC_BAD_PARAMETER_ERROR; |
- return -1; |
+ return AEC_BAD_PARAMETER_ERROR; |
} |
aecpc->scSampFreq = scSampFreq; |
// Initialize echo canceller core |
if (WebRtcAec_InitAec(aecpc->aec, aecpc->sampFreq) == -1) { |
- aecpc->lastError = AEC_UNSPECIFIED_ERROR; |
- return -1; |
+ return AEC_UNSPECIFIED_ERROR; |
} |
if (WebRtcAec_InitResampler(aecpc->resampler, aecpc->scSampFreq) == -1) { |
- aecpc->lastError = AEC_UNSPECIFIED_ERROR; |
- return -1; |
+ return AEC_UNSPECIFIED_ERROR; |
} |
WebRtc_InitBuffer(aecpc->far_pre_buf); |
@@ -261,13 +256,32 @@ int32_t WebRtcAec_Init(void* aecInst, int32_t sampFreq, int32_t scSampFreq) { |
aecConfig.delay_logging = kAecFalse; |
if (WebRtcAec_set_config(aecpc, aecConfig) == -1) { |
- aecpc->lastError = AEC_UNSPECIFIED_ERROR; |
- return -1; |
+ return AEC_UNSPECIFIED_ERROR; |
} |
return 0; |
} |
+// Returns any error that is caused when buffering the |
+// far-end signal. |
+int32_t WebRtcAec_GetBufferFarendError(void* aecInst, |
+ const float* farend, |
+ size_t nrOfSamples) { |
+ Aec* aecpc = aecInst; |
+ |
+ if (!farend) |
+ return AEC_NULL_POINTER_ERROR; |
+ |
+ if (aecpc->initFlag != initCheck) |
+ return AEC_UNINITIALIZED_ERROR; |
+ |
+ // number of samples == 160 for SWB input |
+ if (nrOfSamples != 80 && nrOfSamples != 160) |
+ return AEC_BAD_PARAMETER_ERROR; |
+ |
+ return 0; |
+} |
+ |
// only buffer L band for farend |
int32_t WebRtcAec_BufferFarend(void* aecInst, |
const float* farend, |
@@ -277,21 +291,13 @@ int32_t WebRtcAec_BufferFarend(void* aecInst, |
float new_farend[MAX_RESAMP_LEN]; |
const float* farend_ptr = farend; |
- if (farend == NULL) { |
- aecpc->lastError = AEC_NULL_POINTER_ERROR; |
- return -1; |
- } |
+ // Get any error caused by buffering the farend signal. |
+ int32_t error_code = WebRtcAec_GetBufferFarendError(aecInst, farend, |
+ nrOfSamples); |
- if (aecpc->initFlag != initCheck) { |
- aecpc->lastError = AEC_UNINITIALIZED_ERROR; |
- return -1; |
- } |
+ if (error_code != 0) |
+ return error_code; |
- // number of samples == 160 for SWB input |
- if (nrOfSamples != 80 && nrOfSamples != 160) { |
- aecpc->lastError = AEC_BAD_PARAMETER_ERROR; |
- return -1; |
- } |
if (aecpc->skewMode == kAecTrue && aecpc->resample == kAecTrue) { |
// Resample and get a new number of samples |
@@ -343,29 +349,24 @@ int32_t WebRtcAec_Process(void* aecInst, |
int32_t retVal = 0; |
if (out == NULL) { |
- aecpc->lastError = AEC_NULL_POINTER_ERROR; |
- return -1; |
+ return AEC_NULL_POINTER_ERROR; |
} |
if (aecpc->initFlag != initCheck) { |
- aecpc->lastError = AEC_UNINITIALIZED_ERROR; |
- return -1; |
+ return AEC_UNINITIALIZED_ERROR; |
} |
// number of samples == 160 for SWB input |
if (nrOfSamples != 80 && nrOfSamples != 160) { |
- aecpc->lastError = AEC_BAD_PARAMETER_ERROR; |
- return -1; |
+ return AEC_BAD_PARAMETER_ERROR; |
} |
if (msInSndCardBuf < 0) { |
msInSndCardBuf = 0; |
- aecpc->lastError = AEC_BAD_PARAMETER_WARNING; |
- retVal = -1; |
+ retVal = AEC_BAD_PARAMETER_WARNING; |
} else if (msInSndCardBuf > kMaxTrustedDelayMs) { |
// The clamping is now done in ProcessExtended/Normal(). |
- aecpc->lastError = AEC_BAD_PARAMETER_WARNING; |
- retVal = -1; |
+ retVal = AEC_BAD_PARAMETER_WARNING; |
} |
// This returns the value of aec->extended_filter_enabled. |
@@ -378,15 +379,13 @@ int32_t WebRtcAec_Process(void* aecInst, |
msInSndCardBuf, |
skew); |
} else { |
- if (ProcessNormal(aecpc, |
- nearend, |
- num_bands, |
- out, |
- nrOfSamples, |
- msInSndCardBuf, |
- skew) != 0) { |
- retVal = -1; |
- } |
+ retVal = ProcessNormal(aecpc, |
+ nearend, |
+ num_bands, |
+ out, |
+ nrOfSamples, |
+ msInSndCardBuf, |
+ skew); |
} |
#ifdef WEBRTC_AEC_DEBUG_DUMP |
@@ -405,31 +404,26 @@ int32_t WebRtcAec_Process(void* aecInst, |
int WebRtcAec_set_config(void* handle, AecConfig config) { |
Aec* self = (Aec*)handle; |
if (self->initFlag != initCheck) { |
- self->lastError = AEC_UNINITIALIZED_ERROR; |
- return -1; |
+ return AEC_UNINITIALIZED_ERROR; |
} |
if (config.skewMode != kAecFalse && config.skewMode != kAecTrue) { |
- self->lastError = AEC_BAD_PARAMETER_ERROR; |
- return -1; |
+ return AEC_BAD_PARAMETER_ERROR; |
} |
self->skewMode = config.skewMode; |
if (config.nlpMode != kAecNlpConservative && |
config.nlpMode != kAecNlpModerate && |
config.nlpMode != kAecNlpAggressive) { |
- self->lastError = AEC_BAD_PARAMETER_ERROR; |
- return -1; |
+ return AEC_BAD_PARAMETER_ERROR; |
} |
if (config.metricsMode != kAecFalse && config.metricsMode != kAecTrue) { |
- self->lastError = AEC_BAD_PARAMETER_ERROR; |
- return -1; |
+ return AEC_BAD_PARAMETER_ERROR; |
} |
if (config.delay_logging != kAecFalse && config.delay_logging != kAecTrue) { |
- self->lastError = AEC_BAD_PARAMETER_ERROR; |
- return -1; |
+ return AEC_BAD_PARAMETER_ERROR; |
} |
WebRtcAec_SetConfigCore( |
@@ -440,12 +434,10 @@ int WebRtcAec_set_config(void* handle, AecConfig config) { |
int WebRtcAec_get_echo_status(void* handle, int* status) { |
Aec* self = (Aec*)handle; |
if (status == NULL) { |
- self->lastError = AEC_NULL_POINTER_ERROR; |
- return -1; |
+ return AEC_NULL_POINTER_ERROR; |
} |
if (self->initFlag != initCheck) { |
- self->lastError = AEC_UNINITIALIZED_ERROR; |
- return -1; |
+ return AEC_UNINITIALIZED_ERROR; |
} |
*status = WebRtcAec_echo_state(self->aec); |
@@ -466,12 +458,10 @@ int WebRtcAec_GetMetrics(void* handle, AecMetrics* metrics) { |
return -1; |
} |
if (metrics == NULL) { |
- self->lastError = AEC_NULL_POINTER_ERROR; |
- return -1; |
+ return AEC_NULL_POINTER_ERROR; |
} |
if (self->initFlag != initCheck) { |
- self->lastError = AEC_UNINITIALIZED_ERROR; |
- return -1; |
+ return AEC_UNINITIALIZED_ERROR; |
} |
WebRtcAec_GetEchoStats(self->aec, &erl, &erle, &a_nlp); |
@@ -556,32 +546,24 @@ int WebRtcAec_GetDelayMetrics(void* handle, |
float* fraction_poor_delays) { |
Aec* self = handle; |
if (median == NULL) { |
- self->lastError = AEC_NULL_POINTER_ERROR; |
- return -1; |
+ return AEC_NULL_POINTER_ERROR; |
} |
if (std == NULL) { |
- self->lastError = AEC_NULL_POINTER_ERROR; |
- return -1; |
+ return AEC_NULL_POINTER_ERROR; |
} |
if (self->initFlag != initCheck) { |
- self->lastError = AEC_UNINITIALIZED_ERROR; |
- return -1; |
+ return AEC_UNINITIALIZED_ERROR; |
} |
if (WebRtcAec_GetDelayMetricsCore(self->aec, median, std, |
fraction_poor_delays) == |
-1) { |
// Logging disabled. |
- self->lastError = AEC_UNSUPPORTED_FUNCTION_ERROR; |
- return -1; |
+ return AEC_UNSUPPORTED_FUNCTION_ERROR; |
} |
return 0; |
} |
-int32_t WebRtcAec_get_error_code(void* aecInst) { |
- Aec* aecpc = aecInst; |
- return aecpc->lastError; |
-} |
AecCore* WebRtcAec_aec_core(void* handle) { |
if (!handle) { |
@@ -617,7 +599,7 @@ static int ProcessNormal(Aec* aecpc, |
retVal = WebRtcAec_GetSkew(aecpc->resampler, skew, &aecpc->skew); |
if (retVal == -1) { |
aecpc->skew = 0; |
- aecpc->lastError = AEC_BAD_PARAMETER_WARNING; |
+ retVal = AEC_BAD_PARAMETER_WARNING; |
} |
aecpc->skew /= aecpc->sampFactor * nrOfSamples; |