From 6faf5bebbab70fd358364b901e36c236bbe84046 Mon Sep 17 00:00:00 2001 From: kwiberg Date: Tue, 22 Sep 2015 06:16:51 -0700 Subject: [PATCH] Move AudioDecoderPcm* next to AudioEncoderPcm* All AudioDecoder subclasses have historically lived in NetEq, but they fit better with the codec they wrap. BUG=webrtc:4557 Review URL: https://codereview.webrtc.org/1348613003 Cr-Commit-Position: refs/heads/master@{#10015} --- webrtc/modules/audio_coding/BUILD.gn | 2 + .../codecs/g711/audio_decoder_pcm.cc | 73 +++++++++++++++++ .../audio_coding/codecs/g711/g711.gypi | 2 + .../codecs/g711/include/audio_decoder_pcm.h | 82 +++++++++++++++++++ .../audio_coding_module_unittest_oldapi.cc | 1 + .../audio_coding/neteq/audio_decoder_impl.cc | 62 +------------- .../audio_coding/neteq/audio_decoder_impl.h | 62 -------------- .../neteq/audio_decoder_unittest.cc | 1 + 8 files changed, 162 insertions(+), 123 deletions(-) create mode 100644 webrtc/modules/audio_coding/codecs/g711/audio_decoder_pcm.cc create mode 100644 webrtc/modules/audio_coding/codecs/g711/include/audio_decoder_pcm.h diff --git a/webrtc/modules/audio_coding/BUILD.gn b/webrtc/modules/audio_coding/BUILD.gn index 862c6051b9..5d85db3e1a 100644 --- a/webrtc/modules/audio_coding/BUILD.gn +++ b/webrtc/modules/audio_coding/BUILD.gn @@ -172,10 +172,12 @@ config("g711_config") { source_set("g711") { sources = [ + "codecs/g711/audio_decoder_pcm.cc", "codecs/g711/audio_encoder_pcm.cc", "codecs/g711/g711.c", "codecs/g711/g711.h", "codecs/g711/g711_interface.c", + "codecs/g711/include/audio_decoder_pcm.h", "codecs/g711/include/audio_encoder_pcm.h", "codecs/g711/include/g711_interface.h", ] diff --git a/webrtc/modules/audio_coding/codecs/g711/audio_decoder_pcm.cc b/webrtc/modules/audio_coding/codecs/g711/audio_decoder_pcm.cc new file mode 100644 index 0000000000..b273b18e18 --- /dev/null +++ b/webrtc/modules/audio_coding/codecs/g711/audio_decoder_pcm.cc @@ -0,0 +1,73 @@ +/* + * 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/g711/include/audio_decoder_pcm.h" + +#include "webrtc/modules/audio_coding/codecs/g711/include/g711_interface.h" + +namespace webrtc { + +void AudioDecoderPcmU::Reset() {} + +size_t AudioDecoderPcmU::Channels() const { + return 1; +} + +int AudioDecoderPcmU::DecodeInternal(const uint8_t* encoded, + size_t encoded_len, + int sample_rate_hz, + int16_t* decoded, + SpeechType* speech_type) { + RTC_DCHECK_EQ(sample_rate_hz, 8000); + int16_t temp_type = 1; // Default is speech. + size_t ret = WebRtcG711_DecodeU(encoded, encoded_len, decoded, &temp_type); + *speech_type = ConvertSpeechType(temp_type); + return static_cast(ret); +} + +int AudioDecoderPcmU::PacketDuration(const uint8_t* encoded, + size_t encoded_len) const { + // One encoded byte per sample per channel. + return static_cast(encoded_len / Channels()); +} + +size_t AudioDecoderPcmUMultiCh::Channels() const { + return channels_; +} + +void AudioDecoderPcmA::Reset() {} + +size_t AudioDecoderPcmA::Channels() const { + return 1; +} + +int AudioDecoderPcmA::DecodeInternal(const uint8_t* encoded, + size_t encoded_len, + int sample_rate_hz, + int16_t* decoded, + SpeechType* speech_type) { + RTC_DCHECK_EQ(sample_rate_hz, 8000); + int16_t temp_type = 1; // Default is speech. + size_t ret = WebRtcG711_DecodeA(encoded, encoded_len, decoded, &temp_type); + *speech_type = ConvertSpeechType(temp_type); + return static_cast(ret); +} + +int AudioDecoderPcmA::PacketDuration(const uint8_t* encoded, + size_t encoded_len) const { + // One encoded byte per sample per channel. + return static_cast(encoded_len / Channels()); +} + +size_t AudioDecoderPcmAMultiCh::Channels() const { + return channels_; +} + +} // namespace webrtc diff --git a/webrtc/modules/audio_coding/codecs/g711/g711.gypi b/webrtc/modules/audio_coding/codecs/g711/g711.gypi index fc86b18e5f..d35d7874e7 100644 --- a/webrtc/modules/audio_coding/codecs/g711/g711.gypi +++ b/webrtc/modules/audio_coding/codecs/g711/g711.gypi @@ -26,10 +26,12 @@ }, 'sources': [ 'include/g711_interface.h', + 'include/audio_decoder_pcm.h', 'include/audio_encoder_pcm.h', 'g711_interface.c', 'g711.c', 'g711.h', + 'audio_decoder_pcm.cc', 'audio_encoder_pcm.cc', ], }, diff --git a/webrtc/modules/audio_coding/codecs/g711/include/audio_decoder_pcm.h b/webrtc/modules/audio_coding/codecs/g711/include/audio_decoder_pcm.h new file mode 100644 index 0000000000..4f82603ba6 --- /dev/null +++ b/webrtc/modules/audio_coding/codecs/g711/include/audio_decoder_pcm.h @@ -0,0 +1,82 @@ +/* + * 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_G711_INCLUDE_AUDIO_DECODER_PCM_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_INCLUDE_AUDIO_DECODER_PCM_H_ + +#include "webrtc/base/checks.h" +#include "webrtc/modules/audio_coding/codecs/audio_decoder.h" + +namespace webrtc { + +class AudioDecoderPcmU : public AudioDecoder { + public: + AudioDecoderPcmU() {} + 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(AudioDecoderPcmU); +}; + +class AudioDecoderPcmA : public AudioDecoder { + public: + AudioDecoderPcmA() {} + 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(AudioDecoderPcmA); +}; + +class AudioDecoderPcmUMultiCh : public AudioDecoderPcmU { + public: + explicit AudioDecoderPcmUMultiCh(size_t channels) + : AudioDecoderPcmU(), channels_(channels) { + RTC_DCHECK_GT(channels, 0u); + } + size_t Channels() const override; + + private: + const size_t channels_; + RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcmUMultiCh); +}; + +class AudioDecoderPcmAMultiCh : public AudioDecoderPcmA { + public: + explicit AudioDecoderPcmAMultiCh(size_t channels) + : AudioDecoderPcmA(), channels_(channels) { + RTC_DCHECK_GT(channels, 0u); + } + size_t Channels() const override; + + private: + const size_t channels_; + RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcmAMultiCh); +}; + +} // namespace webrtc +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_INCLUDE_AUDIO_DECODER_PCM_H_ diff --git a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc index 36e27349cd..ca56d452a2 100644 --- a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc +++ b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc @@ -16,6 +16,7 @@ #include "webrtc/base/scoped_ptr.h" #include "webrtc/base/thread_annotations.h" #include "webrtc/modules/audio_coding/codecs/audio_encoder.h" +#include "webrtc/modules/audio_coding/codecs/g711/include/audio_decoder_pcm.h" #include "webrtc/modules/audio_coding/codecs/g711/include/audio_encoder_pcm.h" #include "webrtc/modules/audio_coding/codecs/isac/main/interface/audio_encoder_isac.h" #include "webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.h" diff --git a/webrtc/modules/audio_coding/neteq/audio_decoder_impl.cc b/webrtc/modules/audio_coding/neteq/audio_decoder_impl.cc index 508129841a..1428eaceda 100644 --- a/webrtc/modules/audio_coding/neteq/audio_decoder_impl.cc +++ b/webrtc/modules/audio_coding/neteq/audio_decoder_impl.cc @@ -14,7 +14,7 @@ #include "webrtc/base/checks.h" #include "webrtc/modules/audio_coding/codecs/cng/include/webrtc_cng.h" -#include "webrtc/modules/audio_coding/codecs/g711/include/g711_interface.h" +#include "webrtc/modules/audio_coding/codecs/g711/include/audio_decoder_pcm.h" #ifdef WEBRTC_CODEC_G722 #include "webrtc/modules/audio_coding/codecs/g722/include/audio_decoder_g722.h" #endif @@ -34,66 +34,6 @@ namespace webrtc { -// PCMu - -void AudioDecoderPcmU::Reset() { -} -size_t AudioDecoderPcmU::Channels() const { - return 1; -} - -int AudioDecoderPcmU::DecodeInternal(const uint8_t* encoded, - size_t encoded_len, - int sample_rate_hz, - int16_t* decoded, - SpeechType* speech_type) { - RTC_DCHECK_EQ(sample_rate_hz, 8000); - int16_t temp_type = 1; // Default is speech. - size_t ret = WebRtcG711_DecodeU(encoded, encoded_len, decoded, &temp_type); - *speech_type = ConvertSpeechType(temp_type); - return static_cast(ret); -} - -int AudioDecoderPcmU::PacketDuration(const uint8_t* encoded, - size_t encoded_len) const { - // One encoded byte per sample per channel. - return static_cast(encoded_len / Channels()); -} - -size_t AudioDecoderPcmUMultiCh::Channels() const { - return channels_; -} - -// PCMa - -void AudioDecoderPcmA::Reset() { -} -size_t AudioDecoderPcmA::Channels() const { - return 1; -} - -int AudioDecoderPcmA::DecodeInternal(const uint8_t* encoded, - size_t encoded_len, - int sample_rate_hz, - int16_t* decoded, - SpeechType* speech_type) { - RTC_DCHECK_EQ(sample_rate_hz, 8000); - int16_t temp_type = 1; // Default is speech. - size_t ret = WebRtcG711_DecodeA(encoded, encoded_len, decoded, &temp_type); - *speech_type = ConvertSpeechType(temp_type); - return static_cast(ret); -} - -int AudioDecoderPcmA::PacketDuration(const uint8_t* encoded, - size_t encoded_len) const { - // One encoded byte per sample per channel. - return static_cast(encoded_len / Channels()); -} - -size_t AudioDecoderPcmAMultiCh::Channels() const { - return channels_; -} - AudioDecoderCng::AudioDecoderCng() { RTC_CHECK_EQ(0, WebRtcCng_CreateDec(&dec_state_)); WebRtcCng_InitDec(dec_state_); diff --git a/webrtc/modules/audio_coding/neteq/audio_decoder_impl.h b/webrtc/modules/audio_coding/neteq/audio_decoder_impl.h index 27f293effc..f7d50d1f66 100644 --- a/webrtc/modules/audio_coding/neteq/audio_decoder_impl.h +++ b/webrtc/modules/audio_coding/neteq/audio_decoder_impl.h @@ -28,68 +28,6 @@ namespace webrtc { -class AudioDecoderPcmU : public AudioDecoder { - public: - AudioDecoderPcmU() {} - 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(AudioDecoderPcmU); -}; - -class AudioDecoderPcmA : public AudioDecoder { - public: - AudioDecoderPcmA() {} - 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(AudioDecoderPcmA); -}; - -class AudioDecoderPcmUMultiCh : public AudioDecoderPcmU { - public: - explicit AudioDecoderPcmUMultiCh(size_t channels) - : AudioDecoderPcmU(), channels_(channels) { - assert(channels > 0); - } - size_t Channels() const override; - - private: - const size_t channels_; - RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcmUMultiCh); -}; - -class AudioDecoderPcmAMultiCh : public AudioDecoderPcmA { - public: - explicit AudioDecoderPcmAMultiCh(size_t channels) - : AudioDecoderPcmA(), channels_(channels) { - assert(channels > 0); - } - size_t Channels() const override; - - private: - const size_t channels_; - RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcmAMultiCh); -}; - // AudioDecoderCng is a special type of AudioDecoder. It inherits from // AudioDecoder just to fit in the DecoderDatabase. None of the class methods // should be used, except constructor, destructor, and accessors. diff --git a/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc b/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc index 64aa6485d8..d7446a826e 100644 --- a/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc +++ b/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc @@ -18,6 +18,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "webrtc/base/scoped_ptr.h" +#include "webrtc/modules/audio_coding/codecs/g711/include/audio_decoder_pcm.h" #include "webrtc/modules/audio_coding/codecs/g711/include/audio_encoder_pcm.h" #include "webrtc/modules/audio_coding/codecs/g722/include/audio_decoder_g722.h" #include "webrtc/modules/audio_coding/codecs/g722/include/audio_encoder_g722.h"