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 WEBRTC_MODULES_AUDIO_CODING_CODECS_RED_AUDIO_ENCODER_COPY_RED_H_ 12 #define WEBRTC_MODULES_AUDIO_CODING_CODECS_RED_AUDIO_ENCODER_COPY_RED_H_ 13 14 #include <vector> 15 16 #include "webrtc/base/buffer.h" 17 #include "webrtc/base/scoped_ptr.h" 18 #include "webrtc/modules/audio_coding/codecs/audio_encoder.h" 19 20 namespace webrtc { 21 22 // This class implements redundant audio coding. The class object will have an 23 // underlying AudioEncoder object that performs the actual encodings. The 24 // current class will gather the two latest encodings from the underlying codec 25 // into one packet. 26 class AudioEncoderCopyRed final : public AudioEncoder { 27 public: 28 struct Config { 29 public: 30 int payload_type; 31 AudioEncoder* speech_encoder; 32 }; 33 34 // Caller keeps ownership of the AudioEncoder object. 35 explicit AudioEncoderCopyRed(const Config& config); 36 37 ~AudioEncoderCopyRed() override; 38 39 size_t MaxEncodedBytes() const override; 40 int SampleRateHz() const override; 41 size_t NumChannels() const override; 42 int RtpTimestampRateHz() const override; 43 size_t Num10MsFramesInNextPacket() const override; 44 size_t Max10MsFramesInAPacket() const override; 45 int GetTargetBitrate() const override; 46 EncodedInfo EncodeInternal(uint32_t rtp_timestamp, 47 rtc::ArrayView<const int16_t> audio, 48 size_t max_encoded_bytes, 49 uint8_t* encoded) override; 50 void Reset() override; 51 bool SetFec(bool enable) override; 52 bool SetDtx(bool enable) override; 53 bool SetApplication(Application application) override; 54 void SetMaxPlaybackRate(int frequency_hz) override; 55 void SetProjectedPacketLossRate(double fraction) override; 56 void SetTargetBitrate(int target_bps) override; 57 58 private: 59 AudioEncoder* speech_encoder_; 60 int red_payload_type_; 61 rtc::Buffer secondary_encoded_; 62 EncodedInfoLeaf secondary_info_; 63 RTC_DISALLOW_COPY_AND_ASSIGN(AudioEncoderCopyRed); 64 }; 65 66 } // namespace webrtc 67 68 #endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_RED_AUDIO_ENCODER_COPY_RED_H_ 69