/* * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ // Performs delay estimation on a block by block basis // The return value is 0 - OK and -1 - Error, unless otherwise stated. #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_UTILITY_DELAY_ESTIMATOR_H_ #define WEBRTC_MODULES_AUDIO_PROCESSING_UTILITY_DELAY_ESTIMATOR_H_ #include "typedefs.h" // Releases the memory allocated by WebRtc_CreateDelayEstimator(...) // Input: // - handle : Pointer to the delay estimation instance // int WebRtc_FreeDelayEstimator(void* handle); // Allocates the memory needed by the delay estimation. The memory needs to be // initialized separately using the WebRtc_InitDelayEstimator(...) // function. // // Inputs: // - handle : Instance that should be created // - spectrum_size : Size of the spectrum used both in far end and // near end. Used to allocate memory for spectrum // specific buffers. // - history_size : Size of the far end history used to estimate the // delay from. Used to allocate memory for history // specific buffers. // - enable_alignment : With this mode set to 1, a far end history is // created, so that the user can retrieve aligned // far end spectra using // WebRtc_AlignedFarend(...). Otherwise, only delay // values are calculated. // // Output: // - handle : Created instance // int WebRtc_CreateDelayEstimator(void** handle, int spectrum_size, int history_size, int enable_alignment); // Initializes the delay estimation instance created with // WebRtc_CreateDelayEstimator(...) // Input: // - handle : Pointer to the delay estimation instance // // Output: // - handle : Initialized instance // int WebRtc_InitDelayEstimator(void* handle); // Estimates and returns the delay between the far end and near end blocks. // Inputs: // - handle : Pointer to the delay estimation instance // - far_spectrum : Pointer to the far end spectrum data // - near_spectrum : Pointer to the near end spectrum data of the current // block // - spectrum_size : The size of the data arrays (same for both far and // near end) // - far_q : The Q-domain of the far end data // - vad_value : The VAD decision of the current block // // Output: // - handle : Updated instance // // Return value: // - delay : >= 0 - Calculated delay value // -1 - Error // int WebRtc_DelayEstimatorProcess(void* handle, uint16_t* far_spectrum, uint16_t* near_spectrum, int spectrum_size, int far_q, int vad_value); // Returns a pointer to the far end spectrum aligned to current near end // spectrum. The function WebRtc_DelayEstimatorProcess(...) should have been // called before WebRtc_AlignedFarend(...). Otherwise, you get the pointer to // the previous frame. The memory is only valid until the next call of // WebRtc_DelayEstimatorProcess(...). // // Inputs: // - handle : Pointer to the delay estimation instance // - far_spectrum_size : Size of far_spectrum allocated by the caller // // Output: // - far_q : The Q-domain of the aligned far end spectrum // // Return value: // - far_spectrum : Pointer to the aligned far end spectrum // NULL - Error // const uint16_t* WebRtc_AlignedFarend(void* handle, int far_spectrum_size, int* far_q); // Returns the last calculated delay updated by the function // WebRtc_DelayEstimatorProcess(...) // // Input: // - handle : Pointer to the delay estimation instance // // Return value: // - delay : >= 0 - Last calculated delay value // -1 - Error // int WebRtc_last_delay(void* handle); // Returns the history size used in the far end buffers to calculate the delay // over. // // Input: // - handle : Pointer to the delay estimation instance // // Return value: // - history_size : > 0 - Far end history size // -1 - Error // int WebRtc_history_size(void* handle); // Returns the fixed spectrum size used in the algorithm. // // Input: // - handle : Pointer to the delay estimation instance // // Return value: // - spectrum_size : > 0 - Spectrum size // -1 - Error // int WebRtc_spectrum_size(void* handle); // Returns 1 if the far end alignment is enabled and 0 otherwise. // // Input: // - handle : Pointer to the delay estimation instance // // Return value: // - alignment_enabled : 1 - Enabled // 0 - Disabled // -1 - Error // int WebRtc_is_alignment_enabled(void* handle); #endif // WEBRTC_MODULES_AUDIO_PROCESSING_UTILITY_DELAY_ESTIMATOR_H_