| Index: media/audio/linux/alsa_input.cc
|
| diff --git a/media/audio/linux/alsa_input.cc b/media/audio/linux/alsa_input.cc
|
| index 43fe8e4d575b1cd64b512e53a9df9c15b82a3b51..e28867f678f5009efa87c6c11d6afc997fc413aa 100644
|
| --- a/media/audio/linux/alsa_input.cc
|
| +++ b/media/audio/linux/alsa_input.cc
|
| @@ -199,12 +199,19 @@ void AlsaPcmInputStream::ReadAudio() {
|
| int num_buffers_read = num_buffers;
|
| uint32 hardware_delay_bytes =
|
| static_cast<uint32>(GetCurrentDelay() * params_.GetBytesPerFrame());
|
| + double normalized_volume = 0.0;
|
| +
|
| + // Update the AGC volume level once every second. Note that, |volume| is
|
| + // also updated each time SetVolume() is called through IPC by the
|
| + // render-side AGC.
|
| + QueryAgcVolume(&normalized_volume);
|
| +
|
| while (num_buffers--) {
|
| int frames_read = wrapper_->PcmReadi(device_handle_, audio_buffer_.get(),
|
| params_.frames_per_buffer());
|
| if (frames_read == params_.frames_per_buffer()) {
|
| callback_->OnData(this, audio_buffer_.get(), bytes_per_buffer_,
|
| - hardware_delay_bytes);
|
| + hardware_delay_bytes, normalized_volume);
|
| } else {
|
| LOG(WARNING) << "PcmReadi returning less than expected frames: "
|
| << frames_read << " vs. " << params_.frames_per_buffer()
|
| @@ -303,6 +310,13 @@ void AlsaPcmInputStream::SetVolume(double volume) {
|
| if (error < 0) {
|
| DLOG(WARNING) << "Unable to set volume for " << device_name_;
|
| }
|
| +
|
| + // Update the AGC volume level based on the last setting above. Note that,
|
| + // the volume-level resolution is not infinite and it is therefore not
|
| + // possible to assume that the volume provided as input parameter can be
|
| + // used directly. Instead, a new query to the audio hardware is required.
|
| + // This method does nothing if AGC is disabled.
|
| + UpdateAgcVolume();
|
| }
|
|
|
| double AlsaPcmInputStream::GetVolume() {
|
|
|