blob: d8512ec53cb50293d35e35a119da286073137d1d [file] [log] [blame]
Karl Wiberg56788432015-09-15 15:28:181/*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
kjellander@webrtc.org9592d2a2015-11-18 22:07:5711#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_AUDIO_DECODER_OPUS_H_
12#define WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_AUDIO_DECODER_OPUS_H_
Karl Wiberg56788432015-09-15 15:28:1813
kwibergf7c74802017-02-10 16:15:4414#include "webrtc/api/audio_codecs/audio_decoder.h"
kjellander@webrtc.org9592d2a2015-11-18 22:07:5715#include "webrtc/modules/audio_coding/codecs/opus/opus_interface.h"
Edward Lemur76de83e2017-07-06 17:44:3416#include "webrtc/rtc_base/constructormagic.h"
Karl Wiberg56788432015-09-15 15:28:1817
18namespace webrtc {
19
kwiberg50f70b32017-06-30 12:24:5620class AudioDecoderOpusImpl final : public AudioDecoder {
Karl Wiberg56788432015-09-15 15:28:1821 public:
kwiberg50f70b32017-06-30 12:24:5622 explicit AudioDecoderOpusImpl(size_t num_channels);
23 ~AudioDecoderOpusImpl() override;
Karl Wiberg56788432015-09-15 15:28:1824
ossu15d1e472016-09-22 09:06:2825 std::vector<ParseResult> ParsePayload(rtc::Buffer&& payload,
26 uint32_t timestamp) override;
Karl Wiberg56788432015-09-15 15:28:1827 void Reset() override;
28 int PacketDuration(const uint8_t* encoded, size_t encoded_len) const override;
29 int PacketDurationRedundant(const uint8_t* encoded,
30 size_t encoded_len) const override;
31 bool PacketHasFec(const uint8_t* encoded, size_t encoded_len) const override;
kwiberg7a441a02016-05-31 09:46:2032 int SampleRateHz() const override;
Karl Wiberg56788432015-09-15 15:28:1833 size_t Channels() const override;
34
35 protected:
36 int DecodeInternal(const uint8_t* encoded,
37 size_t encoded_len,
38 int sample_rate_hz,
39 int16_t* decoded,
40 SpeechType* speech_type) override;
41 int DecodeRedundantInternal(const uint8_t* encoded,
42 size_t encoded_len,
43 int sample_rate_hz,
44 int16_t* decoded,
45 SpeechType* speech_type) override;
46
47 private:
48 OpusDecInst* dec_state_;
49 const size_t channels_;
kwiberg50f70b32017-06-30 12:24:5650 RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderOpusImpl);
Karl Wiberg56788432015-09-15 15:28:1851};
52
53} // namespace webrtc
54
kjellander@webrtc.org9592d2a2015-11-18 22:07:5755#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_AUDIO_DECODER_OPUS_H_