Index: webrtc/modules/audio_coding/acm2/audio_coding_module_impl.h |
diff --git a/webrtc/modules/audio_coding/acm2/audio_coding_module_impl.h b/webrtc/modules/audio_coding/acm2/audio_coding_module_impl.h |
deleted file mode 100644 |
index c098e62b9914da91662e7690a5b73c8e61f8a316..0000000000000000000000000000000000000000 |
--- a/webrtc/modules/audio_coding/acm2/audio_coding_module_impl.h |
+++ /dev/null |
@@ -1,311 +0,0 @@ |
-/* |
- * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
- * |
- * Use of this source code is governed by a BSD-style license |
- * that can be found in the LICENSE file in the root of the source |
- * tree. An additional intellectual property rights grant can be found |
- * in the file PATENTS. All contributing project authors may |
- * be found in the AUTHORS file in the root of the source tree. |
- */ |
- |
-#ifndef WEBRTC_MODULES_AUDIO_CODING_ACM2_AUDIO_CODING_MODULE_IMPL_H_ |
-#define WEBRTC_MODULES_AUDIO_CODING_ACM2_AUDIO_CODING_MODULE_IMPL_H_ |
- |
-#include <memory> |
-#include <string> |
-#include <vector> |
- |
-#include "webrtc/base/buffer.h" |
-#include "webrtc/base/criticalsection.h" |
-#include "webrtc/base/thread_annotations.h" |
-#include "webrtc/common_types.h" |
-#include "webrtc/engine_configurations.h" |
-#include "webrtc/modules/audio_coding/acm2/acm_receiver.h" |
-#include "webrtc/modules/audio_coding/acm2/acm_resampler.h" |
-#include "webrtc/modules/audio_coding/acm2/codec_manager.h" |
-#include "webrtc/modules/audio_coding/codecs/audio_encoder.h" |
- |
-namespace webrtc { |
- |
-class AudioCodingImpl; |
- |
-namespace acm2 { |
- |
-struct EncoderFactory; |
- |
-class AudioCodingModuleImpl final : public AudioCodingModule { |
- public: |
- friend webrtc::AudioCodingImpl; |
- |
- explicit AudioCodingModuleImpl(const AudioCodingModule::Config& config); |
- ~AudioCodingModuleImpl() override; |
- |
- ///////////////////////////////////////// |
- // Sender |
- // |
- |
- // Can be called multiple times for Codec, CNG, RED. |
- int RegisterSendCodec(const CodecInst& send_codec) override; |
- |
- void RegisterExternalSendCodec( |
- AudioEncoder* external_speech_encoder) override; |
- |
- void ModifyEncoder( |
- FunctionView<void(std::unique_ptr<AudioEncoder>*)> modifier) override; |
- |
- // Get current send codec. |
- rtc::Optional<CodecInst> SendCodec() const override; |
- |
- // Get current send frequency. |
- int SendFrequency() const override; |
- |
- // Sets the bitrate to the specified value in bits/sec. In case the codec does |
- // not support the requested value it will choose an appropriate value |
- // instead. |
- void SetBitRate(int bitrate_bps) override; |
- |
- // Register a transport callback which will be |
- // called to deliver the encoded buffers. |
- int RegisterTransportCallback(AudioPacketizationCallback* transport) override; |
- |
- // Add 10 ms of raw (PCM) audio data to the encoder. |
- int Add10MsData(const AudioFrame& audio_frame) override; |
- |
- ///////////////////////////////////////// |
- // (RED) Redundant Coding |
- // |
- |
- // Configure RED status i.e. on/off. |
- int SetREDStatus(bool enable_red) override; |
- |
- // Get RED status. |
- bool REDStatus() const override; |
- |
- ///////////////////////////////////////// |
- // (FEC) Forward Error Correction (codec internal) |
- // |
- |
- // Configure FEC status i.e. on/off. |
- int SetCodecFEC(bool enabled_codec_fec) override; |
- |
- // Get FEC status. |
- bool CodecFEC() const override; |
- |
- // Set target packet loss rate |
- int SetPacketLossRate(int loss_rate) override; |
- |
- ///////////////////////////////////////// |
- // (VAD) Voice Activity Detection |
- // and |
- // (CNG) Comfort Noise Generation |
- // |
- |
- int SetVAD(bool enable_dtx = true, |
- bool enable_vad = false, |
- ACMVADMode mode = VADNormal) override; |
- |
- int VAD(bool* dtx_enabled, |
- bool* vad_enabled, |
- ACMVADMode* mode) const override; |
- |
- int RegisterVADCallback(ACMVADCallback* vad_callback) override; |
- |
- ///////////////////////////////////////// |
- // Receiver |
- // |
- |
- // Initialize receiver, resets codec database etc. |
- int InitializeReceiver() override; |
- |
- // Get current receive frequency. |
- int ReceiveFrequency() const override; |
- |
- // Get current playout frequency. |
- int PlayoutFrequency() const override; |
- |
- int RegisterReceiveCodec(const CodecInst& receive_codec) override; |
- int RegisterReceiveCodec( |
- const CodecInst& receive_codec, |
- FunctionView<std::unique_ptr<AudioDecoder>()> isac_factory) override; |
- |
- int RegisterExternalReceiveCodec(int rtp_payload_type, |
- AudioDecoder* external_decoder, |
- int sample_rate_hz, |
- int num_channels, |
- const std::string& name) override; |
- |
- // Get current received codec. |
- int ReceiveCodec(CodecInst* current_codec) const override; |
- |
- // Incoming packet from network parsed and ready for decode. |
- int IncomingPacket(const uint8_t* incoming_payload, |
- const size_t payload_length, |
- const WebRtcRTPHeader& rtp_info) override; |
- |
- // Incoming payloads, without rtp-info, the rtp-info will be created in ACM. |
- // One usage for this API is when pre-encoded files are pushed in ACM. |
- int IncomingPayload(const uint8_t* incoming_payload, |
- const size_t payload_length, |
- uint8_t payload_type, |
- uint32_t timestamp) override; |
- |
- // Minimum playout delay. |
- int SetMinimumPlayoutDelay(int time_ms) override; |
- |
- // Maximum playout delay. |
- int SetMaximumPlayoutDelay(int time_ms) override; |
- |
- // Smallest latency NetEq will maintain. |
- int LeastRequiredDelayMs() const override; |
- |
- RTC_DEPRECATED int32_t PlayoutTimestamp(uint32_t* timestamp) override; |
- |
- rtc::Optional<uint32_t> PlayoutTimestamp() override; |
- |
- // Get 10 milliseconds of raw audio data to play out, and |
- // automatic resample to the requested frequency if > 0. |
- int PlayoutData10Ms(int desired_freq_hz, |
- AudioFrame* audio_frame, |
- bool* muted) override; |
- int PlayoutData10Ms(int desired_freq_hz, AudioFrame* audio_frame) override; |
- |
- ///////////////////////////////////////// |
- // Statistics |
- // |
- |
- int GetNetworkStatistics(NetworkStatistics* statistics) override; |
- |
- int SetOpusApplication(OpusApplicationMode application) override; |
- |
- // If current send codec is Opus, informs it about the maximum playback rate |
- // the receiver will render. |
- int SetOpusMaxPlaybackRate(int frequency_hz) override; |
- |
- int EnableOpusDtx() override; |
- |
- int DisableOpusDtx() override; |
- |
- int UnregisterReceiveCodec(uint8_t payload_type) override; |
- |
- int EnableNack(size_t max_nack_list_size) override; |
- |
- void DisableNack() override; |
- |
- std::vector<uint16_t> GetNackList(int64_t round_trip_time_ms) const override; |
- |
- void GetDecodingCallStatistics(AudioDecodingCallStats* stats) const override; |
- |
- private: |
- struct InputData { |
- uint32_t input_timestamp; |
- const int16_t* audio; |
- size_t length_per_channel; |
- size_t audio_channel; |
- // If a re-mix is required (up or down), this buffer will store a re-mixed |
- // version of the input. |
- int16_t buffer[WEBRTC_10MS_PCM_AUDIO]; |
- }; |
- |
- // This member class writes values to the named UMA histogram, but only if |
- // the value has changed since the last time (and always for the first call). |
- class ChangeLogger { |
- public: |
- explicit ChangeLogger(const std::string& histogram_name) |
- : histogram_name_(histogram_name) {} |
- // Logs the new value if it is different from the last logged value, or if |
- // this is the first call. |
- void MaybeLog(int value); |
- |
- private: |
- int last_value_ = 0; |
- int first_time_ = true; |
- const std::string histogram_name_; |
- }; |
- |
- int RegisterReceiveCodecUnlocked( |
- const CodecInst& codec, |
- FunctionView<std::unique_ptr<AudioDecoder>()> isac_factory) |
- EXCLUSIVE_LOCKS_REQUIRED(acm_crit_sect_); |
- |
- int Add10MsDataInternal(const AudioFrame& audio_frame, InputData* input_data) |
- EXCLUSIVE_LOCKS_REQUIRED(acm_crit_sect_); |
- int Encode(const InputData& input_data) |
- EXCLUSIVE_LOCKS_REQUIRED(acm_crit_sect_); |
- |
- int InitializeReceiverSafe() EXCLUSIVE_LOCKS_REQUIRED(acm_crit_sect_); |
- |
- bool HaveValidEncoder(const char* caller_name) const |
- EXCLUSIVE_LOCKS_REQUIRED(acm_crit_sect_); |
- |
- // Preprocessing of input audio, including resampling and down-mixing if |
- // required, before pushing audio into encoder's buffer. |
- // |
- // in_frame: input audio-frame |
- // ptr_out: pointer to output audio_frame. If no preprocessing is required |
- // |ptr_out| will be pointing to |in_frame|, otherwise pointing to |
- // |preprocess_frame_|. |
- // |
- // Return value: |
- // -1: if encountering an error. |
- // 0: otherwise. |
- int PreprocessToAddData(const AudioFrame& in_frame, |
- const AudioFrame** ptr_out) |
- EXCLUSIVE_LOCKS_REQUIRED(acm_crit_sect_); |
- |
- // Change required states after starting to receive the codec corresponding |
- // to |index|. |
- int UpdateUponReceivingCodec(int index); |
- |
- rtc::CriticalSection acm_crit_sect_; |
- rtc::Buffer encode_buffer_ GUARDED_BY(acm_crit_sect_); |
- int id_; // TODO(henrik.lundin) Make const. |
- uint32_t expected_codec_ts_ GUARDED_BY(acm_crit_sect_); |
- uint32_t expected_in_ts_ GUARDED_BY(acm_crit_sect_); |
- ACMResampler resampler_ GUARDED_BY(acm_crit_sect_); |
- AcmReceiver receiver_; // AcmReceiver has it's own internal lock. |
- ChangeLogger bitrate_logger_ GUARDED_BY(acm_crit_sect_); |
- |
- std::unique_ptr<EncoderFactory> encoder_factory_ GUARDED_BY(acm_crit_sect_); |
- |
- // Current encoder stack, either obtained from |
- // encoder_factory_->rent_a_codec.RentEncoderStack or provided by a call to |
- // RegisterEncoder. |
- std::unique_ptr<AudioEncoder> encoder_stack_ GUARDED_BY(acm_crit_sect_); |
- |
- std::unique_ptr<AudioDecoder> isac_decoder_16k_ GUARDED_BY(acm_crit_sect_); |
- std::unique_ptr<AudioDecoder> isac_decoder_32k_ GUARDED_BY(acm_crit_sect_); |
- |
- // This is to keep track of CN instances where we can send DTMFs. |
- uint8_t previous_pltype_ GUARDED_BY(acm_crit_sect_); |
- |
- // Used when payloads are pushed into ACM without any RTP info |
- // One example is when pre-encoded bit-stream is pushed from |
- // a file. |
- // IMPORTANT: this variable is only used in IncomingPayload(), therefore, |
- // no lock acquired when interacting with this variable. If it is going to |
- // be used in other methods, locks need to be taken. |
- std::unique_ptr<WebRtcRTPHeader> aux_rtp_header_; |
- |
- bool receiver_initialized_ GUARDED_BY(acm_crit_sect_); |
- |
- AudioFrame preprocess_frame_ GUARDED_BY(acm_crit_sect_); |
- bool first_10ms_data_ GUARDED_BY(acm_crit_sect_); |
- |
- bool first_frame_ GUARDED_BY(acm_crit_sect_); |
- uint32_t last_timestamp_ GUARDED_BY(acm_crit_sect_); |
- uint32_t last_rtp_timestamp_ GUARDED_BY(acm_crit_sect_); |
- |
- rtc::CriticalSection callback_crit_sect_; |
- AudioPacketizationCallback* packetization_callback_ |
- GUARDED_BY(callback_crit_sect_); |
- ACMVADCallback* vad_callback_ GUARDED_BY(callback_crit_sect_); |
- |
- int codec_histogram_bins_log_[static_cast<size_t>( |
- AudioEncoder::CodecType::kMaxLoggedAudioCodecTypes)]; |
- int number_of_consecutive_empty_packets_; |
-}; |
- |
-} // namespace acm2 |
-} // namespace webrtc |
- |
-#endif // WEBRTC_MODULES_AUDIO_CODING_ACM2_AUDIO_CODING_MODULE_IMPL_H_ |