int32_t WebRtcAec_Process(void* aecInst, const int16_t* nearend, const int16_t* nearendH, int16_t* out, int16_t* outH, int16_t nrOfSamples, int16_t msInSndCardBuf, int32_t skew) { aecpc_t* aecpc = aecInst; int32_t retVal = 0; if (nearend == NULL) { aecpc->lastError = AEC_NULL_POINTER_ERROR; return -1; } if (out == NULL) { aecpc->lastError = AEC_NULL_POINTER_ERROR; return -1; } if (aecpc->initFlag != initCheck) { aecpc->lastError = AEC_UNINITIALIZED_ERROR; return -1; } // number of samples == 160 for SWB input if (nrOfSamples != 80 && nrOfSamples != 160) { aecpc->lastError = AEC_BAD_PARAMETER_ERROR; return -1; } // Check for valid pointers based on sampling rate if (aecpc->sampFreq == 32000 && nearendH == NULL) { aecpc->lastError = AEC_NULL_POINTER_ERROR; return -1; } if (msInSndCardBuf < 0) { msInSndCardBuf = 0; aecpc->lastError = AEC_BAD_PARAMETER_WARNING; retVal = -1; } else if (msInSndCardBuf > kMaxTrustedDelayMs) { // The clamping is now done in ProcessExtended/Normal(). aecpc->lastError = AEC_BAD_PARAMETER_WARNING; retVal = -1; } // This returns the value of aec->extended_filter_enabled. if (WebRtcAec_delay_correction_enabled(aecpc->aec)) { ProcessExtended( aecpc, nearend, nearendH, out, outH, nrOfSamples, msInSndCardBuf, skew); } else { if (ProcessNormal(aecpc, nearend, nearendH, out, outH, nrOfSamples, msInSndCardBuf, skew) != 0) { retVal = -1; } } #ifdef WEBRTC_AEC_DEBUG_DUMP { int16_t far_buf_size_ms = (int16_t)(WebRtcAec_system_delay(aecpc->aec) / (sampMsNb * aecpc->rate_factor)); OpenDebugFiles(aecpc, &webrtc_aec_instance_count); if (aecpc->bufFile) { (void)fwrite(&far_buf_size_ms, 2, 1, aecpc->bufFile); (void)fwrite( &aecpc->knownDelay, sizeof(aecpc->knownDelay), 1, aecpc->delayFile); } } #endif return retVal; }
int32_t WebRtcAec_Process(void* aecInst, const float* const* nearend, size_t num_bands, float* const* out, size_t nrOfSamples, int16_t msInSndCardBuf, int32_t skew) { Aec* aecpc = aecInst; int32_t retVal = 0; if (out == 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; } if (msInSndCardBuf < 0) { msInSndCardBuf = 0; retVal = AEC_BAD_PARAMETER_WARNING; } else if (msInSndCardBuf > kMaxTrustedDelayMs) { // The clamping is now done in ProcessExtended/Normal(). retVal = AEC_BAD_PARAMETER_WARNING; } // This returns the value of aec->extended_filter_enabled. if (WebRtcAec_extended_filter_enabled(aecpc->aec)) { ProcessExtended(aecpc, nearend, num_bands, out, nrOfSamples, msInSndCardBuf, skew); } else { retVal = ProcessNormal(aecpc, nearend, num_bands, out, nrOfSamples, msInSndCardBuf, skew); } #ifdef WEBRTC_AEC_DEBUG_DUMP { int16_t far_buf_size_ms = (int16_t)(WebRtcAec_system_delay(aecpc->aec) / (sampMsNb * aecpc->rate_factor)); OpenDebugFiles(aecpc, &webrtc_aec_instance_count); if (aecpc->bufFile) { (void)fwrite(&far_buf_size_ms, 2, 1, aecpc->bufFile); (void)fwrite( &aecpc->knownDelay, sizeof(aecpc->knownDelay), 1, aecpc->delayFile); } } #endif return retVal; }