Chromium Code Reviews| 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..215e245277ea63bceb76314a88e64626d5e6ecfd 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 |
| +// farend signal. |
| +int32_t WebRtcAec_GetBufferFarendError(void* aecInst, |
| + const float* farend, |
| + size_t nrOfSamples) { |
| + Aec* aecpc = aecInst; |
| + |
| + if (farend == NULL) |
| + 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, |
| @@ -276,22 +290,14 @@ int32_t WebRtcAec_BufferFarend(void* aecInst, |
| size_t newNrOfSamples = nrOfSamples; |
| float new_farend[MAX_RESAMP_LEN]; |
| const float* farend_ptr = farend; |
| + int32_t error_code; |
| - if (farend == NULL) { |
| - aecpc->lastError = AEC_NULL_POINTER_ERROR; |
| - return -1; |
| - } |
| + // Get any error caused by buffering the farend signal. |
| + 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,41 @@ 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; |
| + // Due to the initialization scheme the indirect |
|
Andrew MacDonald
2015/10/16 06:05:09
This looks pretty direct; what do you mean?
In an
peah-webrtc
2015/10/16 08:14:39
Done.
peah-webrtc
2015/10/16 08:14:39
Totally correct. Good find! That was a leftover co
|
| + // reporting of this error code cannot yet be changed to be |
| + // direct. |
| + return AEC_UNINITIALIZED_ERROR; |
| } |
| if (config.skewMode != kAecFalse && config.skewMode != kAecTrue) { |
| - self->lastError = AEC_BAD_PARAMETER_ERROR; |
| - return -1; |
| + // Due to the initialization scheme the indirect |
| + // reporting of this error code cannot yet be changed to be |
| + // direct. |
| + 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; |
| + // Due to the initialization scheme the indirect |
| + // reporting of this error code cannot yet be changed to be |
| + // direct. |
| + return AEC_BAD_PARAMETER_ERROR; |
| } |
| if (config.metricsMode != kAecFalse && config.metricsMode != kAecTrue) { |
| - self->lastError = AEC_BAD_PARAMETER_ERROR; |
| - return -1; |
| + // Due to the initialization scheme the indirect |
| + // reporting of this error code cannot yet be changed to be |
| + // direct. |
| + return AEC_BAD_PARAMETER_ERROR; |
| } |
| if (config.delay_logging != kAecFalse && config.delay_logging != kAecTrue) { |
| - self->lastError = AEC_BAD_PARAMETER_ERROR; |
| - return -1; |
| + // Due to the initialization scheme the indirect |
| + // reporting of this error code cannot yet be changed to be |
| + // direct. |
| + return AEC_BAD_PARAMETER_ERROR; |
| } |
| WebRtcAec_SetConfigCore( |
| @@ -440,12 +449,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 +473,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 +561,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 +614,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; |