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 12struct OpusEncoder; 13 14namespace media { 15class AudioBus; 16class MultiChannelResampler; 17} // namespace media 18 19namespace remoting { 20 21class AudioPacket; 22 23class 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