Commit 03711d7e authored by xians@chromium.org's avatar xians@chromium.org

remove the race related to output_delay_ms_ in ADM and races in the unittests.

Review URL: http://codereview.chromium.org/8799011

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@114002 0039d316-1c4b-4281-b951-d872f2087c98
parent cf5813ec
...@@ -65,8 +65,11 @@ void WebRtcAudioDeviceImpl::Render( ...@@ -65,8 +65,11 @@ void WebRtcAudioDeviceImpl::Render(
size_t audio_delay_milliseconds) { size_t audio_delay_milliseconds) {
DCHECK_LE(number_of_frames, output_buffer_size_); DCHECK_LE(number_of_frames, output_buffer_size_);
// Store the reported audio delay locally. {
output_delay_ms_ = audio_delay_milliseconds; base::AutoLock auto_lock(lock_);
// Store the reported audio delay locally.
output_delay_ms_ = audio_delay_milliseconds;
}
const int channels = audio_data.size(); const int channels = audio_data.size();
DCHECK_LE(channels, output_channels_); DCHECK_LE(channels, output_channels_);
...@@ -119,8 +122,13 @@ void WebRtcAudioDeviceImpl::Capture( ...@@ -119,8 +122,13 @@ void WebRtcAudioDeviceImpl::Capture(
size_t audio_delay_milliseconds) { size_t audio_delay_milliseconds) {
DCHECK_LE(number_of_frames, input_buffer_size_); DCHECK_LE(number_of_frames, input_buffer_size_);
// Store the reported audio delay locally. int output_delay_ms = 0;
input_delay_ms_ = audio_delay_milliseconds; {
base::AutoLock auto_lock(lock_);
// Store the reported audio delay locally.
input_delay_ms_ = audio_delay_milliseconds;
output_delay_ms = output_delay_ms_;
}
const int channels = audio_data.size(); const int channels = audio_data.size();
DCHECK_LE(channels, input_channels_); DCHECK_LE(channels, input_channels_);
...@@ -156,7 +164,7 @@ void WebRtcAudioDeviceImpl::Capture( ...@@ -156,7 +164,7 @@ void WebRtcAudioDeviceImpl::Capture(
bytes_per_sample_, bytes_per_sample_,
channels, channels,
samples_per_sec, samples_per_sec,
input_delay_ms_ + output_delay_ms_, input_delay_ms_ + output_delay_ms,
0, // clock_drift 0, // clock_drift
0, // current_mic_level 0, // current_mic_level
new_mic_level); // not used new_mic_level); // not used
...@@ -642,12 +650,17 @@ int32_t WebRtcAudioDeviceImpl::StopRecording() { ...@@ -642,12 +650,17 @@ int32_t WebRtcAudioDeviceImpl::StopRecording() {
DVLOG(1) << "StopRecording()"; DVLOG(1) << "StopRecording()";
DCHECK(audio_input_device_); DCHECK(audio_input_device_);
base::AutoLock auto_lock(lock_); {
if (!recording_) { base::AutoLock auto_lock(lock_);
// webrtc::VoiceEngine assumes that it is OK to call Stop() just in case. if (!recording_) {
return 0; // webrtc::VoiceEngine assumes that it is OK to call Stop() just in case.
return 0;
}
} }
audio_input_device_->Stop(); audio_input_device_->Stop();
base::AutoLock auto_lock(lock_);
recording_ = false; recording_ = false;
return 0; return 0;
} }
...@@ -890,12 +903,14 @@ int32_t WebRtcAudioDeviceImpl::PlayoutBuffer(BufferType* type, ...@@ -890,12 +903,14 @@ int32_t WebRtcAudioDeviceImpl::PlayoutBuffer(BufferType* type,
int32_t WebRtcAudioDeviceImpl::PlayoutDelay(uint16_t* delay_ms) const { int32_t WebRtcAudioDeviceImpl::PlayoutDelay(uint16_t* delay_ms) const {
// Report the cached output delay value. // Report the cached output delay value.
base::AutoLock auto_lock(lock_);
*delay_ms = static_cast<uint16_t>(output_delay_ms_); *delay_ms = static_cast<uint16_t>(output_delay_ms_);
return 0; return 0;
} }
int32_t WebRtcAudioDeviceImpl::RecordingDelay(uint16_t* delay_ms) const { int32_t WebRtcAudioDeviceImpl::RecordingDelay(uint16_t* delay_ms) const {
// Report the cached output delay value. // Report the cached output delay value.
base::AutoLock auto_lock(lock_);
*delay_ms = static_cast<uint16_t>(input_delay_ms_); *delay_ms = static_cast<uint16_t>(input_delay_ms_);
return 0; return 0;
} }
......
...@@ -321,8 +321,8 @@ class CONTENT_EXPORT WebRtcAudioDeviceImpl ...@@ -321,8 +321,8 @@ class CONTENT_EXPORT WebRtcAudioDeviceImpl
// on the input/capture side. // on the input/capture side.
int session_id_; int session_id_;
// Protects |recording_|. // Protects |recording_|, |output_delay_ms_|, |input_delay_ms_|.
base::Lock lock_; mutable base::Lock lock_;
int bytes_per_sample_; int bytes_per_sample_;
......
...@@ -107,6 +107,7 @@ class WebRTCMediaProcessImpl : public webrtc::VoEMediaProcess { ...@@ -107,6 +107,7 @@ class WebRTCMediaProcessImpl : public webrtc::VoEMediaProcess {
const int length, const int length,
const int sampling_freq, const int sampling_freq,
const bool is_stereo) { const bool is_stereo) {
base::AutoLock auto_lock(lock_);
channel_id_ = channel; channel_id_ = channel;
type_ = type; type_ = type;
packet_size_ = length; packet_size_ = length;
...@@ -118,11 +119,30 @@ class WebRTCMediaProcessImpl : public webrtc::VoEMediaProcess { ...@@ -118,11 +119,30 @@ class WebRTCMediaProcessImpl : public webrtc::VoEMediaProcess {
} }
} }
int channel_id() const { return channel_id_; } int channel_id() const {
int type() const { return type_; } base::AutoLock auto_lock(lock_);
int packet_size() const { return packet_size_; } return channel_id_;
int sample_rate() const { return sample_rate_; } }
int channels() const { return channels_; }
int type() const {
base::AutoLock auto_lock(lock_);
return type_;
}
int packet_size() const {
base::AutoLock auto_lock(lock_);
return packet_size_;
}
int sample_rate() const {
base::AutoLock auto_lock(lock_);
return sample_rate_;
}
int channels() const {
base::AutoLock auto_lock(lock_);
return channels_;
}
private: private:
base::WaitableEvent* event_; base::WaitableEvent* event_;
...@@ -131,6 +151,7 @@ class WebRTCMediaProcessImpl : public webrtc::VoEMediaProcess { ...@@ -131,6 +151,7 @@ class WebRTCMediaProcessImpl : public webrtc::VoEMediaProcess {
int packet_size_; int packet_size_;
int sample_rate_; int sample_rate_;
int channels_; int channels_;
mutable base::Lock lock_;
DISALLOW_COPY_AND_ASSIGN(WebRTCMediaProcessImpl); DISALLOW_COPY_AND_ASSIGN(WebRTCMediaProcessImpl);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment