Update AecDump API to match RtcEventLog API signature.
This will ease Swift interop.
NOTRY=True
BUG=
Review-Url: https://codereview.webrtc.org/2279293003
Cr-Original-Commit-Position: refs/heads/master@{#13978}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: fce0e2c2f6c2e16e73043af210b0fbb1641e0835
diff --git a/examples/objc/AppRTCDemo/ARDAppClient+Internal.h b/examples/objc/AppRTCDemo/ARDAppClient+Internal.h
index 4a69899..a21ac72 100644
--- a/examples/objc/AppRTCDemo/ARDAppClient+Internal.h
+++ b/examples/objc/AppRTCDemo/ARDAppClient+Internal.h
@@ -44,7 +44,6 @@
@property(nonatomic, readonly) BOOL isLoopback;
@property(nonatomic, readonly) BOOL isAudioOnly;
@property(nonatomic, readonly) BOOL shouldMakeAecDump;
-@property(nonatomic, assign) BOOL isAecDumpActive;
@property(nonatomic, readonly) BOOL shouldUseLevelControl;
@property(nonatomic, strong)
diff --git a/examples/objc/AppRTCDemo/ARDAppClient.m b/examples/objc/AppRTCDemo/ARDAppClient.m
index ea86c5e..9f61951 100644
--- a/examples/objc/AppRTCDemo/ARDAppClient.m
+++ b/examples/objc/AppRTCDemo/ARDAppClient.m
@@ -58,6 +58,7 @@
// TODO(tkchin): Add these as UI options.
static BOOL const kARDAppClientEnableTracing = NO;
static BOOL const kARDAppClientEnableRtcEventLog = YES;
+static int64_t const kARDAppClientAecDumpMaxSizeInBytes = 5e6; // 5 MB.
static int64_t const kARDAppClientRtcEventLogMaxSizeInBytes = 5e6; // 5 MB.
#endif
@@ -130,7 +131,6 @@
@synthesize isLoopback = _isLoopback;
@synthesize isAudioOnly = _isAudioOnly;
@synthesize shouldMakeAecDump = _shouldMakeAecDump;
-@synthesize isAecDumpActive = _isAecDumpActive;
@synthesize shouldUseLevelControl = _shouldUseLevelControl;
- (instancetype)init {
@@ -316,10 +316,7 @@
_hasReceivedSdp = NO;
_messageQueue = [NSMutableArray array];
#if defined(WEBRTC_IOS)
- if (_isAecDumpActive) {
- [_factory stopAecDump];
- _isAecDumpActive = NO;
- }
+ [_factory stopAecDump];
[_peerConnection stopRtcEventLog];
#endif
_peerConnection = nil;
@@ -576,17 +573,10 @@
// Start aecdump diagnostic recording.
if (_shouldMakeAecDump) {
- _isAecDumpActive = YES;
- NSString *filePath = [self documentsFilePathForFileName:@"audio.aecdump"];
- int fd = open(filePath.UTF8String, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
- if (fd < 0) {
- RTCLogError(@"Failed to create the aecdump file!");
- _isAecDumpActive = NO;
- } else {
- if (![_factory startAecDumpWithFileDescriptor:fd maxFileSizeInBytes:-1]) {
- RTCLogError(@"Failed to create aecdump.");
- _isAecDumpActive = NO;
- }
+ NSString *filePath = [self documentsFilePathForFileName:@"webrtc-audio.aecdump"];
+ if (![_factory startAecDumpWithFilePath:filePath
+ maxSizeInBytes:kARDAppClientAecDumpMaxSizeInBytes]) {
+ RTCLogError(@"Failed to start aec dump.");
}
}
#endif
diff --git a/sdk/objc/Framework/Classes/RTCPeerConnectionFactory.mm b/sdk/objc/Framework/Classes/RTCPeerConnectionFactory.mm
index d5fd1df..9f24aec 100644
--- a/sdk/objc/Framework/Classes/RTCPeerConnectionFactory.mm
+++ b/sdk/objc/Framework/Classes/RTCPeerConnectionFactory.mm
@@ -19,11 +19,13 @@
#import "RTCPeerConnection+Private.h"
#import "RTCVideoSource+Private.h"
#import "RTCVideoTrack+Private.h"
+#import "WebRTC/RTCLogging.h"
@implementation RTCPeerConnectionFactory {
std::unique_ptr<rtc::Thread> _networkThread;
std::unique_ptr<rtc::Thread> _workerThread;
std::unique_ptr<rtc::Thread> _signalingThread;
+ BOOL _hasStartedAecDump;
}
@synthesize nativeFactory = _nativeFactory;
@@ -50,19 +52,6 @@
return self;
}
-- (BOOL)startAecDumpWithFileDescriptor:(int)fileDescriptor
- maxFileSizeInBytes:(int)maxFileSizeInBytes {
- // Pass the file to the recorder. The file ownership
- // is passed to the recorder, and the recorder
- // closes the file when needed.
- return _nativeFactory->StartAecDump(fileDescriptor, maxFileSizeInBytes);
-}
-
-- (void)stopAecDump {
- // The file is closed by the call below.
- _nativeFactory->StopAecDump();
-}
-
- (RTCAudioSource *)audioSourceWithConstraints:(nullable RTCMediaConstraints *)constraints {
std::unique_ptr<webrtc::MediaConstraints> nativeConstraints;
if (constraints) {
@@ -115,4 +104,27 @@
delegate:delegate];
}
+- (BOOL)startAecDumpWithFilePath:(NSString *)filePath
+ maxSizeInBytes:(int64_t)maxSizeInBytes {
+ RTC_DCHECK(filePath.length);
+ RTC_DCHECK_GT(maxSizeInBytes, 0);
+
+ if (_hasStartedAecDump) {
+ RTCLogError(@"Aec dump already started.");
+ return NO;
+ }
+ int fd = open(filePath.UTF8String, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
+ if (fd < 0) {
+ RTCLogError(@"Error opening file: %@. Error: %d", filePath, errno);
+ return NO;
+ }
+ _hasStartedAecDump = _nativeFactory->StartAecDump(fd, maxSizeInBytes);
+ return _hasStartedAecDump;
+}
+
+- (void)stopAecDump {
+ _nativeFactory->StopAecDump();
+ _hasStartedAecDump = NO;
+}
+
@end
diff --git a/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h b/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h
index 03279a3..2088163 100644
--- a/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h
+++ b/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h
@@ -63,14 +63,11 @@
delegate:
(nullable id<RTCPeerConnectionDelegate>)delegate;
-/** Start an aecdump recording with a file descriptor and
- a specified maximum size limit (-1 specifies that no
- limit should be used).
- This API call will likely change in the future */
-- (BOOL)startAecDumpWithFileDescriptor:(int)fileDescriptor
- maxFileSizeInBytes:(int)maxFileSizeInBytes;
+/** Start an AecDump recording. This API call will likely change in the future. */
+- (BOOL)startAecDumpWithFilePath:(NSString *)filePath
+ maxSizeInBytes:(int64_t)maxSizeInBytes;
-/* Stop an active aecdump recording */
+/* Stop an active AecDump recording */
- (void)stopAecDump;
@end