| Index: webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
 | 
| diff --git a/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java b/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
 | 
| index d46f9a3d593837d5c647ef0b5f1e593005908016..2f19604a336b5fbdc493277e5f90c88c3f696bb9 100644
 | 
| --- a/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
 | 
| +++ b/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
 | 
| @@ -24,18 +24,19 @@ 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.VideoRendererGui.ScalingType;
 | 
| +import org.webrtc.SurfaceViewRenderer;
 | 
| +import org.webrtc.RendererCommon.ScalingType;
 | 
|  
 | 
|  /**
 | 
|   * Activity for peer connection call setup, call waiting
 | 
| @@ -109,8 +110,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;
 | 
| @@ -124,7 +128,6 @@ public class CallActivity extends Activity
 | 
|    private long callStartedTimeMs = 0;
 | 
|  
 | 
|    // Controls
 | 
| -  private GLSurfaceView videoView;
 | 
|    CallFragment callFragment;
 | 
|    HudFragment hudFragment;
 | 
|  
 | 
| @@ -154,31 +157,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) {
 | 
| @@ -242,19 +243,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();
 | 
| @@ -264,7 +265,6 @@ public class CallActivity extends Activity
 | 
|    @Override
 | 
|    public void onResume() {
 | 
|      super.onResume();
 | 
| -    videoView.onResume();
 | 
|      activityRunning = true;
 | 
|      if (peerConnectionClient != null) {
 | 
|        peerConnectionClient.startVideoSource();
 | 
| @@ -279,6 +279,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.
 | 
| @@ -320,19 +326,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() {
 | 
| @@ -390,7 +400,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) {
 | 
| 
 |