diff options
| author | Jack Yoo <jyoo@codeaurora.org> | 2016-09-22 13:06:17 -0700 |
|---|---|---|
| committer | Jay Wang <jaywang@codeaurora.org> | 2016-10-13 11:12:25 -0700 |
| commit | 00e82ced33ad0248c41f6e0423c80cb6d1604a51 (patch) | |
| tree | 90eaf7a73e1f481995abf669f7e63f4dc40b2484 /src/com/android/camera/CaptureModule.java | |
| parent | 795e948c5639f8177c89251014a6935c5343a0e4 (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.java | 129 |
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) { |
