diff --git a/webrtc/modules/audio_coding/BUILD.gn b/webrtc/modules/audio_coding/BUILD.gn index 2494fc0f7c..bc1c35a14d 100644 --- a/webrtc/modules/audio_coding/BUILD.gn +++ b/webrtc/modules/audio_coding/BUILD.gn @@ -639,7 +639,9 @@ config("pcm16b_config") { source_set("pcm16b") { sources = [ + "codecs/pcm16b/audio_decoder_pcm16b.cc", "codecs/pcm16b/audio_encoder_pcm16b.cc", + "codecs/pcm16b/include/audio_decoder_pcm16b.h", "codecs/pcm16b/include/audio_encoder_pcm16b.h", "codecs/pcm16b/include/pcm16b.h", "codecs/pcm16b/pcm16b.c", diff --git a/webrtc/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.cc b/webrtc/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.cc new file mode 100644 index 0000000000..e3074dfd6d --- /dev/null +++ b/webrtc/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.cc @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2015 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. + */ + +#include "webrtc/modules/audio_coding/codecs/pcm16b/include/audio_decoder_pcm16b.h" + +#include "webrtc/base/checks.h" +#include "webrtc/modules/audio_coding/codecs/pcm16b/include/pcm16b.h" + +namespace webrtc { + +AudioDecoderPcm16B::AudioDecoderPcm16B() {} + +void AudioDecoderPcm16B::Reset() {} + +size_t AudioDecoderPcm16B::Channels() const { + return 1; +} + +int AudioDecoderPcm16B::DecodeInternal(const uint8_t* encoded, + size_t encoded_len, + int sample_rate_hz, + int16_t* decoded, + SpeechType* speech_type) { + DCHECK(sample_rate_hz == 8000 || sample_rate_hz == 16000 || + sample_rate_hz == 32000 || sample_rate_hz == 48000) + << "Unsupported sample rate " << sample_rate_hz; + size_t ret = WebRtcPcm16b_Decode(encoded, encoded_len, decoded); + *speech_type = ConvertSpeechType(1); + return static_cast(ret); +} + +int AudioDecoderPcm16B::PacketDuration(const uint8_t* encoded, + size_t encoded_len) const { + // Two encoded byte per sample per channel. + return static_cast(encoded_len / (2 * Channels())); +} + +AudioDecoderPcm16BMultiCh::AudioDecoderPcm16BMultiCh(size_t num_channels) + : channels_(num_channels) { + DCHECK(num_channels > 0); +} + +size_t AudioDecoderPcm16BMultiCh::Channels() const { + return channels_; +} + +} // namespace webrtc diff --git a/webrtc/modules/audio_coding/codecs/pcm16b/include/audio_decoder_pcm16b.h b/webrtc/modules/audio_coding/codecs/pcm16b/include/audio_decoder_pcm16b.h new file mode 100644 index 0000000000..6814c307a9 --- /dev/null +++ b/webrtc/modules/audio_coding/codecs/pcm16b/include/audio_decoder_pcm16b.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2015 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_CODECS_PCM16B_INCLUDE_AUDIO_DECODER_PCM16B_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_INCLUDE_AUDIO_DECODER_PCM16B_H_ + +#include "webrtc/base/constructormagic.h" +#include "webrtc/modules/audio_coding/codecs/audio_decoder.h" + +namespace webrtc { + +class AudioDecoderPcm16B : public AudioDecoder { + public: + AudioDecoderPcm16B(); + void Reset() override; + int PacketDuration(const uint8_t* encoded, size_t encoded_len) const override; + size_t Channels() const override; + + protected: + int DecodeInternal(const uint8_t* encoded, + size_t encoded_len, + int sample_rate_hz, + int16_t* decoded, + SpeechType* speech_type) override; + + private: + RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcm16B); +}; + +class AudioDecoderPcm16BMultiCh : public AudioDecoderPcm16B { + public: + explicit AudioDecoderPcm16BMultiCh(size_t num_channels); + size_t Channels() const override; + + private: + const size_t channels_; + RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcm16BMultiCh); +}; + +} // namespace webrtc +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_INCLUDE_AUDIO_DECODER_PCM16B_H_ diff --git a/webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.gypi b/webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.gypi index 462d752d55..3dc2f772c1 100644 --- a/webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.gypi +++ b/webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.gypi @@ -26,8 +26,10 @@ ], }, 'sources': [ + 'include/audio_decoder_pcm16b.h', 'include/audio_encoder_pcm16b.h', 'include/pcm16b.h', + 'audio_decoder_pcm16b.cc', 'audio_encoder_pcm16b.cc', 'pcm16b.c', ], diff --git a/webrtc/modules/audio_coding/neteq/audio_decoder_impl.cc b/webrtc/modules/audio_coding/neteq/audio_decoder_impl.cc index a96702156f..892555049f 100644 --- a/webrtc/modules/audio_coding/neteq/audio_decoder_impl.cc +++ b/webrtc/modules/audio_coding/neteq/audio_decoder_impl.cc @@ -31,7 +31,7 @@ #ifdef WEBRTC_CODEC_OPUS #include "webrtc/modules/audio_coding/codecs/opus/interface/audio_decoder_opus.h" #endif -#include "webrtc/modules/audio_coding/codecs/pcm16b/include/pcm16b.h" +#include "webrtc/modules/audio_coding/codecs/pcm16b/include/audio_decoder_pcm16b.h" namespace webrtc { @@ -95,43 +95,6 @@ size_t AudioDecoderPcmAMultiCh::Channels() const { return channels_; } -// PCM16B -AudioDecoderPcm16B::AudioDecoderPcm16B() {} - -void AudioDecoderPcm16B::Reset() { -} -size_t AudioDecoderPcm16B::Channels() const { - return 1; -} - -int AudioDecoderPcm16B::DecodeInternal(const uint8_t* encoded, - size_t encoded_len, - int sample_rate_hz, - int16_t* decoded, - SpeechType* speech_type) { - DCHECK(sample_rate_hz == 8000 || sample_rate_hz == 16000 || - sample_rate_hz == 32000 || sample_rate_hz == 48000) - << "Unsupported sample rate " << sample_rate_hz; - size_t ret = WebRtcPcm16b_Decode(encoded, encoded_len, decoded); - *speech_type = ConvertSpeechType(1); - return static_cast(ret); -} - -int AudioDecoderPcm16B::PacketDuration(const uint8_t* encoded, - size_t encoded_len) const { - // Two encoded byte per sample per channel. - return static_cast(encoded_len / (2 * Channels())); -} - -AudioDecoderPcm16BMultiCh::AudioDecoderPcm16BMultiCh(size_t num_channels) - : channels_(num_channels) { - DCHECK(num_channels > 0); -} - -size_t AudioDecoderPcm16BMultiCh::Channels() const { - return channels_; -} - // G.722 #ifdef WEBRTC_CODEC_G722 AudioDecoderG722::AudioDecoderG722() { diff --git a/webrtc/modules/audio_coding/neteq/audio_decoder_impl.h b/webrtc/modules/audio_coding/neteq/audio_decoder_impl.h index 2ef94107cb..ffe908b791 100644 --- a/webrtc/modules/audio_coding/neteq/audio_decoder_impl.h +++ b/webrtc/modules/audio_coding/neteq/audio_decoder_impl.h @@ -90,39 +90,6 @@ class AudioDecoderPcmAMultiCh : public AudioDecoderPcmA { RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcmAMultiCh); }; -// This class handles all four types (i.e., sample rates) of PCM16B codecs. -// The type is specified in the constructor parameter |type|. -class AudioDecoderPcm16B : public AudioDecoder { - public: - AudioDecoderPcm16B(); - void Reset() override; - int PacketDuration(const uint8_t* encoded, size_t encoded_len) const override; - size_t Channels() const override; - - protected: - int DecodeInternal(const uint8_t* encoded, - size_t encoded_len, - int sample_rate_hz, - int16_t* decoded, - SpeechType* speech_type) override; - - private: - RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcm16B); -}; - -// This class handles all four types (i.e., sample rates) of PCM16B codecs. -// The type is specified in the constructor parameter |type|, and the number -// of channels is derived from the type. -class AudioDecoderPcm16BMultiCh : public AudioDecoderPcm16B { - public: - explicit AudioDecoderPcm16BMultiCh(size_t num_channels); - size_t Channels() const override; - - private: - const size_t channels_; - RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcm16BMultiCh); -}; - #ifdef WEBRTC_CODEC_G722 class AudioDecoderG722 : public AudioDecoder { public: diff --git a/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc b/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc index 7c9b56018e..b476d7e31e 100644 --- a/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc +++ b/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc @@ -26,6 +26,7 @@ #include "webrtc/modules/audio_coding/codecs/isac/main/interface/audio_encoder_isac.h" #include "webrtc/modules/audio_coding/codecs/opus/interface/audio_decoder_opus.h" #include "webrtc/modules/audio_coding/codecs/opus/interface/audio_encoder_opus.h" +#include "webrtc/modules/audio_coding/codecs/pcm16b/include/audio_decoder_pcm16b.h" #include "webrtc/modules/audio_coding/codecs/pcm16b/include/audio_encoder_pcm16b.h" #include "webrtc/modules/audio_coding/neteq/tools/resample_input_audio_file.h" #include "webrtc/system_wrappers/interface/data_log.h"