summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/CaptureModule.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/camera/CaptureModule.java')
-rw-r--r--src/com/android/camera/CaptureModule.java117
1 files changed, 69 insertions, 48 deletions
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java
index e2b3b4759..9d48689e1 100644
--- a/src/com/android/camera/CaptureModule.java
+++ b/src/com/android/camera/CaptureModule.java
@@ -44,6 +44,7 @@ import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
import android.hardware.camera2.TotalCaptureResult;
import android.hardware.camera2.params.Face;
+import android.hardware.camera2.params.InputConfiguration;
import android.hardware.camera2.params.MeteringRectangle;
import android.hardware.camera2.params.StreamConfigurationMap;
import android.location.Location;
@@ -472,6 +473,7 @@ public class CaptureModule implements CameraModule, PhotoController,
Face[] faces = result.get(CaptureResult.STATISTICS_FACES);
updateFaceView(faces);
processCaptureResult(result);
+ mPostProcessor.onMetaAvailable(result);
}
};
@@ -781,6 +783,16 @@ public class CaptureModule implements CameraModule, PhotoController,
}
}
+ private CaptureRequest.Builder getRequestBuilder(int id) throws CameraAccessException {
+ CaptureRequest.Builder builder;
+ if(mPostProcessor.isZSLEnabled() && id == getMainCameraId()) {
+ builder = mCameraDevice[id].createCaptureRequest(CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG);
+ } else {
+ builder = mCameraDevice[id].createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
+ }
+ return builder;
+ }
+
private void createSession(final int id) {
if (mPaused || !mCameraOpened[id] || !mSurfaceReady) return;
Log.d(TAG, "createSession " + id);
@@ -788,8 +800,7 @@ public class CaptureModule implements CameraModule, PhotoController,
try {
Surface surface = getPreviewSurfaceForSession(id);
// We set up a CaptureRequest.Builder with the output Surface.
- mPreviewRequestBuilder[id] = mCameraDevice[id].createCaptureRequest(CameraDevice
- .TEMPLATE_PREVIEW);
+ mPreviewRequestBuilder[id] = getRequestBuilder(id);
mPreviewRequestBuilder[id].setTag(id);
CameraCaptureSession.StateCallback captureSessionCallback =
@@ -825,6 +836,8 @@ public class CaptureModule implements CameraModule, PhotoController,
}
if (isClearSightOn()) {
ClearSightImageProcessor.getInstance().onCaptureSessionConfigured(id == BAYER_ID, cameraCaptureSession);
+ } else if(id == getMainCameraId() && mPostProcessor.isZSLEnabled()) {
+ mPostProcessor.onSessionConfiguredForZSL(mCaptureSession[id]);
}
} catch (CameraAccessException e) {
e.printStackTrace();
@@ -878,7 +891,14 @@ public class CaptureModule implements CameraModule, PhotoController,
list.add(surs);
}
list.add(mImageReader[id].getSurface());
- mCameraDevice[id].createCaptureSession(list, captureSessionCallback, null);
+ if(mPostProcessor.isZSLEnabled()) {
+ mPreviewRequestBuilder[id].addTarget(mImageReader[id].getSurface());
+ mCameraDevice[id].createReprocessableCaptureSession(new InputConfiguration(mImageReader[id].getWidth(),
+ mImageReader[id].getHeight(), mImageReader[id].getImageFormat()),
+ list, captureSessionCallback, null);
+ } else {
+ mCameraDevice[id].createCaptureSession(list, captureSessionCallback, null);
+ }
} else {
mPreviewRequestBuilder[id].addTarget(surface);
list.add(surface);
@@ -980,6 +1000,9 @@ public class CaptureModule implements CameraModule, PhotoController,
lockFocus(MONO_ID);
break;
case BAYER_MODE:
+ if(takeZSLPicture(BAYER_ID)) {
+ return;
+ }
lockFocus(BAYER_ID);
break;
case MONO_MODE:
@@ -987,10 +1010,22 @@ public class CaptureModule implements CameraModule, PhotoController,
break;
}
} else {
+ if(takeZSLPicture(FRONT_ID)) {
+ return;
+ }
lockFocus(FRONT_ID);
}
}
+ private boolean takeZSLPicture(int cameraId) {
+ if(mPostProcessor.isZSLEnabled() && mPostProcessor.takeZSLPicture(mCameraDevice[cameraId], mCaptureSession[cameraId], mImageReader[cameraId])) {
+ checkAndPlayShutterSound(cameraId);
+ mUI.enableShutter(true);
+ return true;
+ }
+ return false;
+ }
+
/**
* Lock the focus as the first step for a still image capture.
*/
@@ -1020,8 +1055,7 @@ public class CaptureModule implements CameraModule, PhotoController,
}
try {
- CaptureRequest.Builder builder = mCameraDevice[id].createCaptureRequest(CameraDevice
- .TEMPLATE_PREVIEW);
+ CaptureRequest.Builder builder = getRequestBuilder(id);
builder.setTag(id);
addPreviewSurface(builder, null, id);
@@ -1042,8 +1076,7 @@ public class CaptureModule implements CameraModule, PhotoController,
return;
}
try {
- CaptureRequest.Builder builder = mCameraDevice[id].createCaptureRequest(CameraDevice
- .TEMPLATE_PREVIEW);
+ CaptureRequest.Builder builder = getRequestBuilder(id);
builder.setTag(id);
addPreviewSurface(builder, null, id);
@@ -1080,6 +1113,11 @@ public class CaptureModule implements CameraModule, PhotoController,
mPreviewRequestBuilder[id].set(BayerMonoLinkEnableKey, (byte) 0);
}
}
+
+ public PostProcessor getPostProcessor() {
+ return mPostProcessor;
+ }
+
private void captureStillPicture(final int id) {
Log.d(TAG, "captureStillPicture " + id);
mIsRefocus = false;
@@ -1196,30 +1234,7 @@ public class CaptureModule implements CameraModule, PhotoController,
mMpoSaveHandler.obtainMessage(MpoSaveHandler.MSG_CONFIGURE,
Long.valueOf(mCaptureStartTime)).sendToTarget();
}
- mCaptureSession[id].capture(captureBuilder.build(),
- new CameraCaptureSession.CaptureCallback() {
-
- @Override
- public void onCaptureCompleted(CameraCaptureSession session,
- CaptureRequest request,
- TotalCaptureResult result) {
- Log.d(TAG, "captureStillPicture onCaptureCompleted: " + id);
- }
-
- @Override
- public void onCaptureFailed(CameraCaptureSession session,
- CaptureRequest request,
- CaptureFailure result) {
- Log.d(TAG, "captureStillPicture onCaptureFailed: " + id);
- }
-
- @Override
- public void onCaptureSequenceCompleted(CameraCaptureSession session, int
- sequenceId, long frameNumber) {
- Log.d(TAG, "captureStillPicture onCaptureSequenceCompleted: " + id);
- unlockFocus(id);
- }
- }, mCaptureCallbackHandler);
+ mCaptureSession[id].capture(captureBuilder.build(), captureCallback, mCaptureCallbackHandler);
}
}
} catch (CameraAccessException e) {
@@ -1282,8 +1297,7 @@ public class CaptureModule implements CameraModule, PhotoController,
private void runPrecaptureSequence(int id) {
Log.d(TAG, "runPrecaptureSequence: " + id);
try {
- CaptureRequest.Builder builder = mCameraDevice[id].createCaptureRequest(CameraDevice
- .TEMPLATE_PREVIEW);
+ CaptureRequest.Builder builder = getRequestBuilder(id);
builder.setTag(id);
addPreviewSurface(builder, null, id);
applySettingsForPrecapture(builder, id);
@@ -1339,9 +1353,9 @@ public class CaptureModule implements CameraModule, PhotoController,
// No Clearsight
mImageReader[i] = ImageReader.newInstance(mPictureSize.getWidth(),
mPictureSize.getHeight(), imageFormat, PostProcessor.MAX_REQUIRED_IMAGE_NUM);
- if((mPostProcessor.isFilterOn() || getFrameFilters().size() != 0)
+ if ((mPostProcessor.isFilterOn() || getFrameFilters().size() != 0 || mPostProcessor.isZSLEnabled())
&& i == getMainCameraId()) {
- mImageReader[i].setOnImageAvailableListener(mPostProcessor, mImageAvailableHandler);
+ mImageReader[i].setOnImageAvailableListener(mPostProcessor.getImageHandler(), mImageAvailableHandler);
} else {
mImageReader[i].setOnImageAvailableListener(new ImageAvailableListener(i) {
@Override
@@ -1429,8 +1443,7 @@ public class CaptureModule implements CameraModule, PhotoController,
private void unlockFocus(int id) {
Log.d(TAG, "unlockFocus " + id);
try {
- CaptureRequest.Builder builder = mCameraDevice[id].createCaptureRequest(CameraDevice
- .TEMPLATE_PREVIEW);
+ CaptureRequest.Builder builder = getRequestBuilder(id);
builder.setTag(id);
addPreviewSurface(builder, null, id);
@@ -1773,9 +1786,10 @@ public class CaptureModule implements CameraModule, PhotoController,
return PostProcessor.FILTER_SHARPSHOOTER;
} else if (mode == SettingsManager.SCENE_MODE_UBIFOCUS_INT) {
return PostProcessor.FILTER_UBIFOCUS;
- } else if (mode == SettingsManager.SCENE_MODE_AUTO_INT && StillmoreFilter.isSupportedStatic()) {
- return PostProcessor.FILTER_STILLMORE;
- } else if (mode == SettingsManager.SCENE_MODE_BESTPICTURE_INT) {
+ }// else if (mode == SettingsManager.SCENE_MODE_AUTO_INT && StillmoreFilter.isSupportedStatic()) {
+ // return PostProcessor.FILTER_STILLMORE;
+ //TODO: Need to put this back
+ else if (mode == SettingsManager.SCENE_MODE_BESTPICTURE_INT) {
return PostProcessor.FILTER_BESTPICTURE;
}
return PostProcessor.FILTER_NONE;
@@ -1841,20 +1855,24 @@ public class CaptureModule implements CameraModule, PhotoController,
}
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);
if (scene != null) {
int mode = Integer.parseInt(scene);
Log.d(TAG, "Chosen postproc filter id : " + getPostProcFilterId(mode));
- mPostProcessor.onOpen(getPostProcFilterId(mode));
+ mPostProcessor.onOpen(getPostProcFilterId(mode), longshot != null && longshot.equals("on"),
+ flashMode != null && flashMode.equals(CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH+""));
} else {
- mPostProcessor.onOpen(PostProcessor.FILTER_NONE);
+ mPostProcessor.onOpen(PostProcessor.FILTER_NONE, longshot != null && longshot.equals("on"),
+ flashMode != null && flashMode.equals(CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH+""));
}
}
if(mFrameProcessor != null) {
mFrameProcessor.onOpen(getFrameProcFilterId());
}
- if(mPostProcessor.isFilterOn() || getFrameFilters().size() != 0) {
+ if(mPostProcessor.isFilterOn() || getFrameFilters().size() != 0 || mPostProcessor.isZSLEnabled()) {
setUpCameraOutputs(ImageFormat.YUV_420_888);
} else {
setUpCameraOutputs(ImageFormat.JPEG);
@@ -3290,11 +3308,14 @@ public class CaptureModule implements CameraModule, PhotoController,
if (count == 0) restart();
return;
case SettingsManager.KEY_SCENE_MODE:
- if (count == 0 && checkNeedToRestart(value)) {
- restart();
- return;
- }
- break;
+ if (count == 0) restart();
+ return;
+ case SettingsManager.KEY_LONGSHOT:
+ if (count == 0) restart();
+ return;
+ case SettingsManager.KEY_FLASH_MODE:
+ if (count == 0) restart(); //Restart is due to ZSL mode change
+ return;
}
if (isBackCamera()) {