Roll src/third_party/skia 4b91f76:9db912c
[chromium-blink-merge.git] / remoting / codec / audio_encoder_opus.h
blobe1c67d5a2cbdde4252f81a5cdb21589d8dab80c1
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef REMOTING_CODEC_AUDIO_ENCODER_OPUS_H_
6 #define REMOTING_CODEC_AUDIO_ENCODER_OPUS_H_
8 #include "remoting/codec/audio_encoder.h"
10 #include "remoting/proto/audio.pb.h"
12 struct OpusEncoder;
14 namespace media {
15 class AudioBus;
16 class MultiChannelResampler;
17 } // namespace media
19 namespace remoting {
21 class AudioPacket;
23 class AudioEncoderOpus : public AudioEncoder {
24 public:
25 AudioEncoderOpus();
26 ~AudioEncoderOpus() override;
28 // AudioEncoder interface.
29 scoped_ptr<AudioPacket> Encode(scoped_ptr<AudioPacket> packet) override;
30 int GetBitrate() override;
32 private:
33 void InitEncoder();
34 void DestroyEncoder();
35 bool ResetForPacket(AudioPacket* packet);
37 void FetchBytesToResample(int resampler_frame_delay,
38 media::AudioBus* audio_bus);
40 int sampling_rate_;
41 AudioPacket::Channels channels_;
42 OpusEncoder* encoder_;
44 int frame_size_;
45 scoped_ptr<media::MultiChannelResampler> resampler_;
46 scoped_ptr<char[]> resample_buffer_;
47 scoped_ptr<media::AudioBus> resampler_bus_;
49 // Used to pass packet to the FetchBytesToResampler() callback.
50 const char* resampling_data_;
51 int resampling_data_size_;
52 int resampling_data_pos_;
54 // Left-over unencoded samples from the previous AudioPacket.
55 scoped_ptr<int16[]> leftover_buffer_;
56 int leftover_buffer_size_;
57 int leftover_samples_;
59 DISALLOW_COPY_AND_ASSIGN(AudioEncoderOpus);
62 } // namespace remoting
64 #endif // REMOTING_CODEC_AUDIO_ENCODER_OPUS_H_