Make AudioDecoder stateless

The channels_ member varable is removed from the base class, and the
associated accessor function is changed to Channels() which is a pure
virtual function.

R=jmarusic@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/43779004

Cr-Commit-Position: refs/heads/master@{#8775}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8775 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
henrik.lundin@webrtc.org
2015-03-18 09:47:08 +00:00
parent 14ee8cc9c7
commit 6dba1ebd14
12 changed files with 62 additions and 36 deletions

View File

@ -39,6 +39,7 @@ class AudioDecoderPcmU : public AudioDecoder {
AudioDecoderPcmU() {}
virtual int Init() { return 0; }
virtual int PacketDuration(const uint8_t* encoded, size_t encoded_len) const;
size_t Channels() const override { return 1; }
protected:
int DecodeInternal(const uint8_t* encoded,
@ -56,6 +57,7 @@ class AudioDecoderPcmA : public AudioDecoder {
AudioDecoderPcmA() {}
virtual int Init() { return 0; }
virtual int PacketDuration(const uint8_t* encoded, size_t encoded_len) const;
size_t Channels() const override { return 1; }
protected:
int DecodeInternal(const uint8_t* encoded,
@ -70,23 +72,27 @@ class AudioDecoderPcmA : public AudioDecoder {
class AudioDecoderPcmUMultiCh : public AudioDecoderPcmU {
public:
explicit AudioDecoderPcmUMultiCh(size_t channels) : AudioDecoderPcmU() {
explicit AudioDecoderPcmUMultiCh(size_t channels)
: AudioDecoderPcmU(), channels_(channels) {
assert(channels > 0);
channels_ = channels;
}
size_t Channels() const override { return channels_; }
private:
const size_t channels_;
DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcmUMultiCh);
};
class AudioDecoderPcmAMultiCh : public AudioDecoderPcmA {
public:
explicit AudioDecoderPcmAMultiCh(size_t channels) : AudioDecoderPcmA() {
explicit AudioDecoderPcmAMultiCh(size_t channels)
: AudioDecoderPcmA(), channels_(channels) {
assert(channels > 0);
channels_ = channels;
}
size_t Channels() const override { return channels_; }
private:
const size_t channels_;
DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcmAMultiCh);
};
@ -98,6 +104,7 @@ class AudioDecoderPcm16B : public AudioDecoder {
AudioDecoderPcm16B();
virtual int Init() { return 0; }
virtual int PacketDuration(const uint8_t* encoded, size_t encoded_len) const;
size_t Channels() const override { return 1; }
protected:
int DecodeInternal(const uint8_t* encoded,
@ -116,8 +123,10 @@ class AudioDecoderPcm16B : public AudioDecoder {
class AudioDecoderPcm16BMultiCh : public AudioDecoderPcm16B {
public:
explicit AudioDecoderPcm16BMultiCh(int num_channels);
size_t Channels() const override { return channels_; }
private:
const size_t channels_;
DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcm16BMultiCh);
};
#endif
@ -130,6 +139,7 @@ class AudioDecoderIlbc : public AudioDecoder {
virtual bool HasDecodePlc() const { return true; }
virtual int DecodePlc(int num_frames, int16_t* decoded);
virtual int Init();
size_t Channels() const override { return 1; }
protected:
int DecodeInternal(const uint8_t* encoded,
@ -152,6 +162,7 @@ class AudioDecoderG722 : public AudioDecoder {
virtual bool HasDecodePlc() const { return false; }
virtual int Init();
virtual int PacketDuration(const uint8_t* encoded, size_t encoded_len) const;
size_t Channels() const override { return 1; }
protected:
int DecodeInternal(const uint8_t* encoded,
@ -177,6 +188,7 @@ class AudioDecoderG722Stereo : public AudioDecoder {
int sample_rate_hz,
int16_t* decoded,
SpeechType* speech_type) override;
size_t Channels() const override { return 2; }
private:
// Splits the stereo-interleaved payload in |encoded| into separate payloads
@ -205,6 +217,7 @@ class AudioDecoderOpus : public AudioDecoder {
virtual int PacketDurationRedundant(const uint8_t* encoded,
size_t encoded_len) const;
virtual bool PacketHasFec(const uint8_t* encoded, size_t encoded_len) const;
size_t Channels() const override { return channels_; }
protected:
int DecodeInternal(const uint8_t* encoded,
@ -220,6 +233,7 @@ class AudioDecoderOpus : public AudioDecoder {
private:
OpusDecInst* dec_state_;
const size_t channels_;
DISALLOW_COPY_AND_ASSIGN(AudioDecoderOpus);
};
#endif
@ -242,6 +256,7 @@ class AudioDecoderCng : public AudioDecoder {
uint32_t arrival_timestamp) { return -1; }
CNG_dec_inst* CngDecoderInstance() override { return dec_state_; }
size_t Channels() const override { return 1; }
protected:
int DecodeInternal(const uint8_t* encoded,