Chromium Code Reviews| 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 a1ea8a457d2ed2e1589e56e1828ea23e6c5a4bfe..b04c9af683dade6ecc3bf8cdc7a410e6e3ccf76e 100644 |
| --- a/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java |
| +++ b/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java |
| @@ -29,14 +29,20 @@ import android.view.Window; |
| import android.view.WindowManager.LayoutParams; |
| import android.widget.Toast; |
| +import java.util.ArrayList; |
| +import java.util.List; |
| + |
| import org.webrtc.Camera2Enumerator; |
| import org.webrtc.EglBase; |
| +import org.webrtc.GlVideoFileRenderer; |
| +import org.webrtc.GlRectDrawer; |
|
magjed_webrtc
2016/09/16 13:46:25
This import is unused.
mandermo
2016/09/23 15:12:03
Done.
|
| import org.webrtc.IceCandidate; |
| import org.webrtc.PeerConnectionFactory; |
| import org.webrtc.RendererCommon.ScalingType; |
| import org.webrtc.SessionDescription; |
| import org.webrtc.StatsReport; |
| import org.webrtc.SurfaceViewRenderer; |
| +import org.webrtc.VideoRenderer; |
| /** |
| * Activity for peer connection call setup, call waiting |
| @@ -96,6 +102,18 @@ public class CallActivity extends Activity |
| "org.appspot.apprtc.CMDLINE"; |
| public static final String EXTRA_RUNTIME = |
| "org.appspot.apprtc.RUNTIME"; |
| + public static final String EXTRA_VIDEO_FILE_AS_CAMERA = |
| + "org.appspot.apprtc.VIDEO_FILE_AS_CAMERA"; |
| + public static final String EXTRA_VIDEO_FILE_AS_CAMERA_WIDTH = |
| + "org.appspot.apprtc.VIDEO_FILE_AS_CAMERA_WIDTH"; |
| + public static final String EXTRA_VIDEO_FILE_AS_CAMERA_HEIGHT = |
| + "org.appspot.apprtc.VIDEO_FILE_AS_CAMERA_HEIGHT"; |
| + public static final String EXTRA_SAVE_REMOTE_VIDEO_TO_FILE = |
| + "org.appspot.apprtc.SAVE_REMOTE_VIDEO_TO_FILE"; |
| + public static final String EXTRA_SAVE_REMOTE_VIDEO_TO_FILE_WIDTH = |
| + "org.appspot.apprtc.SAVE_REMOTE_VIDEO_TO_FILE_WIDTH"; |
| + public static final String EXTRA_SAVE_REMOTE_VIDEO_TO_FILE_HEIGHT = |
| + "org.appspot.apprtc.SAVE_REMOTE_VIDEO_TO_FILE_HEIGHT"; |
| private static final String TAG = "CallRTCClient"; |
| // List of mandatory application permissions. |
| @@ -128,7 +146,9 @@ public class CallActivity extends Activity |
| private AppRTCAudioManager audioManager = null; |
| private EglBase rootEglBase; |
| private SurfaceViewRenderer localRender; |
| - private SurfaceViewRenderer remoteRender; |
| + private SurfaceViewRenderer remoteRenderScreen; |
| + private GlVideoFileRenderer videoFileRenderer; |
| + private List<VideoRenderer.Callbacks> remoteRenders = new ArrayList<VideoRenderer.Callbacks>(); |
| private PercentFrameLayout localRenderLayout; |
| private PercentFrameLayout remoteRenderLayout; |
| private ScalingType scalingType; |
| @@ -176,7 +196,7 @@ public class CallActivity extends Activity |
| // Create UI controls. |
| localRender = (SurfaceViewRenderer) findViewById(R.id.local_video_view); |
| - remoteRender = (SurfaceViewRenderer) findViewById(R.id.remote_video_view); |
| + remoteRenderScreen = (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(); |
| @@ -191,12 +211,27 @@ public class CallActivity extends Activity |
| }; |
| localRender.setOnClickListener(listener); |
| - remoteRender.setOnClickListener(listener); |
| + remoteRenderScreen.setOnClickListener(listener); |
| + remoteRenders.add(remoteRenderScreen); |
| + |
| + final Intent intent = getIntent(); |
| // Create video renderers. |
| rootEglBase = EglBase.create(); |
| localRender.init(rootEglBase.getEglBaseContext(), null); |
| - remoteRender.init(rootEglBase.getEglBaseContext(), null); |
| + String saveRemoteVideoToFile = intent.getStringExtra(EXTRA_SAVE_REMOTE_VIDEO_TO_FILE); |
| + |
| + // When saveRemoveToFile is set we save the video from the remote to a file. |
| + if (saveRemoteVideoToFile != null) { |
| + int videoOutWidth = intent.getIntExtra(EXTRA_SAVE_REMOTE_VIDEO_TO_FILE_WIDTH, 0); |
| + int videoOutHeight = intent.getIntExtra(EXTRA_SAVE_REMOTE_VIDEO_TO_FILE_HEIGHT, 0); |
| + videoFileRenderer = new GlVideoFileRenderer( |
| + saveRemoteVideoToFile, videoOutWidth, videoOutHeight, |
| + rootEglBase.getEglBaseContext()); |
| + remoteRenders.add(videoFileRenderer); |
| + } |
| + remoteRenderScreen.init(rootEglBase.getEglBaseContext(), null); |
| + |
| localRender.setZOrderMediaOverlay(true); |
| updateVideoView(); |
| @@ -211,7 +246,6 @@ public class CallActivity extends Activity |
| } |
| // Get Intent parameters. |
| - final Intent intent = getIntent(); |
| Uri roomUri = intent.getData(); |
| if (roomUri == null) { |
| logAndToast(getString(R.string.missing_url)); |
| @@ -221,6 +255,7 @@ public class CallActivity extends Activity |
| return; |
| } |
| String roomId = intent.getStringExtra(EXTRA_ROOMID); |
| + Log.d(TAG, "Room ID: " + roomId); |
| if (roomId == null || roomId.length() == 0) { |
| logAndToast(getString(R.string.missing_url)); |
| Log.e(TAG, "Incorrect room ID in intent!"); |
| @@ -255,9 +290,13 @@ public class CallActivity extends Activity |
| intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_AEC, false), |
| intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_AGC, false), |
| intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_NS, false), |
| - intent.getBooleanExtra(EXTRA_ENABLE_LEVEL_CONTROL, false)); |
| - commandLineRun = intent.getBooleanExtra(EXTRA_CMDLINE, false); |
| - runTimeMs = intent.getIntExtra(EXTRA_RUNTIME, 0); |
| + intent.getBooleanExtra(EXTRA_ENABLE_LEVEL_CONTROL, false), |
| + intent.getStringExtra(EXTRA_VIDEO_FILE_AS_CAMERA), |
| + intent.getIntExtra(EXTRA_VIDEO_FILE_AS_CAMERA_WIDTH, 0), |
| + intent.getIntExtra(EXTRA_VIDEO_FILE_AS_CAMERA_HEIGHT, 0)); |
| + runTimeMs = intent.getIntExtra(EXTRA_RUNTIME, 0); |
| + |
| + Log.d(TAG, "VIDEO_FILE: '" + intent.getStringExtra(EXTRA_VIDEO_FILE_AS_CAMERA) + "'"); |
| // Create connection client. Use DirectRTCClient if room name is an IP otherwise use the |
| // standard WebSocketRTCClient. |
| @@ -393,8 +432,8 @@ public class CallActivity extends Activity |
| private void updateVideoView() { |
| remoteRenderLayout.setPosition(REMOTE_X, REMOTE_Y, REMOTE_WIDTH, REMOTE_HEIGHT); |
| - remoteRender.setScalingType(scalingType); |
| - remoteRender.setMirror(false); |
| + remoteRenderScreen.setScalingType(scalingType); |
| + remoteRenderScreen.setMirror(false); |
| if (iceConnected) { |
| localRenderLayout.setPosition( |
| @@ -408,7 +447,7 @@ public class CallActivity extends Activity |
| localRender.setMirror(true); |
| localRender.requestLayout(); |
| - remoteRender.requestLayout(); |
| + remoteRenderScreen.requestLayout(); |
| } |
| private void startCall() { |
| @@ -474,9 +513,13 @@ public class CallActivity extends Activity |
| localRender.release(); |
| localRender = null; |
| } |
| - if (remoteRender != null) { |
| - remoteRender.release(); |
| - remoteRender = null; |
| + if (videoFileRenderer != null) { |
| + videoFileRenderer.release(); |
| + videoFileRenderer = null; |
| + } |
| + if (remoteRenderScreen != null) { |
| + remoteRenderScreen.release(); |
| + remoteRenderScreen = null; |
| } |
| if (audioManager != null) { |
| audioManager.close(); |
| @@ -540,7 +583,7 @@ public class CallActivity extends Activity |
| signalingParameters = params; |
| logAndToast("Creating peer connection, delay=" + delta + "ms"); |
| peerConnectionClient.createPeerConnection(rootEglBase.getEglBaseContext(), |
| - localRender, remoteRender, signalingParameters); |
| + localRender, remoteRenders, signalingParameters); |
| if (signalingParameters.initiator) { |
| logAndToast("Creating OFFER..."); |