package com.android.camera.one.v2.photo;
-import static com.android.camera.one.v2.core.ResponseListeners.forFrameExposure;
-import static com.android.camera.one.v2.core.ResponseListeners.forPartialMetadata;
-
+import android.annotation.TargetApi;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CaptureRequest;
+import android.os.Build;
import com.android.camera.async.BufferQueue;
import com.android.camera.async.Updatable;
import javax.annotation.ParametersAreNonnullByDefault;
+import static com.android.camera.one.v2.core.ResponseListeners.forFrameExposure;
+import static com.android.camera.one.v2.core.ResponseListeners.forPartialMetadata;
+
/**
* Captures a burst after waiting for AF and AE convergence.
*/
@ParametersAreNonnullByDefault
+@TargetApi(Build.VERSION_CODES.LOLLIPOP)
class ConvergedImageCaptureCommand implements ImageCaptureCommand {
private final ImageStreamFactory mImageReader;
private final FrameServer mFrameServer;
private final RequestBuilder.Factory mRepeatingRequestBuilder;
private final int mRepeatingRequestTemplate;
+ private final int mStillCaptureRequestTemplate;
private final List<RequestBuilder.Factory> mBurst;
/**
* capture is complete.
* @param repeatingRequestTemplate The template type to use for repeating
* requests.
+ * @param repeatingRequestTemplate The template type to use for capture
+ * requests.
* @param burst Creates request builders to use for each image captured from
* the burst.
*/
public ConvergedImageCaptureCommand(ImageStreamFactory imageReader, FrameServer frameServer,
RequestBuilder.Factory repeatingRequestBuilder,
- int repeatingRequestTemplate,
+ int repeatingRequestTemplate, int stillCaptureRequestTemplate,
List<RequestBuilder.Factory> burst) {
mImageReader = imageReader;
mFrameServer = frameServer;
mRepeatingRequestBuilder = repeatingRequestBuilder;
mRepeatingRequestTemplate = repeatingRequestTemplate;
+ mStillCaptureRequestTemplate = stillCaptureRequestTemplate;
mBurst = burst;
}
private RequestBuilder createAETriggerRequest() throws CameraAccessException {
RequestBuilder triggerBuilder = mRepeatingRequestBuilder
- .create(CameraDevice.TEMPLATE_STILL_CAPTURE);
+ .create(mRepeatingRequestTemplate);
triggerBuilder.setParam(CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
triggerBuilder.setParam(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, CaptureRequest
private RequestBuilder createAEIdleRequest() throws CameraAccessException {
RequestBuilder triggerBuilder = mRepeatingRequestBuilder
- .create(CameraDevice.TEMPLATE_STILL_CAPTURE);
+ .create(mRepeatingRequestTemplate);
triggerBuilder.setParam(CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
triggerBuilder.setParam(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, CaptureRequest
List<Request> burstRequest = new ArrayList<>(mBurst.size());
boolean first = true;
for (RequestBuilder.Factory builderTemplate : mBurst) {
- RequestBuilder builder = builderTemplate.create(CameraDevice.TEMPLATE_STILL_CAPTURE);
+ RequestBuilder builder = builderTemplate.create(mStillCaptureRequestTemplate);
if (first) {
first = false;
builder.addResponseListener(forFrameExposure(imageExposureUpdatable));
RequestBuilder.Factory rootRequestBuilder,
ImageStreamFactory sharedImageReader) {
ImageCaptureCommand captureCommand = new ConvergedImageCaptureCommand(sharedImageReader,
- frameServer, rootRequestBuilder, CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG,
- Arrays.asList(rootRequestBuilder));
+ frameServer, rootRequestBuilder, CameraDevice.TEMPLATE_PREVIEW,
+ CameraDevice.TEMPLATE_STILL_CAPTURE, Arrays.asList(rootRequestBuilder));
mPictureTaker = new PictureTakerImpl(mainExecutor, commandExecutor, imageSaverBuilder,
captureCommand);
}