Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Unified Diff: webrtc/modules/audio_device/ios/objc/RTCAudioSessionConfiguration.m

Issue 2855023003: Move RTCAudioSession* files modules/audio_device/ -> sdk/Framework. (Closed)
Patch Set: Address comments Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_device/ios/objc/RTCAudioSessionConfiguration.m
diff --git a/webrtc/modules/audio_device/ios/objc/RTCAudioSessionConfiguration.m b/webrtc/modules/audio_device/ios/objc/RTCAudioSessionConfiguration.m
deleted file mode 100644
index 9bbd4b701208bedf1e55a3ca18befc79a35cc23b..0000000000000000000000000000000000000000
--- a/webrtc/modules/audio_device/ios/objc/RTCAudioSessionConfiguration.m
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 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/modules/audio_device/ios/objc/RTCAudioSessionConfiguration.h"
-
-#import "WebRTC/RTCDispatcher.h"
-#import "WebRTC/UIDevice+RTCDevice.h"
-
-#import "webrtc/modules/audio_device/ios/objc/RTCAudioSession.h"
-
-// Try to use mono to save resources. Also avoids channel format conversion
-// in the I/O audio unit. Initial tests have shown that it is possible to use
-// mono natively for built-in microphones and for BT headsets but not for
-// wired headsets. Wired headsets only support stereo as native channel format
-// but it is a low cost operation to do a format conversion to mono in the
-// audio unit. Hence, we will not hit a RTC_CHECK in
-// VerifyAudioParametersForActiveAudioSession() for a mismatch between the
-// preferred number of channels and the actual number of channels.
-const int kRTCAudioSessionPreferredNumberOfChannels = 1;
-
-// Preferred hardware sample rate (unit is in Hertz). The client sample rate
-// will be set to this value as well to avoid resampling the the audio unit's
-// format converter. Note that, some devices, e.g. BT headsets, only supports
-// 8000Hz as native sample rate.
-const double kRTCAudioSessionHighPerformanceSampleRate = 48000.0;
-
-// A lower sample rate will be used for devices with only one core
-// (e.g. iPhone 4). The goal is to reduce the CPU load of the application.
-const double kRTCAudioSessionLowComplexitySampleRate = 16000.0;
-
-// Use a hardware I/O buffer size (unit is in seconds) that matches the 10ms
-// size used by WebRTC. The exact actual size will differ between devices.
-// Example: using 48kHz on iPhone 6 results in a native buffer size of
-// ~10.6667ms or 512 audio frames per buffer. The FineAudioBuffer instance will
-// take care of any buffering required to convert between native buffers and
-// buffers used by WebRTC. It is beneficial for the performance if the native
-// size is as close to 10ms as possible since it results in "clean" callback
-// sequence without bursts of callbacks back to back.
-const double kRTCAudioSessionHighPerformanceIOBufferDuration = 0.01;
-
-// Use a larger buffer size on devices with only one core (e.g. iPhone 4).
-// It will result in a lower CPU consumption at the cost of a larger latency.
-// The size of 60ms is based on instrumentation that shows a significant
-// reduction in CPU load compared with 10ms on low-end devices.
-// TODO(henrika): monitor this size and determine if it should be modified.
-const double kRTCAudioSessionLowComplexityIOBufferDuration = 0.06;
-
-static RTCAudioSessionConfiguration *gWebRTCConfiguration = nil;
-
-@implementation RTCAudioSessionConfiguration
-
-@synthesize category = _category;
-@synthesize categoryOptions = _categoryOptions;
-@synthesize mode = _mode;
-@synthesize sampleRate = _sampleRate;
-@synthesize ioBufferDuration = _ioBufferDuration;
-@synthesize inputNumberOfChannels = _inputNumberOfChannels;
-@synthesize outputNumberOfChannels = _outputNumberOfChannels;
-
-- (instancetype)init {
- if (self = [super init]) {
- // Use a category which supports simultaneous recording and playback.
- // By default, using this category implies that our app’s audio is
- // nonmixable, hence activating the session will interrupt any other
- // audio sessions which are also nonmixable.
- _category = AVAudioSessionCategoryPlayAndRecord;
- _categoryOptions = AVAudioSessionCategoryOptionAllowBluetooth;
-
- // Specify mode for two-way voice communication (e.g. VoIP).
- _mode = AVAudioSessionModeVoiceChat;
-
- // Set the session's sample rate or the hardware sample rate.
- // It is essential that we use the same sample rate as stream format
- // to ensure that the I/O unit does not have to do sample rate conversion.
- // Set the preferred audio I/O buffer duration, in seconds.
- NSUInteger processorCount = [NSProcessInfo processInfo].processorCount;
- // Use best sample rate and buffer duration if the CPU has more than one
- // core.
- if (processorCount > 1 && [UIDevice deviceType] != RTCDeviceTypeIPhone4S) {
- _sampleRate = kRTCAudioSessionHighPerformanceSampleRate;
- _ioBufferDuration = kRTCAudioSessionHighPerformanceIOBufferDuration;
- } else {
- _sampleRate = kRTCAudioSessionLowComplexitySampleRate;
- _ioBufferDuration = kRTCAudioSessionLowComplexityIOBufferDuration;
- }
-
- // We try to use mono in both directions to save resources and format
- // conversions in the audio unit. Some devices does only support stereo;
- // e.g. wired headset on iPhone 6.
- // TODO(henrika): add support for stereo if needed.
- _inputNumberOfChannels = kRTCAudioSessionPreferredNumberOfChannels;
- _outputNumberOfChannels = kRTCAudioSessionPreferredNumberOfChannels;
- }
- return self;
-}
-
-+ (void)initialize {
- gWebRTCConfiguration = [[self alloc] init];
-}
-
-+ (instancetype)currentConfiguration {
- RTCAudioSession *session = [RTCAudioSession sharedInstance];
- RTCAudioSessionConfiguration *config =
- [[RTCAudioSessionConfiguration alloc] init];
- config.category = session.category;
- config.categoryOptions = session.categoryOptions;
- config.mode = session.mode;
- config.sampleRate = session.sampleRate;
- config.ioBufferDuration = session.IOBufferDuration;
- config.inputNumberOfChannels = session.inputNumberOfChannels;
- config.outputNumberOfChannels = session.outputNumberOfChannels;
- return config;
-}
-
-+ (instancetype)webRTCConfiguration {
- @synchronized(self) {
- return (RTCAudioSessionConfiguration *)gWebRTCConfiguration;
- }
-}
-
-+ (void)setWebRTCConfiguration:(RTCAudioSessionConfiguration *)configuration {
- @synchronized(self) {
- gWebRTCConfiguration = configuration;
- }
-}
-
-@end

Powered by Google App Engine
This is Rietveld 408576698