From 87e72ba9d89f8b83b1356f17077b9652346a29d4 Mon Sep 17 00:00:00 2001 From: Pannag Sanketi Date: Mon, 14 Nov 2011 21:48:17 -0800 Subject: Start Effects Recording only after preview loads Start Effects Recording only after we get SurfaceTexture Callback in EffectsRecorder, and hence preview loaded. Disable the shutter button on creation, and re-enable it on the preview callback. Else, one could potentially start the recording before the preview loads, leading to a wrong state information and an eventual crash. Related Bugs: 5605173, 5605658 Change-Id: I2ed766997294c165ce6c262cf47f124493d0c5ec --- src/com/android/camera/EffectsRecorder.java | 4 ++++ src/com/android/camera/VideoCamera.java | 14 ++++++++++++++ 2 files changed, 18 insertions(+) (limited to 'src/com') diff --git a/src/com/android/camera/EffectsRecorder.java b/src/com/android/camera/EffectsRecorder.java index 737e828..8470038 100644 --- a/src/com/android/camera/EffectsRecorder.java +++ b/src/com/android/camera/EffectsRecorder.java @@ -73,6 +73,7 @@ public class EffectsRecorder { public static final int EFFECT_MSG_SWITCHING_EFFECT = 2; public static final int EFFECT_MSG_EFFECTS_STOPPED = 3; public static final int EFFECT_MSG_RECORDING_DONE = 4; + public static final int EFFECT_MSG_PREVIEW_RUNNING = 5; private Context mContext; private Handler mHandler; @@ -634,6 +635,9 @@ public class EffectsRecorder { mState = STATE_PREVIEW; if (mLogVerbose) Log.v(TAG, "Start preview/effect switch complete"); + + // Sending a message to listener that preview is complete + sendMessage(mCurrentEffect, EFFECT_MSG_PREVIEW_RUNNING); } } }; diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java index f725f43..6a82187 100755 --- a/src/com/android/camera/VideoCamera.java +++ b/src/com/android/camera/VideoCamera.java @@ -432,6 +432,16 @@ public class VideoCamera extends ActivityBase mShutterButton.setOnShutterButtonListener(this); mShutterButton.requestFocus(); + // Disable the shutter button if effects are ON since it might take + // a little more time for the effects preview to be ready. We do not + // want to allow recording before that happens. The shutter button + // will be enabled when we get the message from effectsrecorder that + // the preview is running. This becomes critical when the camera is + // swapped. + if (effectsActive()) { + mShutterButton.setEnabled(false); + } + mRecordingTimeView = (TextView) findViewById(R.id.recording_time); mRecordingTimeRect = (RotateLayout) findViewById(R.id.recording_time_rect); mOrientationListener = new MyOrientationEventListener(this); @@ -641,6 +651,7 @@ public class VideoCamera extends ActivityBase @Override public void onShutterButtonClick() { if (collapseCameraControls()) return; + boolean stop = mMediaRecorderRecording; if (stop) { @@ -1992,6 +2003,9 @@ public class VideoCamera extends ActivityBase } } mEffectsDisplayResult = false; + } else if (effectMsg == EffectsRecorder.EFFECT_MSG_PREVIEW_RUNNING) { + // Enable the shutter button once the preview is complete. + mShutterButton.setEnabled(true); } else if (effectId == EffectsRecorder.EFFECT_BACKDROPPER) { switch (effectMsg) { case EffectsRecorder.EFFECT_MSG_STARTED_LEARNING: -- cgit v1.1