| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // A set of utility functions to perform WSOLA. | 5 // A set of utility functions to perform WSOLA. |
| 6 | 6 |
| 7 #ifndef MEDIA_FILTERS_WSOLA_INTERNALS_H_ | 7 #ifndef MEDIA_FILTERS_WSOLA_INTERNALS_H_ |
| 8 #define MEDIA_FILTERS_WSOLA_INTERNALS_H_ | 8 #define MEDIA_FILTERS_WSOLA_INTERNALS_H_ |
| 9 | 9 |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 | 31 |
| 32 // Energies of sliding windows of channels are interleaved. | 32 // Energies of sliding windows of channels are interleaved. |
| 33 // The number windows is |input->frames()| - (|frames_per_window| - 1), hence, | 33 // The number windows is |input->frames()| - (|frames_per_window| - 1), hence, |
| 34 // the method assumes |energy| must be, at least, of size | 34 // the method assumes |energy| must be, at least, of size |
| 35 // (|input->frames()| - (|frames_per_window| - 1)) * |input->channels()|. | 35 // (|input->frames()| - (|frames_per_window| - 1)) * |input->channels()|. |
| 36 MEDIA_EXPORT void MultiChannelMovingBlockEnergies(const AudioBus* input, | 36 MEDIA_EXPORT void MultiChannelMovingBlockEnergies(const AudioBus* input, |
| 37 int frames_per_window, | 37 int frames_per_window, |
| 38 float* energy); | 38 float* energy); |
| 39 | 39 |
| 40 // Fit the curve f(x) = a * x^2 + b * x + c such that | 40 // Fit the curve f(x) = a * x^2 + b * x + c such that |
| 41 // | 41 // f(-1) = y[0] |
| 42 // f(-1) = |y[0]| | 42 // f(0) = y[1] |
| 43 // f(0) = |y[1]| | 43 // f(1) = y[2] |
| 44 // f(1) = |y[2]|. | 44 // and return the maximum, assuming that y[0] <= y[1] >= y[2]. |
| 45 // | 45 MEDIA_EXPORT void QuadraticInterpolation(const float* y_values, |
| 46 // Then compute the |extremum| point -b / (2*a) and |extremum_value| | 46 float* extremum, |
| 47 // b^2 / (4*a) - b^2 / (2*a) + c. | 47 float* extremum_value); |
| 48 // | |
| 49 // It is not expected that this function is called with | |
| 50 // y[0] == y[1] == y[2]. | |
| 51 MEDIA_EXPORT void CubicInterpolation(const float* y_values, | |
| 52 float* extremum, | |
| 53 float* extremum_value); | |
| 54 | 48 |
| 55 // Search a subset of all candid blocks. The search is performed every | 49 // Search a subset of all candid blocks. The search is performed every |
| 56 // |decimation| frames. This reduces complexity by a factor of about | 50 // |decimation| frames. This reduces complexity by a factor of about |
| 57 // 1 / |decimation|. A cubic interpolation is used to have a better estimate of | 51 // 1 / |decimation|. A cubic interpolation is used to have a better estimate of |
| 58 // the best match. | 52 // the best match. |
| 59 MEDIA_EXPORT int DecimatedSearch(int decimation, | 53 MEDIA_EXPORT int DecimatedSearch(int decimation, |
| 60 Interval exclude_interval, | 54 Interval exclude_interval, |
| 61 const AudioBus* target_block, | 55 const AudioBus* target_block, |
| 62 const AudioBus* search_segment, | 56 const AudioBus* search_segment, |
| 63 const float* energy_target_block, | 57 const float* energy_target_block, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 84 | 78 |
| 85 // Return a "periodic" Hann window. This is the first L samples of an L+1 | 79 // Return a "periodic" Hann window. This is the first L samples of an L+1 |
| 86 // Hann window. It is perfect reconstruction for overlap-and-add. | 80 // Hann window. It is perfect reconstruction for overlap-and-add. |
| 87 MEDIA_EXPORT void GetSymmetricHanningWindow(int window_length, float* window); | 81 MEDIA_EXPORT void GetSymmetricHanningWindow(int window_length, float* window); |
| 88 | 82 |
| 89 } // namespace internal | 83 } // namespace internal |
| 90 | 84 |
| 91 } // namespace media | 85 } // namespace media |
| 92 | 86 |
| 93 #endif // MEDIA_FILTERS_WSOLA_INTERNALS_H_ | 87 #endif // MEDIA_FILTERS_WSOLA_INTERNALS_H_ |
| OLD | NEW |