Adding injectable audio decoder and encoder factory support to the RTCPeerConnection obj-c layer.

Bug: webrtc:8093
Change-Id: I868ce5f75a72c6deb065dec60784289d045ae22a
Reviewed-on: https://chromium-review.googlesource.com/608981
Commit-Queue: Jeremy Newton-Smith <jeremyns@webrtc.org>
Reviewed-by: Zeke Chin <tkchin@webrtc.org>
Reviewed-by: Kári Tristan Helgason <kthelgason@webrtc.org>
Cr-Original-Commit-Position: refs/heads/master@{#19477}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: 96de428fd1f301c3ad1355183b45e44db5ef3f7f
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 3809aa1..33797ce 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -310,9 +310,15 @@
 
     rtc_static_library("objc_peerconnectionfactory") {
       sources = [
+        "objc/Framework/Classes/PeerConnection/RTCBuiltinAudioDecoderFactory.mm",
+        "objc/Framework/Classes/PeerConnection/RTCBuiltinAudioEncoderFactory.mm",
         "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Private.h",
         "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm",
         "objc/Framework/Classes/PeerConnection/RTCVideoCodecH264.mm",
+        "objc/Framework/Headers/WebRTC/RTCAudioDecoderFactory.h",
+        "objc/Framework/Headers/WebRTC/RTCAudioEncoderFactory.h",
+        "objc/Framework/Headers/WebRTC/RTCBuiltinAudioDecoderFactory.h",
+        "objc/Framework/Headers/WebRTC/RTCBuiltinAudioEncoderFactory.h",
       ]
 
       public_configs = [ ":objc_common_config" ]
@@ -331,6 +337,8 @@
         ":objc_videotoolbox",
         ":objc_videotracksource",
         "../api:video_frame_api",
+        "../api/audio_codecs:builtin_audio_decoder_factory",
+        "../api/audio_codecs:builtin_audio_encoder_factory",
         "../api/video_codecs:video_codecs_api",
         "../media:rtc_audio_video",
         "../media:rtc_media_base",
@@ -569,15 +577,16 @@
       ios_framework_bundle("objc_framework") {
         info_plist = "objc/Framework/Info.plist"
         output_name = "WebRTC"
-
         common_objc_headers = [
-          "objc/Framework/Headers/WebRTC/RTCAudioSession.h",
-          "objc/Framework/Headers/WebRTC/RTCVideoCodec.h",
-          "objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h",
-          "objc/Framework/Headers/WebRTC/RTCAudioSessionConfiguration.h",
           "objc/Framework/Headers/WebRTC/RTCAVFoundationVideoSource.h",
+          "objc/Framework/Headers/WebRTC/RTCAudioDecoderFactory.h",
+          "objc/Framework/Headers/WebRTC/RTCAudioEncoderFactory.h",
+          "objc/Framework/Headers/WebRTC/RTCAudioSession.h",
+          "objc/Framework/Headers/WebRTC/RTCAudioSessionConfiguration.h",
           "objc/Framework/Headers/WebRTC/RTCAudioSource.h",
           "objc/Framework/Headers/WebRTC/RTCAudioTrack.h",
+          "objc/Framework/Headers/WebRTC/RTCBuiltinAudioDecoderFactory.h",
+          "objc/Framework/Headers/WebRTC/RTCBuiltinAudioEncoderFactory.h",
           "objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h",
           "objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h",
           "objc/Framework/Headers/WebRTC/RTCConfiguration.h",
@@ -609,6 +618,8 @@
           "objc/Framework/Headers/WebRTC/RTCSessionDescription.h",
           "objc/Framework/Headers/WebRTC/RTCTracing.h",
           "objc/Framework/Headers/WebRTC/RTCVideoCapturer.h",
+          "objc/Framework/Headers/WebRTC/RTCVideoCodec.h",
+          "objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h",
           "objc/Framework/Headers/WebRTC/RTCVideoFrame.h",
           "objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h",
           "objc/Framework/Headers/WebRTC/RTCVideoRenderer.h",
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCBuiltinAudioDecoderFactory.mm b/sdk/objc/Framework/Classes/PeerConnection/RTCBuiltinAudioDecoderFactory.mm
new file mode 100644
index 0000000..e64fa09
--- /dev/null
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCBuiltinAudioDecoderFactory.mm
@@ -0,0 +1,27 @@
+/*
+ *  Copyright 2017 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/RTCBuiltinAudioDecoderFactory.h"
+
+#include "webrtc/api/audio_codecs/builtin_audio_decoder_factory.h"
+#include "webrtc/rtc_base/scoped_ref_ptr.h"
+
+@implementation RTCBuiltinAudioDecoderFactory {
+  rtc::scoped_refptr<webrtc::AudioDecoderFactory> _nativeAudioDecoderFactory;
+}
+
+- (rtc::scoped_refptr<webrtc::AudioDecoderFactory>)nativeAudioDecoderFactory {
+  if (_nativeAudioDecoderFactory == nullptr) {
+    _nativeAudioDecoderFactory = webrtc::CreateBuiltinAudioDecoderFactory();
+  }
+  return _nativeAudioDecoderFactory;
+}
+
+@end
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCBuiltinAudioEncoderFactory.mm b/sdk/objc/Framework/Classes/PeerConnection/RTCBuiltinAudioEncoderFactory.mm
new file mode 100644
index 0000000..0242c4e
--- /dev/null
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCBuiltinAudioEncoderFactory.mm
@@ -0,0 +1,27 @@
+/*
+ *  Copyright 2017 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/RTCBuiltinAudioEncoderFactory.h"
+
+#include "webrtc/api/audio_codecs/builtin_audio_encoder_factory.h"
+#include "webrtc/rtc_base/scoped_ref_ptr.h"
+
+@implementation RTCBuiltinAudioEncoderFactory {
+  rtc::scoped_refptr<webrtc::AudioEncoderFactory> _nativeAudioEncoderFactory;
+}
+
+- (rtc::scoped_refptr<webrtc::AudioEncoderFactory>)nativeAudioEncoderFactory {
+  if (_nativeAudioEncoderFactory == nullptr) {
+    _nativeAudioEncoderFactory = webrtc::CreateBuiltinAudioEncoderFactory();
+  }
+  return _nativeAudioEncoderFactory;
+}
+
+@end
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
index dffacb6..20fa86d 100644
--- a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
@@ -19,9 +19,13 @@
 #import "RTCPeerConnection+Private.h"
 #import "RTCVideoSource+Private.h"
 #import "RTCVideoTrack+Private.h"
+#import "WebRTC/RTCAudioDecoderFactory.h"
+#import "WebRTC/RTCAudioEncoderFactory.h"
 #import "WebRTC/RTCLogging.h"
 #import "WebRTC/RTCVideoCodecFactory.h"
 #ifndef HAVE_NO_MEDIA
+#import "WebRTC/RTCBuiltinAudioDecoderFactory.h"
+#import "WebRTC/RTCBuiltinAudioEncoderFactory.h"
 #import "WebRTC/RTCVideoCodecH264.h"
 #endif
 
@@ -47,15 +51,22 @@
 
 - (instancetype)init {
 #ifdef HAVE_NO_MEDIA
-  return [self initWithEncoderFactory:nil decoderFactory:nil];
+  return [self initWithAudioEncoderFactory:nil
+                       audioDecoderFactory:nil
+                       videoEncoderFactory:nil
+                       videoDecoderFactory:nil];
 #else
-  return [self initWithEncoderFactory:[[RTCVideoEncoderFactoryH264 alloc] init]
-                       decoderFactory:[[RTCVideoDecoderFactoryH264 alloc] init]];
+  return [self initWithAudioEncoderFactory:[[RTCBuiltinAudioEncoderFactory alloc] init]
+                       audioDecoderFactory:[[RTCBuiltinAudioDecoderFactory alloc] init]
+                       videoEncoderFactory:[[RTCVideoEncoderFactoryH264 alloc] init]
+                       videoDecoderFactory:[[RTCVideoDecoderFactoryH264 alloc] init]];
 #endif
 }
 
-- (instancetype)initWithEncoderFactory:(nullable id<RTCVideoEncoderFactory>)encoderFactory
-                        decoderFactory:(nullable id<RTCVideoDecoderFactory>)decoderFactory {
+- (instancetype)initWithAudioEncoderFactory:(id<RTCAudioEncoderFactory>)audioEncoderFactory
+                        audioDecoderFactory:(id<RTCAudioDecoderFactory>)audioDecoderFactory
+                        videoEncoderFactory:(id<RTCVideoEncoderFactory>)videoEncoderFactory
+                        videoDecoderFactory:(id<RTCVideoDecoderFactory>)videoDecoderFactory {
   if (self = [super init]) {
     _networkThread = rtc::Thread::CreateWithSocketServer();
     BOOL result = _networkThread->Start();
@@ -83,13 +94,21 @@
         std::unique_ptr<webrtc::CallFactoryInterface>(),
         std::unique_ptr<webrtc::RtcEventLogFactoryInterface>());
 #else
-    cricket::WebRtcVideoEncoderFactory *platform_encoder_factory = nullptr;
-    cricket::WebRtcVideoDecoderFactory *platform_decoder_factory = nullptr;
-    if (encoderFactory) {
-      platform_encoder_factory = new webrtc::ObjCVideoEncoderFactory(encoderFactory);
+    rtc::scoped_refptr<webrtc::AudioEncoderFactory> platform_audio_encoder_factory = nullptr;
+    rtc::scoped_refptr<webrtc::AudioDecoderFactory> platform_audio_decoder_factory = nullptr;
+    if (audioEncoderFactory) {
+      platform_audio_encoder_factory = [audioEncoderFactory nativeAudioEncoderFactory];
     }
-    if (decoderFactory) {
-      platform_decoder_factory = new webrtc::ObjCVideoDecoderFactory(decoderFactory);
+    if (audioDecoderFactory) {
+      platform_audio_decoder_factory = [audioDecoderFactory nativeAudioDecoderFactory];
+    }
+    cricket::WebRtcVideoEncoderFactory *platform_video_encoder_factory = nullptr;
+    cricket::WebRtcVideoDecoderFactory *platform_video_decoder_factory = nullptr;
+    if (videoEncoderFactory) {
+      platform_video_encoder_factory = new webrtc::ObjCVideoEncoderFactory(videoEncoderFactory);
+    }
+    if (videoDecoderFactory) {
+      platform_video_decoder_factory = new webrtc::ObjCVideoDecoderFactory(videoDecoderFactory);
     }
 
     // Ownership of encoder/decoder factories is passed on to the
@@ -97,9 +116,11 @@
     _nativeFactory = webrtc::CreatePeerConnectionFactory(_networkThread.get(),
                                                          _workerThread.get(),
                                                          _signalingThread.get(),
-                                                         nullptr,
-                                                         platform_encoder_factory,
-                                                         platform_decoder_factory);
+                                                         nullptr,  // audio device module
+                                                         platform_audio_encoder_factory,
+                                                         platform_audio_decoder_factory,
+                                                         platform_video_encoder_factory,
+                                                         platform_video_decoder_factory);
 #endif
     NSAssert(_nativeFactory, @"Failed to initialize PeerConnectionFactory!");
   }
@@ -121,15 +142,12 @@
   return [self audioTrackWithSource:audioSource trackId:trackId];
 }
 
-- (RTCAudioTrack *)audioTrackWithSource:(RTCAudioSource *)source
-                                trackId:(NSString *)trackId {
-  return [[RTCAudioTrack alloc] initWithFactory:self
-                                         source:source
-                                        trackId:trackId];
+- (RTCAudioTrack *)audioTrackWithSource:(RTCAudioSource *)source trackId:(NSString *)trackId {
+  return [[RTCAudioTrack alloc] initWithFactory:self source:source trackId:trackId];
 }
 
 - (RTCAVFoundationVideoSource *)avFoundationVideoSourceWithConstraints:
-    (nullable RTCMediaConstraints *)constraints {
+        (nullable RTCMediaConstraints *)constraints {
 #ifdef HAVE_NO_MEDIA
   return nil;
 #else
@@ -146,32 +164,25 @@
                                                                       objcVideoTrackSource)];
 }
 
-- (RTCVideoTrack *)videoTrackWithSource:(RTCVideoSource *)source
-                                trackId:(NSString *)trackId {
-  return [[RTCVideoTrack alloc] initWithFactory:self
-                                         source:source
-                                        trackId:trackId];
+- (RTCVideoTrack *)videoTrackWithSource:(RTCVideoSource *)source trackId:(NSString *)trackId {
+  return [[RTCVideoTrack alloc] initWithFactory:self source:source trackId:trackId];
 }
 
 - (RTCMediaStream *)mediaStreamWithStreamId:(NSString *)streamId {
-  return [[RTCMediaStream alloc] initWithFactory:self
-                                        streamId:streamId];
+  return [[RTCMediaStream alloc] initWithFactory:self streamId:streamId];
 }
 
-- (RTCPeerConnection *)peerConnectionWithConfiguration:
-    (RTCConfiguration *)configuration
-                                           constraints:
-    (RTCMediaConstraints *)constraints
+- (RTCPeerConnection *)peerConnectionWithConfiguration:(RTCConfiguration *)configuration
+                                           constraints:(RTCMediaConstraints *)constraints
                                               delegate:
-    (nullable id<RTCPeerConnectionDelegate>)delegate {
+                                                  (nullable id<RTCPeerConnectionDelegate>)delegate {
   return [[RTCPeerConnection alloc] initWithFactory:self
                                       configuration:configuration
                                         constraints:constraints
                                            delegate:delegate];
 }
 
-- (BOOL)startAecDumpWithFilePath:(NSString *)filePath
-                  maxSizeInBytes:(int64_t)maxSizeInBytes {
+- (BOOL)startAecDumpWithFilePath:(NSString *)filePath maxSizeInBytes:(int64_t)maxSizeInBytes {
   RTC_DCHECK(filePath.length);
   RTC_DCHECK_GT(maxSizeInBytes, 0);
 
diff --git a/sdk/objc/Framework/Headers/WebRTC/RTCAudioDecoderFactory.h b/sdk/objc/Framework/Headers/WebRTC/RTCAudioDecoderFactory.h
new file mode 100644
index 0000000..b6ad6d1
--- /dev/null
+++ b/sdk/objc/Framework/Headers/WebRTC/RTCAudioDecoderFactory.h
@@ -0,0 +1,33 @@
+/*
+ *  Copyright 2017 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 <Foundation/Foundation.h>
+
+namespace rtc
+{
+  template <class T>
+  class scoped_refptr;
+};
+
+namespace webrtc
+{
+  class AudioDecoderFactory;
+};
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol RTCAudioDecoderFactory<NSObject>
+
+@property(nonatomic, readonly) rtc::scoped_refptr<webrtc::AudioDecoderFactory>
+    nativeAudioDecoderFactory;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/sdk/objc/Framework/Headers/WebRTC/RTCAudioEncoderFactory.h b/sdk/objc/Framework/Headers/WebRTC/RTCAudioEncoderFactory.h
new file mode 100644
index 0000000..956332a
--- /dev/null
+++ b/sdk/objc/Framework/Headers/WebRTC/RTCAudioEncoderFactory.h
@@ -0,0 +1,33 @@
+/*
+ *  Copyright 2017 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 <Foundation/Foundation.h>
+
+namespace rtc
+{
+  template <class T>
+  class scoped_refptr;
+};
+
+namespace webrtc
+{
+  class AudioEncoderFactory;
+};
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol RTCAudioEncoderFactory<NSObject>
+
+@property(nonatomic, readonly) rtc::scoped_refptr<webrtc::AudioEncoderFactory>
+    nativeAudioEncoderFactory;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/sdk/objc/Framework/Headers/WebRTC/RTCBuiltinAudioDecoderFactory.h b/sdk/objc/Framework/Headers/WebRTC/RTCBuiltinAudioDecoderFactory.h
new file mode 100644
index 0000000..ba15c57
--- /dev/null
+++ b/sdk/objc/Framework/Headers/WebRTC/RTCBuiltinAudioDecoderFactory.h
@@ -0,0 +1,20 @@
+/*
+ *  Copyright 2017 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 <Foundation/Foundation.h>
+
+#import "WebRTC/RTCAudioDecoderFactory.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface RTCBuiltinAudioDecoderFactory : NSObject<RTCAudioDecoderFactory>
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/sdk/objc/Framework/Headers/WebRTC/RTCBuiltinAudioEncoderFactory.h b/sdk/objc/Framework/Headers/WebRTC/RTCBuiltinAudioEncoderFactory.h
new file mode 100644
index 0000000..979933d
--- /dev/null
+++ b/sdk/objc/Framework/Headers/WebRTC/RTCBuiltinAudioEncoderFactory.h
@@ -0,0 +1,20 @@
+/*
+ *  Copyright 2017 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 <Foundation/Foundation.h>
+
+#import "WebRTC/RTCAudioEncoderFactory.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface RTCBuiltinAudioEncoderFactory : NSObject<RTCAudioEncoderFactory>
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h b/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h
index c29b3c9..634e1ca 100644
--- a/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h
+++ b/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h
@@ -23,6 +23,8 @@
 @class RTCPeerConnection;
 @class RTCVideoSource;
 @class RTCVideoTrack;
+@protocol RTCAudioEncoderFactory;
+@protocol RTCAudioDecoderFactory;
 @protocol RTCPeerConnectionDelegate;
 @protocol RTCVideoDecoderFactory;
 @protocol RTCVideoEncoderFactory;
@@ -30,38 +32,40 @@
 RTC_EXPORT
 @interface RTCPeerConnectionFactory : NSObject
 
-/* Initialize object with default H264 video encoder/decoder factories */
+/* Initialize object with default audio and H264 video encoder/decoder factories
+ */
 - (instancetype)init;
 
-/* Initialize object with injectable video encoder/decoder factories */
-- (instancetype)initWithEncoderFactory:(nullable id<RTCVideoEncoderFactory>)encoderFactory
-                        decoderFactory:(nullable id<RTCVideoDecoderFactory>)decoderFactory
+/* Initialize object with injectable audio/video encoder/decoder factories */
+- (instancetype)initWithAudioEncoderFactory:(nullable id<RTCAudioEncoderFactory>)audioEncoderFactory
+                        audioDecoderFactory:(nullable id<RTCAudioDecoderFactory>)audioDecoderFactory
+                        videoEncoderFactory:(nullable id<RTCVideoEncoderFactory>)videoEncoderFactory
+                        videoDecoderFactory:(nullable id<RTCVideoDecoderFactory>)videoDecoderFactory
     NS_DESIGNATED_INITIALIZER;
 
 /** Initialize an RTCAudioSource with constraints. */
 - (RTCAudioSource *)audioSourceWithConstraints:(nullable RTCMediaConstraints *)constraints;
 
-/** Initialize an RTCAudioTrack with an id. Convenience ctor to use an audio source with no
- *  constraints.
+/** Initialize an RTCAudioTrack with an id. Convenience ctor to use an audio
+ * source with no constraints.
  */
 - (RTCAudioTrack *)audioTrackWithTrackId:(NSString *)trackId;
 
 /** Initialize an RTCAudioTrack with a source and an id. */
-- (RTCAudioTrack *)audioTrackWithSource:(RTCAudioSource *)source
-                                trackId:(NSString *)trackId;
+- (RTCAudioTrack *)audioTrackWithSource:(RTCAudioSource *)source trackId:(NSString *)trackId;
 
 /** Initialize an RTCAVFoundationVideoSource with constraints. */
 - (RTCAVFoundationVideoSource *)avFoundationVideoSourceWithConstraints:
-    (nullable RTCMediaConstraints *)constraints;
+        (nullable RTCMediaConstraints *)constraints;
 
-/** Initialize a generic RTCVideoSource. The RTCVideoSource should be passed to a RTCVideoCapturer
- *  implementation, e.g. RTCCameraVideoCapturer, in order to produce frames.
+/** Initialize a generic RTCVideoSource. The RTCVideoSource should be passed to
+ * a RTCVideoCapturer implementation, e.g. RTCCameraVideoCapturer, in order to
+ * produce frames.
  */
 - (RTCVideoSource *)videoSource;
 
 /** Initialize an RTCVideoTrack with a source and an id. */
-- (RTCVideoTrack *)videoTrackWithSource:(RTCVideoSource *)source
-                                trackId:(NSString *)trackId;
+- (RTCVideoTrack *)videoTrackWithSource:(RTCVideoSource *)source trackId:(NSString *)trackId;
 
 /** Initialize an RTCMediaStream with an id. */
 - (RTCMediaStream *)mediaStreamWithStreamId:(NSString *)streamId;
@@ -69,16 +73,14 @@
 /** Initialize an RTCPeerConnection with a configuration, constraints, and
  *  delegate.
  */
-- (RTCPeerConnection *)peerConnectionWithConfiguration:
-    (RTCConfiguration *)configuration
-                                           constraints:
-    (RTCMediaConstraints *)constraints
+- (RTCPeerConnection *)peerConnectionWithConfiguration:(RTCConfiguration *)configuration
+                                           constraints:(RTCMediaConstraints *)constraints
                                               delegate:
-    (nullable id<RTCPeerConnectionDelegate>)delegate;
+                                                  (nullable id<RTCPeerConnectionDelegate>)delegate;
 
-/** Start an AecDump recording. This API call will likely change in the future. */
-- (BOOL)startAecDumpWithFilePath:(NSString *)filePath
-                  maxSizeInBytes:(int64_t)maxSizeInBytes;
+/** 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 */
 - (void)stopAecDump;
diff --git a/sdk/objc/Framework/Headers/WebRTC/WebRTC.h b/sdk/objc/Framework/Headers/WebRTC/WebRTC.h
index 64ca544..3012cf8 100644
--- a/sdk/objc/Framework/Headers/WebRTC/WebRTC.h
+++ b/sdk/objc/Framework/Headers/WebRTC/WebRTC.h
@@ -9,12 +9,16 @@
  */
 
 #import <WebRTC/RTCAVFoundationVideoSource.h>
+#import <WebRTC/RTCAudioDecoderFactory.h>
+#import <WebRTC/RTCAudioEncoderFactory.h>
 #if TARGET_OS_IPHONE
 #import <WebRTC/RTCAudioSession.h>
 #import <WebRTC/RTCAudioSessionConfiguration.h>
 #endif
 #import <WebRTC/RTCAudioSource.h>
 #import <WebRTC/RTCAudioTrack.h>
+#import <WebRTC/RTCBuiltinAudioDecoderFactory.h>
+#import <WebRTC/RTCBuiltinAudioEncoderFactory.h>
 #import <WebRTC/RTCCameraVideoCapturer.h>
 #import <WebRTC/RTCVideoCapturer.h>
 #if TARGET_OS_IPHONE