| OLD | NEW | 
|   1 /* |   1 /* | 
|   2  *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. |   2  *  Copyright (c) 2014 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 #ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_AUDIO_ENCODER_G722_H_ |  11 #ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_AUDIO_ENCODER_G722_H_ | 
|  12 #define WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_AUDIO_ENCODER_G722_H_ |  12 #define WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_AUDIO_ENCODER_G722_H_ | 
|  13  |  13  | 
|  14 #include <memory> |  14 #include <memory> | 
|  15  |  15  | 
|  16 #include "webrtc/base/buffer.h" |  16 #include "webrtc/base/buffer.h" | 
|  17 #include "webrtc/modules/audio_coding/codecs/audio_encoder.h" |  17 #include "webrtc/modules/audio_coding/codecs/audio_encoder.h" | 
|  18 #include "webrtc/modules/audio_coding/codecs/g722/g722_interface.h" |  18 #include "webrtc/modules/audio_coding/codecs/g722/g722_interface.h" | 
|  19  |  19  | 
|  20 namespace webrtc { |  20 namespace webrtc { | 
|  21  |  21  | 
|  22 struct CodecInst; |  22 struct CodecInst; | 
|  23  |  23  | 
|  24 class AudioEncoderG722 final : public AudioEncoder { |  24 class AudioEncoderG722 final : public AudioEncoder { | 
|  25  public: |  25  public: | 
 |  26   using AudioEncoder::EncodeInternal; | 
 |  27  | 
|  26   struct Config { |  28   struct Config { | 
|  27     bool IsOk() const; |  29     bool IsOk() const; | 
|  28  |  30  | 
|  29     int payload_type = 9; |  31     int payload_type = 9; | 
|  30     int frame_size_ms = 20; |  32     int frame_size_ms = 20; | 
|  31     size_t num_channels = 1; |  33     size_t num_channels = 1; | 
|  32   }; |  34   }; | 
|  33  |  35  | 
|  34   explicit AudioEncoderG722(const Config& config); |  36   explicit AudioEncoderG722(const Config& config); | 
|  35   explicit AudioEncoderG722(const CodecInst& codec_inst); |  37   explicit AudioEncoderG722(const CodecInst& codec_inst); | 
|  36   ~AudioEncoderG722() override; |  38   ~AudioEncoderG722() override; | 
|  37  |  39  | 
|  38   size_t MaxEncodedBytes() const override; |  40   size_t MaxEncodedBytes() const override; | 
|  39   int SampleRateHz() const override; |  41   int SampleRateHz() const override; | 
|  40   size_t NumChannels() const override; |  42   size_t NumChannels() const override; | 
|  41   int RtpTimestampRateHz() const override; |  43   int RtpTimestampRateHz() const override; | 
|  42   size_t Num10MsFramesInNextPacket() const override; |  44   size_t Num10MsFramesInNextPacket() const override; | 
|  43   size_t Max10MsFramesInAPacket() const override; |  45   size_t Max10MsFramesInAPacket() const override; | 
|  44   int GetTargetBitrate() const override; |  46   int GetTargetBitrate() const override; | 
 |  47   void Reset() override; | 
 |  48  | 
 |  49 protected: | 
|  45   EncodedInfo EncodeInternal(uint32_t rtp_timestamp, |  50   EncodedInfo EncodeInternal(uint32_t rtp_timestamp, | 
|  46                              rtc::ArrayView<const int16_t> audio, |  51                              rtc::ArrayView<const int16_t> audio, | 
|  47                              size_t max_encoded_bytes, |  52                              rtc::Buffer* encoded) override; | 
|  48                              uint8_t* encoded) override; |  | 
|  49   void Reset() override; |  | 
|  50  |  53  | 
|  51  private: |  54  private: | 
|  52   // The encoder state for one channel. |  55   // The encoder state for one channel. | 
|  53   struct EncoderState { |  56   struct EncoderState { | 
|  54     G722EncInst* encoder; |  57     G722EncInst* encoder; | 
|  55     std::unique_ptr<int16_t[]> speech_buffer;   // Queued up for encoding. |  58     std::unique_ptr<int16_t[]> speech_buffer;   // Queued up for encoding. | 
|  56     rtc::Buffer encoded_buffer;                 // Already encoded. |  59     rtc::Buffer encoded_buffer;                 // Already encoded. | 
|  57     EncoderState(); |  60     EncoderState(); | 
|  58     ~EncoderState(); |  61     ~EncoderState(); | 
|  59   }; |  62   }; | 
|  60  |  63  | 
|  61   size_t SamplesPerChannel() const; |  64   size_t SamplesPerChannel() const; | 
|  62  |  65  | 
|  63   const size_t num_channels_; |  66   const size_t num_channels_; | 
|  64   const int payload_type_; |  67   const int payload_type_; | 
|  65   const size_t num_10ms_frames_per_packet_; |  68   const size_t num_10ms_frames_per_packet_; | 
|  66   size_t num_10ms_frames_buffered_; |  69   size_t num_10ms_frames_buffered_; | 
|  67   uint32_t first_timestamp_in_buffer_; |  70   uint32_t first_timestamp_in_buffer_; | 
|  68   const std::unique_ptr<EncoderState[]> encoders_; |  71   const std::unique_ptr<EncoderState[]> encoders_; | 
|  69   rtc::Buffer interleave_buffer_; |  72   rtc::Buffer interleave_buffer_; | 
|  70   RTC_DISALLOW_COPY_AND_ASSIGN(AudioEncoderG722); |  73   RTC_DISALLOW_COPY_AND_ASSIGN(AudioEncoderG722); | 
|  71 }; |  74 }; | 
|  72  |  75  | 
|  73 }  // namespace webrtc |  76 }  // namespace webrtc | 
|  74 #endif  // WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_AUDIO_ENCODER_G722_H_ |  77 #endif  // WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_AUDIO_ENCODER_G722_H_ | 
| OLD | NEW |