Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Unified Diff: webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java

Issue 3007893002: Make PeerConnectionClient non-singleton. (Closed)
Patch Set: Remove ; Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
diff --git a/webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java b/webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
index 28e7c7a8d082e689608c6ed8a149150c2fc49cab..c9c9a51011f1df32d169fcec25d830f30db06e45 100644
--- a/webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
+++ b/webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
@@ -103,11 +103,15 @@ public class PeerConnectionClient {
private static final int HD_VIDEO_HEIGHT = 720;
private static final int BPS_IN_KBPS = 1000;
- private static final PeerConnectionClient instance = new PeerConnectionClient();
+ // Executor thread is started once in private ctor and is used for all
+ // peer connection API calls to ensure new peer connection factory is
+ // created on the same thread as previously destroyed factory.
magjed_webrtc 2017/08/31 11:28:59 Do we need this to avoid the crash in issue 8135?
sakal 2017/08/31 14:18:55 This is needed because close in asynchronous.
+ private static final ExecutorService executor = Executors.newSingleThreadExecutor();
+
private final PCObserver pcObserver = new PCObserver();
private final SDPObserver sdpObserver = new SDPObserver();
- private final ExecutorService executor;
+ private final EglBase rootEglBase;
private PeerConnectionFactory factory;
private PeerConnection peerConnection;
PeerConnectionFactory.Options options = null;
@@ -288,15 +292,8 @@ public class PeerConnectionClient {
void onPeerConnectionError(final String description);
}
- private PeerConnectionClient() {
- // Executor thread is started once in private ctor and is used for all
- // peer connection API calls to ensure new peer connection factory is
- // created on the same thread as previously destroyed factory.
- executor = Executors.newSingleThreadExecutor();
- }
-
- public static PeerConnectionClient getInstance() {
- return instance;
+ public PeerConnectionClient() {
+ rootEglBase = EglBase.create();
}
public void setPeerConnectionFactoryOptions(PeerConnectionFactory.Options options) {
@@ -335,15 +332,15 @@ public class PeerConnectionClient {
});
}
- public void createPeerConnection(final EglBase.Context renderEGLContext,
- final VideoRenderer.Callbacks localRender, final VideoRenderer.Callbacks remoteRender,
- final VideoCapturer videoCapturer, final SignalingParameters signalingParameters) {
- createPeerConnection(renderEGLContext, localRender, Collections.singletonList(remoteRender),
- videoCapturer, signalingParameters);
+ public void createPeerConnection(final VideoRenderer.Callbacks localRender,
+ final VideoRenderer.Callbacks remoteRender, final VideoCapturer videoCapturer,
+ final SignalingParameters signalingParameters) {
+ createPeerConnection(
+ localRender, Collections.singletonList(remoteRender), videoCapturer, signalingParameters);
}
- public void createPeerConnection(final EglBase.Context renderEGLContext,
- final VideoRenderer.Callbacks localRender, final List<VideoRenderer.Callbacks> remoteRenders,
- final VideoCapturer videoCapturer, final SignalingParameters signalingParameters) {
+ public void createPeerConnection(final VideoRenderer.Callbacks localRender,
+ final List<VideoRenderer.Callbacks> remoteRenders, final VideoCapturer videoCapturer,
+ final SignalingParameters signalingParameters) {
if (peerConnectionParameters == null) {
Log.e(TAG, "Creating peer connection without initializing factory.");
return;
@@ -357,7 +354,7 @@ public class PeerConnectionClient {
public void run() {
try {
createMediaConstraintsInternal();
- createPeerConnectionInternal(renderEGLContext);
+ createPeerConnectionInternal();
} catch (Exception e) {
reportError("Failed to create peer connection: " + e.getMessage());
throw e;
@@ -583,7 +580,7 @@ public class PeerConnectionClient {
}
}
- private void createPeerConnectionInternal(EglBase.Context renderEGLContext) {
+ private void createPeerConnectionInternal() {
if (factory == null || isError) {
Log.e(TAG, "Peerconnection factory is not created");
return;
@@ -594,8 +591,8 @@ public class PeerConnectionClient {
queuedRemoteCandidates = new LinkedList<IceCandidate>();
if (videoCallEnabled) {
- Log.d(TAG, "EGLContext: " + renderEGLContext);
- factory.setVideoHwAccelerationOptions(renderEGLContext, renderEGLContext);
+ factory.setVideoHwAccelerationOptions(
+ rootEglBase.getEglBaseContext(), rootEglBase.getEglBaseContext());
}
PeerConnection.RTCConfiguration rtcConfig =
@@ -698,6 +695,7 @@ public class PeerConnectionClient {
factory = null;
}
options = null;
+ rootEglBase.release();
Log.d(TAG, "Closing peer connection done.");
events.onPeerConnectionClosed();
PeerConnectionFactory.stopInternalTracingCapture();
@@ -713,6 +711,10 @@ public class PeerConnectionClient {
return videoWidth * videoHeight >= 1280 * 720;
}
+ public EglBase.Context getRenderContext() {
+ return rootEglBase.getEglBaseContext();
+ }
+
private void getStats() {
if (peerConnection == null || isError) {
return;

Powered by Google App Engine
This is Rietveld 408576698