Index: webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h |
diff --git a/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h b/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h |
index 49df3c68be302ad8d4f6db0e1b76d963065115b7..709330426421e9dc4a5f85f1a9f9275187ba89ae 100644 |
--- a/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h |
+++ b/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h |
@@ -13,17 +13,14 @@ |
#include <vector> |
-#include "webrtc/base/scoped_ptr.h" |
-#include "webrtc/base/thread_annotations.h" |
#include "webrtc/modules/audio_coding/codecs/audio_decoder.h" |
#include "webrtc/modules/audio_coding/codecs/audio_encoder.h" |
+#include "webrtc/modules/audio_coding/codecs/isac/locked_bandwidth_info.h" |
namespace webrtc { |
-class CriticalSectionWrapper; |
- |
template <typename T> |
-class AudioEncoderDecoderIsacT : public AudioEncoder, public AudioDecoder { |
+class AudioEncoderIsacT final : public AudioEncoder { |
public: |
// Allowed combinations of sample rate, frame size, and bit rate are |
// - 16000 Hz, 30 ms, 10000-32000 bps |
@@ -34,6 +31,8 @@ class AudioEncoderDecoderIsacT : public AudioEncoder, public AudioDecoder { |
Config(); |
bool IsOk() const; |
+ LockedIsacBandwidthInfo* bwinfo; |
+ |
int payload_type; |
int sample_rate_hz; |
int frame_size_ms; |
@@ -50,81 +49,72 @@ class AudioEncoderDecoderIsacT : public AudioEncoder, public AudioDecoder { |
bool enforce_frame_size; |
}; |
- explicit AudioEncoderDecoderIsacT(const Config& config); |
- ~AudioEncoderDecoderIsacT() override; |
+ explicit AudioEncoderIsacT(const Config& config); |
+ ~AudioEncoderIsacT() override; |
- // AudioEncoder public methods. |
int SampleRateHz() const override; |
int NumChannels() const override; |
size_t MaxEncodedBytes() const override; |
int Num10MsFramesInNextPacket() const override; |
int Max10MsFramesInAPacket() const override; |
int GetTargetBitrate() const override; |
- |
- // AudioDecoder methods. |
- bool HasDecodePlc() const override; |
- int DecodePlc(int num_frames, int16_t* decoded) override; |
- int Init() override; |
- int IncomingPacket(const uint8_t* payload, |
- size_t payload_len, |
- uint16_t rtp_sequence_number, |
- uint32_t rtp_timestamp, |
- uint32_t arrival_timestamp) override; |
- int ErrorCode() override; |
- size_t Channels() const override { return 1; } |
- |
- // AudioEncoder protected method. |
EncodedInfo EncodeInternal(uint32_t rtp_timestamp, |
const int16_t* audio, |
size_t max_encoded_bytes, |
uint8_t* encoded) override; |
- // AudioDecoder protected method. |
- int DecodeInternal(const uint8_t* encoded, |
- size_t encoded_len, |
- int sample_rate_hz, |
- int16_t* decoded, |
- SpeechType* speech_type) override; |
- |
private: |
// This value is taken from STREAM_SIZE_MAX_60 for iSAC float (60 ms) and |
// STREAM_MAXW16_60MS for iSAC fix (60 ms). |
static const size_t kSufficientEncodeBufferSizeBytes = 400; |
const int payload_type_; |
- |
- // iSAC encoder/decoder state, guarded by a mutex to ensure that encode calls |
- // from one thread won't clash with decode calls from another thread. |
- // Note: PT_GUARDED_BY is disabled since it is not yet supported by clang. |
- const rtc::scoped_ptr<CriticalSectionWrapper> state_lock_; |
- typename T::instance_type* isac_state_ |
- GUARDED_BY(state_lock_) /* PT_GUARDED_BY(lock_)*/; |
- |
- int decoder_sample_rate_hz_ GUARDED_BY(state_lock_); |
- |
- // Must be acquired before state_lock_. |
- const rtc::scoped_ptr<CriticalSectionWrapper> lock_; |
+ typename T::instance_type* isac_state_; |
+ LockedIsacBandwidthInfo* bwinfo_; |
// Have we accepted input but not yet emitted it in a packet? |
- bool packet_in_progress_ GUARDED_BY(lock_); |
+ bool packet_in_progress_; |
// Timestamp of the first input of the currently in-progress packet. |
- uint32_t packet_timestamp_ GUARDED_BY(lock_); |
+ uint32_t packet_timestamp_; |
// Timestamp of the previously encoded packet. |
- uint32_t last_encoded_timestamp_ GUARDED_BY(lock_); |
+ uint32_t last_encoded_timestamp_; |
const int target_bitrate_bps_; |
- DISALLOW_COPY_AND_ASSIGN(AudioEncoderDecoderIsacT); |
+ DISALLOW_COPY_AND_ASSIGN(AudioEncoderIsacT); |
}; |
-struct CodecInst; |
- |
-class AudioEncoderDecoderMutableIsac : public AudioEncoderMutable, |
- public AudioDecoder { |
+template <typename T> |
+class AudioDecoderIsacT final : public AudioDecoder { |
public: |
- virtual void UpdateSettings(const CodecInst& codec_inst) = 0; |
+ AudioDecoderIsacT(); |
+ explicit AudioDecoderIsacT(LockedIsacBandwidthInfo* bwinfo); |
+ ~AudioDecoderIsacT() override; |
+ |
+ bool HasDecodePlc() const override; |
+ int DecodePlc(int num_frames, int16_t* decoded) override; |
+ int Init() override; |
+ int IncomingPacket(const uint8_t* payload, |
+ size_t payload_len, |
+ uint16_t rtp_sequence_number, |
+ uint32_t rtp_timestamp, |
+ uint32_t arrival_timestamp) override; |
+ int ErrorCode() override; |
+ size_t Channels() const override; |
+ int DecodeInternal(const uint8_t* encoded, |
+ size_t encoded_len, |
+ int sample_rate_hz, |
+ int16_t* decoded, |
+ SpeechType* speech_type) override; |
+ |
+ private: |
+ typename T::instance_type* isac_state_; |
+ LockedIsacBandwidthInfo* bwinfo_; |
+ int decoder_sample_rate_hz_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(AudioDecoderIsacT); |
}; |
} // namespace webrtc |