Audio Processing Module: add play-out audio device runtime information

Add a runtime setting that notifies play-out audio device changes.
The payload is a pair indicating a device id and its maximum play-out
volume.

kPlayoutVolumeChange is now forwarded not only to capture, but also
render (required by render_pre_processor).

Bug: webrtc:10608
Change-Id: I8997c207422c1dcd1d53775397d6290939ef3db8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/159002
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Per Ã…hgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29725}
diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc
index cab7677..c718838 100644
--- a/modules/audio_processing/audio_processing_impl.cc
+++ b/modules/audio_processing/audio_processing_impl.cc
@@ -801,16 +801,20 @@
 void AudioProcessingImpl::SetRuntimeSetting(RuntimeSetting setting) {
   switch (setting.type()) {
     case RuntimeSetting::Type::kCustomRenderProcessingRuntimeSetting:
+    case RuntimeSetting::Type::kPlayoutAudioDeviceChange:
       render_runtime_settings_enqueuer_.Enqueue(setting);
       return;
-    case RuntimeSetting::Type::kNotSpecified:
-      RTC_NOTREACHED();
-      return;
     case RuntimeSetting::Type::kCapturePreGain:
     case RuntimeSetting::Type::kCaptureCompressionGain:
     case RuntimeSetting::Type::kCaptureFixedPostGain:
+      capture_runtime_settings_enqueuer_.Enqueue(setting);
+      return;
     case RuntimeSetting::Type::kPlayoutVolumeChange:
       capture_runtime_settings_enqueuer_.Enqueue(setting);
+      render_runtime_settings_enqueuer_.Enqueue(setting);
+      return;
+    case RuntimeSetting::Type::kNotSpecified:
+      RTC_NOTREACHED();
       return;
   }
   // The language allows the enum to have a non-enumerator
@@ -947,6 +951,9 @@
         capture_.playout_volume = value;
         break;
       }
+      case RuntimeSetting::Type::kPlayoutAudioDeviceChange:
+        RTC_NOTREACHED();
+        break;
       case RuntimeSetting::Type::kCustomRenderProcessingRuntimeSetting:
         RTC_NOTREACHED();
         break;
@@ -964,6 +971,7 @@
       aec_dump_->WriteRuntimeSetting(setting);
     }
     switch (setting.type()) {
+      case RuntimeSetting::Type::kPlayoutAudioDeviceChange:  // fall-through
       case RuntimeSetting::Type::kCustomRenderProcessingRuntimeSetting:
         if (submodules_.render_pre_processor) {
           submodules_.render_pre_processor->SetRuntimeSetting(setting);