Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(198)

Unified Diff: webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h

Issue 1208993010: iSAC: Make separate AudioEncoder and AudioDecoder objects (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: review fixes Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698