1/*
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
11#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_AUDIO_DECODER_OPUS_H_
12#define WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_AUDIO_DECODER_OPUS_H_
13
14#include "webrtc/modules/audio_coding/codecs/audio_decoder.h"
15#include "webrtc/modules/audio_coding/codecs/opus/opus_interface.h"
16
17namespace webrtc {
18
19class AudioDecoderOpus final : public AudioDecoder {
20 public:
21  explicit AudioDecoderOpus(size_t num_channels);
22  ~AudioDecoderOpus() override;
23
24  void Reset() override;
25  int PacketDuration(const uint8_t* encoded, size_t encoded_len) const override;
26  int PacketDurationRedundant(const uint8_t* encoded,
27                              size_t encoded_len) const override;
28  bool PacketHasFec(const uint8_t* encoded, size_t encoded_len) const override;
29  size_t Channels() const override;
30
31 protected:
32  int DecodeInternal(const uint8_t* encoded,
33                     size_t encoded_len,
34                     int sample_rate_hz,
35                     int16_t* decoded,
36                     SpeechType* speech_type) override;
37  int DecodeRedundantInternal(const uint8_t* encoded,
38                              size_t encoded_len,
39                              int sample_rate_hz,
40                              int16_t* decoded,
41                              SpeechType* speech_type) override;
42
43 private:
44  OpusDecInst* dec_state_;
45  const size_t channels_;
46  RTC_DISALLOW_COPY_AND_ASSIGN(AudioDecoderOpus);
47};
48
49}  // namespace webrtc
50
51#endif  // WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_AUDIO_DECODER_OPUS_H_
52