1c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg/* 2c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 3c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg * 4c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg * Use of this source code is governed by a BSD-style license 5c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg * that can be found in the LICENSE file in the root of the source 6c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg * tree. An additional intellectual property rights grant can be found 7c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg * in the file PATENTS. All contributing project authors may 8c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg * be found in the AUTHORS file in the root of the source tree. 9c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg */ 10c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg 113c652b67468d182bd36aee4c31557621be50cc92kjellander@webrtc.org#include "webrtc/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.h" 12c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg 13c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg#include "webrtc/base/checks.h" 143c652b67468d182bd36aee4c31557621be50cc92kjellander@webrtc.org#include "webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.h" 15c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg 16c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wibergnamespace webrtc { 17c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg 188967183bf79322c5cb3cbd99e9b7aa298228d0a2kwibergAudioDecoderPcm16B::AudioDecoderPcm16B(size_t num_channels) 198967183bf79322c5cb3cbd99e9b7aa298228d0a2kwiberg : num_channels_(num_channels) { 208967183bf79322c5cb3cbd99e9b7aa298228d0a2kwiberg RTC_DCHECK_GE(num_channels, 1u); 218967183bf79322c5cb3cbd99e9b7aa298228d0a2kwiberg} 22c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg 23c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wibergvoid AudioDecoderPcm16B::Reset() {} 24c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg 25c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wibergsize_t AudioDecoderPcm16B::Channels() const { 268967183bf79322c5cb3cbd99e9b7aa298228d0a2kwiberg return num_channels_; 27c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg} 28c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg 29c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wibergint AudioDecoderPcm16B::DecodeInternal(const uint8_t* encoded, 30c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg size_t encoded_len, 31c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg int sample_rate_hz, 32c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg int16_t* decoded, 33c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg SpeechType* speech_type) { 3491d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(sample_rate_hz == 8000 || sample_rate_hz == 16000 || 3591d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg sample_rate_hz == 32000 || sample_rate_hz == 48000) 36c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg << "Unsupported sample rate " << sample_rate_hz; 37c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg size_t ret = WebRtcPcm16b_Decode(encoded, encoded_len, decoded); 38c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg *speech_type = ConvertSpeechType(1); 39c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg return static_cast<int>(ret); 40c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg} 41c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg 42c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wibergint AudioDecoderPcm16B::PacketDuration(const uint8_t* encoded, 43c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg size_t encoded_len) const { 44c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg // Two encoded byte per sample per channel. 45c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg return static_cast<int>(encoded_len / (2 * Channels())); 46c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg} 47c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg 48c0ac6cad00f51b99fafaa7c19e2e63b3b542735bKarl Wiberg} // namespace webrtc 49