diff options
author | codeworkx <codeworkx@cyanogenmod.org> | 2016-12-26 20:47:16 +0100 |
---|---|---|
committer | Daniel Hillenbrand <daniel.hillenbrand@codeworkx.de> | 2017-02-18 14:47:11 +0000 |
commit | f17e1272d105ab76cc2fad56c491b2911c1a4e17 (patch) | |
tree | 8f284cf698c51696f76015ae371d1697b4982d33 | |
parent | 27f8676f2dc16f8e611857937eb4d91d0ced5597 (diff) | |
download | android_packages_apps_Snap-f17e1272d105ab76cc2fad56c491b2911c1a4e17.tar.gz android_packages_apps_Snap-f17e1272d105ab76cc2fad56c491b2911c1a4e17.tar.bz2 android_packages_apps_Snap-f17e1272d105ab76cc2fad56c491b2911c1a4e17.zip |
Snap: CaptureModule: check if ZSL is supported before using it
Change-Id: Ifde34ce367ceeb19ad71bcff0c4518d578bb52a5
-rwxr-xr-x | src/com/android/camera/CaptureModule.java | 61 | ||||
-rw-r--r-- | src/com/android/camera/SettingsManager.java | 13 | ||||
-rw-r--r-- | src/com/android/camera/imageprocessor/PostProcessor.java | 29 |
3 files changed, 70 insertions, 33 deletions
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java index 89a6cf963..d9a410aff 100755 --- a/src/com/android/camera/CaptureModule.java +++ b/src/com/android/camera/CaptureModule.java @@ -206,7 +206,7 @@ public class CaptureModule extends BaseModule<CaptureUI> implements PhotoControl private float mZoomValue = 1f; private FocusStateListener mFocusStateListener; private LocationManager mLocationManager; - private SettingsManager mSettingsManager; + public SettingsManager mSettingsManager; private long SECONDARY_SERVER_MEM; private boolean mLongshotActive = false; private CameraCharacteristics mMainCameraCharacteristics; @@ -860,12 +860,12 @@ public class CaptureModule extends BaseModule<CaptureUI> implements PhotoControl } }; - if(id == getMainCameraId()) { + if (id == getMainCameraId()) { mFrameProcessor.init(mPreviewSize); mFrameProcessor.setOutputSurface(surface); } - if(isClearSightOn()) { + if (isClearSightOn()) { mPreviewRequestBuilder[id].addTarget(surface); list.add(surface); ClearSightImageProcessor.getInstance().createCaptureSession( @@ -884,7 +884,7 @@ public class CaptureModule extends BaseModule<CaptureUI> implements PhotoControl list.add(surs); } list.add(mImageReader[id].getSurface()); - if(mPostProcessor.isZSLEnabled()) { + if (mPostProcessor.isZSLEnabled()) { mPreviewRequestBuilder[id].addTarget(mImageReader[id].getSurface()); mCameraDevice[id].createReprocessableCaptureSession(new InputConfiguration(mImageReader[id].getWidth(), mImageReader[id].getHeight(), mImageReader[id].getImageFormat()), @@ -1314,7 +1314,9 @@ public class CaptureModule extends BaseModule<CaptureUI> implements PhotoControl * @param width The width of available size for camera preview * @param height The height of available size for camera preview */ - private void setUpCameraOutputs(int imageFormat) { + private void setUpCameraOutputs(boolean isFilterOrZslEnabled) { + int imageFormat = ImageFormat.JPEG; + Log.d(TAG, "setUpCameraOutputs"); CameraManager manager = (CameraManager) mActivity.getSystemService(Context.CAMERA_SERVICE); try { @@ -1323,6 +1325,8 @@ public class CaptureModule extends BaseModule<CaptureUI> implements PhotoControl String cameraId = cameraIdList[i]; CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); + int [] capabilities = characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES); + if (isInMode(i)) mCameraIdList.add(i); if(i == getMainCameraId()) { @@ -1337,6 +1341,21 @@ public class CaptureModule extends BaseModule<CaptureUI> implements PhotoControl } mCameraId[i] = cameraId; + // Set ImageFormat for ZSL + if (isFilterOrZslEnabled) { + for (int capability : capabilities) { + // YUV has higher priority + if (capability == CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING) { + Log.d(TAG, "ImageFormat: YUV_420_888"); + imageFormat = ImageFormat.YUV_420_888; + break; + } else if (capability == CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING) { + Log.d(TAG, "ImageFormat: PRIVATE"); + imageFormat = ImageFormat.PRIVATE; + } + } + } + if (isClearSightOn()) { if(i == getMainCameraId()) { ClearSightImageProcessor.getInstance().init(map, mPictureSize.getWidth(), @@ -1838,12 +1857,13 @@ public class CaptureModule extends BaseModule<CaptureUI> implements PhotoControl updatePreviewSize(); mUI.showSurfaceView(); mCameraIdList = new ArrayList<>(); + int cameraId = getMainCameraId(); if (mSound == null) { mSound = new MediaActionSound(); } - if(mPostProcessor != null) { + if (mPostProcessor != null) { String longshot = mSettingsManager.getValue(SettingsManager.KEY_LONGSHOT); String flashMode = mSettingsManager.getValue(SettingsManager.KEY_FLASH_MODE); String scene = mSettingsManager.getValue(SettingsManager.KEY_SCENE_MODE); @@ -1857,35 +1877,24 @@ public class CaptureModule extends BaseModule<CaptureUI> implements PhotoControl flashMode != null && flashMode.equals(CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH+"")); } } - if(mFrameProcessor != null) { + if (mFrameProcessor != null) { mFrameProcessor.onOpen(getFrameProcFilterId()); } - if(mPostProcessor.isFilterOn() || getFrameFilters().size() != 0 || mPostProcessor.isZSLEnabled()) { - setUpCameraOutputs(ImageFormat.YUV_420_888); + if (mPostProcessor.isFilterOn() || getFrameFilters().size() != 0 || mPostProcessor.isZSLEnabled()) { + setUpCameraOutputs(true); } else { - setUpCameraOutputs(ImageFormat.JPEG); + setUpCameraOutputs(false); } + setDisplayOrientation(); startBackgroundThread(); + Message msg = Message.obtain(); msg.what = OPEN_CAMERA; - if (isBackCamera()) { - switch (getCameraMode()) { - case DUAL_MODE: - case BAYER_MODE: - msg.arg1 = BAYER_ID; - mCameraHandler.sendMessage(msg); - break; - case MONO_MODE: - msg.arg1 = MONO_ID; - mCameraHandler.sendMessage(msg); - break; - } - } else { - msg.arg1 = FRONT_ID; - mCameraHandler.sendMessage(msg); - } + msg.arg1 = cameraId; + mCameraHandler.sendMessage(msg); + if (!mFirstTimeInitialized) { initializeFirstTime(); } else { diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java index 7ac4257ee..263575cb7 100644 --- a/src/com/android/camera/SettingsManager.java +++ b/src/com/android/camera/SettingsManager.java @@ -836,6 +836,19 @@ public class SettingsManager implements ListMenu.SettingsListener { mValuesMap.get(KEY_FLASH_MODE) != null; } + public boolean isZslSupported(int id) { + boolean zslSupported = false; + int [] capabilities = mCharacteristics.get(id).get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES); + for (int capability : capabilities) { + if (capability == CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING || + capability == CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING) { + zslSupported = true; + } + } + Log.d(TAG, "isZslSupported=" + zslSupported); + return zslSupported; + } + private List<Size> getSupportedPictureSize(int cameraId) { StreamConfigurationMap map = mCharacteristics.get(cameraId).get( CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); diff --git a/src/com/android/camera/imageprocessor/PostProcessor.java b/src/com/android/camera/imageprocessor/PostProcessor.java index 74372d70a..cd07cb64c 100644 --- a/src/com/android/camera/imageprocessor/PostProcessor.java +++ b/src/com/android/camera/imageprocessor/PostProcessor.java @@ -116,11 +116,19 @@ public class PostProcessor{ private CameraDevice mCameraDevice; private CameraCaptureSession mCaptureSession; private ImageReader mImageReader; - private boolean mUseZSL = true; + private boolean mUseZSL = false; private Handler mZSLHandler; private HandlerThread mZSLHandlerThread; private ImageHandlerTask mImageHandlerTask; + private void checkAndEnableZSL(int cameraId) { + if (mController.mSettingsManager.isZslSupported(cameraId)) { + mUseZSL = true; + } else { + mUseZSL = false; + } + } + public boolean isZSLEnabled() { return mUseZSL; } @@ -305,6 +313,7 @@ public class PostProcessor{ public PostProcessor(CameraActivity activity, CaptureModule module) { mController = module; mActivity = activity; + checkAndEnableZSL(mController.getMainCameraId()); mNamedImages = new PhotoModule.NamedImages(); } @@ -343,13 +352,19 @@ public class PostProcessor{ public void onOpen(int postFilterId, boolean isLongShotOn, boolean isFlashModeOn) { mImageHandlerTask = new ImageHandlerTask(); - if(setFilter(postFilterId) || isLongShotOn || isFlashModeOn) { - mUseZSL = false; + if (mController.mSettingsManager.isZslSupported(mController.getMainCameraId())) { + if (setFilter(postFilterId) || isLongShotOn || isFlashModeOn) { + mUseZSL = false; + } else { + mUseZSL = true; + } } else { - mUseZSL = true; + mUseZSL = false; } + startBackgroundThread(); - if(mUseZSL) { + + if (mUseZSL) { mZSLQueue = new ZSLQueue(mController); } } @@ -360,13 +375,13 @@ public class PostProcessor{ public void onClose() { synchronized (lock) { - if(mHandler != null) { + if (mHandler != null) { mHandler.setInActive(); } stopBackgroundThread(); } setFilter(FILTER_NONE); - if(mZSLQueue != null) { + if (mZSLQueue != null) { mZSLQueue.onClose(); mZSLQueue = null; } |