summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcodeworkx <codeworkx@cyanogenmod.org>2016-12-26 20:47:16 +0100
committerDaniel Hillenbrand <daniel.hillenbrand@codeworkx.de>2017-02-18 14:47:11 +0000
commitf17e1272d105ab76cc2fad56c491b2911c1a4e17 (patch)
tree8f284cf698c51696f76015ae371d1697b4982d33
parent27f8676f2dc16f8e611857937eb4d91d0ced5597 (diff)
downloadandroid_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-xsrc/com/android/camera/CaptureModule.java61
-rw-r--r--src/com/android/camera/SettingsManager.java13
-rw-r--r--src/com/android/camera/imageprocessor/PostProcessor.java29
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;
}