Several subcomponents inside APM copy render audio from
the render side to the capture side using the same
pattern. Currently this is done independently for the
submodules.

This CL moves the the AECM functionality for this into
APM.

BUG=webrtc:5298, webrtc:6540

Review-Url: https://codereview.webrtc.org/2444793005
Cr-Commit-Position: refs/heads/master@{#14768}
diff --git a/webrtc/modules/audio_processing/audio_processing_impl.h b/webrtc/modules/audio_processing/audio_processing_impl.h
index d6af64d..817b6b2 100644
--- a/webrtc/modules/audio_processing/audio_processing_impl.h
+++ b/webrtc/modules/audio_processing/audio_processing_impl.h
@@ -371,14 +371,22 @@
     std::unique_ptr<AudioBuffer> render_audio;
   } render_ GUARDED_BY(crit_render_);
 
-  size_t render_queue_element_max_size_ GUARDED_BY(crit_render_)
+  size_t float_render_queue_element_max_size_ GUARDED_BY(crit_render_)
       GUARDED_BY(crit_capture_) = 0;
-  std::vector<float> render_queue_buffer_ GUARDED_BY(crit_render_);
-  std::vector<float> capture_queue_buffer_ GUARDED_BY(crit_capture_);
+  std::vector<float> float_render_queue_buffer_ GUARDED_BY(crit_render_);
+  std::vector<float> float_capture_queue_buffer_ GUARDED_BY(crit_capture_);
+
+  size_t int16_render_queue_element_max_size_ GUARDED_BY(crit_render_)
+      GUARDED_BY(crit_capture_) = 0;
+  std::vector<int16_t> int16_render_queue_buffer_ GUARDED_BY(crit_render_);
+  std::vector<int16_t> int16_capture_queue_buffer_ GUARDED_BY(crit_capture_);
 
   // Lock protection not needed.
   std::unique_ptr<SwapQueue<std::vector<float>, RenderQueueItemVerifier<float>>>
-      render_signal_queue_;
+      float_render_signal_queue_;
+  std::unique_ptr<
+      SwapQueue<std::vector<int16_t>, RenderQueueItemVerifier<int16_t>>>
+      int16_render_signal_queue_;
 };
 
 }  // namespace webrtc