tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

resampler.h (2669B)


      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 /*
     12 * A wrapper for resampling a numerous amount of sampling combinations.
     13 */
     14 
     15 #ifndef COMMON_AUDIO_RESAMPLER_INCLUDE_RESAMPLER_H_
     16 #define COMMON_AUDIO_RESAMPLER_INCLUDE_RESAMPLER_H_
     17 
     18 #include <stddef.h>
     19 #include <stdint.h>
     20 
     21 namespace webrtc {
     22 
     23 // All methods return 0 on success and -1 on failure.
     24 class Resampler {
     25 public:
     26  Resampler();
     27  Resampler(int inFreq, int outFreq, size_t num_channels);
     28  ~Resampler();
     29 
     30  // Reset all states
     31  int Reset(int inFreq, int outFreq, size_t num_channels);
     32 
     33  // Reset all states if any parameter has changed
     34  int ResetIfNeeded(int inFreq, int outFreq, size_t num_channels);
     35 
     36  // Resample samplesIn to samplesOut.
     37  int Push(const int16_t* samplesIn,
     38           size_t lengthIn,
     39           int16_t* samplesOut,
     40           size_t maxLen,
     41           size_t& outLen);  // NOLINT: to avoid changing APIs
     42 
     43 private:
     44  enum ResamplerMode {
     45    kResamplerMode1To1,
     46    kResamplerMode1To2,
     47    kResamplerMode1To3,
     48    kResamplerMode1To4,
     49    kResamplerMode1To6,
     50    kResamplerMode1To12,
     51    kResamplerMode2To3,
     52    kResamplerMode2To11,
     53    kResamplerMode4To11,
     54    kResamplerMode8To11,
     55    kResamplerMode11To16,
     56    kResamplerMode11To32,
     57    kResamplerMode2To1,
     58    kResamplerMode3To1,
     59    kResamplerMode4To1,
     60    kResamplerMode6To1,
     61    kResamplerMode12To1,
     62    kResamplerMode3To2,
     63    kResamplerMode11To2,
     64    kResamplerMode11To4,
     65    kResamplerMode11To8
     66  };
     67 
     68  // Computes the resampler mode for a given sampling frequency pair.
     69  // Returns -1 for unsupported frequency pairs.
     70  static int ComputeResamplerMode(int in_freq_hz,
     71                                  int out_freq_hz,
     72                                  ResamplerMode* mode);
     73 
     74  // Generic pointers since we don't know what states we'll need
     75  void* state1_;
     76  void* state2_;
     77  void* state3_;
     78 
     79  // Storage if needed
     80  int16_t* in_buffer_;
     81  int16_t* out_buffer_;
     82  size_t in_buffer_size_;
     83  size_t out_buffer_size_;
     84  size_t in_buffer_size_max_;
     85  size_t out_buffer_size_max_;
     86 
     87  int my_in_frequency_khz_;
     88  int my_out_frequency_khz_;
     89  ResamplerMode my_mode_;
     90  size_t num_channels_;
     91 
     92  // Extra instance for stereo
     93  Resampler* helper_left_;
     94  Resampler* helper_right_;
     95 };
     96 
     97 }  // namespace webrtc
     98 
     99 #endif  // COMMON_AUDIO_RESAMPLER_INCLUDE_RESAMPLER_H_