| 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 |