summaryrefslogtreecommitdiff
path: root/src/com/android/camera/CaptureModule.java
diff options
context:
space:
mode:
authorJack Yoo <jyoo@codeaurora.org>2016-09-22 13:06:17 -0700
committerJay Wang <jaywang@codeaurora.org>2016-10-13 11:12:25 -0700
commit00e82ced33ad0248c41f6e0423c80cb6d1604a51 (patch)
tree90eaf7a73e1f481995abf669f7e63f4dc40b2484 /src/com/android/camera/CaptureModule.java
parent795e948c5639f8177c89251014a6935c5343a0e4 (diff)
SnapdragonCamera: Restart session instead restart
Restart the session instead of restarting on ZSL mode change. Change-Id: Idc484c592d2ca0a32e60b3a70380fd309f559dcd CRs-Fixed: 1071798
Diffstat (limited to 'src/com/android/camera/CaptureModule.java')
-rw-r--r--src/com/android/camera/CaptureModule.java129
1 files changed, 72 insertions, 57 deletions
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java
index 1ac578121..997525c50 100644
--- a/src/com/android/camera/CaptureModule.java
+++ b/src/com/android/camera/CaptureModule.java
@@ -954,7 +954,6 @@ public class CaptureModule implements CameraModule, PhotoController,
}
public void reinit() {
- setCurrentMode();
mSettingsManager.reinit(getMainCameraId());
}
@@ -989,7 +988,6 @@ public class CaptureModule implements CameraModule, PhotoController,
mPostProcessor = new PostProcessor(mActivity, this);
mFrameProcessor = new FrameProcessor(mActivity, this);
- setCurrentMode();
mContentResolver = mActivity.getContentResolver();
mUI = new CaptureUI(activity, this, parent);
mUI.initializeControlByIntent();
@@ -1524,11 +1522,7 @@ public class CaptureModule implements CameraModule, PhotoController,
return new Size(width, height);
}
- /**
- * Closes the current {@link CameraDevice}.
- */
- private void closeCamera() {
- Log.d(TAG, "closeCamera");
+ private void closeProcessors() {
if(mPostProcessor != null) {
mPostProcessor.onClose();
}
@@ -1536,6 +1530,37 @@ public class CaptureModule implements CameraModule, PhotoController,
if(mFrameProcessor != null) {
mFrameProcessor.onClose();
}
+ }
+
+ private void closeSessions() {
+ for (int i = MAX_NUM_CAM-1; i >= 0; i--) {
+ if (null != mCaptureSession[i]) {
+ if (mCamerasOpened) {
+ try {
+ mCaptureSession[i].capture(mPreviewRequestBuilder[i].build(), null,
+ mCameraHandler);
+ } catch (CameraAccessException e) {
+ e.printStackTrace();
+ }
+ }
+ mCaptureSession[i].close();
+ mCaptureSession[i] = null;
+ }
+
+ if (null != mImageReader[i]) {
+ mImageReader[i].close();
+ mImageReader[i] = null;
+ }
+ }
+ }
+
+ /**
+ * Closes the current {@link CameraDevice}.
+ */
+ private void closeCamera() {
+ Log.d(TAG, "closeCamera");
+
+ closeProcessors();
/* no need to set this in the callback and handle asynchronously. This is the same
reason as why we release the semaphore here, not in camera close callback function
@@ -1789,10 +1814,6 @@ public class CaptureModule implements CameraModule, PhotoController,
mLongshotActive = false;
}
- private void setCurrentMode() {
- mCurrentMode = isBackCamera() ? getCameraMode() : FRONT_MODE;
- }
-
private ArrayList<Integer> getFrameProcFilterId() {
ArrayList<Integer> filters = new ArrayList<Integer>();
@@ -1886,19 +1907,7 @@ public class CaptureModule implements CameraModule, PhotoController,
mUI.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
}
- @Override
- public void onResumeAfterSuper() {
- Log.d(TAG, "onResume " + getCameraMode());
- initializeValues();
- int[] size = checkMakeupDependency();
- updatePreviewSize(size);
- mUI.showSurfaceView();
- mCameraIdList = new ArrayList<>();
-
- if (mSound == null) {
- mSound = new MediaActionSound();
- }
-
+ private void openProcessors() {
String scene = mSettingsManager.getValue(SettingsManager.KEY_SCENE_MODE);
if(mPostProcessor != null) {
String longshot = mSettingsManager.getValue(SettingsManager.KEY_LONGSHOT);
@@ -1907,10 +1916,10 @@ public class CaptureModule implements CameraModule, PhotoController,
int mode = Integer.parseInt(scene);
Log.d(TAG, "Chosen postproc filter id : " + getPostProcFilterId(mode));
mPostProcessor.onOpen(getPostProcFilterId(mode), longshot != null && longshot.equals("on"),
- flashMode != null && flashMode.equals(CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH+""));
+ flashMode != null && flashMode.equals("on"));
} else {
mPostProcessor.onOpen(PostProcessor.FILTER_NONE, longshot != null && longshot.equals("on"),
- flashMode != null && flashMode.equals(CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH+""));
+ flashMode != null && flashMode.equals("on"));
}
}
if(mFrameProcessor != null) {
@@ -1922,8 +1931,24 @@ public class CaptureModule implements CameraModule, PhotoController,
} else {
setUpCameraOutputs(ImageFormat.JPEG);
}
+ }
+
+ @Override
+ public void onResumeAfterSuper() {
+ Log.d(TAG, "onResume " + getCameraMode());
+ initializeValues();
+ int[] size = checkMakeupDependency();
+ updatePreviewSize(size);
+ mUI.showSurfaceView();
+ mCameraIdList = new ArrayList<>();
+
+ if (mSound == null) {
+ mSound = new MediaActionSound();
+ }
+
setDisplayOrientation();
startBackgroundThread();
+ openProcessors();
Message msg = Message.obtain();
msg.what = OPEN_CAMERA;
if (isBackCamera()) {
@@ -1956,6 +1981,7 @@ public class CaptureModule implements CameraModule, PhotoController,
});
mUI.enableShutter(true);
+ String scene = mSettingsManager.getValue(SettingsManager.KEY_SCENE_MODE);
if(isPanoSetting(scene)) {
mActivity.onModuleSelected(ModuleSwitcher.PANOCAPTURE_MODULE_INDEX);
mSettingsManager.setValue(SettingsManager.KEY_SCENE_MODE, SettingsManager.SCENE_MODE_AUTO_INT+"");
@@ -3359,10 +3385,6 @@ public class CaptureModule implements CameraModule, PhotoController,
case SettingsManager.KEY_VIDEO_TIME_LAPSE_FRAME_INTERVAL:
updateTimeLapseSetting();
continue;
- case SettingsManager.KEY_PICTURE_SIZE:
- updatePictureSize();
- if (count == 0) restart();
- return;
case SettingsManager.KEY_FACE_DETECTION:
updateFaceDetection();
break;
@@ -3370,22 +3392,13 @@ public class CaptureModule implements CameraModule, PhotoController,
case SettingsManager.KEY_MONO_ONLY:
case SettingsManager.KEY_CLEARSIGHT:
case SettingsManager.KEY_MONO_PREVIEW:
- if (count == 0) restart();
- return;
- case SettingsManager.KEY_TRACKINGFOCUS:
- if (count == 0) restart();
- return;
- case SettingsManager.KEY_SCENE_MODE:
- if (count == 0) restart();
- return;
- case SettingsManager.KEY_LONGSHOT:
- if (count == 0) restart();
+ if (count == 0) restartAll();
return;
case SettingsManager.KEY_VIDEO_FLASH_MODE:
updateVideoFlash();
return;
case SettingsManager.KEY_FLASH_MODE:
- if (count == 0) restart(); //Restart is due to ZSL mode change
+ if (count == 0) restartSession(false);
return;
}
@@ -3464,22 +3477,7 @@ public class CaptureModule implements CameraModule, PhotoController,
});
}
- private int mCurrentMode;
-
- private boolean checkNeedToRestart(String value) {
- mPostProcessor.setFilter(PostProcessor.FILTER_NONE);
- int mode = Integer.parseInt(value);
- if (getPostProcFilterId(mode) != PostProcessor.FILTER_NONE) {
- return true;
- }
- if (value.equals(SettingsManager.SCENE_MODE_DUAL_STRING) && mCurrentMode != DUAL_MODE)
- return true;
- if (!value.equals(SettingsManager.SCENE_MODE_DUAL_STRING) && mCurrentMode == DUAL_MODE)
- return true;
- return false;
- }
-
- public void restart() {
+ public void restartAll() {
reinit();
onPauseBeforeSuper();
onPauseAfterSuper();
@@ -3487,6 +3485,23 @@ public class CaptureModule implements CameraModule, PhotoController,
onResumeAfterSuper();
}
+ public void restartSession(boolean isSurfaceChanged) {
+ if(isSurfaceChanged) {
+ mUI.hideSurfaceView();
+ }
+ closeProcessors();
+ closeSessions();
+ initializeValues();
+ int[] size = checkMakeupDependency();
+ updatePreviewSize(size);
+ openProcessors();
+ if(isSurfaceChanged) {
+ mUI.showSurfaceView();
+ } else {
+ createSessions();
+ }
+ }
+
private Size getOptimalPreviewSize(Size pictureSize, Size[] prevSizes, int screenW, int
screenH) {
if (pictureSize.getWidth() <= screenH && pictureSize.getHeight() <= screenW) {