Artem Titov 2cf8eb9f78 Reland "Migrate TestAudioDeviceModule on AudioDeviceModuleImpl"
This CL will add AudioDeviceBuffer into the SUT increasing test coverage
for audio quality regression detection.

This reverts commit b035dcc0a274e6cdde3e0fc465244bc0e9e3d70e.

Reason for revert: reland with a fix

Original change's description:
> Revert "Reland "Migrate TestAudioDeviceModule on AudioDeviceModuleImpl""
>
> This reverts commit eeae96299784515f573379a64655eb07a5973a3a.
>
> Reason for revert: breaks WebRTC Chromium FYI ios-device
> https://ci.chromium.org/ui/p/chromium/builders/webrtc.fyi/WebRTC%20Chromium%20FYI%20ios-device/14896/overview
>
> Original change's description:
> > Reland "Migrate TestAudioDeviceModule on AudioDeviceModuleImpl"
> >
> > This reverts commit 69c8d3c843326aff9dee32cc639741c1cd7f8ae9.
> >
> > Reason for revert: Reland with a fix
> >
> > Original change's description:
> > > Revert "Migrate TestAudioDeviceModule on AudioDeviceModuleImpl"
> > >
> > > This reverts commit e42bf81486d2f08b6dcbf1442287202e937ce52b.
> > >
> > > Reason for revert: Breaks iOS simulator bots and thus blocks chromium roll, https://chromium-review.googlesource.com/c/chromium/src/+/4433814
> > >
> > > Original change's description:
> > > > Migrate TestAudioDeviceModule on AudioDeviceModuleImpl
> > > >
> > > > Bug: b/272350185
> > > > Change-Id: Ia3d85d6fa3b0d4809e987a39d60d3eb022687132
> > > > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/300363
> > > > Commit-Queue: Artem Titov <titovartem@webrtc.org>
> > > > Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
> > > > Cr-Commit-Position: refs/heads/main@{#39877}
> > >
> > > Bug: b/272350185
> > > Change-Id: I1e3b542fc1278797f283afedeae01cbb7412d353
> > > No-Presubmit: true
> > > No-Tree-Checks: true
> > > No-Try: true
> > > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/301701
> > > Commit-Queue: Jeremy Leconte <jleconte@google.com>
> > > Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
> > > Reviewed-by: Jeremy Leconte <jleconte@google.com>
> > > Auto-Submit: Christoffer Jansson <jansson@google.com>
> > > Owners-Override: Christoffer Jansson <jansson@google.com>
> > > Cr-Commit-Position: refs/heads/main@{#39881}
> >
> > Bug: b/272350185
> > Change-Id: I809466306b2e1fd54c44b90311059c98a53ef8ee
> > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/301704
> > Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
> > Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
> > Commit-Queue: Artem Titov <titovartem@webrtc.org>
> > Cr-Commit-Position: refs/heads/main@{#39936}
>
> Bug: b/272350185
> Change-Id: If0a10717bf14a0a618e52728fc3a61b9c55f3bd2
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/303460
> Commit-Queue: Jeremy Leconte <jleconte@google.com>
> Owners-Override: Jeremy Leconte <jleconte@google.com>
> Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
> Cr-Commit-Position: refs/heads/main@{#39947}

Bug: b/272350185
Change-Id: I7cf7c6bc25561f4eb722957f318c2af9ce20726d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/311101
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#40387}
2023-06-30 16:15:06 +00:00

527 lines
14 KiB
Plaintext

# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
import("../../webrtc.gni")
if (is_android) {
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")
}
config("audio_device_warnings_config") {
if (is_win && is_clang) {
cflags = [
# Disable warnings failing when compiling with Clang on Windows.
# https://bugs.chromium.org/p/webrtc/issues/detail?id=5366
"-Wno-microsoft-goto",
]
}
}
rtc_source_set("audio_device_default") {
visibility = [ "*" ]
sources = [ "include/audio_device_default.h" ]
deps = [ ":audio_device_api" ]
}
rtc_source_set("audio_device") {
visibility = [ "*" ]
public_deps = [
":audio_device_api",
# Deprecated.
# TODO(webrtc:7452): Remove this public dep. audio_device_impl should
# be depended on directly if needed.
":audio_device_impl",
]
}
rtc_source_set("audio_device_api") {
visibility = [ "*" ]
sources = [
"include/audio_device.h",
"include/audio_device_defines.h",
]
deps = [
"../../api:scoped_refptr",
"../../api/task_queue",
"../../rtc_base:checks",
"../../rtc_base:refcount",
"../../rtc_base:stringutils",
]
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
rtc_library("audio_device_config") {
sources = [ "audio_device_config.h" ]
}
rtc_library("audio_device_buffer") {
sources = [
"audio_device_buffer.cc",
"audio_device_buffer.h",
"fine_audio_buffer.cc",
"fine_audio_buffer.h",
]
deps = [
":audio_device_api",
"../../api:array_view",
"../../api:sequence_checker",
"../../api/task_queue",
"../../common_audio:common_audio_c",
"../../rtc_base:buffer",
"../../rtc_base:checks",
"../../rtc_base:event_tracer",
"../../rtc_base:logging",
"../../rtc_base:macromagic",
"../../rtc_base:rtc_task_queue",
"../../rtc_base:safe_conversions",
"../../rtc_base:timestamp_aligner",
"../../rtc_base:timeutils",
"../../rtc_base/synchronization:mutex",
"../../system_wrappers",
"../../system_wrappers:metrics",
]
}
rtc_library("audio_device_generic") {
sources = [
"audio_device_generic.cc",
"audio_device_generic.h",
]
deps = [
":audio_device_api",
":audio_device_buffer",
"../../rtc_base:logging",
]
}
rtc_library("audio_device_name") {
sources = [
"audio_device_name.cc",
"audio_device_name.h",
]
absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}
rtc_source_set("windows_core_audio_utility") {
if (is_win && !build_with_chromium) {
sources = [
"win/core_audio_utility_win.cc",
"win/core_audio_utility_win.h",
]
deps = [
":audio_device_api",
":audio_device_name",
"../../api/units:time_delta",
"../../rtc_base:checks",
"../../rtc_base:logging",
"../../rtc_base:macromagic",
"../../rtc_base:platform_thread_types",
"../../rtc_base:stringutils",
"../../rtc_base/win:windows_version",
]
absl_deps = [ "//third_party/abseil-cpp/absl/strings:strings" ]
libs = [ "oleaut32.lib" ]
}
}
# An ADM with a dedicated factory method which does not depend on the
# audio_device_impl target. The goal is to use this new structure and
# gradually phase out the old design.
# TODO(henrika): currently only supported on Windows.
rtc_source_set("audio_device_module_from_input_and_output") {
visibility = [ "*" ]
if (is_win && !build_with_chromium) {
sources = [
"include/audio_device_factory.cc",
"include/audio_device_factory.h",
]
sources += [
"win/audio_device_module_win.cc",
"win/audio_device_module_win.h",
"win/core_audio_base_win.cc",
"win/core_audio_base_win.h",
"win/core_audio_input_win.cc",
"win/core_audio_input_win.h",
"win/core_audio_output_win.cc",
"win/core_audio_output_win.h",
]
deps = [
":audio_device_api",
":audio_device_buffer",
":windows_core_audio_utility",
"../../api:make_ref_counted",
"../../api:scoped_refptr",
"../../api:sequence_checker",
"../../api/task_queue",
"../../rtc_base:checks",
"../../rtc_base:logging",
"../../rtc_base:macromagic",
"../../rtc_base:platform_thread",
"../../rtc_base:safe_conversions",
"../../rtc_base:stringutils",
"../../rtc_base:timeutils",
"../../rtc_base/win:scoped_com_initializer",
"../../rtc_base/win:windows_version",
]
absl_deps = [
"//third_party/abseil-cpp/absl/strings:strings",
"//third_party/abseil-cpp/absl/types:optional",
]
}
}
if (!build_with_chromium) {
rtc_library("test_audio_device_module") {
visibility = [ "*" ]
sources = [
"include/test_audio_device.cc",
"include/test_audio_device.h",
"test_audio_device_impl.cc",
"test_audio_device_impl.h",
]
deps = [
":audio_device_api",
":audio_device_buffer",
":audio_device_default",
":audio_device_generic",
":audio_device_impl",
"../../api:array_view",
"../../api:make_ref_counted",
"../../api:scoped_refptr",
"../../api/task_queue",
"../../api/units:time_delta",
"../../common_audio",
"../../rtc_base:buffer",
"../../rtc_base:checks",
"../../rtc_base:logging",
"../../rtc_base:macromagic",
"../../rtc_base:platform_thread",
"../../rtc_base:random",
"../../rtc_base:rtc_event",
"../../rtc_base:rtc_task_queue",
"../../rtc_base:safe_conversions",
"../../rtc_base:timeutils",
"../../rtc_base/synchronization:mutex",
"../../rtc_base/task_utils:repeating_task",
]
absl_deps = [
"//third_party/abseil-cpp/absl/strings",
"//third_party/abseil-cpp/absl/types:optional",
]
}
}
rtc_library("audio_device_dummy") {
visibility = [ "*" ]
sources = [
"dummy/audio_device_dummy.cc",
"dummy/audio_device_dummy.h",
]
deps = [
":audio_device_api",
":audio_device_buffer",
":audio_device_generic",
]
}
if (!build_with_chromium) {
rtc_library("file_audio_device") {
visibility = [ "*" ]
sources = [
"dummy/file_audio_device.cc",
"dummy/file_audio_device.h",
"dummy/file_audio_device_factory.cc",
"dummy/file_audio_device_factory.h",
]
defines = []
if (rtc_use_dummy_audio_file_devices) {
defines += [ "WEBRTC_DUMMY_FILE_DEVICES" ]
}
deps = [
":audio_device_generic",
"../../rtc_base:checks",
"../../rtc_base:logging",
"../../rtc_base:platform_thread",
"../../rtc_base:stringutils",
"../../rtc_base:timeutils",
"../../rtc_base/synchronization:mutex",
"../../rtc_base/system:file_wrapper",
"../../system_wrappers",
]
absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}
}
# Contains default implementations of webrtc::AudioDeviceModule for Windows,
# Linux, Mac, iOS and Android.
rtc_library("audio_device_impl") {
visibility = [ "*" ]
deps = [
":audio_device_api",
":audio_device_buffer",
":audio_device_config",
":audio_device_default",
":audio_device_dummy",
":audio_device_generic",
"../../api:array_view",
"../../api:make_ref_counted",
"../../api:refcountedbase",
"../../api:scoped_refptr",
"../../api:sequence_checker",
"../../api/task_queue",
"../../api/units:time_delta",
"../../common_audio",
"../../common_audio:common_audio_c",
"../../rtc_base:buffer",
"../../rtc_base:checks",
"../../rtc_base:logging",
"../../rtc_base:macromagic",
"../../rtc_base:platform_thread",
"../../rtc_base:random",
"../../rtc_base:rtc_event",
"../../rtc_base:rtc_task_queue",
"../../rtc_base:safe_conversions",
"../../rtc_base:stringutils",
"../../rtc_base:timeutils",
"../../rtc_base/synchronization:mutex",
"../../rtc_base/system:arch",
"../../rtc_base/system:file_wrapper",
"../../rtc_base/task_utils:repeating_task",
"../../system_wrappers",
"../../system_wrappers:field_trial",
"../../system_wrappers:metrics",
"../utility",
]
absl_deps = [
"//third_party/abseil-cpp/absl/base:core_headers",
"//third_party/abseil-cpp/absl/strings:strings",
"//third_party/abseil-cpp/absl/types:optional",
]
if (rtc_include_internal_audio_device && is_ios) {
deps += [ "../../sdk:audio_device" ]
}
sources = [ "include/fake_audio_device.h" ]
if (build_with_mozilla) {
sources += [
"opensl/single_rw_fifo.cc",
"opensl/single_rw_fifo.h",
]
}
defines = []
cflags = []
if (rtc_audio_device_plays_sinus_tone) {
defines += [ "AUDIO_DEVICE_PLAYS_SINUS_TONE" ]
}
if (rtc_enable_android_aaudio) {
defines += [ "WEBRTC_AUDIO_DEVICE_INCLUDE_ANDROID_AAUDIO" ]
}
if (rtc_include_internal_audio_device) {
sources += [
"audio_device_data_observer.cc",
"audio_device_impl.cc",
"audio_device_impl.h",
"include/audio_device_data_observer.h",
]
if (is_android) {
deps += [ "../../sdk/android:native_api_audio_device_module" ]
if (build_with_mozilla) {
include_dirs += [
"/config/external/nspr",
"/nsprpub/lib/ds",
"/nsprpub/pr/include",
]
}
}
if (rtc_use_dummy_audio_file_devices) {
defines += [ "WEBRTC_DUMMY_FILE_DEVICES" ]
} else {
if (is_linux || is_chromeos) {
sources += [
"linux/alsasymboltable_linux.cc",
"linux/alsasymboltable_linux.h",
"linux/audio_device_alsa_linux.cc",
"linux/audio_device_alsa_linux.h",
"linux/audio_mixer_manager_alsa_linux.cc",
"linux/audio_mixer_manager_alsa_linux.h",
"linux/latebindingsymboltable_linux.cc",
"linux/latebindingsymboltable_linux.h",
]
defines += [ "WEBRTC_ENABLE_LINUX_ALSA" ]
libs = [ "dl" ]
if (rtc_use_x11) {
libs += [ "X11" ]
defines += [ "WEBRTC_USE_X11" ]
}
if (rtc_include_pulse_audio) {
defines += [ "WEBRTC_ENABLE_LINUX_PULSE" ]
}
sources += [
"linux/audio_device_pulse_linux.cc",
"linux/audio_device_pulse_linux.h",
"linux/audio_mixer_manager_pulse_linux.cc",
"linux/audio_mixer_manager_pulse_linux.h",
"linux/pulseaudiosymboltable_linux.cc",
"linux/pulseaudiosymboltable_linux.h",
]
}
if (is_mac) {
sources += [
"mac/audio_device_mac.cc",
"mac/audio_device_mac.h",
"mac/audio_mixer_manager_mac.cc",
"mac/audio_mixer_manager_mac.h",
]
deps += [
":audio_device_impl_frameworks",
"../third_party/portaudio:mac_portaudio",
]
}
if (is_win) {
sources += [
"win/audio_device_core_win.cc",
"win/audio_device_core_win.h",
]
libs = [
# Required for the built-in WASAPI AEC.
"dmoguids.lib",
"wmcodecdspuuid.lib",
"amstrmid.lib",
"msdmo.lib",
"oleaut32.lib",
]
deps += [
"../../rtc_base:win32",
"../../rtc_base/win:scoped_com_initializer",
]
}
configs += [ ":audio_device_warnings_config" ]
}
} else {
defines = [ "WEBRTC_DUMMY_AUDIO_BUILD" ]
}
if (!build_with_chromium) {
deps += [ ":file_audio_device" ]
# TODO(titovartem): remove after downstream is fixed
sources += [ "dummy/file_audio_device_factory.h" ]
}
}
if (is_mac) {
rtc_source_set("audio_device_impl_frameworks") {
visibility = [ ":*" ]
frameworks = [
# Needed for CoreGraphics:
"ApplicationServices.framework",
"AudioToolbox.framework",
"CoreAudio.framework",
# Needed for CGEventSourceKeyState in audio_device_mac.cc:
"CoreGraphics.framework",
]
}
}
rtc_source_set("mock_audio_device") {
visibility = [ "*" ]
testonly = true
sources = [
"include/mock_audio_device.h",
"include/mock_audio_transport.h",
"mock_audio_device_buffer.h",
]
deps = [
":audio_device",
":audio_device_buffer",
":audio_device_impl",
"../../api:make_ref_counted",
"../../test:test_support",
]
}
if (rtc_include_tests && !build_with_chromium) {
rtc_library("audio_device_unittests") {
testonly = true
sources = [
"fine_audio_buffer_unittest.cc",
"include/test_audio_device_unittest.cc",
"test_audio_device_impl_test.cc",
]
deps = [
":audio_device",
":audio_device_buffer",
":audio_device_generic",
":audio_device_impl",
":mock_audio_device",
":test_audio_device_module",
"../../api:array_view",
"../../api:scoped_refptr",
"../../api:sequence_checker",
"../../api/task_queue",
"../../api/task_queue:default_task_queue_factory",
"../../api/units:time_delta",
"../../api/units:timestamp",
"../../common_audio",
"../../rtc_base:buffer",
"../../rtc_base:checks",
"../../rtc_base:ignore_wundef",
"../../rtc_base:logging",
"../../rtc_base:macromagic",
"../../rtc_base:race_checker",
"../../rtc_base:rtc_event",
"../../rtc_base:safe_conversions",
"../../rtc_base:timeutils",
"../../rtc_base/synchronization:mutex",
"../../system_wrappers",
"../../test:fileutils",
"../../test:test_support",
"../../test/time_controller",
]
absl_deps = [
"//third_party/abseil-cpp/absl/strings",
"//third_party/abseil-cpp/absl/types:optional",
]
if (is_linux || is_chromeos || is_mac || is_win) {
sources += [ "audio_device_unittest.cc" ]
}
if (is_win) {
sources += [ "win/core_audio_utility_win_unittest.cc" ]
deps += [
":audio_device_module_from_input_and_output",
":windows_core_audio_utility",
"../../rtc_base/win:scoped_com_initializer",
"../../rtc_base/win:windows_version",
]
}
if (is_android) {
deps += [
"../../sdk/android:internal_jni",
"../../sdk/android:libjingle_peerconnection_java",
"../../sdk/android:native_api_jni",
"../../sdk/android:native_test_jni_onload",
"../utility",
]
}
if (!rtc_include_internal_audio_device) {
defines = [ "WEBRTC_DUMMY_AUDIO_BUILD" ]
}
}
}