Chromium Code Reviews| Index: content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc |
| diff --git a/content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc b/content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc |
| index 20a3969d11312d81c0b99354bc08c3f476666884..064cfa2eceff90ef9848cacc4f54d78371f40559 100644 |
| --- a/content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc |
| +++ b/content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc |
| @@ -46,8 +46,7 @@ WebRtcLocalAudioTrackAdapter::WebRtcLocalAudioTrackAdapter( |
| : webrtc::MediaStreamTrack<webrtc::AudioTrackInterface>(label), |
| owner_(NULL), |
| track_source_(track_source), |
| - signaling_thread_(signaling_thread), |
| - signal_level_(0) { |
| + signaling_thread_(signaling_thread) { |
| signaling_thread_checker_.DetachFromThread(); |
|
mcasas
2016/02/26 01:28:19
DCHECK(signaling_thread_);
(this should not happen
miu
2016/02/27 03:46:36
I actually have some threading fixes to this class
|
| capture_thread_.DetachFromThread(); |
| } |
| @@ -72,6 +71,12 @@ void WebRtcLocalAudioTrackAdapter::SetAudioProcessor( |
| audio_processor_ = processor; |
| } |
| +void WebRtcLocalAudioTrackAdapter::SetLevel( |
| + scoped_refptr<MediaStreamAudioLevelCalculator::Level> level) { |
|
mcasas
2016/02/26 01:28:19
Paranoia nit:
DCHECK(capture_thread_.CalledOnVali
miu
2016/02/27 03:46:36
Actually, it's not called from either of those thr
|
| + base::AutoLock auto_lock(lock_); |
| + level_ = level; |
| +} |
| + |
| std::string WebRtcLocalAudioTrackAdapter::kind() const { |
| return kAudioTrackKind; |
| } |
| @@ -126,10 +131,19 @@ void WebRtcLocalAudioTrackAdapter::RemoveSink( |
| } |
| bool WebRtcLocalAudioTrackAdapter::GetSignalLevel(int* level) { |
| - DCHECK(signaling_thread_checker_.CalledOnValidThread()); |
| - |
| - base::AutoLock auto_lock(lock_); |
| - *level = signal_level_; |
| + // Note: Called on the signaling thread by WebRtc. |
| + float signal_level = 0.0f; |
| + { |
| + base::AutoLock auto_lock(lock_); |
| + if (!level_) |
| + return false; |
| + signal_level = level_->GetCurrent(); |
| + } |
| + DCHECK_GE(signal_level, 0.0f); |
| + DCHECK_LE(signal_level, 1.0f); |
| + // Convert from float in range [0.0,1.0] to an int in range [0,32767]. |
| + *level = static_cast<int>(signal_level * std::numeric_limits<int16_t>::max() + |
| + 0.5f /* rounding to nearest int */); |
| return true; |
| } |
| @@ -140,12 +154,6 @@ WebRtcLocalAudioTrackAdapter::GetAudioProcessor() { |
| return audio_processor_.get(); |
| } |
| -void WebRtcLocalAudioTrackAdapter::SetSignalLevel(int signal_level) { |
| - DCHECK(capture_thread_.CalledOnValidThread()); |
| - base::AutoLock auto_lock(lock_); |
| - signal_level_ = signal_level; |
| -} |
| - |
| webrtc::AudioSourceInterface* WebRtcLocalAudioTrackAdapter::GetSource() const { |
| DCHECK(signaling_thread_checker_.CalledOnValidThread()); |
| return track_source_; |