summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRavi Paluri <rpaluri@codeaurora.org>2014-05-09 15:11:33 +0530
committeremancebo <emancebo@cyngn.com>2014-09-04 15:20:00 -0700
commit6d4bb8a904e5a20ca071a2ab324394344e509b9d (patch)
tree190e2e1d68b2625453f5aa23b4a14c1242614713
parent7970189ba6af7d4006699491a4fdd29f038cf7ce (diff)
downloadpackages_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.java11
-rw-r--r--src/com/android/incallui/VideoCallPanel.java80
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 {