| Index: webrtc/sdk/android/api/org/webrtc/PeerConnectionFactory.java
|
| diff --git a/webrtc/sdk/android/api/org/webrtc/PeerConnectionFactory.java b/webrtc/sdk/android/api/org/webrtc/PeerConnectionFactory.java
|
| index 28b3ca72ab9b98e4f74db5d2a7f80bf3955cfc18..d808c82172c971bf29d1719b48be07c2c4f9603f 100644
|
| --- a/webrtc/sdk/android/api/org/webrtc/PeerConnectionFactory.java
|
| +++ b/webrtc/sdk/android/api/org/webrtc/PeerConnectionFactory.java
|
| @@ -13,12 +13,10 @@ package org.webrtc;
|
| import java.util.List;
|
|
|
| /**
|
| - * Java wrapper for a C++ PeerConnectionFactoryInterface. Main entry point to
|
| + * The subclass of PeerConnectionFactoryBase loading with the shared library. Main entry point to
|
| * the PeerConnection API for clients.
|
| */
|
| -public class PeerConnectionFactory {
|
| - private static volatile boolean nativeLibLoaded;
|
| -
|
| +public class PeerConnectionFactory extends PeerConnectionFactoryBase {
|
| static {
|
| try {
|
| System.loadLibrary("jingle_peerconnection_so");
|
| @@ -28,44 +26,17 @@ public class PeerConnectionFactory {
|
| }
|
| }
|
|
|
| - private static final String TAG = "PeerConnectionFactory";
|
| - private final long nativeFactory;
|
| - private static Thread networkThread;
|
| - private static Thread workerThread;
|
| - private static Thread signalingThread;
|
| - private EglBase localEglbase;
|
| - private EglBase remoteEglbase;
|
| -
|
| - public static class Options {
|
| - // Keep in sync with webrtc/base/network.h!
|
| - static final int ADAPTER_TYPE_UNKNOWN = 0;
|
| - static final int ADAPTER_TYPE_ETHERNET = 1 << 0;
|
| - static final int ADAPTER_TYPE_WIFI = 1 << 1;
|
| - static final int ADAPTER_TYPE_CELLULAR = 1 << 2;
|
| - static final int ADAPTER_TYPE_VPN = 1 << 3;
|
| - static final int ADAPTER_TYPE_LOOPBACK = 1 << 4;
|
| -
|
| - public int networkIgnoreMask;
|
| - public boolean disableEncryption;
|
| - public boolean disableNetworkMonitor;
|
| - }
|
| -
|
| // Must be called at least once before creating a PeerConnectionFactory
|
| // (for example, at application startup time).
|
| - public static native void initializeAndroidGlobals(
|
| - android.content.Context context, boolean videoHwAcceleration);
|
| -
|
| - // Older signature of initializeAndroidGlobals. The extra parameters are now meaningless.
|
| - @Deprecated
|
| - public static boolean initializeAndroidGlobals(Object context, boolean initializeAudio,
|
| - boolean initializeVideo, boolean videoHwAcceleration) {
|
| - initializeAndroidGlobals((android.content.Context) context, videoHwAcceleration);
|
| - return true;
|
| + public static void initializeAndroidGlobals(
|
| + android.content.Context context, boolean videoHwAcceleration) {
|
| + PeerConnectionFactoryBase.initializeAndroidGlobals(context, videoHwAcceleration);
|
| }
|
| -
|
| // Field trial initialization. Must be called before PeerConnectionFactory
|
| // is created.
|
| - public static native void initializeFieldTrials(String fieldTrialsInitString);
|
| + public static void initializeFieldTrials(String fieldTrialsInitString) {
|
| + PeerConnectionFactoryBase.initializeFieldTrials(fieldTrialsInitString);
|
| + }
|
| // Wrapper of webrtc::field_trial::FindFullName. Develop the feature with default behaviour off.
|
| // Example usage:
|
| // if (PeerConnectionFactory.fieldTrialsFindFullName("WebRTCExperiment").equals("Enabled")) {
|
| @@ -74,205 +45,32 @@ public class PeerConnectionFactory {
|
| // method2();
|
| // }
|
| public static String fieldTrialsFindFullName(String name) {
|
| - return nativeLibLoaded ? nativeFieldTrialsFindFullName(name) : "";
|
| + return PeerConnectionFactoryBase.fieldTrialsFindFullName(name);
|
| }
|
| - private static native String nativeFieldTrialsFindFullName(String name);
|
| // Internal tracing initialization. Must be called before PeerConnectionFactory is created to
|
| // prevent racing with tracing code.
|
| - public static native void initializeInternalTracer();
|
| + public static void initializeInternalTracer() {
|
| + PeerConnectionFactoryBase.initializeInternalTracer();
|
| + }
|
| // Internal tracing shutdown, called to prevent resource leaks. Must be called after
|
| // PeerConnectionFactory is gone to prevent races with code performing tracing.
|
| - public static native void shutdownInternalTracer();
|
| - // Start/stop internal capturing of internal tracing.
|
| - public static native boolean startInternalTracingCapture(String tracing_filename);
|
| - public static native void stopInternalTracingCapture();
|
| -
|
| - @Deprecated
|
| - public PeerConnectionFactory() {
|
| - this(null);
|
| - }
|
| -
|
| - // Note: initializeAndroidGlobals must be called at least once before
|
| - // constructing a PeerConnectionFactory.
|
| - public PeerConnectionFactory(Options options) {
|
| - nativeFactory = nativeCreatePeerConnectionFactory(options);
|
| - if (nativeFactory == 0) {
|
| - throw new RuntimeException("Failed to initialize PeerConnectionFactory!");
|
| - }
|
| + public static void shutdownInternalTracer() {
|
| + PeerConnectionFactoryBase.shutdownInternalTracer();
|
| }
|
| -
|
| - public PeerConnection createPeerConnection(PeerConnection.RTCConfiguration rtcConfig,
|
| - MediaConstraints constraints, PeerConnection.Observer observer) {
|
| - long nativeObserver = nativeCreateObserver(observer);
|
| - if (nativeObserver == 0) {
|
| - return null;
|
| - }
|
| - long nativePeerConnection =
|
| - nativeCreatePeerConnection(nativeFactory, rtcConfig, constraints, nativeObserver);
|
| - if (nativePeerConnection == 0) {
|
| - return null;
|
| - }
|
| - return new PeerConnection(nativePeerConnection, nativeObserver);
|
| - }
|
| -
|
| - public PeerConnection createPeerConnection(List<PeerConnection.IceServer> iceServers,
|
| - MediaConstraints constraints, PeerConnection.Observer observer) {
|
| - PeerConnection.RTCConfiguration rtcConfig = new PeerConnection.RTCConfiguration(iceServers);
|
| - return createPeerConnection(rtcConfig, constraints, observer);
|
| - }
|
| -
|
| - public MediaStream createLocalMediaStream(String label) {
|
| - return new MediaStream(nativeCreateLocalMediaStream(nativeFactory, label));
|
| - }
|
| -
|
| - public VideoSource createVideoSource(VideoCapturer capturer) {
|
| - final EglBase.Context eglContext =
|
| - localEglbase == null ? null : localEglbase.getEglBaseContext();
|
| - long nativeAndroidVideoTrackSource =
|
| - nativeCreateVideoSource(nativeFactory, eglContext, capturer.isScreencast());
|
| - VideoCapturer.CapturerObserver capturerObserver =
|
| - new AndroidVideoTrackSourceObserver(nativeAndroidVideoTrackSource);
|
| - nativeInitializeVideoCapturer(
|
| - nativeFactory, capturer, nativeAndroidVideoTrackSource, capturerObserver);
|
| - return new VideoSource(nativeAndroidVideoTrackSource);
|
| - }
|
| -
|
| - public VideoTrack createVideoTrack(String id, VideoSource source) {
|
| - return new VideoTrack(nativeCreateVideoTrack(nativeFactory, id, source.nativeSource));
|
| - }
|
| -
|
| - public AudioSource createAudioSource(MediaConstraints constraints) {
|
| - return new AudioSource(nativeCreateAudioSource(nativeFactory, constraints));
|
| - }
|
| -
|
| - public AudioTrack createAudioTrack(String id, AudioSource source) {
|
| - return new AudioTrack(nativeCreateAudioTrack(nativeFactory, id, source.nativeSource));
|
| + // Start/stop internal capturing of internal tracing.
|
| + public static boolean startInternalTracingCapture(String tracing_filename) {
|
| + return PeerConnectionFactoryBase.startInternalTracingCapture(tracing_filename);
|
| }
|
| -
|
| - // Starts recording an AEC dump. Ownership of the file is transfered to the
|
| - // native code. If an AEC dump is already in progress, it will be stopped and
|
| - // a new one will start using the provided file.
|
| - public boolean startAecDump(int file_descriptor, int filesize_limit_bytes) {
|
| - return nativeStartAecDump(nativeFactory, file_descriptor, filesize_limit_bytes);
|
| - }
|
| -
|
| - // Stops recording an AEC dump. If no AEC dump is currently being recorded,
|
| - // this call will have no effect.
|
| - public void stopAecDump() {
|
| - nativeStopAecDump(nativeFactory);
|
| + public static void stopInternalTracingCapture() {
|
| + PeerConnectionFactoryBase.stopInternalTracingCapture();
|
| }
|
|
|
| @Deprecated
|
| - public void setOptions(Options options) {
|
| - nativeSetOptions(nativeFactory, options);
|
| - }
|
| -
|
| - /** Set the EGL context used by HW Video encoding and decoding.
|
| - *
|
| - * @param localEglContext Must be the same as used by VideoCapturerAndroid and any local video
|
| - * renderer.
|
| - * @param remoteEglContext Must be the same as used by any remote video renderer.
|
| - */
|
| - public void setVideoHwAccelerationOptions(
|
| - EglBase.Context localEglContext, EglBase.Context remoteEglContext) {
|
| - if (localEglbase != null) {
|
| - Logging.w(TAG, "Egl context already set.");
|
| - localEglbase.release();
|
| - }
|
| - if (remoteEglbase != null) {
|
| - Logging.w(TAG, "Egl context already set.");
|
| - remoteEglbase.release();
|
| - }
|
| - localEglbase = EglBase.create(localEglContext);
|
| - remoteEglbase = EglBase.create(remoteEglContext);
|
| - nativeSetVideoHwAccelerationOptions(
|
| - nativeFactory, localEglbase.getEglBaseContext(), remoteEglbase.getEglBaseContext());
|
| - }
|
| -
|
| - public void dispose() {
|
| - nativeFreeFactory(nativeFactory);
|
| - networkThread = null;
|
| - workerThread = null;
|
| - signalingThread = null;
|
| - if (localEglbase != null)
|
| - localEglbase.release();
|
| - if (remoteEglbase != null)
|
| - remoteEglbase.release();
|
| - }
|
| -
|
| - public void threadsCallbacks() {
|
| - nativeThreadsCallbacks(nativeFactory);
|
| - }
|
| -
|
| - private static void printStackTrace(Thread thread, String threadName) {
|
| - if (thread != null) {
|
| - StackTraceElement[] stackTraces = thread.getStackTrace();
|
| - if (stackTraces.length > 0) {
|
| - Logging.d(TAG, threadName + " stacks trace:");
|
| - for (StackTraceElement stackTrace : stackTraces) {
|
| - Logging.d(TAG, stackTrace.toString());
|
| - }
|
| - }
|
| - }
|
| - }
|
| -
|
| - public static void printStackTraces() {
|
| - printStackTrace(networkThread, "Network thread");
|
| - printStackTrace(workerThread, "Worker thread");
|
| - printStackTrace(signalingThread, "Signaling thread");
|
| - }
|
| -
|
| - private static void onNetworkThreadReady() {
|
| - networkThread = Thread.currentThread();
|
| - Logging.d(TAG, "onNetworkThreadReady");
|
| - }
|
| -
|
| - private static void onWorkerThreadReady() {
|
| - workerThread = Thread.currentThread();
|
| - Logging.d(TAG, "onWorkerThreadReady");
|
| + public PeerConnectionFactory() {
|
| + super();
|
| }
|
|
|
| - private static void onSignalingThreadReady() {
|
| - signalingThread = Thread.currentThread();
|
| - Logging.d(TAG, "onSignalingThreadReady");
|
| + public PeerConnectionFactory(Options options) {
|
| + super(options);
|
| }
|
| -
|
| - private static native long nativeCreatePeerConnectionFactory(Options options);
|
| -
|
| - private static native long nativeCreateObserver(PeerConnection.Observer observer);
|
| -
|
| - private static native long nativeCreatePeerConnection(long nativeFactory,
|
| - PeerConnection.RTCConfiguration rtcConfig, MediaConstraints constraints, long nativeObserver);
|
| -
|
| - private static native long nativeCreateLocalMediaStream(long nativeFactory, String label);
|
| -
|
| - private static native long nativeCreateVideoSource(
|
| - long nativeFactory, EglBase.Context eglContext, boolean is_screencast);
|
| -
|
| - private static native void nativeInitializeVideoCapturer(long native_factory,
|
| - VideoCapturer j_video_capturer, long native_source,
|
| - VideoCapturer.CapturerObserver j_frame_observer);
|
| -
|
| - private static native long nativeCreateVideoTrack(
|
| - long nativeFactory, String id, long nativeVideoSource);
|
| -
|
| - private static native long nativeCreateAudioSource(
|
| - long nativeFactory, MediaConstraints constraints);
|
| -
|
| - private static native long nativeCreateAudioTrack(
|
| - long nativeFactory, String id, long nativeSource);
|
| -
|
| - private static native boolean nativeStartAecDump(
|
| - long nativeFactory, int file_descriptor, int filesize_limit_bytes);
|
| -
|
| - private static native void nativeStopAecDump(long nativeFactory);
|
| -
|
| - @Deprecated public native void nativeSetOptions(long nativeFactory, Options options);
|
| -
|
| - private static native void nativeSetVideoHwAccelerationOptions(
|
| - long nativeFactory, Object localEGLContext, Object remoteEGLContext);
|
| -
|
| - private static native void nativeThreadsCallbacks(long nativeFactory);
|
| -
|
| - private static native void nativeFreeFactory(long nativeFactory);
|
| }
|
|
|