| 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..d9bda8bce9b31ba9883a752d4c918ceedccd9f8e 100644
|
| --- a/talk/examples/android/src/org/appspot/apprtc/CallActivity.java
|
| +++ b/talk/examples/android/src/org/appspot/apprtc/CallActivity.java
|
| @@ -41,17 +41,18 @@ import android.content.pm.PackageManager;
|
| import android.net.Uri;
|
| import android.opengl.GLSurfaceView;
|
| import android.os.Bundle;
|
| +import android.os.Handler;
|
| import android.util.Log;
|
| import android.view.View;
|
| 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 +127,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 +145,6 @@ public class CallActivity extends Activity
|
| private long callStartedTimeMs = 0;
|
|
|
| // Controls
|
| - private GLSurfaceView videoView;
|
| CallFragment callFragment;
|
| HudFragment hudFragment;
|
|
|
| @@ -171,31 +174,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 +260,19 @@ public class CallActivity extends Activity
|
|
|
| // For command line execution run connection for <runTimeMs> and exit.
|
| if (commandLineRun && runTimeMs > 0) {
|
| - videoView.postDelayed(new Runnable() {
|
| + (new Handler()).postDelayed(new Runnable() {
|
| 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 +282,6 @@ public class CallActivity extends Activity
|
| @Override
|
| public void onResume() {
|
| super.onResume();
|
| - videoView.onResume();
|
| activityRunning = true;
|
| if (peerConnectionClient != null) {
|
| peerConnectionClient.startVideoSource();
|
| @@ -296,6 +296,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 +343,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);
|
| + 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 +417,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) {
|
|
|