Chromium Code Reviews| Index: chrome/browser/chromeos/audio/audio_mixer_cras.cc |
| diff --git a/chrome/browser/chromeos/audio/audio_mixer_cras.cc b/chrome/browser/chromeos/audio/audio_mixer_cras.cc |
| index cffb4eddc39e2e8cf010ea147d1747b6eccc1535..b22f154efc02bb163c0ddff673f98e2d5d1e5e89 100644 |
| --- a/chrome/browser/chromeos/audio/audio_mixer_cras.cc |
| +++ b/chrome/browser/chromeos/audio/audio_mixer_cras.cc |
| @@ -36,6 +36,9 @@ AudioMixerCras::AudioMixerCras() |
| client_connected_(false), |
| volume_percent_(kDefaultVolumePercent), |
| is_muted_(false), |
| + is_mute_locked_(false), |
| + is_capture_muted_(false), |
| + is_capture_mute_locked_(false), |
| apply_is_pending_(true) { |
| } |
| @@ -88,10 +91,52 @@ bool AudioMixerCras::IsMuted() { |
| void AudioMixerCras::SetMuted(bool muted) { |
|
Daniel Erat
2012/08/29 15:37:00
s/muted/mute/
pastarmovj
2012/08/29 16:15:52
Done.
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| base::AutoLock lock(lock_); |
| + if (is_mute_locked_) { |
| + NOTREACHED() << "Mute has been locked!"; |
| + return; |
| + } |
| is_muted_ = muted; |
| - if (client_connected_ && !apply_is_pending_) |
| - thread_->message_loop()->PostTask(FROM_HERE, |
| - base::Bind(&AudioMixerCras::ApplyState, base::Unretained(this))); |
| + ApplyStateIfNeeded(); |
| +} |
| + |
| +bool AudioMixerCras::IsMuteLocked() { |
| + base::AutoLock lock(lock_); |
| + return is_mute_locked_; |
| +} |
| + |
| +void AudioMixerCras::SetMuteLocked(bool locked) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + base::AutoLock lock(lock_); |
| + is_mute_locked_ = locked; |
| + ApplyStateIfNeeded(); |
| +} |
| + |
| +bool AudioMixerCras::IsCaptureMuted() { |
| + base::AutoLock lock(lock_); |
| + return is_capture_muted_; |
| +} |
| + |
| +void AudioMixerCras::SetCaptureMuted(bool locked) { |
|
Daniel Erat
2012/08/29 15:37:00
s/locked/mute/
pastarmovj
2012/08/29 16:15:52
Done.
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + base::AutoLock lock(lock_); |
| + if (is_capture_mute_locked_){ |
| + NOTREACHED() << "Capture mute has been locked!"; |
| + return; |
| + } |
| + is_capture_muted_ = locked; |
| + ApplyStateIfNeeded(); |
| +} |
| + |
| +bool AudioMixerCras::IsCaptureMuteLocked() { |
| + base::AutoLock lock(lock_); |
| + return is_capture_mute_locked_; |
| +} |
| + |
| +void AudioMixerCras::SetCaptureMuteLocked(bool locked) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + base::AutoLock lock(lock_); |
| + is_capture_mute_locked_ = locked; |
| + ApplyStateIfNeeded(); |
| } |
| void AudioMixerCras::Connect() { |
| @@ -126,10 +171,16 @@ void AudioMixerCras::ApplyState() { |
| return; |
| bool should_mute = false; |
| + bool should_lock_mute = false; |
| + bool should_mute_capture = false; |
| + bool should_lock_capture_mute = false; |
| size_t new_volume = 0; |
| { |
| base::AutoLock lock(lock_); |
| should_mute = is_muted_; |
| + should_lock_mute = is_mute_locked_; |
| + should_mute_capture = is_capture_muted_; |
| + should_lock_capture_mute = is_capture_mute_locked_; |
| new_volume = floor(volume_percent_ + 0.5); |
| apply_is_pending_ = false; |
| } |
| @@ -142,6 +193,17 @@ void AudioMixerCras::ApplyState() { |
| cras_client_set_system_volume(client_, new_volume); |
| cras_client_set_system_mute(client_, should_mute); |
| } |
| + cras_client_set_system_mute_locked(client_, should_lock_mute); |
| + cras_client_set_system_capture_mute(client_, should_mute_capture); |
| + cras_client_set_system_capture_mute_locked(client_, should_lock_capture_mute); |
| +} |
| + |
| +void AudioMixerCras::ApplyStateIfNeeded() { |
| + lock_.AssertAcquired(); |
| + if (client_connected_ && !apply_is_pending_) { |
| + thread_->message_loop()->PostTask(FROM_HERE, |
| + base::Bind(&AudioMixerCras::ApplyState, base::Unretained(this))); |
| + } |
| } |
| } // namespace chromeos |