Build libwebrtc unit tests executables
[WebKit-https.git] / Source / ThirdParty / libwebrtc / Source / webrtc / common_audio / resampler / include / push_resampler.h
1 /*
2  *  Copyright (c) 2013 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 #ifndef WEBRTC_COMMON_AUDIO_RESAMPLER_INCLUDE_PUSH_RESAMPLER_H_
12 #define WEBRTC_COMMON_AUDIO_RESAMPLER_INCLUDE_PUSH_RESAMPLER_H_
13
14 #include <memory>
15
16 #include "webrtc/common_audio/resampler/push_sinc_resampler.h"
17 #include "webrtc/typedefs.h"
18
19 namespace webrtc {
20
21 class PushSincResampler;
22
23 // Wraps PushSincResampler to provide stereo support.
24 // TODO(ajm): add support for an arbitrary number of channels.
25 template <typename T>
26 class PushResampler {
27  public:
28   PushResampler() = default;
29   virtual ~PushResampler() { }
30
31   // Must be called whenever the parameters change. Free to be called at any
32   // time as it is a no-op if parameters have not changed since the last call.
33   int InitializeIfNeeded(int src_sample_rate_hz, int dst_sample_rate_hz,
34                          size_t num_channels);
35
36   // Returns the total number of samples provided in destination (e.g. 32 kHz,
37   // 2 channel audio gives 640 samples).
38   int Resample(const T* src, size_t src_length, T* dst, size_t dst_capacity);
39
40  private:
41   std::unique_ptr<PushSincResampler> sinc_resampler_;
42   std::unique_ptr<PushSincResampler> sinc_resampler_right_;
43   int src_sample_rate_hz_ { 0 };
44   int dst_sample_rate_hz_ { 0 };
45   size_t num_channels_ { 0 };
46   std::unique_ptr<T[]> src_left_;
47   std::unique_ptr<T[]> src_right_;
48   std::unique_ptr<T[]> dst_left_;
49   std::unique_ptr<T[]> dst_right_;
50 };
51
52 }  // namespace webrtc
53
54 #endif  // WEBRTC_COMMON_AUDIO_RESAMPLER_INCLUDE_PUSH_RESAMPLER_H_