diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn index edf88a8b4f..b29192a475 100644 --- a/sdk/android/BUILD.gn +++ b/sdk/android/BUILD.gn @@ -295,6 +295,7 @@ if (is_android) { "api/org/webrtc/DataChannel.java", "api/org/webrtc/DtmfSender.java", "api/org/webrtc/FecControllerFactoryFactoryInterface.java", + "api/org/webrtc/NetworkControllerFactoryFactory.java", "api/org/webrtc/NetworkStatePredictorFactoryFactory.java", "api/org/webrtc/MediaTransportFactoryFactory.java", "api/org/webrtc/FrameDecryptor.java", diff --git a/sdk/android/api/org/webrtc/NetworkControllerFactoryFactory.java b/sdk/android/api/org/webrtc/NetworkControllerFactoryFactory.java new file mode 100644 index 0000000000..75e8fcaa5a --- /dev/null +++ b/sdk/android/api/org/webrtc/NetworkControllerFactoryFactory.java @@ -0,0 +1,20 @@ +/* + * Copyright 2019 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. + */ + +package org.webrtc; + +/** Factory for creating webrtc::NetworkControllerFactory instances. */ +public interface NetworkControllerFactoryFactory { + /** + * Dynamically allocates a webrtc::NetworkControllerFactory instance and returns a pointer to + * it. The caller takes ownership of the object. + */ + public long createNativeNetworkControllerFactory(); +} diff --git a/sdk/android/api/org/webrtc/PeerConnectionFactory.java b/sdk/android/api/org/webrtc/PeerConnectionFactory.java index d92d1ba997..d48ef55263 100644 --- a/sdk/android/api/org/webrtc/PeerConnectionFactory.java +++ b/sdk/android/api/org/webrtc/PeerConnectionFactory.java @@ -173,6 +173,7 @@ public class PeerConnectionFactory { @Nullable private VideoDecoderFactory videoDecoderFactory; @Nullable private AudioProcessingFactory audioProcessingFactory; @Nullable private FecControllerFactoryFactoryInterface fecControllerFactoryFactory; + @Nullable private NetworkControllerFactoryFactory networkControllerFactoryFactory; @Nullable private NetworkStatePredictorFactoryFactory networkStatePredictorFactoryFactory; @Nullable private MediaTransportFactoryFactory mediaTransportFactoryFactory; @@ -233,6 +234,12 @@ public class PeerConnectionFactory { return this; } + public Builder setNetworkControllerFactoryFactory( + NetworkControllerFactoryFactory networkControllerFactoryFactory) { + this.networkControllerFactoryFactory = networkControllerFactoryFactory; + return this; + } + public Builder setNetworkStatePredictorFactoryFactory( NetworkStatePredictorFactoryFactory networkStatePredictorFactoryFactory) { this.networkStatePredictorFactoryFactory = networkStatePredictorFactoryFactory; @@ -259,6 +266,9 @@ public class PeerConnectionFactory { videoDecoderFactory, audioProcessingFactory == null ? 0 : audioProcessingFactory.createNative(), fecControllerFactoryFactory == null ? 0 : fecControllerFactoryFactory.createNative(), + networkControllerFactoryFactory == null + ? 0 + : networkControllerFactoryFactory.createNativeNetworkControllerFactory(), networkStatePredictorFactoryFactory == null ? 0 : networkStatePredictorFactoryFactory.createNativeNetworkStatePredictorFactory(), @@ -585,8 +595,8 @@ public class PeerConnectionFactory { Options options, long nativeAudioDeviceModule, long audioEncoderFactory, long audioDecoderFactory, VideoEncoderFactory encoderFactory, VideoDecoderFactory decoderFactory, long nativeAudioProcessor, - long nativeFecControllerFactory, long nativeNetworkStatePredictorFactory, - long mediaTransportFactory); + long nativeFecControllerFactory, long nativeNetworkControllerFactory, + long nativeNetworkStatePredictorFactory, long mediaTransportFactory); private static native long nativeCreatePeerConnection(long factory, PeerConnection.RTCConfiguration rtcConfig, MediaConstraints constraints, long nativeObserver, diff --git a/sdk/android/src/jni/pc/peer_connection_factory.cc b/sdk/android/src/jni/pc/peer_connection_factory.cc index c6d8ae8558..044bc0e70d 100644 --- a/sdk/android/src/jni/pc/peer_connection_factory.cc +++ b/sdk/android/src/jni/pc/peer_connection_factory.cc @@ -253,6 +253,8 @@ ScopedJavaLocalRef CreatePeerConnectionFactoryForJava( const JavaParamRef& jdecoder_factory, rtc::scoped_refptr audio_processor, std::unique_ptr fec_controller_factory, + std::unique_ptr + network_controller_factory, std::unique_ptr network_state_predictor_factory, std::unique_ptr media_transport_factory) { @@ -308,6 +310,8 @@ ScopedJavaLocalRef CreatePeerConnectionFactoryForJava( dependencies.call_factory = std::move(call_factory); dependencies.event_log_factory = std::move(rtc_event_log_factory); dependencies.fec_controller_factory = std::move(fec_controller_factory); + dependencies.network_controller_factory = + std::move(network_controller_factory); dependencies.network_state_predictor_factory = std::move(network_state_predictor_factory); dependencies.media_transport_factory = std::move(media_transport_factory); @@ -339,6 +343,7 @@ JNI_PeerConnectionFactory_CreatePeerConnectionFactory( const JavaParamRef& jdecoder_factory, jlong native_audio_processor, jlong native_fec_controller_factory, + jlong native_network_controller_factory, jlong native_network_state_predictor_factory, jlong native_media_transport_factory) { rtc::scoped_refptr audio_processor = @@ -352,6 +357,8 @@ JNI_PeerConnectionFactory_CreatePeerConnectionFactory( audio_processor ? audio_processor : CreateAudioProcessing(), TakeOwnershipOfUniquePtr( native_fec_controller_factory), + TakeOwnershipOfUniquePtr( + native_network_controller_factory), TakeOwnershipOfUniquePtr( native_network_state_predictor_factory), TakeOwnershipOfUniquePtr(