tor-browser

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

audio_encoder_pcm.h (3743B)


      1 /*
      2 *  Copyright (c) 2014 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_CODING_CODECS_G711_AUDIO_ENCODER_PCM_H_
     12 #define MODULES_AUDIO_CODING_CODECS_G711_AUDIO_ENCODER_PCM_H_
     13 
     14 #include <cstddef>
     15 #include <cstdint>
     16 #include <optional>
     17 #include <utility>
     18 #include <vector>
     19 
     20 #include "api/array_view.h"
     21 #include "api/audio_codecs/audio_encoder.h"
     22 #include "api/units/time_delta.h"
     23 #include "rtc_base/buffer.h"
     24 
     25 namespace webrtc {
     26 
     27 class AudioEncoderPcm : public AudioEncoder {
     28 public:
     29  struct Config {
     30   public:
     31    bool IsOk() const;
     32 
     33    int frame_size_ms;
     34    size_t num_channels;
     35    int payload_type;
     36 
     37   protected:
     38    explicit Config(int pt)
     39        : frame_size_ms(20), num_channels(1), payload_type(pt) {}
     40  };
     41 
     42  ~AudioEncoderPcm() override;
     43 
     44  int SampleRateHz() const override;
     45  size_t NumChannels() const override;
     46  size_t Num10MsFramesInNextPacket() const override;
     47  size_t Max10MsFramesInAPacket() const override;
     48  int GetTargetBitrate() const override;
     49  void Reset() override;
     50  std::optional<std::pair<TimeDelta, TimeDelta>> GetFrameLengthRange()
     51      const override;
     52 
     53 protected:
     54  AudioEncoderPcm(const Config& config, int sample_rate_hz);
     55 
     56  EncodedInfo EncodeImpl(uint32_t rtp_timestamp,
     57                         ArrayView<const int16_t> audio,
     58                         Buffer* encoded) override;
     59 
     60  virtual size_t EncodeCall(const int16_t* audio,
     61                            size_t input_len,
     62                            uint8_t* encoded) = 0;
     63 
     64  virtual size_t BytesPerSample() const = 0;
     65 
     66  // Used to set EncodedInfoLeaf::encoder_type in
     67  // AudioEncoderPcm::EncodeImpl
     68  virtual AudioEncoder::CodecType GetCodecType() const = 0;
     69 
     70 private:
     71  const int sample_rate_hz_;
     72  const size_t num_channels_;
     73  const int payload_type_;
     74  const size_t num_10ms_frames_per_packet_;
     75  const size_t full_frame_samples_;
     76  std::vector<int16_t> speech_buffer_;
     77  uint32_t first_timestamp_in_buffer_;
     78 };
     79 
     80 class AudioEncoderPcmA final : public AudioEncoderPcm {
     81 public:
     82  struct Config : public AudioEncoderPcm::Config {
     83    Config() : AudioEncoderPcm::Config(8) {}
     84  };
     85 
     86  explicit AudioEncoderPcmA(const Config& config)
     87      : AudioEncoderPcm(config, kSampleRateHz) {}
     88 
     89  AudioEncoderPcmA(const AudioEncoderPcmA&) = delete;
     90  AudioEncoderPcmA& operator=(const AudioEncoderPcmA&) = delete;
     91 
     92 protected:
     93  size_t EncodeCall(const int16_t* audio,
     94                    size_t input_len,
     95                    uint8_t* encoded) override;
     96 
     97  size_t BytesPerSample() const override;
     98 
     99  AudioEncoder::CodecType GetCodecType() const override;
    100 
    101 private:
    102  static const int kSampleRateHz = 8000;
    103 };
    104 
    105 class AudioEncoderPcmU final : public AudioEncoderPcm {
    106 public:
    107  struct Config : public AudioEncoderPcm::Config {
    108    Config() : AudioEncoderPcm::Config(0) {}
    109  };
    110 
    111  explicit AudioEncoderPcmU(const Config& config)
    112      : AudioEncoderPcm(config, kSampleRateHz) {}
    113 
    114  AudioEncoderPcmU(const AudioEncoderPcmU&) = delete;
    115  AudioEncoderPcmU& operator=(const AudioEncoderPcmU&) = delete;
    116 
    117 protected:
    118  size_t EncodeCall(const int16_t* audio,
    119                    size_t input_len,
    120                    uint8_t* encoded) override;
    121 
    122  size_t BytesPerSample() const override;
    123 
    124  AudioEncoder::CodecType GetCodecType() const override;
    125 
    126 private:
    127  static const int kSampleRateHz = 8000;
    128 };
    129 
    130 }  // namespace webrtc
    131 
    132 #endif  // MODULES_AUDIO_CODING_CODECS_G711_AUDIO_ENCODER_PCM_H_