Chromium Code Reviews| Index: talk/examples/android/src/org/appspot/apprtc/CallActivity.java |
| diff --git a/talk/examples/android/src/org/appspot/apprtc/CallActivity.java b/talk/examples/android/src/org/appspot/apprtc/CallActivity.java |
| index 735f28e6cdb5d3b26bfd623a427122026f61b9fb..b9befcc4d84c1f292f89a1223909ccba73fe3b21 100644 |
| --- a/talk/examples/android/src/org/appspot/apprtc/CallActivity.java |
| +++ b/talk/examples/android/src/org/appspot/apprtc/CallActivity.java |
| @@ -47,11 +47,11 @@ import android.view.Window; |
| import android.view.WindowManager.LayoutParams; |
| import android.widget.Toast; |
| +import org.webrtc.EglBase; |
| import org.webrtc.IceCandidate; |
| import org.webrtc.SessionDescription; |
| import org.webrtc.StatsReport; |
| -import org.webrtc.VideoRenderer; |
| -import org.webrtc.VideoRendererGui; |
| +import org.webrtc.SurfaceViewRenderer; |
| import org.webrtc.VideoRendererGui.ScalingType; |
| /** |
| @@ -126,8 +126,11 @@ public class CallActivity extends Activity |
| private AppRTCClient appRtcClient; |
| private SignalingParameters signalingParameters; |
| private AppRTCAudioManager audioManager = null; |
| - private VideoRenderer.Callbacks localRender; |
| - private VideoRenderer.Callbacks remoteRender; |
| + private EglBase rootEglBase; |
| + private SurfaceViewRenderer localRender; |
| + private SurfaceViewRenderer remoteRender; |
| + private PercentFrameLayout localRenderLayout; |
| + private PercentFrameLayout remoteRenderLayout; |
| private ScalingType scalingType; |
| private Toast logToast; |
| private boolean commandLineRun; |
| @@ -141,7 +144,6 @@ public class CallActivity extends Activity |
| private long callStartedTimeMs = 0; |
| // Controls |
| - private GLSurfaceView videoView; |
| CallFragment callFragment; |
| HudFragment hudFragment; |
| @@ -171,31 +173,29 @@ public class CallActivity extends Activity |
| scalingType = ScalingType.SCALE_ASPECT_FILL; |
| // Create UI controls. |
| - videoView = (GLSurfaceView) findViewById(R.id.glview_call); |
| + localRender = (SurfaceViewRenderer) findViewById(R.id.local_video_view); |
| + remoteRender = (SurfaceViewRenderer) findViewById(R.id.remote_video_view); |
| + localRenderLayout = (PercentFrameLayout) findViewById(R.id.local_video_layout); |
| + remoteRenderLayout = (PercentFrameLayout) findViewById(R.id.remote_video_layout); |
| callFragment = new CallFragment(); |
| hudFragment = new HudFragment(); |
| - // Create video renderers. |
| - VideoRendererGui.setView(videoView, new Runnable() { |
| - @Override |
| - public void run() { |
| - createPeerConnectionFactory(); |
| - } |
| - }); |
| - remoteRender = VideoRendererGui.create( |
| - REMOTE_X, REMOTE_Y, |
| - REMOTE_WIDTH, REMOTE_HEIGHT, scalingType, false); |
| - localRender = VideoRendererGui.create( |
| - LOCAL_X_CONNECTING, LOCAL_Y_CONNECTING, |
| - LOCAL_WIDTH_CONNECTING, LOCAL_HEIGHT_CONNECTING, scalingType, true); |
| - |
| // Show/hide call control fragment on view click. |
| - videoView.setOnClickListener(new View.OnClickListener() { |
| + View.OnClickListener listener = new View.OnClickListener() { |
| @Override |
| public void onClick(View view) { |
| toggleCallControlFragmentVisibility(); |
| } |
| - }); |
| + }; |
| + localRender.setOnClickListener(listener); |
| + remoteRender.setOnClickListener(listener); |
| + |
| + // Create video renderers. |
| + rootEglBase = new EglBase(); |
| + localRender.init(rootEglBase.getContext()); |
| + remoteRender.init(rootEglBase.getContext()); |
| + localRender.setZOrderMediaOverlay(true); |
| + updateVideoView(); |
| // Check for mandatory permissions. |
| for (String permission : MANDATORY_PERMISSIONS) { |
| @@ -259,19 +259,19 @@ public class CallActivity extends Activity |
| // For command line execution run connection for <runTimeMs> and exit. |
| if (commandLineRun && runTimeMs > 0) { |
| - videoView.postDelayed(new Runnable() { |
| + localRender.postDelayed(new Runnable() { |
|
AlexG
2015/08/04 00:27:23
nit: this was probably not the best way from the b
magjed_webrtc
2015/08/04 17:05:05
Done.
|
| public void run() { |
| disconnect(); |
| } |
| }, runTimeMs); |
| } |
| + createPeerConnectionFactory(); |
| } |
| // Activity interfaces |
| @Override |
| public void onPause() { |
| super.onPause(); |
| - videoView.onPause(); |
| activityRunning = false; |
| if (peerConnectionClient != null) { |
| peerConnectionClient.stopVideoSource(); |
| @@ -281,7 +281,6 @@ public class CallActivity extends Activity |
| @Override |
| public void onResume() { |
| super.onResume(); |
| - videoView.onResume(); |
| activityRunning = true; |
| if (peerConnectionClient != null) { |
| peerConnectionClient.startVideoSource(); |
| @@ -296,6 +295,12 @@ public class CallActivity extends Activity |
| logToast.cancel(); |
| } |
| activityRunning = false; |
| + localRender.release(); |
| + localRender = null; |
| + remoteRender.release(); |
| + remoteRender = null; |
| + rootEglBase.release(); |
| + rootEglBase = null; |
| } |
| // CallFragment.OnCallEvents interface implementation. |
| @@ -337,19 +342,23 @@ public class CallActivity extends Activity |
| } |
| private void updateVideoView() { |
| - VideoRendererGui.update(remoteRender, |
| - REMOTE_X, REMOTE_Y, |
| - REMOTE_WIDTH, REMOTE_HEIGHT, scalingType, false); |
| + remoteRenderLayout.setPosition(REMOTE_X, REMOTE_Y, REMOTE_WIDTH, REMOTE_HEIGHT); |
|
AlexG
2015/08/04 00:27:23
Could it cause race condition when say position is
magjed_webrtc
2015/08/04 17:05:05
There is no race between setPosition() and setScal
|
| + remoteRender.setScalingType(scalingType); |
| + remoteRender.setMirror(false); |
| + |
| if (iceConnected) { |
| - VideoRendererGui.update(localRender, |
| - LOCAL_X_CONNECTED, LOCAL_Y_CONNECTED, |
| - LOCAL_WIDTH_CONNECTED, LOCAL_HEIGHT_CONNECTED, |
| - ScalingType.SCALE_ASPECT_FIT, true); |
| + localRenderLayout.setPosition( |
| + LOCAL_X_CONNECTED, LOCAL_Y_CONNECTED, LOCAL_WIDTH_CONNECTED, LOCAL_HEIGHT_CONNECTED); |
| + localRender.setScalingType(ScalingType.SCALE_ASPECT_FIT); |
| } else { |
| - VideoRendererGui.update(localRender, |
| - LOCAL_X_CONNECTING, LOCAL_Y_CONNECTING, |
| - LOCAL_WIDTH_CONNECTING, LOCAL_HEIGHT_CONNECTING, scalingType, true); |
| + localRenderLayout.setPosition( |
| + LOCAL_X_CONNECTING, LOCAL_Y_CONNECTING, LOCAL_WIDTH_CONNECTING, LOCAL_HEIGHT_CONNECTING); |
| + localRender.setScalingType(scalingType); |
| } |
| + localRender.setMirror(true); |
| + |
| + localRender.requestLayout(); |
| + remoteRender.requestLayout(); |
| } |
| private void startCall() { |
| @@ -407,7 +416,7 @@ public class CallActivity extends Activity |
| Log.d(TAG, "Creating peer connection factory, delay=" + delta + "ms"); |
| peerConnectionClient = PeerConnectionClient.getInstance(); |
| peerConnectionClient.createPeerConnectionFactory(CallActivity.this, |
| - VideoRendererGui.getEGLContext(), peerConnectionParameters, |
| + rootEglBase.getContext(), peerConnectionParameters, |
| CallActivity.this); |
| } |
| if (signalingParameters != null) { |