diff options
author | Ravi Paluri <rpaluri@codeaurora.org> | 2014-05-09 15:11:33 +0530 |
---|---|---|
committer | emancebo <emancebo@cyngn.com> | 2014-09-04 15:20:00 -0700 |
commit | 6d4bb8a904e5a20ca071a2ab324394344e509b9d (patch) | |
tree | 190e2e1d68b2625453f5aa23b4a14c1242614713 | |
parent | 7970189ba6af7d4006699491a4fdd29f038cf7ce (diff) | |
download | packages_apps_InCallUI-6d4bb8a904e5a20ca071a2ab324394344e509b9d.tar.gz packages_apps_InCallUI-6d4bb8a904e5a20ca071a2ab324394344e509b9d.tar.bz2 packages_apps_InCallUI-6d4bb8a904e5a20ca071a2ab324394344e509b9d.zip |
Ims: Handle START_READY_EVT and STOP_READY_EVT
1. These two events will be used by Telephony and the VT library to
synchronize camera recording: Start Recording and Stop Recording.
2. Telephony shall start camera recording only after receiving
START_READY_EVT.
3. After receiving STOP_READY_EVT telephony shall wait for
START_READY_EVENT before starting camera recording.
Change-Id: Iee919158ddc8ade5df7deb7225d897f4b629cb27
CRs-Fixed: 621548
-rw-r--r-- | src/com/android/incallui/MediaHandler.java | 11 | ||||
-rw-r--r-- | src/com/android/incallui/VideoCallPanel.java | 80 |
2 files changed, 74 insertions, 17 deletions
diff --git a/src/com/android/incallui/MediaHandler.java b/src/com/android/incallui/MediaHandler.java index dbf35562..f31403ea 100644 --- a/src/com/android/incallui/MediaHandler.java +++ b/src/com/android/incallui/MediaHandler.java @@ -80,6 +80,7 @@ public class MediaHandler extends Handler { public static final int PLAYER_STOP_EVENT = 4; public static final int DISPLAY_MODE_EVT = 5; public static final int PEER_RESOLUTION_CHANGE_EVT = 6; + public static final int STOP_READY_EVT = 9; protected final RegistrantList mDisplayModeEventRegistrants = new RegistrantList(); @@ -128,6 +129,7 @@ public class MediaHandler extends Handler { void onStartReadyEvent(); void onPeerResolutionChangeEvent(); void onPlayerStateChanged(int state); + void onStopReadyEvent(); } static { @@ -287,11 +289,18 @@ public class MediaHandler extends Handler { } break; case START_READY_EVT: - Log.d(TAG, "Received START_READY_EVT. Camera frames can be sent now"); + Log.d(TAG, "Received START_READY_EVT. Camera recording can be started"); if (mMediaEventListener != null) { mMediaEventListener.onStartReadyEvent(); } break; + + case STOP_READY_EVT: + Log.d(TAG, "Received STOP_READY_EVT"); + if (mMediaEventListener != null) { + mMediaEventListener.onStopReadyEvent(); + } + break; case DISPLAY_MODE_EVT: mUIOrientationMode = nativeGetUIOrientationMode(); processUIOrientationMode(); diff --git a/src/com/android/incallui/VideoCallPanel.java b/src/com/android/incallui/VideoCallPanel.java index 97b639ff..86bc9495 100644 --- a/src/com/android/incallui/VideoCallPanel.java +++ b/src/com/android/incallui/VideoCallPanel.java @@ -93,6 +93,16 @@ public class VideoCallPanel extends RelativeLayout implements TextureView.Surfac // For eg. VT_RX call will not need camera private boolean mCameraNeeded = false; + // Flag to indicate if recording can be started + private boolean mStartReceived = false; + + /* + * Flag to indicate whether recording has started or not + * False: recording hasn't started + * True: recording has started + */ + private boolean mIsRecordingStarted = false; + /** * This class implements the zoom listener for zoomControl */ @@ -115,16 +125,9 @@ public class VideoCallPanel extends RelativeLayout implements TextureView.Surfac if (cameraState == CameraState.PREVIEW_STARTED) { // If camera is already capturing stop preview, reset the // parameters and then start preview again - try { - mVideoCallManager.stopCameraRecording(); - mVideoCallManager.stopCameraPreview(); - initializeCameraParams(); - mVideoCallManager.startCameraPreview(mCameraSurface); - mVideoCallManager.startCameraRecording(); - } catch (IOException ioe) { - loge("Exception onParamReadyEvent stopping and starting preview " - + ioe.toString()); - } + stopRecordingAndPreview(); + initializeCameraParams(); + startPreviewAndRecording(); } } @@ -146,7 +149,25 @@ public class VideoCallPanel extends RelativeLayout implements TextureView.Surfac @Override public void onStartReadyEvent() { - // NO-OP + if (DBG) { + log("onStartReadyEvent mCameraNeeded=" + mCameraNeeded + " CameraSurface= " + + mCameraSurface + " camera state = " + + mVideoCallManager.getCameraState()); + } + + mStartReceived = true; + + if (mCameraNeeded && mCameraSurface != null) { + // startCameraRecording (@ Camerahandler.java) does camera + // preview_started state check. + startCameraRecording(); + } + } + + @Override + public void onStopReadyEvent() { + if (DBG) log("onStopReadyEvent"); + mStartReceived = false; } @Override @@ -334,7 +355,7 @@ public class VideoCallPanel extends RelativeLayout implements TextureView.Surfac } /** - * This method crates the camera object if camera is not disabled + * This method creates the camera object if camera is not disabled * * @param cameraId ID of the front or the back camera * @return Camera instance on success, null otherwise @@ -354,7 +375,34 @@ public class VideoCallPanel extends RelativeLayout implements TextureView.Surfac * This method disconnect and releases the camera */ private void closeCamera() { - mVideoCallManager.closeCamera(); + mVideoCallManager.closeCamera(); + mIsRecordingStarted = false; + } + + /** + * This method stops the camera recording + */ + private void stopCameraRecording() { + // stop recording only if it has started + if (!mIsRecordingStarted) { + log("camera recording hasn't started so no need to stop it"); + return; + } + + mVideoCallManager.stopCameraRecording(); + mIsRecordingStarted = false; + } + + /** + * This method starts the camera recording + */ + private void startCameraRecording() { + if (mStartReceived) { + mVideoCallManager.startCameraRecording(); + mIsRecordingStarted = true; + } else { + log("waiting for START_READY. Deferring camera recording"); + } } /** @@ -363,7 +411,7 @@ public class VideoCallPanel extends RelativeLayout implements TextureView.Surfac private void startPreviewAndRecording() { try { mVideoCallManager.startCameraPreview(mCameraSurface); - mVideoCallManager.startCameraRecording(); + startCameraRecording(); } catch (IOException ioe) { closeCamera(); loge("Exception startPreviewAndRecording, " + ioe.toString()); @@ -374,7 +422,7 @@ public class VideoCallPanel extends RelativeLayout implements TextureView.Surfac * This method stops the camera recording and preview */ private void stopRecordingAndPreview() { - mVideoCallManager.stopCameraRecording(); + stopCameraRecording(); mVideoCallManager.stopCameraPreview(); } @@ -395,7 +443,7 @@ public class VideoCallPanel extends RelativeLayout implements TextureView.Surfac // Use cached surface texture. if (DBG) log("Video surface texture created"); - if (mFarEndSurface==null) { + if (mFarEndSurface == null) { log("Caching video surface texture."); mFarEndSurface = surface; } else { |