Chromium Code Reviews| 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_ |