• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 // Performs delay estimation on block by block basis.
12 // The return value is  0 - OK and -1 - Error, unless otherwise stated.
13 
14 #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_UTILITY_DELAY_ESTIMATOR_WRAPPER_H_
15 #define WEBRTC_MODULES_AUDIO_PROCESSING_UTILITY_DELAY_ESTIMATOR_WRAPPER_H_
16 
17 #include "typedefs.h"
18 
19 // Releases the memory allocated by WebRtc_CreateDelayEstimator(...)
20 // Input:
21 //      - handle        : Pointer to the delay estimation instance.
22 //
23 int WebRtc_FreeDelayEstimator(void* handle);
24 
25 // Allocates the memory needed by the delay estimation. The memory needs to be
26 // initialized separately through WebRtc_InitDelayEstimator(...).
27 //
28 // Inputs:
29 //      - handle        : Instance that should be created.
30 //      - spectrum_size : Size of the spectrum used both in far-end and
31 //                        near-end. Used to allocate memory for spectrum
32 //                        specific buffers.
33 //      - max_delay     : The maximum delay which can be estimated. Needed to
34 //                        allocate memory for history buffers.
35 //      - lookahead     : Amount of non-causal lookahead to use. This can
36 //                        detect cases in which a near-end signal occurs before
37 //                        the corresponding far-end signal. It will delay the
38 //                        estimate for the current block by an equal amount,
39 //                        and the returned values will be offset by it.
40 //
41 //                        A value of zero is the typical no-lookahead case.
42 //                        This also represents the minimum delay which can be
43 //                        estimated.
44 //
45 // Output:
46 //      - handle        : Created instance.
47 //
48 int WebRtc_CreateDelayEstimator(void** handle,
49                                 int spectrum_size,
50                                 int max_delay,
51                                 int lookahead);
52 
53 // Initializes the delay estimation instance created with
54 // WebRtc_CreateDelayEstimator(...)
55 // Input:
56 //      - handle        : Pointer to the delay estimation instance.
57 //
58 // Output:
59 //      - handle        : Initialized instance.
60 //
61 int WebRtc_InitDelayEstimator(void* handle);
62 
63 // Estimates and returns the delay between the far-end and near-end blocks. The
64 // value will be offset by the lookahead (i.e. the lookahead should be
65 // subtracted from the returned value).
66 // Inputs:
67 //      - handle        : Pointer to the delay estimation instance.
68 //      - far_spectrum  : Pointer to the far-end spectrum data.
69 //      - near_spectrum : Pointer to the near-end spectrum data of the current
70 //                        block.
71 //      - spectrum_size : The size of the data arrays (same for both far- and
72 //                        near-end).
73 //      - far_q         : The Q-domain of the far-end data.
74 //      - near_q        : The Q-domain of the near-end data.
75 //
76 // Output:
77 //      - handle        : Updated instance.
78 //
79 // Return value:
80 //      - delay         :  >= 0 - Calculated delay value.
81 //                        -1    - Error.
82 //                        -2    - Insufficient data for estimation.
83 //
84 int WebRtc_DelayEstimatorProcessFix(void* handle,
85                                     uint16_t* far_spectrum,
86                                     uint16_t* near_spectrum,
87                                     int spectrum_size,
88                                     int far_q,
89                                     int near_q);
90 
91 // See WebRtc_DelayEstimatorProcessFix() for description.
92 int WebRtc_DelayEstimatorProcessFloat(void* handle,
93                                       float* far_spectrum,
94                                       float* near_spectrum,
95                                       int spectrum_size);
96 
97 // Returns the last calculated delay updated by the function
98 // WebRtc_DelayEstimatorProcess(...).
99 //
100 // Input:
101 //      - handle        : Pointer to the delay estimation instance.
102 //
103 // Return value:
104 //      - delay         :  >= 0 - Last calculated delay value.
105 //                        -1    - Error.
106 //                        -2    - Insufficient data for estimation.
107 //
108 int WebRtc_last_delay(void* handle);
109 
110 #endif  // WEBRTC_MODULES_AUDIO_PROCESSING_UTILITY_DELAY_ESTIMATOR_WRAPPER_H_
111