tor-browser

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

echo_control_mobile_impl.h (2784B)


      1 /*
      2 *  Copyright (c) 2012 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 MODULES_AUDIO_PROCESSING_ECHO_CONTROL_MOBILE_IMPL_H_
     12 #define MODULES_AUDIO_PROCESSING_ECHO_CONTROL_MOBILE_IMPL_H_
     13 
     14 #include <array>
     15 #include <cstddef>
     16 #include <cstdint>
     17 #include <memory>
     18 #include <vector>
     19 
     20 #include "api/array_view.h"
     21 
     22 namespace webrtc {
     23 
     24 class AudioBuffer;
     25 
     26 // The acoustic echo control for mobile (AECM) component is a low complexity
     27 // robust option intended for use on mobile devices.
     28 class EchoControlMobileImpl {
     29 public:
     30  EchoControlMobileImpl();
     31 
     32  ~EchoControlMobileImpl();
     33 
     34  // Recommended settings for particular audio routes. In general, the louder
     35  // the echo is expected to be, the higher this value should be set. The
     36  // preferred setting may vary from device to device.
     37  enum RoutingMode {
     38    kQuietEarpieceOrHeadset,
     39    kEarpiece,
     40    kLoudEarpiece,
     41    kSpeakerphone,
     42    kLoudSpeakerphone
     43  };
     44 
     45  // Sets echo control appropriate for the audio routing `mode` on the device.
     46  // It can and should be updated during a call if the audio routing changes.
     47  int set_routing_mode(RoutingMode mode);
     48  RoutingMode routing_mode() const;
     49 
     50  // Comfort noise replaces suppressed background noise to maintain a
     51  // consistent signal level.
     52  int enable_comfort_noise(bool enable);
     53  bool is_comfort_noise_enabled() const;
     54 
     55  void ProcessRenderAudio(ArrayView<const int16_t> packed_render_audio);
     56  int ProcessCaptureAudio(AudioBuffer* audio, int stream_delay_ms);
     57 
     58  void Initialize(int sample_rate_hz,
     59                  size_t num_reverse_channels,
     60                  size_t num_output_channels);
     61 
     62  static void PackRenderAudioBuffer(const AudioBuffer* audio,
     63                                    size_t num_output_channels,
     64                                    size_t num_channels,
     65                                    std::vector<int16_t>* packed_buffer);
     66 
     67  static size_t NumCancellersRequired(size_t num_output_channels,
     68                                      size_t num_reverse_channels);
     69 
     70 private:
     71  class Canceller;
     72  struct StreamProperties;
     73 
     74  int Configure();
     75 
     76  RoutingMode routing_mode_;
     77  bool comfort_noise_enabled_;
     78 
     79  std::vector<std::unique_ptr<Canceller>> cancellers_;
     80  std::unique_ptr<StreamProperties> stream_properties_;
     81  std::vector<std::array<int16_t, 160>> low_pass_reference_;
     82  bool reference_copied_ = false;
     83 };
     84 }  // namespace webrtc
     85 
     86 #endif  // MODULES_AUDIO_PROCESSING_ECHO_CONTROL_MOBILE_IMPL_H_