• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 #ifndef REMOTING_CODEC_AUDIO_ENCODER_OPUS_H_
6 #define REMOTING_CODEC_AUDIO_ENCODER_OPUS_H_
7 
8 #include "remoting/codec/audio_encoder.h"
9 
10 #include "remoting/proto/audio.pb.h"
11 
12 struct OpusEncoder;
13 
14 namespace media {
15 class AudioBus;
16 class MultiChannelResampler;
17 }  // namespace media
18 
19 namespace remoting {
20 
21 class AudioPacket;
22 
23 class AudioEncoderOpus : public AudioEncoder {
24  public:
25   AudioEncoderOpus();
26   virtual ~AudioEncoderOpus();
27 
28   // AudioEncoder interface.
29   virtual scoped_ptr<AudioPacket> Encode(
30       scoped_ptr<AudioPacket> packet) OVERRIDE;
31 
32  private:
33   void InitEncoder();
34   void DestroyEncoder();
35   bool ResetForPacket(AudioPacket* packet);
36 
37   void FetchBytesToResample(int resampler_frame_delay,
38                             media::AudioBus* audio_bus);
39 
40   int sampling_rate_;
41   AudioPacket::Channels channels_;
42   OpusEncoder* encoder_;
43 
44   int frame_size_;
45   scoped_ptr<media::MultiChannelResampler> resampler_;
46   scoped_ptr<char[]> resample_buffer_;
47   scoped_ptr<media::AudioBus> resampler_bus_;
48 
49   // Used to pass packet to the FetchBytesToResampler() callback.
50   const char* resampling_data_;
51   int resampling_data_size_;
52   int resampling_data_pos_;
53 
54   // Left-over unencoded samples from the previous AudioPacket.
55   scoped_ptr<int16[]> leftover_buffer_;
56   int leftover_buffer_size_;
57   int leftover_samples_;
58 
59   DISALLOW_COPY_AND_ASSIGN(AudioEncoderOpus);
60 };
61 
62 }  // namespace remoting
63 
64 #endif  // REMOTING_CODEC_AUDIO_ENCODER_OPUS_H_
65