diff options
author | kwiberg <kwiberg@webrtc.org> | 2015-09-16 21:26:32 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-09-17 04:26:39 +0000 |
commit | fff9f176f542053ca7cb887c184c72ad3fc5755d (patch) | |
tree | 0d390454e41d96a93b81977db5bff4883e25339c /webrtc/modules/audio_coding/codecs | |
parent | 1f9baab753be55a7c6d31c84a5470fe646936edd (diff) | |
download | webrtc-fff9f176f542053ca7cb887c184c72ad3fc5755d.tar.gz |
Move AudioDecoderIlbc next to AudioEncoderIlbc
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/1348053002
Cr-Commit-Position: refs/heads/master@{#9961}
Diffstat (limited to 'webrtc/modules/audio_coding/codecs')
3 files changed, 100 insertions, 0 deletions
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_ |