OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 // Modified from the Chromium original here: | 11 // Modified from the Chromium original here: |
12 // src/media/base/sinc_resampler.h | 12 // src/media/base/sinc_resampler.h |
13 | 13 |
14 #ifndef WEBRTC_COMMON_AUDIO_RESAMPLER_SINC_RESAMPLER_H_ | 14 #ifndef WEBRTC_COMMON_AUDIO_RESAMPLER_SINC_RESAMPLER_H_ |
15 #define WEBRTC_COMMON_AUDIO_RESAMPLER_SINC_RESAMPLER_H_ | 15 #define WEBRTC_COMMON_AUDIO_RESAMPLER_SINC_RESAMPLER_H_ |
16 | 16 |
17 #include <memory> | |
18 | |
19 #include "webrtc/base/constructormagic.h" | 17 #include "webrtc/base/constructormagic.h" |
20 #include "webrtc/base/gtest_prod_util.h" | 18 #include "webrtc/base/gtest_prod_util.h" |
| 19 #include "webrtc/base/scoped_ptr.h" |
21 #include "webrtc/system_wrappers/include/aligned_malloc.h" | 20 #include "webrtc/system_wrappers/include/aligned_malloc.h" |
22 #include "webrtc/typedefs.h" | 21 #include "webrtc/typedefs.h" |
23 | 22 |
24 namespace webrtc { | 23 namespace webrtc { |
25 | 24 |
26 // Callback class for providing more data into the resampler. Expects |frames| | 25 // Callback class for providing more data into the resampler. Expects |frames| |
27 // of data to be rendered into |destination|; zero padded if not enough frames | 26 // of data to be rendered into |destination|; zero padded if not enough frames |
28 // are available to satisfy the request. | 27 // are available to satisfy the request. |
29 class SincResamplerCallback { | 28 class SincResamplerCallback { |
30 public: | 29 public: |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 | 130 |
132 // The number of source frames processed per pass. | 131 // The number of source frames processed per pass. |
133 size_t block_size_; | 132 size_t block_size_; |
134 | 133 |
135 // The size (in samples) of the internal buffer used by the resampler. | 134 // The size (in samples) of the internal buffer used by the resampler. |
136 const size_t input_buffer_size_; | 135 const size_t input_buffer_size_; |
137 | 136 |
138 // Contains kKernelOffsetCount kernels back-to-back, each of size kKernelSize. | 137 // Contains kKernelOffsetCount kernels back-to-back, each of size kKernelSize. |
139 // The kernel offsets are sub-sample shifts of a windowed sinc shifted from | 138 // The kernel offsets are sub-sample shifts of a windowed sinc shifted from |
140 // 0.0 to 1.0 sample. | 139 // 0.0 to 1.0 sample. |
141 std::unique_ptr<float[], AlignedFreeDeleter> kernel_storage_; | 140 rtc::scoped_ptr<float[], AlignedFreeDeleter> kernel_storage_; |
142 std::unique_ptr<float[], AlignedFreeDeleter> kernel_pre_sinc_storage_; | 141 rtc::scoped_ptr<float[], AlignedFreeDeleter> kernel_pre_sinc_storage_; |
143 std::unique_ptr<float[], AlignedFreeDeleter> kernel_window_storage_; | 142 rtc::scoped_ptr<float[], AlignedFreeDeleter> kernel_window_storage_; |
144 | 143 |
145 // Data from the source is copied into this buffer for each processing pass. | 144 // Data from the source is copied into this buffer for each processing pass. |
146 std::unique_ptr<float[], AlignedFreeDeleter> input_buffer_; | 145 rtc::scoped_ptr<float[], AlignedFreeDeleter> input_buffer_; |
147 | 146 |
148 // Stores the runtime selection of which Convolve function to use. | 147 // Stores the runtime selection of which Convolve function to use. |
149 // TODO(ajm): Move to using a global static which must only be initialized | 148 // TODO(ajm): Move to using a global static which must only be initialized |
150 // once by the user. We're not doing this initially, because we don't have | 149 // once by the user. We're not doing this initially, because we don't have |
151 // e.g. a LazyInstance helper in webrtc. | 150 // e.g. a LazyInstance helper in webrtc. |
152 #if defined(WEBRTC_CPU_DETECTION) | 151 #if defined(WEBRTC_CPU_DETECTION) |
153 typedef float (*ConvolveProc)(const float*, const float*, const float*, | 152 typedef float (*ConvolveProc)(const float*, const float*, const float*, |
154 double); | 153 double); |
155 ConvolveProc convolve_proc_; | 154 ConvolveProc convolve_proc_; |
156 #endif | 155 #endif |
157 | 156 |
158 // Pointers to the various regions inside |input_buffer_|. See the diagram at | 157 // Pointers to the various regions inside |input_buffer_|. See the diagram at |
159 // the top of the .cc file for more information. | 158 // the top of the .cc file for more information. |
160 float* r0_; | 159 float* r0_; |
161 float* const r1_; | 160 float* const r1_; |
162 float* const r2_; | 161 float* const r2_; |
163 float* r3_; | 162 float* r3_; |
164 float* r4_; | 163 float* r4_; |
165 | 164 |
166 RTC_DISALLOW_COPY_AND_ASSIGN(SincResampler); | 165 RTC_DISALLOW_COPY_AND_ASSIGN(SincResampler); |
167 }; | 166 }; |
168 | 167 |
169 } // namespace webrtc | 168 } // namespace webrtc |
170 | 169 |
171 #endif // WEBRTC_COMMON_AUDIO_RESAMPLER_SINC_RESAMPLER_H_ | 170 #endif // WEBRTC_COMMON_AUDIO_RESAMPLER_SINC_RESAMPLER_H_ |
OLD | NEW |