Index: content/renderer/media/webrtc_audio_device_impl.h |
=================================================================== |
--- content/renderer/media/webrtc_audio_device_impl.h (revision 95453) |
+++ content/renderer/media/webrtc_audio_device_impl.h (working copy) |
@@ -10,10 +10,11 @@ |
#include "base/basictypes.h" |
#include "base/memory/ref_counted.h" |
-#include "base/memory/scoped_ptr.h" |
+#include "base/threading/thread.h" |
#include "base/time.h" |
#include "content/renderer/media/audio_device.h" |
#include "content/renderer/media/audio_input_device.h" |
+#include "content/renderer/media/audio_input_device_event_handler.h" |
#include "third_party/webrtc/modules/audio_device/main/interface/audio_device.h" |
// A WebRtcAudioDeviceImpl instance implements the abstract interface |
@@ -85,7 +86,8 @@ |
class WebRtcAudioDeviceImpl |
: public webrtc::AudioDeviceModule, |
public AudioDevice::RenderCallback, |
- public AudioInputDevice::CaptureCallback { |
+ public AudioInputDevice::CaptureCallback, |
+ public AudioInputDeviceEventHandler { |
henrika_dont_use
2011/08/07 16:52:27
Could have been defines using same style as AudioI
wjia(left Chromium)
2011/08/09 01:40:36
see Nested Classes in http://www.chromium.org/deve
|
public: |
WebRtcAudioDeviceImpl(size_t input_buffer_size, |
size_t output_buffer_size, |
@@ -98,137 +100,144 @@ |
// AudioDevice::RenderCallback implementation. |
virtual void Render(const std::vector<float*>& audio_data, |
size_t number_of_frames, |
- size_t audio_delay_milliseconds); |
+ size_t audio_delay_milliseconds) OVERRIDE; |
henrika_dont_use
2011/08/07 16:52:27
General question; what is the benefit of using thi
wjia(left Chromium)
2011/08/09 01:40:36
The compiler can detect inconsistent change when t
|
// AudioInputDevice::CaptureCallback implementation. |
virtual void Capture(const std::vector<float*>& audio_data, |
size_t number_of_frames, |
- size_t audio_delay_milliseconds); |
+ size_t audio_delay_milliseconds) OVERRIDE; |
+ // AudioInputDeviceEventHandler implementation. |
+ virtual void OnRecordingStarted() OVERRIDE; |
+ virtual void OnRecordingStopped() OVERRIDE; |
+ |
// webrtc::Module implementation. |
virtual int32_t Version(char* version, |
uint32_t& remaining_buffer_in_bytes, |
- uint32_t& position) const; |
- virtual int32_t ChangeUniqueId(const int32_t id); |
- virtual int32_t TimeUntilNextProcess(); |
- virtual int32_t Process(); |
+ uint32_t& position) const OVERRIDE; |
+ virtual int32_t ChangeUniqueId(const int32_t id) OVERRIDE; |
+ virtual int32_t TimeUntilNextProcess() OVERRIDE; |
+ virtual int32_t Process() OVERRIDE; |
// webrtc::AudioDeviceModule implementation. |
- virtual int32_t ActiveAudioLayer(AudioLayer* audio_layer) const; |
- virtual ErrorCode LastError() const; |
+ virtual int32_t ActiveAudioLayer(AudioLayer* audio_layer) const OVERRIDE; |
+ virtual ErrorCode LastError() const OVERRIDE; |
virtual int32_t RegisterEventObserver( |
- webrtc::AudioDeviceObserver* event_callback); |
- virtual int32_t RegisterAudioCallback(webrtc::AudioTransport* audio_callback); |
+ webrtc::AudioDeviceObserver* event_callback) OVERRIDE; |
+ virtual int32_t RegisterAudioCallback( |
+ webrtc::AudioTransport* audio_callback) OVERRIDE; |
- virtual int32_t Init(); |
- virtual int32_t Terminate(); |
- virtual bool Initialized() const; |
+ virtual int32_t Init() OVERRIDE; |
+ virtual int32_t Terminate() OVERRIDE; |
+ virtual bool Initialized() const OVERRIDE; |
- virtual int16_t PlayoutDevices(); |
- virtual int16_t RecordingDevices(); |
- virtual int32_t PlayoutDeviceName(uint16_t index, |
- char name[webrtc::kAdmMaxDeviceNameSize], |
- char guid[webrtc::kAdmMaxGuidSize]); |
- virtual int32_t RecordingDeviceName(uint16_t index, |
- char name[webrtc::kAdmMaxDeviceNameSize], |
- char guid[webrtc::kAdmMaxGuidSize]); |
+ virtual int16_t PlayoutDevices() OVERRIDE; |
+ virtual int16_t RecordingDevices() OVERRIDE; |
+ virtual int32_t PlayoutDeviceName( |
+ uint16_t index, |
+ char name[webrtc::kAdmMaxDeviceNameSize], |
+ char guid[webrtc::kAdmMaxGuidSize]) OVERRIDE; |
+ virtual int32_t RecordingDeviceName( |
+ uint16_t index, |
+ char name[webrtc::kAdmMaxDeviceNameSize], |
+ char guid[webrtc::kAdmMaxGuidSize]) OVERRIDE; |
- virtual int32_t SetPlayoutDevice(uint16_t index); |
- virtual int32_t SetPlayoutDevice(WindowsDeviceType device); |
- virtual int32_t SetRecordingDevice(uint16_t index); |
- virtual int32_t SetRecordingDevice(WindowsDeviceType device); |
+ virtual int32_t SetPlayoutDevice(uint16_t index) OVERRIDE; |
+ virtual int32_t SetPlayoutDevice(WindowsDeviceType device) OVERRIDE; |
+ virtual int32_t SetRecordingDevice(uint16_t index) OVERRIDE; |
+ virtual int32_t SetRecordingDevice(WindowsDeviceType device) OVERRIDE; |
- virtual int32_t PlayoutIsAvailable(bool* available); |
- virtual int32_t InitPlayout(); |
- virtual bool PlayoutIsInitialized() const; |
- virtual int32_t RecordingIsAvailable(bool* available); |
- virtual int32_t InitRecording(); |
- virtual bool RecordingIsInitialized() const; |
+ virtual int32_t PlayoutIsAvailable(bool* available) OVERRIDE; |
+ virtual int32_t InitPlayout() OVERRIDE; |
+ virtual bool PlayoutIsInitialized() const OVERRIDE; |
+ virtual int32_t RecordingIsAvailable(bool* available) OVERRIDE; |
+ virtual int32_t InitRecording() OVERRIDE; |
+ virtual bool RecordingIsInitialized() const OVERRIDE; |
- virtual int32_t StartPlayout(); |
- virtual int32_t StopPlayout(); |
- virtual bool Playing() const; |
- virtual int32_t StartRecording(); |
- virtual int32_t StopRecording(); |
- virtual bool Recording() const; |
+ virtual int32_t StartPlayout() OVERRIDE; |
+ virtual int32_t StopPlayout() OVERRIDE; |
+ virtual bool Playing() const OVERRIDE; |
+ virtual int32_t StartRecording() OVERRIDE; |
+ virtual int32_t StopRecording() OVERRIDE; |
+ virtual bool Recording() const OVERRIDE; |
- virtual int32_t SetAGC(bool enable); |
- virtual bool AGC() const; |
+ virtual int32_t SetAGC(bool enable) OVERRIDE; |
+ virtual bool AGC() const OVERRIDE; |
virtual int32_t SetWaveOutVolume(uint16_t volume_left, |
- uint16_t volume_right); |
+ uint16_t volume_right) OVERRIDE; |
virtual int32_t WaveOutVolume(uint16_t* volume_left, |
- uint16_t* volume_right) const; |
+ uint16_t* volume_right) const OVERRIDE; |
- virtual int32_t SpeakerIsAvailable(bool* available); |
- virtual int32_t InitSpeaker(); |
- virtual bool SpeakerIsInitialized() const; |
- virtual int32_t MicrophoneIsAvailable(bool* available); |
- virtual int32_t InitMicrophone(); |
- virtual bool MicrophoneIsInitialized() const; |
+ virtual int32_t SpeakerIsAvailable(bool* available) OVERRIDE; |
+ virtual int32_t InitSpeaker() OVERRIDE; |
+ virtual bool SpeakerIsInitialized() const OVERRIDE; |
+ virtual int32_t MicrophoneIsAvailable(bool* available) OVERRIDE; |
+ virtual int32_t InitMicrophone() OVERRIDE; |
+ virtual bool MicrophoneIsInitialized() const OVERRIDE; |
- virtual int32_t SpeakerVolumeIsAvailable(bool* available); |
- virtual int32_t SetSpeakerVolume(uint32_t volume); |
- virtual int32_t SpeakerVolume(uint32_t* volume) const; |
- virtual int32_t MaxSpeakerVolume(uint32_t* max_volume) const; |
- virtual int32_t MinSpeakerVolume(uint32_t* min_volume) const; |
- virtual int32_t SpeakerVolumeStepSize(uint16_t* step_size) const; |
+ virtual int32_t SpeakerVolumeIsAvailable(bool* available) OVERRIDE; |
+ virtual int32_t SetSpeakerVolume(uint32_t volume) OVERRIDE; |
+ virtual int32_t SpeakerVolume(uint32_t* volume) const OVERRIDE; |
+ virtual int32_t MaxSpeakerVolume(uint32_t* max_volume) const OVERRIDE; |
+ virtual int32_t MinSpeakerVolume(uint32_t* min_volume) const OVERRIDE; |
+ virtual int32_t SpeakerVolumeStepSize(uint16_t* step_size) const OVERRIDE; |
- virtual int32_t MicrophoneVolumeIsAvailable(bool* available); |
- virtual int32_t SetMicrophoneVolume(uint32_t volume); |
- virtual int32_t MicrophoneVolume(uint32_t* volume) const; |
- virtual int32_t MaxMicrophoneVolume(uint32_t* max_volume) const; |
- virtual int32_t MinMicrophoneVolume(uint32_t* min_volume) const; |
- virtual int32_t MicrophoneVolumeStepSize(uint16_t* step_size) const; |
+ virtual int32_t MicrophoneVolumeIsAvailable(bool* available) OVERRIDE; |
+ virtual int32_t SetMicrophoneVolume(uint32_t volume) OVERRIDE; |
+ virtual int32_t MicrophoneVolume(uint32_t* volume) const OVERRIDE; |
+ virtual int32_t MaxMicrophoneVolume(uint32_t* max_volume) const OVERRIDE; |
+ virtual int32_t MinMicrophoneVolume(uint32_t* min_volume) const OVERRIDE; |
+ virtual int32_t MicrophoneVolumeStepSize(uint16_t* step_size) const OVERRIDE; |
- virtual int32_t SpeakerMuteIsAvailable(bool* available); |
- virtual int32_t SetSpeakerMute(bool enable); |
- virtual int32_t SpeakerMute(bool* enabled) const; |
+ virtual int32_t SpeakerMuteIsAvailable(bool* available) OVERRIDE; |
+ virtual int32_t SetSpeakerMute(bool enable) OVERRIDE; |
+ virtual int32_t SpeakerMute(bool* enabled) const OVERRIDE; |
- virtual int32_t MicrophoneMuteIsAvailable(bool* available); |
- virtual int32_t SetMicrophoneMute(bool enable); |
- virtual int32_t MicrophoneMute(bool* enabled) const; |
+ virtual int32_t MicrophoneMuteIsAvailable(bool* available) OVERRIDE; |
+ virtual int32_t SetMicrophoneMute(bool enable) OVERRIDE; |
+ virtual int32_t MicrophoneMute(bool* enabled) const OVERRIDE; |
- virtual int32_t MicrophoneBoostIsAvailable(bool* available); |
- virtual int32_t SetMicrophoneBoost(bool enable); |
- virtual int32_t MicrophoneBoost(bool* enabled) const; |
+ virtual int32_t MicrophoneBoostIsAvailable(bool* available) OVERRIDE; |
+ virtual int32_t SetMicrophoneBoost(bool enable) OVERRIDE; |
+ virtual int32_t MicrophoneBoost(bool* enabled) const OVERRIDE; |
- virtual int32_t StereoPlayoutIsAvailable(bool* available) const; |
- virtual int32_t SetStereoPlayout(bool enable); |
- virtual int32_t StereoPlayout(bool* enabled) const; |
- virtual int32_t StereoRecordingIsAvailable(bool* available) const; |
- virtual int32_t SetStereoRecording(bool enable); |
- virtual int32_t StereoRecording(bool* enabled) const; |
- virtual int32_t SetRecordingChannel(const ChannelType channel); |
- virtual int32_t RecordingChannel(ChannelType* channel) const; |
+ virtual int32_t StereoPlayoutIsAvailable(bool* available) const OVERRIDE; |
+ virtual int32_t SetStereoPlayout(bool enable) OVERRIDE; |
+ virtual int32_t StereoPlayout(bool* enabled) const OVERRIDE; |
+ virtual int32_t StereoRecordingIsAvailable(bool* available) const OVERRIDE; |
+ virtual int32_t SetStereoRecording(bool enable) OVERRIDE; |
+ virtual int32_t StereoRecording(bool* enabled) const OVERRIDE; |
+ virtual int32_t SetRecordingChannel(const ChannelType channel) OVERRIDE; |
+ virtual int32_t RecordingChannel(ChannelType* channel) const OVERRIDE; |
- virtual int32_t SetPlayoutBuffer(const BufferType type, uint16_t size_ms); |
- virtual int32_t PlayoutBuffer(BufferType* type, uint16_t* size_ms) const; |
- virtual int32_t PlayoutDelay(uint16_t* delay_ms) const; |
- virtual int32_t RecordingDelay(uint16_t* delay_ms) const; |
+ virtual int32_t SetPlayoutBuffer(const BufferType type, |
+ uint16_t size_ms) OVERRIDE; |
+ virtual int32_t PlayoutBuffer(BufferType* type, |
+ uint16_t* size_ms) const OVERRIDE; |
+ virtual int32_t PlayoutDelay(uint16_t* delay_ms) const OVERRIDE; |
+ virtual int32_t RecordingDelay(uint16_t* delay_ms) const OVERRIDE; |
- virtual int32_t CPULoad(uint16_t* load) const; |
+ virtual int32_t CPULoad(uint16_t* load) const OVERRIDE; |
virtual int32_t StartRawOutputFileRecording( |
- const char pcm_file_name_utf8[webrtc::kAdmMaxFileNameSize]); |
- virtual int32_t StopRawOutputFileRecording(); |
+ const char pcm_file_name_utf8[webrtc::kAdmMaxFileNameSize]) OVERRIDE; |
+ virtual int32_t StopRawOutputFileRecording() OVERRIDE; |
virtual int32_t StartRawInputFileRecording( |
- const char pcm_file_name_utf8[webrtc::kAdmMaxFileNameSize]); |
- virtual int32_t StopRawInputFileRecording(); |
+ const char pcm_file_name_utf8[webrtc::kAdmMaxFileNameSize]) OVERRIDE; |
+ virtual int32_t StopRawInputFileRecording() OVERRIDE; |
- virtual int32_t SetRecordingSampleRate(const uint32_t samples_per_sec); |
- virtual int32_t RecordingSampleRate(uint32_t* samples_per_sec) const; |
- virtual int32_t SetPlayoutSampleRate(const uint32_t samples_per_sec); |
- virtual int32_t PlayoutSampleRate(uint32_t* samples_per_sec) const; |
+ virtual int32_t SetRecordingSampleRate( |
+ const uint32_t samples_per_sec) OVERRIDE; |
+ virtual int32_t RecordingSampleRate(uint32_t* samples_per_sec) const OVERRIDE; |
+ virtual int32_t SetPlayoutSampleRate(const uint32_t samples_per_sec) OVERRIDE; |
+ virtual int32_t PlayoutSampleRate(uint32_t* samples_per_sec) const OVERRIDE; |
- virtual int32_t ResetAudioDevice(); |
- virtual int32_t SetLoudspeakerStatus(bool enable); |
- virtual int32_t GetLoudspeakerStatus(bool* enabled) const; |
+ virtual int32_t ResetAudioDevice() OVERRIDE; |
+ virtual int32_t SetLoudspeakerStatus(bool enable) OVERRIDE; |
+ virtual int32_t GetLoudspeakerStatus(bool* enabled) const OVERRIDE; |
- // Helpers. |
- bool BufferSizeIsValid(size_t buffer_size, float sample_rate) const; |
- |
// Accessors. |
size_t input_buffer_size() const { return input_buffer_size_; } |
size_t output_buffer_size() const { return output_buffer_size_; } |
@@ -236,6 +245,31 @@ |
int output_channels() const { return output_channels_; } |
private: |
+ enum State { |
+ kStarting, |
+ kStarted, |
+ kPaused, |
+ kStopped, |
+ kStopping, |
+ kError, |
+ }; |
+ |
+ // Helpers. |
+ bool BufferSizeIsValid(size_t buffer_size, float sample_rate) const; |
+ |
+ // Helpers running on Adm thread, corresponding to API functions. |
henrika_dont_use
2011/08/07 16:52:27
ADM=Audio Device Module (should be ADM, right?) Bu
wjia(left Chromium)
2011/08/09 01:40:36
Done.
|
+ void StartRecordingOnAdmThread(); |
+ void StopRecordingOnAdmThread(); |
+ void OnRecordingStartedOnAdmThread(); |
+ void OnRecordingStoppedOnAdmThread(); |
+ void RegisterAudioCallbackOnAdmThread(webrtc::AudioTransport* audio_callback, |
+ int32_t* error, |
+ base::WaitableEvent* event); |
+ void GetRecordingOnAdmThread(bool* recording, |
+ base::WaitableEvent* event) const; |
+ void GetRecordingDelayOnAdmThread(uint16_t* delay_ms, |
+ base::WaitableEvent* event) const; |
+ |
// Provides access to the native audio input layer in the browser process. |
scoped_refptr<AudioInputDevice> audio_input_device_; |
@@ -258,9 +292,14 @@ |
int bytes_per_sample_; |
+ base::Thread adm_thread_; |
+ scoped_refptr<base::MessageLoopProxy> adm_message_loop_; |
+ base::Lock lock_; |
henrika_dont_use
2011/08/07 16:52:27
Comment on what it protects.
wjia(left Chromium)
2011/08/09 01:40:36
Done.
|
+ base::WaitableEvent recording_stop_event_; |
+ |
bool initialized_; |
bool playing_; |
- bool recording_; |
+ State recording_state_; |
// Cached value of the current audio delay on the input/capture side. |
int input_delay_ms_; |
@@ -278,4 +317,7 @@ |
DISALLOW_COPY_AND_ASSIGN(WebRtcAudioDeviceImpl); |
}; |
+DISABLE_RUNNABLE_METHOD_REFCOUNT(WebRtcAudioDeviceImpl); |
henrika_dont_use
2011/08/07 16:52:27
Why are these macros required now?
wjia(left Chromium)
2011/08/09 01:40:36
These are needed for NewRunnableMethod.
wjia(left Chromium)
2011/08/09 01:40:36
These are needed for NewRunnableMethod.
|
+DISABLE_RUNNABLE_METHOD_REFCOUNT(const WebRtcAudioDeviceImpl); |
+ |
#endif // CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_ |