Anders Carlsson 3059378f7d Always reset the audio session configuration after a call.
After returning from the call the AVAudioSession was configured to
use the receiver instead of the speaker for audio output. The
configuration was only restored if the sound loop was previously
playing, this change makes sure that the configuration is always
reset so the sound can be played audibly after a call has been
finished.

Bug: webrtc:7792
Change-Id: Idabf6fadc8041b18722cb8f5e89e0c8c36b1b74d
Reviewed-on: https://chromium-review.googlesource.com/544819
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Commit-Queue: Anders Carlsson <andersc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#18754}
2017-06-26 07:19:11 +00:00

672 lines
21 KiB
Plaintext

# Copyright (c) 2016 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")
} else if (is_mac) {
import("//build/config/mac/rules.gni")
} else if (is_ios) {
import("//build/config/ios/rules.gni")
}
group("examples") {
# This target shall build all targets in examples.
testonly = true
public_deps = []
if (is_android) {
public_deps += [
":AppRTCMobile",
":AppRTCMobileTest",
":AppRTCMobileTestStubbedVideoIO",
]
}
if (!build_with_chromium) {
public_deps += [ ":stun_prober" ]
}
if (is_ios || (is_mac && target_cpu != "x86")) {
public_deps += [ ":AppRTCMobile" ]
}
if (is_linux || is_win) {
public_deps += [
":peerconnection_client",
":peerconnection_server",
":relayserver",
":stunserver",
":turnserver",
]
}
}
if (is_android) {
android_apk("AppRTCMobile") {
testonly = true
apk_name = "AppRTCMobile"
android_manifest = "androidapp/AndroidManifest.xml"
deps = [
":AppRTCMobile_javalib",
":AppRTCMobile_resources",
"//base:base_java",
"//webrtc/base:base_java",
]
shared_libraries = [ "//webrtc/sdk/android:libjingle_peerconnection_so" ]
}
android_library("AppRTCMobile_javalib") {
testonly = true
android_manifest = "androidapp/AndroidManifest.xml"
java_files = [
"androidapp/src/org/appspot/apprtc/AppRTCAudioManager.java",
"androidapp/src/org/appspot/apprtc/AppRTCBluetoothManager.java",
"androidapp/src/org/appspot/apprtc/AppRTCClient.java",
"androidapp/src/org/appspot/apprtc/AppRTCProximitySensor.java",
"androidapp/src/org/appspot/apprtc/CallActivity.java",
"androidapp/src/org/appspot/apprtc/CallFragment.java",
"androidapp/src/org/appspot/apprtc/CaptureQualityController.java",
"androidapp/src/org/appspot/apprtc/ConnectActivity.java",
"androidapp/src/org/appspot/apprtc/CpuMonitor.java",
"androidapp/src/org/appspot/apprtc/DirectRTCClient.java",
"androidapp/src/org/appspot/apprtc/HudFragment.java",
"androidapp/src/org/appspot/apprtc/PeerConnectionClient.java",
"androidapp/src/org/appspot/apprtc/RoomParametersFetcher.java",
"androidapp/src/org/appspot/apprtc/SettingsActivity.java",
"androidapp/src/org/appspot/apprtc/SettingsFragment.java",
"androidapp/src/org/appspot/apprtc/TCPChannelClient.java",
"androidapp/src/org/appspot/apprtc/UnhandledExceptionHandler.java",
"androidapp/src/org/appspot/apprtc/WebSocketChannelClient.java",
"androidapp/src/org/appspot/apprtc/WebSocketRTCClient.java",
"androidapp/src/org/appspot/apprtc/util/AppRTCUtils.java",
"androidapp/src/org/appspot/apprtc/util/AsyncHttpURLConnection.java",
]
deps = [
":AppRTCMobile_resources",
"//webrtc/base:base_java",
"//webrtc/examples/androidapp/third_party/autobanh:autobanh_java",
"//webrtc/modules/audio_device:audio_device_java",
"//webrtc/sdk/android:libjingle_peerconnection_java",
"//webrtc/sdk/android:libjingle_peerconnection_metrics_default_java",
]
}
android_resources("AppRTCMobile_resources") {
testonly = true
resource_dirs = [ "androidapp/res" ]
custom_package = "org.appspot.apprtc"
}
instrumentation_test_apk("AppRTCMobileTest") {
apk_name = "AppRTCMobileTest"
android_manifest = "androidtests/AndroidManifest.xml"
java_files = [ "androidtests/src/org/appspot/apprtc/test/PeerConnectionClientTest.java" ]
apk_under_test = ":AppRTCMobile"
deps = [
":AppRTCMobile_javalib",
"//base:base_java_test_support",
"//third_party/android_support_test_runner:runner_java",
"//third_party/junit",
"//webrtc/sdk/android:libjingle_peerconnection_java",
]
}
instrumentation_test_apk("AppRTCMobileTestStubbedVideoIO") {
apk_name = "AppRTCMobileTestStubbedVideoIO"
android_manifest = "androidtests/AndroidManifest.xml"
java_files = [ "androidtests/src/org/appspot/apprtc/test/CallActivityStubbedInputOutputTest.java" ]
apk_under_test = ":AppRTCMobile"
deps = [
":AppRTCMobile_javalib",
"//third_party/android_support_test_runner:rules_java",
"//third_party/android_support_test_runner:runner_java",
"//third_party/espresso:espresso_all_java",
"//third_party/hamcrest:hamcrest_java",
"//third_party/junit",
"//webrtc/sdk/android:libjingle_peerconnection_java",
]
data = [
"//resources/reference_video_640x360_30fps.y4m",
]
}
}
if (is_ios || (is_mac && target_cpu != "x86")) {
config("apprtc_common_config") {
include_dirs = [ "objc/AppRTCMobile/common" ]
}
rtc_static_library("apprtc_common") {
testonly = true
sources = [
"objc/AppRTCMobile/common/ARDUtilities.h",
"objc/AppRTCMobile/common/ARDUtilities.m",
]
public_configs = [ ":apprtc_common_config" ]
deps = [
"//webrtc/system_wrappers:field_trial_default",
"//webrtc/system_wrappers:metrics_default",
]
if (is_ios) {
deps += [ ":AppRTCMobile_ios_frameworks" ]
} else {
deps += [ "//webrtc/sdk:objc_common" ]
}
}
config("apprtc_signaling_config") {
include_dirs = [ "objc/AppRTCMobile" ]
# GN orders flags on a target before flags from configs. The default config
# adds these flags so to cancel them out they need to come from a config and
# cannot be on the target directly.
cflags = [
"-Wno-sign-compare",
"-Wno-unused-variable",
]
}
rtc_static_library("apprtc_signaling") {
testonly = true
sources = [
"objc/AppRTCMobile/ARDAppClient+Internal.h",
"objc/AppRTCMobile/ARDAppClient.h",
"objc/AppRTCMobile/ARDAppClient.m",
"objc/AppRTCMobile/ARDAppEngineClient.h",
"objc/AppRTCMobile/ARDAppEngineClient.m",
"objc/AppRTCMobile/ARDBitrateTracker.h",
"objc/AppRTCMobile/ARDBitrateTracker.m",
"objc/AppRTCMobile/ARDCaptureController.h",
"objc/AppRTCMobile/ARDCaptureController.m",
"objc/AppRTCMobile/ARDJoinResponse+Internal.h",
"objc/AppRTCMobile/ARDJoinResponse.h",
"objc/AppRTCMobile/ARDJoinResponse.m",
"objc/AppRTCMobile/ARDMessageResponse+Internal.h",
"objc/AppRTCMobile/ARDMessageResponse.h",
"objc/AppRTCMobile/ARDMessageResponse.m",
"objc/AppRTCMobile/ARDRoomServerClient.h",
"objc/AppRTCMobile/ARDSDPUtils.h",
"objc/AppRTCMobile/ARDSDPUtils.m",
"objc/AppRTCMobile/ARDSettingsModel+Private.h",
"objc/AppRTCMobile/ARDSettingsModel.h",
"objc/AppRTCMobile/ARDSettingsModel.m",
"objc/AppRTCMobile/ARDSettingsStore.h",
"objc/AppRTCMobile/ARDSettingsStore.m",
"objc/AppRTCMobile/ARDSignalingChannel.h",
"objc/AppRTCMobile/ARDSignalingMessage.h",
"objc/AppRTCMobile/ARDSignalingMessage.m",
"objc/AppRTCMobile/ARDStatsBuilder.h",
"objc/AppRTCMobile/ARDStatsBuilder.m",
"objc/AppRTCMobile/ARDTURNClient+Internal.h",
"objc/AppRTCMobile/ARDTURNClient.h",
"objc/AppRTCMobile/ARDTURNClient.m",
"objc/AppRTCMobile/ARDWebSocketChannel.h",
"objc/AppRTCMobile/ARDWebSocketChannel.m",
"objc/AppRTCMobile/RTCIceCandidate+JSON.h",
"objc/AppRTCMobile/RTCIceCandidate+JSON.m",
"objc/AppRTCMobile/RTCIceServer+JSON.h",
"objc/AppRTCMobile/RTCIceServer+JSON.m",
"objc/AppRTCMobile/RTCMediaConstraints+JSON.h",
"objc/AppRTCMobile/RTCMediaConstraints+JSON.m",
"objc/AppRTCMobile/RTCSessionDescription+JSON.h",
"objc/AppRTCMobile/RTCSessionDescription+JSON.m",
]
public_configs = [ ":apprtc_signaling_config" ]
deps = [
":apprtc_common",
":socketrocket",
]
if (is_ios) {
deps += [ ":AppRTCMobile_ios_frameworks" ]
} else {
public_deps = [
"//webrtc/sdk:objc_peerconnection",
]
}
libs = [ "QuartzCore.framework" ]
}
if (is_ios) {
rtc_static_library("AppRTCMobile_lib") {
testonly = true
sources = [
"objc/AppRTCMobile/ios/ARDAppDelegate.m",
"objc/AppRTCMobile/ios/ARDMainView.h",
"objc/AppRTCMobile/ios/ARDMainView.m",
"objc/AppRTCMobile/ios/ARDMainViewController.h",
"objc/AppRTCMobile/ios/ARDMainViewController.m",
"objc/AppRTCMobile/ios/ARDSettingsViewController.h",
"objc/AppRTCMobile/ios/ARDSettingsViewController.m",
"objc/AppRTCMobile/ios/ARDStatsView.h",
"objc/AppRTCMobile/ios/ARDStatsView.m",
"objc/AppRTCMobile/ios/ARDVideoCallView.h",
"objc/AppRTCMobile/ios/ARDVideoCallView.m",
"objc/AppRTCMobile/ios/ARDVideoCallViewController.h",
"objc/AppRTCMobile/ios/ARDVideoCallViewController.m",
"objc/AppRTCMobile/ios/AppRTCMobile-Prefix.pch",
"objc/AppRTCMobile/ios/UIImage+ARDUtilities.h",
"objc/AppRTCMobile/ios/UIImage+ARDUtilities.m",
]
deps = [
":AppRTCMobile_ios_frameworks",
":apprtc_common",
":apprtc_signaling",
]
}
ios_app_bundle("AppRTCMobile") {
testonly = true
sources = [
"objc/AppRTCMobile/ios/main.m",
]
info_plist = "objc/AppRTCMobile/ios/Info.plist"
configs += [ "..:common_config" ]
public_configs = [ "..:common_inherited_config" ]
deps = [
":AppRTCMobile_ios_bundle_data",
":AppRTCMobile_ios_frameworks",
":AppRTCMobile_lib",
]
if (target_cpu == "x86") {
deps += [ "//testing/iossim:iossim" ]
}
}
bundle_data("AppRTCMobile_ios_frameworks") {
public_deps = [
"//webrtc/sdk:objc_framework+link",
]
sources = [
"$root_out_dir/WebRTC.framework",
]
outputs = [
"{{bundle_resources_dir}}/Frameworks/{{source_file_part}}",
]
}
bundle_data("AppRTCMobile_ios_bundle_data") {
sources = [
"objc/AppRTCMobile/ios/resources/Roboto-Regular.ttf",
"objc/AppRTCMobile/ios/resources/iPhone5@2x.png",
"objc/AppRTCMobile/ios/resources/iPhone6@2x.png",
"objc/AppRTCMobile/ios/resources/iPhone6p@3x.png",
"objc/AppRTCMobile/ios/resources/ic_call_end_black_24dp.png",
"objc/AppRTCMobile/ios/resources/ic_call_end_black_24dp@2x.png",
"objc/AppRTCMobile/ios/resources/ic_clear_black_24dp.png",
"objc/AppRTCMobile/ios/resources/ic_clear_black_24dp@2x.png",
"objc/AppRTCMobile/ios/resources/ic_settings_black_24dp.png",
"objc/AppRTCMobile/ios/resources/ic_settings_black_24dp@2x.png",
"objc/AppRTCMobile/ios/resources/ic_surround_sound_black_24dp.png",
"objc/AppRTCMobile/ios/resources/ic_surround_sound_black_24dp@2x.png",
"objc/AppRTCMobile/ios/resources/ic_switch_video_black_24dp.png",
"objc/AppRTCMobile/ios/resources/ic_switch_video_black_24dp@2x.png",
"objc/AppRTCMobile/ios/resources/mozart.mp3",
"objc/Icon.png",
]
outputs = [
"{{bundle_resources_dir}}/{{source_file_part}}",
]
}
}
if (is_mac) {
rtc_static_library("AppRTCMobile_lib") {
testonly = true
sources = [
"objc/AppRTCMobile/mac/APPRTCAppDelegate.h",
"objc/AppRTCMobile/mac/APPRTCAppDelegate.m",
"objc/AppRTCMobile/mac/APPRTCViewController.h",
"objc/AppRTCMobile/mac/APPRTCViewController.m",
]
configs += [ "//webrtc:common_objc" ]
deps = [
":apprtc_common",
":apprtc_signaling",
"//webrtc/sdk:objc_ui",
]
}
mac_app_bundle("AppRTCMobile") {
testonly = true
output_name = "AppRTCMobile"
sources = [
"objc/AppRTCMobile/mac/main.m",
]
public_configs = [ "..:common_inherited_config" ]
info_plist = "objc/AppRTCMobile/mac/Info.plist"
libs = [ "AppKit.framework" ]
deps = [
":AppRTCMobile_lib",
]
}
}
config("socketrocket_include_config") {
include_dirs = [ "objc/AppRTCMobile/third_party/SocketRocket" ]
}
config("socketrocket_warning_config") {
# GN orders flags on a target before flags from configs. The default config
# adds these flags so to cancel them out they need to come from a config and
# cannot be on the target directly.
cflags = [
"-Wno-deprecated-declarations",
"-Wno-nonnull",
"-Wno-semicolon-before-method-body",
"-Wno-unused-variable",
]
cflags_objc = [
# Enabled for cflags_objc in build/config/compiler/BUILD.gn.
"-Wno-objc-missing-property-synthesis",
]
}
rtc_static_library("socketrocket") {
testonly = true
sources = [
"objc/AppRTCMobile/third_party/SocketRocket/SRWebSocket.h",
"objc/AppRTCMobile/third_party/SocketRocket/SRWebSocket.m",
]
configs += [ ":socketrocket_warning_config" ]
public_configs = [ ":socketrocket_include_config" ]
libs = [
"CFNetwork.framework",
"icucore",
]
}
if (rtc_include_tests) {
# TODO(kthelgason): compile xctests on mac when chromium supports it.
if (is_ios) {
rtc_source_set("apprtcmobile_test_sources") {
testonly = true
include_dirs = [
"objc/AppRTCMobile",
"objc/AppRTCMobile/ios",
]
testonly = true
sources = [
"objc/AppRTCMobile/tests/ARDAppClient_xctest.mm",
"objc/AppRTCMobile/tests/ARDSDPUtils_xctest.mm",
"objc/AppRTCMobile/tests/ARDSettingsModel_xctest.mm",
]
deps = [
"//webrtc/base:rtc_base",
]
public_deps = [
":AppRTCMobile_ios_frameworks",
":AppRTCMobile_lib",
"//build/config/ios:xctest",
"//third_party/ocmock",
]
}
rtc_ios_xctest_test("apprtcmobile_tests") {
info_plist = "objc/AppRTCMobile/ios/Info.plist"
sources = [
"objc/AppRTCMobile/ios/main.m",
]
deps = [
":apprtcmobile_test_sources",
]
ldflags = [ "-all_load" ]
}
}
}
}
if (is_linux || is_win) {
config("peerconnection_client_warnings_config") {
cflags = []
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-format",
# See https://bugs.chromium.org/p/webrtc/issues/detail?id=6271
# for -Wno-reorder and -Wno-sign-compare
"-Wno-reorder",
"-Wno-sign-compare",
]
}
if (is_linux && target_cpu == "x86") {
cflags += [
# Needed to compile on Linux 32-bit.
"-Wno-sentinel",
]
}
if (is_clang) {
# TODO(ehmaldonado): Make peerconnection_client compile with the standard
# set of warnings.
# See https://bugs.chromium.org/p/webrtc/issues/detail?id=6306
cflags += [ "-Wno-inconsistent-missing-override" ]
}
}
rtc_executable("peerconnection_client") {
testonly = true
sources = [
"peerconnection/client/conductor.cc",
"peerconnection/client/conductor.h",
"peerconnection/client/defaults.cc",
"peerconnection/client/defaults.h",
"peerconnection/client/peer_connection_client.cc",
"peerconnection/client/peer_connection_client.h",
]
if (!build_with_chromium && is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}
deps = []
if (is_win) {
sources += [
"peerconnection/client/flagdefs.h",
"peerconnection/client/main.cc",
"peerconnection/client/main_wnd.cc",
"peerconnection/client/main_wnd.h",
]
cflags = [ "/wd4245" ]
configs += [ "//build/config/win:windowed" ]
deps += [ "//webrtc/media:rtc_media_base" ]
}
if (is_linux) {
sources += [
"peerconnection/client/linux/main.cc",
"peerconnection/client/linux/main_wnd.cc",
"peerconnection/client/linux/main_wnd.h",
]
cflags = [ "-Wno-deprecated-declarations" ]
libs = [
"X11",
"Xcomposite",
"Xext",
"Xrender",
]
deps += [ "//build/config/linux/gtk" ]
}
configs += [ ":peerconnection_client_warnings_config" ]
deps += [
"//third_party/libyuv",
"//webrtc/api:libjingle_peerconnection_test_api",
"//webrtc/api:video_frame_api",
"//webrtc/base:rtc_base",
"//webrtc/base:rtc_base_approved",
"//webrtc/base:rtc_json",
"//webrtc/media:rtc_media",
"//webrtc/modules/video_capture:video_capture_module",
"//webrtc/pc:libjingle_peerconnection",
"//webrtc/system_wrappers:field_trial_default",
"//webrtc/system_wrappers:metrics_default",
]
}
rtc_executable("peerconnection_server") {
testonly = true
sources = [
"peerconnection/server/data_socket.cc",
"peerconnection/server/data_socket.h",
"peerconnection/server/main.cc",
"peerconnection/server/peer_channel.cc",
"peerconnection/server/peer_channel.h",
"peerconnection/server/utils.cc",
"peerconnection/server/utils.h",
]
deps = [
"//webrtc:webrtc_common",
"//webrtc/base:rtc_base_approved",
"//webrtc/tools:command_line_parser",
]
if (!build_with_chromium && is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}
}
rtc_executable("relayserver") {
testonly = true
sources = [
"relayserver/relayserver_main.cc",
]
deps = [
"../base:rtc_base",
"//webrtc/base:rtc_base_approved",
"//webrtc/p2p:rtc_p2p",
"//webrtc/pc:rtc_pc",
"//webrtc/system_wrappers:field_trial_default",
"//webrtc/system_wrappers:metrics_default",
]
if (!build_with_chromium && is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}
}
rtc_executable("turnserver") {
testonly = true
sources = [
"turnserver/turnserver_main.cc",
]
deps = [
"../base:rtc_base",
"//webrtc/base:rtc_base_approved",
"//webrtc/p2p:rtc_p2p",
"//webrtc/pc:rtc_pc",
"//webrtc/system_wrappers:field_trial_default",
"//webrtc/system_wrappers:metrics_default",
]
if (!build_with_chromium && is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}
}
rtc_executable("stunserver") {
testonly = true
sources = [
"stunserver/stunserver_main.cc",
]
deps = [
"../base:rtc_base",
"//webrtc/base:rtc_base_approved",
"//webrtc/p2p:rtc_p2p",
"//webrtc/pc:rtc_pc",
"//webrtc/system_wrappers:field_trial_default",
"//webrtc/system_wrappers:metrics_default",
]
if (!build_with_chromium && is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}
}
}
if (is_win) {
rtc_shared_library("webrtc_unity_plugin") {
testonly = true
sources = [
"unityplugin/simple_peer_connection.cc",
"unityplugin/simple_peer_connection.h",
"unityplugin/unity_plugin_apis.cc",
"unityplugin/unity_plugin_apis.h",
]
if (!build_with_chromium && is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}
cflags = [ "/wd4245" ]
configs += [
"//build/config/win:windowed",
":peerconnection_client_warnings_config",
]
deps = [
"//webrtc/api:libjingle_peerconnection_test_api",
"//webrtc/api:video_frame_api",
"//webrtc/base:rtc_base",
"//webrtc/base:rtc_base_approved",
"//webrtc/base:rtc_json",
"//webrtc/media:rtc_media",
"//webrtc/media:rtc_media_base",
"//webrtc/modules/video_capture:video_capture_module",
"//webrtc/pc:libjingle_peerconnection",
"//webrtc/system_wrappers:field_trial_default",
"//webrtc/system_wrappers:metrics_default",
]
}
}
if (!build_with_chromium) {
# Doesn't build within Chrome on Win.
rtc_executable("stun_prober") {
testonly = true
sources = [
"stunprober/main.cc",
]
if (!build_with_chromium && is_clang) {
# Suppress warnings from Chrome's Clang plugins.
# See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}
deps = [
"../base:rtc_base",
"../base:rtc_base_approved",
"../p2p:libstunprober",
"../p2p:rtc_p2p",
"../system_wrappers:field_trial_default",
]
}
}