1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MODULES_AUDIO_PROCESSING_AEC_ECHO_CANCELLATION_INTERNAL_H_ 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_AUDIO_PROCESSING_AEC_ECHO_CANCELLATION_INTERNAL_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 14102fd0ad6531bee71c7fdafaafc115ffb8218f0fbjornv@webrtc.org#include "webrtc/modules/audio_processing/aec/aec_core.h" 15b3e5a623285b082a23655cdc02f35a40f652acdfandrew@webrtc.org#include "webrtc/modules/audio_processing/utility/ring_buffer.h" 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct { 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int delayCtr; 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int sampFreq; 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int splitSampFreq; 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int scSampFreq; 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float sampFactor; // scSampRate / sampFreq 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org short skewMode; 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int bufSizeStart; 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int knownDelay; 26102fd0ad6531bee71c7fdafaafc115ffb8218f0fbjornv@webrtc.org int rate_factor; 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org short initFlag; // indicates if AEC has been initialized 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Variables used for averaging far end buffer size 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org short counter; 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int sum; 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org short firstVal; 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org short checkBufSizeCtr; 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Variables used for delay shifts 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org short msInSndCardBuf; 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org short filtDelay; // Filtered delay estimate. 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int timeForDelayChange; 408ddec2c539a1daf4dd08607561090ac163cb9a7aandrew@webrtc.org int startup_phase; 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int checkBuffSize; 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org short lastDelayDiff; 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_AEC_DEBUG_DUMP 45b3e5a623285b082a23655cdc02f35a40f652acdfandrew@webrtc.org RingBuffer* far_pre_buf_s16; // Time domain far-end pre-buffer in int16_t. 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FILE* bufFile; 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FILE* delayFile; 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FILE* skewFile; 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Structures 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void* resampler; 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int skewFrCtr; 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int resample; // if the skew is small enough we don't resample 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int highSkewCtr; 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float skew; 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 59b3e5a623285b082a23655cdc02f35a40f652acdfandrew@webrtc.org RingBuffer* far_pre_buf; // Time domain far-end pre-buffer. 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int lastError; 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 638ddec2c539a1daf4dd08607561090ac163cb9a7aandrew@webrtc.org int farend_started; 648ddec2c539a1daf4dd08607561090ac163cb9a7aandrew@webrtc.org 653a4f3f1ce4f4576f8129bfe900d5cc4737936c4bbjornv@webrtc.org AecCore* aec; 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} aecpc_t; 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_MODULES_AUDIO_PROCESSING_AEC_ECHO_CANCELLATION_INTERNAL_H_ 69