diff --git a/webrtc/modules/audio_coding/BUILD.gn b/webrtc/modules/audio_coding/BUILD.gn index fd96219374..2494fc0f7c 100644 --- a/webrtc/modules/audio_coding/BUILD.gn +++ b/webrtc/modules/audio_coding/BUILD.gn @@ -235,6 +235,7 @@ source_set("ilbc") { "codecs/ilbc/abs_quant.h", "codecs/ilbc/abs_quant_loop.c", "codecs/ilbc/abs_quant_loop.h", + "codecs/ilbc/audio_decoder_ilbc.cc", "codecs/ilbc/audio_encoder_ilbc.cc", "codecs/ilbc/augmented_cb_corr.c", "codecs/ilbc/augmented_cb_corr.h", @@ -300,6 +301,7 @@ source_set("ilbc") { "codecs/ilbc/hp_output.c", "codecs/ilbc/hp_output.h", "codecs/ilbc/ilbc.c", + "codecs/ilbc/include/audio_decoder_ilbc.h", "codecs/ilbc/include/audio_encoder_ilbc.h", "codecs/ilbc/index_conv_dec.c", "codecs/ilbc/index_conv_dec.h", diff --git a/webrtc/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.cc b/webrtc/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.cc new file mode 100644 index 0000000000..619d686802 --- /dev/null +++ b/webrtc/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.cc @@ -0,0 +1,56 @@ +/* + * 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/ilbc/interface/audio_decoder_ilbc.h" + +#include "webrtc/base/checks.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/interface/ilbc.h" + +namespace webrtc { + +AudioDecoderIlbc::AudioDecoderIlbc() { + WebRtcIlbcfix_DecoderCreate(&dec_state_); + WebRtcIlbcfix_Decoderinit30Ms(dec_state_); +} + +AudioDecoderIlbc::~AudioDecoderIlbc() { + WebRtcIlbcfix_DecoderFree(dec_state_); +} + +bool AudioDecoderIlbc::HasDecodePlc() const { + return true; +} + +int AudioDecoderIlbc::DecodeInternal(const uint8_t* encoded, + size_t encoded_len, + int sample_rate_hz, + int16_t* decoded, + SpeechType* speech_type) { + DCHECK_EQ(sample_rate_hz, 8000); + int16_t temp_type = 1; // Default is speech. + int ret = WebRtcIlbcfix_Decode(dec_state_, encoded, encoded_len, decoded, + &temp_type); + *speech_type = ConvertSpeechType(temp_type); + return ret; +} + +size_t AudioDecoderIlbc::DecodePlc(size_t num_frames, int16_t* decoded) { + return WebRtcIlbcfix_NetEqPlc(dec_state_, decoded, num_frames); +} + +void AudioDecoderIlbc::Reset() { + WebRtcIlbcfix_Decoderinit30Ms(dec_state_); +} + +size_t AudioDecoderIlbc::Channels() const { + return 1; +} + +} // namespace webrtc diff --git a/webrtc/modules/audio_coding/codecs/ilbc/ilbc.gypi b/webrtc/modules/audio_coding/codecs/ilbc/ilbc.gypi index ca4704cc40..ce439014a1 100644 --- a/webrtc/modules/audio_coding/codecs/ilbc/ilbc.gypi +++ b/webrtc/modules/audio_coding/codecs/ilbc/ilbc.gypi @@ -26,10 +26,12 @@ ], }, 'sources': [ + 'interface/audio_decoder_ilbc.h', 'interface/audio_encoder_ilbc.h', 'interface/ilbc.h', 'abs_quant.c', 'abs_quant_loop.c', + 'audio_decoder_ilbc.cc', 'audio_encoder_ilbc.cc', 'augmented_cb_corr.c', 'bw_expand.c', diff --git a/webrtc/modules/audio_coding/codecs/ilbc/interface/audio_decoder_ilbc.h b/webrtc/modules/audio_coding/codecs/ilbc/interface/audio_decoder_ilbc.h new file mode 100644 index 0000000000..ada73e5635 --- /dev/null +++ b/webrtc/modules/audio_coding/codecs/ilbc/interface/audio_decoder_ilbc.h @@ -0,0 +1,42 @@ +/* + * 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_ILBC_INTERFACE_AUDIO_DECODER_ILBC_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_INTERFACE_AUDIO_DECODER_ILBC_H_ + +#include "webrtc/modules/audio_coding/codecs/audio_decoder.h" + +typedef struct iLBC_decinst_t_ IlbcDecoderInstance; + +namespace webrtc { + +class AudioDecoderIlbc : public AudioDecoder { + public: + AudioDecoderIlbc(); + ~AudioDecoderIlbc() override; + bool HasDecodePlc() const override; + size_t DecodePlc(size_t num_frames, int16_t* decoded) override; + void Reset() 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: + IlbcDecoderInstance* dec_state_; + RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderIlbc); +}; + +} // namespace webrtc +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_INTERFACE_AUDIO_DECODER_ILBC_H_ diff --git a/webrtc/modules/audio_coding/neteq/audio_decoder_impl.cc b/webrtc/modules/audio_coding/neteq/audio_decoder_impl.cc index 1b0a1c17d2..a96702156f 100644 --- a/webrtc/modules/audio_coding/neteq/audio_decoder_impl.cc +++ b/webrtc/modules/audio_coding/neteq/audio_decoder_impl.cc @@ -20,7 +20,7 @@ #include "webrtc/modules/audio_coding/codecs/g722/include/g722_interface.h" #endif #ifdef WEBRTC_CODEC_ILBC -#include "webrtc/modules/audio_coding/codecs/ilbc/interface/ilbc.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/interface/audio_decoder_ilbc.h" #endif #ifdef WEBRTC_CODEC_ISACFX #include "webrtc/modules/audio_coding/codecs/isac/fix/interface/audio_encoder_isacfix.h" @@ -132,47 +132,6 @@ size_t AudioDecoderPcm16BMultiCh::Channels() const { return channels_; } -// iLBC -#ifdef WEBRTC_CODEC_ILBC -AudioDecoderIlbc::AudioDecoderIlbc() { - WebRtcIlbcfix_DecoderCreate(&dec_state_); - WebRtcIlbcfix_Decoderinit30Ms(dec_state_); -} - -AudioDecoderIlbc::~AudioDecoderIlbc() { - WebRtcIlbcfix_DecoderFree(dec_state_); -} - -bool AudioDecoderIlbc::HasDecodePlc() const { - return true; -} - -int AudioDecoderIlbc::DecodeInternal(const uint8_t* encoded, - size_t encoded_len, - int sample_rate_hz, - int16_t* decoded, - SpeechType* speech_type) { - DCHECK_EQ(sample_rate_hz, 8000); - int16_t temp_type = 1; // Default is speech. - int ret = WebRtcIlbcfix_Decode(dec_state_, encoded, encoded_len, decoded, - &temp_type); - *speech_type = ConvertSpeechType(temp_type); - return ret; -} - -size_t AudioDecoderIlbc::DecodePlc(size_t num_frames, int16_t* decoded) { - return WebRtcIlbcfix_NetEqPlc(dec_state_, decoded, num_frames); -} - -void AudioDecoderIlbc::Reset() { - WebRtcIlbcfix_Decoderinit30Ms(dec_state_); -} - -size_t AudioDecoderIlbc::Channels() const { - return 1; -} -#endif - // 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 2d0d041692..2ef94107cb 100644 --- a/webrtc/modules/audio_coding/neteq/audio_decoder_impl.h +++ b/webrtc/modules/audio_coding/neteq/audio_decoder_impl.h @@ -24,9 +24,6 @@ #ifdef WEBRTC_CODEC_G722 #include "webrtc/modules/audio_coding/codecs/g722/include/g722_interface.h" #endif -#ifdef WEBRTC_CODEC_ILBC -#include "webrtc/modules/audio_coding/codecs/ilbc/interface/ilbc.h" -#endif #include "webrtc/typedefs.h" namespace webrtc { @@ -126,29 +123,6 @@ class AudioDecoderPcm16BMultiCh : public AudioDecoderPcm16B { RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderPcm16BMultiCh); }; -#ifdef WEBRTC_CODEC_ILBC -class AudioDecoderIlbc : public AudioDecoder { - public: - AudioDecoderIlbc(); - ~AudioDecoderIlbc() override; - bool HasDecodePlc() const override; - size_t DecodePlc(size_t num_frames, int16_t* decoded) override; - void Reset() 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: - IlbcDecoderInstance* dec_state_; - RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderIlbc); -}; -#endif - #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 54dcdf5d1f..7c9b56018e 100644 --- a/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc +++ b/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc @@ -20,6 +20,7 @@ #include "webrtc/base/scoped_ptr.h" #include "webrtc/modules/audio_coding/codecs/g711/include/audio_encoder_pcm.h" #include "webrtc/modules/audio_coding/codecs/g722/include/audio_encoder_g722.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/interface/audio_decoder_ilbc.h" #include "webrtc/modules/audio_coding/codecs/ilbc/interface/audio_encoder_ilbc.h" #include "webrtc/modules/audio_coding/codecs/isac/fix/interface/audio_encoder_isacfix.h" #include "webrtc/modules/audio_coding/codecs/isac/main/interface/audio_encoder_isac.h"