Allow external audio device module to be passed in to the objc peer connection factory interface.

Bug: webrtc:8466
Change-Id: I87091cb32206f5f3bed310ec23963bcc053c59db
Reviewed-on: https://webrtc-review.googlesource.com/16734
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Commit-Queue: Sean Rosenbaum <srosenba@google.com>
Cr-Commit-Position: refs/heads/master@{#20479}
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h
index 5763151..c9a42bd 100644
--- a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h
@@ -14,6 +14,7 @@
 
 namespace webrtc {
 
+class AudioDeviceModule;
 class AudioEncoderFactory;
 class AudioDecoderFactory;
 class VideoEncoderFactory;
@@ -48,7 +49,9 @@
                         nativeVideoEncoderFactory:
                             (std::unique_ptr<webrtc::VideoEncoderFactory>)videoEncoderFactory
                         nativeVideoDecoderFactory:
-                            (std::unique_ptr<webrtc::VideoDecoderFactory>)videoDecoderFactory;
+                            (std::unique_ptr<webrtc::VideoDecoderFactory>)videoDecoderFactory
+                                audioDeviceModule:
+                            (nullable webrtc::AudioDeviceModule *)audioDeviceModule;
 
 /* Initialize object with legacy injectable native audio/video encoder/decoder factories
    TODO(andersc): Remove this when backwards compatiblity is no longer needed.
@@ -59,7 +62,8 @@
             nativeAudioDecoderFactory:
                 (rtc::scoped_refptr<webrtc::AudioDecoderFactory>)audioDecoderFactory
       legacyNativeVideoEncoderFactory:(cricket::WebRtcVideoEncoderFactory*)videoEncoderFactory
-      legacyNativeVideoDecoderFactory:(cricket::WebRtcVideoDecoderFactory*)videoDecoderFactory;
+      legacyNativeVideoDecoderFactory:(cricket::WebRtcVideoDecoderFactory*)videoDecoderFactory
+                    audioDeviceModule:(nullable webrtc::AudioDeviceModule *)audioDeviceModule;
 
 @end
 
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
index 34d21a5..102a150 100644
--- a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
@@ -61,7 +61,9 @@
                  legacyNativeVideoEncoderFactory:new webrtc::ObjCVideoEncoderFactory(
                                                      [[RTCVideoEncoderFactoryH264 alloc] init])
                  legacyNativeVideoDecoderFactory:new webrtc::ObjCVideoDecoderFactory(
-                                                     [[RTCVideoDecoderFactoryH264 alloc] init])];
+                                                     [[RTCVideoDecoderFactoryH264 alloc] init])
+                               audioDeviceModule:nullptr];
+
 #endif
 }
 
@@ -81,7 +83,8 @@
   return [self initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory()
                        nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory()
                        nativeVideoEncoderFactory:std::move(native_encoder_factory)
-                       nativeVideoDecoderFactory:std::move(native_decoder_factory)];
+                       nativeVideoDecoderFactory:std::move(native_decoder_factory)
+                               audioDeviceModule:nullptr];
 #endif
 }
 
@@ -123,7 +126,9 @@
                         nativeVideoEncoderFactory:
                             (std::unique_ptr<webrtc::VideoEncoderFactory>)videoEncoderFactory
                         nativeVideoDecoderFactory:
-                            (std::unique_ptr<webrtc::VideoDecoderFactory>)videoDecoderFactory {
+                            (std::unique_ptr<webrtc::VideoDecoderFactory>)videoDecoderFactory
+                                audioDeviceModule:
+                                    (nullable webrtc::AudioDeviceModule *)audioDeviceModule {
 #ifdef HAVE_NO_MEDIA
   return [self initWithNoMedia];
 #else
@@ -131,7 +136,7 @@
     _nativeFactory = webrtc::CreatePeerConnectionFactory(_networkThread.get(),
                                                          _workerThread.get(),
                                                          _signalingThread.get(),
-                                                         nullptr,  // audio device module
+                                                         audioDeviceModule,
                                                          audioEncoderFactory,
                                                          audioDecoderFactory,
                                                          std::move(videoEncoderFactory),
@@ -151,7 +156,8 @@
             nativeAudioDecoderFactory:
                 (rtc::scoped_refptr<webrtc::AudioDecoderFactory>)audioDecoderFactory
       legacyNativeVideoEncoderFactory:(cricket::WebRtcVideoEncoderFactory *)videoEncoderFactory
-      legacyNativeVideoDecoderFactory:(cricket::WebRtcVideoDecoderFactory *)videoDecoderFactory {
+      legacyNativeVideoDecoderFactory:(cricket::WebRtcVideoDecoderFactory *)videoDecoderFactory
+                    audioDeviceModule:(nullable webrtc::AudioDeviceModule *)audioDeviceModule {
 #ifdef HAVE_NO_MEDIA
   return [self initWithNoMedia];
 #else
@@ -159,7 +165,7 @@
     _nativeFactory = webrtc::CreatePeerConnectionFactory(_networkThread.get(),
                                                          _workerThread.get(),
                                                          _signalingThread.get(),
-                                                         nullptr,  // audio device module
+                                                         audioDeviceModule,
                                                          audioEncoderFactory,
                                                          audioDecoderFactory,
                                                          videoEncoderFactory,