Chromium Code Reviews| Index: media/base/audio_renderer_mixer_input.cc |
| diff --git a/media/base/audio_renderer_mixer_input.cc b/media/base/audio_renderer_mixer_input.cc |
| index 5743700f04b0a62c1c3c6eaf0f2d0bfa54aef0f5..a2627da37edef192aede7f48f8aa564ba54b3ee4 100644 |
| --- a/media/base/audio_renderer_mixer_input.cc |
| +++ b/media/base/audio_renderer_mixer_input.cc |
| @@ -32,12 +32,14 @@ AudioRendererMixerInput::AudioRendererMixerInput( |
| base::Unretained(this))) {} |
| AudioRendererMixerInput::~AudioRendererMixerInput() { |
| + DCHECK(!started_); |
| DCHECK(!mixer_); |
| } |
| void AudioRendererMixerInput::Initialize( |
| const AudioParameters& params, |
| AudioRendererSink::RenderCallback* callback) { |
| + DCHECK(!started_); |
| DCHECK(!mixer_); |
| DCHECK(callback); |
| @@ -106,6 +108,7 @@ void AudioRendererMixerInput::Pause() { |
| } |
| bool AudioRendererMixerInput::SetVolume(double volume) { |
| + base::AutoLock auto_lock(volume_lock_); |
| volume_ = volume; |
| return true; |
| } |
| @@ -190,7 +193,14 @@ double AudioRendererMixerInput::ProvideInput(AudioBus* audio_bus, |
| frames_filled, audio_bus->frames() - frames_filled); |
| } |
| - return frames_filled > 0 ? volume_ : 0; |
| + // We're reading |volume_| from the audio device thread and must avoid racing |
| + // with the main/media thread calls to SetVolume(). This is the only method |
| + // called on the audio device thread. For other methods, thread safety |
| + // should be enforced by the caller. See the lock in AudioRendererMixer. |
|
o1ka
2016/03/16 14:31:18
It's not quite clear to me how the lock in AudioRe
chcunningham
2016/03/17 17:59:45
Woops! AudioRendererMixer should have been WebAudi
|
| + { |
| + base::AutoLock auto_lock(volume_lock_); |
| + return frames_filled > 0 ? volume_ : 0; |
| + } |
| } |
| void AudioRendererMixerInput::OnRenderError() { |