1 // Copyright 2014 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 MEDIA_CAST_SENDER_AUDIO_ENCODER_H_ 6 #define MEDIA_CAST_SENDER_AUDIO_ENCODER_H_ 7 8 #include "base/memory/ref_counted.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "base/threading/thread_checker.h" 11 #include "media/base/audio_bus.h" 12 #include "media/cast/cast_environment.h" 13 14 namespace base { 15 class TimeTicks; 16 } 17 18 namespace media { 19 namespace cast { 20 21 class AudioEncoder { 22 public: 23 // Callback to deliver each EncodedFrame, plus the number of audio samples 24 // skipped since the last frame. 25 typedef base::Callback<void(scoped_ptr<EncodedFrame>, int)> 26 FrameEncodedCallback; 27 28 AudioEncoder(const scoped_refptr<CastEnvironment>& cast_environment, 29 int num_channels, 30 int sampling_rate, 31 int bitrate, 32 Codec codec, 33 const FrameEncodedCallback& frame_encoded_callback); 34 virtual ~AudioEncoder(); 35 36 CastInitializationStatus InitializationResult() const; 37 38 int GetSamplesPerFrame() const; 39 40 void InsertAudio(scoped_ptr<AudioBus> audio_bus, 41 const base::TimeTicks& recorded_time); 42 43 private: 44 class ImplBase; 45 class OpusImpl; 46 class Pcm16Impl; 47 48 const scoped_refptr<CastEnvironment> cast_environment_; 49 scoped_refptr<ImplBase> impl_; 50 51 // Used to ensure only one thread invokes InsertAudio(). 52 base::ThreadChecker insert_thread_checker_; 53 54 DISALLOW_COPY_AND_ASSIGN(AudioEncoder); 55 }; 56 57 } // namespace cast 58 } // namespace media 59 60 #endif // MEDIA_CAST_SENDER_AUDIO_ENCODER_H_ 61