Moving iOS Audio Device to sdk.

This change forks the existing iOS audio device module and audio device
from modules/audio_device/ into sdk/objc/Framework. It also updates
RTCPeerConnectionFactory to use the forked implementation.

The unit tests are re-implemented as XCTests.

(was: https://webrtc-review.googlesource.com/c/src/+/67300)

Bug: webrtc:9120
Change-Id: I46c09900246f75ca5285aeb38f7b8b295784ffac
Reviewed-on: https://webrtc-review.googlesource.com/76741
Reviewed-by: Kári Helgason <kthelgason@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Reviewed-by: Anders Carlsson <andersc@webrtc.org>
Commit-Queue: Peter Hanspers <peterhanspers@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23238}
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index eea2090..3f70c75 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -94,12 +94,85 @@
 
   if (!build_with_chromium) {
     if (is_ios) {
+      rtc_static_library("native_api_audio_device_module") {
+        visibility = [ "*" ]
+
+        sources = [
+          "objc/Framework/Native/api/audio_device_module.h",
+          "objc/Framework/Native/api/audio_device_module.mm",
+        ]
+
+        deps = [
+          ":audio_device",
+          "../modules/audio_device:audio_device_api",
+          "../modules/audio_device:audio_device_generic",
+          "../rtc_base:checks",
+          "../rtc_base:rtc_base_approved",
+          "../system_wrappers",
+          "../system_wrappers:metrics_api",
+        ]
+
+        if (is_clang) {
+          # Suppress warnings from the Chromium Clang plugin
+          # (bugs.webrtc.org/163).
+          suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+        }
+      }
+
+      rtc_source_set("audio_session_observer") {
+        visibility = [ ":*" ]
+
+        sources = [
+          "objc/Framework/Native/src/audio/audio_session_observer.h",
+        ]
+
+        deps = [
+          "../rtc_base:rtc_base",
+        ]
+      }
+
+      rtc_static_library("audio_device") {
+        visibility = [ "*" ]
+
+        sources = [
+          "objc/Framework/Native/src/audio/audio_device_ios.h",
+          "objc/Framework/Native/src/audio/audio_device_ios.mm",
+          "objc/Framework/Native/src/audio/audio_device_module_ios.h",
+          "objc/Framework/Native/src/audio/audio_device_module_ios.mm",
+          "objc/Framework/Native/src/audio/voice_processing_audio_unit.h",
+          "objc/Framework/Native/src/audio/voice_processing_audio_unit.mm",
+        ]
+
+        deps = [
+          ":audio_objc",
+          ":audio_session_observer",
+          ":common_objc",
+          "../api:array_view",
+          "../modules/audio_device:audio_device_api",
+          "../modules/audio_device:audio_device_buffer",
+          "../modules/audio_device:audio_device_generic",
+          "../rtc_base:checks",
+          "../rtc_base:rtc_base",
+          "../rtc_base/system:fallthrough",
+          "../sdk:common_objc",
+          "../system_wrappers:metrics_api",
+        ]
+
+        if (is_clang) {
+          # Suppress warnings from the Chromium Clang plugin
+          # (bugs.webrtc.org/163).
+          suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+        }
+      }
+
       rtc_static_library("audio_objc") {
         sources = [
           "objc/Framework/Classes/Audio/RTCAudioSession+Configuration.mm",
           "objc/Framework/Classes/Audio/RTCAudioSession+Private.h",
           "objc/Framework/Classes/Audio/RTCAudioSession.mm",
           "objc/Framework/Classes/Audio/RTCAudioSessionConfiguration.m",
+          "objc/Framework/Classes/Audio/RTCNativeAudioSessionDelegateAdapter.h",
+          "objc/Framework/Classes/Audio/RTCNativeAudioSessionDelegateAdapter.mm",
           "objc/Framework/Headers/WebRTC/RTCAudioSession.h",
           "objc/Framework/Headers/WebRTC/RTCAudioSessionConfiguration.h",
         ]
@@ -108,8 +181,10 @@
         public_configs = [ ":common_config_objc" ]
 
         deps = [
+          ":audio_session_observer",
           ":common_objc",
           "../rtc_base:checks",
+          "../rtc_base:rtc_base",
           "../rtc_base:rtc_base_approved",
         ]
 
@@ -689,6 +764,10 @@
         "../rtc_base:checks",
         "../rtc_base:rtc_base",
       ]
+
+      if (is_ios) {
+        deps += [ ":native_api_audio_device_module" ]
+      }
     }
 
     if (rtc_include_tests) {
@@ -710,15 +789,28 @@
             "objc/Framework/UnitTests/frame_buffer_helpers.mm",
           ]
 
+          # TODO(peterhanspers): Reenable these tests on simulator.
+          # See bugs.webrtc.org/7812
+          if (!use_ios_simulator) {
+            sources += [
+              "objc/Framework/UnitTests/RTCAudioDeviceModule_xctest.mm",
+              "objc/Framework/UnitTests/RTCAudioDevice_xctest.mm",
+            ]
+          }
+
           deps = [
+            ":audio_device",
+            ":audio_objc",
             ":common_objc",
             ":framework_objc",
             ":native_api",
+            ":native_api_audio_device_module",
             ":native_video",
             ":videocapture_objc",
             ":videoframebuffer_objc",
             ":videosource_objc",
             ":videotoolbox_objc",
+            "../../system_wrappers:system_wrappers",
             "../../system_wrappers:system_wrappers_default",
             "../api/video:video_frame_i420",
             "../common_video:common_video",
@@ -750,8 +842,12 @@
         }
 
         bundle_data("sdk_unittests_bundle_data") {
-          # Sample video taken from https://media.xiph.org/video/derf/
           sources = [
+            "objc/Framework/UnitTests/audio_short16.pcm",
+            "objc/Framework/UnitTests/audio_short44.pcm",
+            "objc/Framework/UnitTests/audio_short48.pcm",
+
+            # Sample video taken from https://media.xiph.org/video/derf/
             "objc/Framework/UnitTests/foreman.mp4",
           ]
           outputs = [
@@ -772,6 +868,12 @@
             ":sdk_unittests_sources",
           ]
           ldflags = [ "-all_load" ]
+
+          if (is_clang) {
+            # Suppress warnings from the Chromium Clang plugin
+            # (bugs.webrtc.org/163).
+            suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+          }
         }
       }