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" ]
+ }
}
}