OSDN Git Service

Make sure to always use ZSL frames for capture.
authorSascha Haeberling <haeberling@google.com>
Wed, 28 Jan 2015 01:42:49 +0000 (17:42 -0800)
committerSascha Haeberling <haeberling@google.com>
Wed, 28 Jan 2015 21:52:33 +0000 (13:52 -0800)
  Bug: 19166357

This fixes an issue on the N9 which does SW NR with
TEMPLATE_STILL_CAPTURE, which stalls the whole camera image reading
pipeline for a long time.

And in general we should probably not take pictures with potentially
differenty qualities for ZSL and while waiting for 3A to converge.

M will solve this issue with the introduction of the reprocessing
pipeline.

Change-Id: Ic444884f5dad6ecff44d0a6b7c7a118f0242bef2

src/com/android/camera/one/v2/photo/ConvergedImageCaptureCommand.java
src/com/android/camera/one/v2/photo/PictureTakerFactory.java
src/com/android/camera/one/v2/photo/ZslPictureTakerFactory.java

index d9436c2..2a600c4 100644 (file)
 
 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;
@@ -44,15 +43,20 @@ import java.util.List;
 
 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;
 
     /**
@@ -64,17 +68,20 @@ class ConvergedImageCaptureCommand implements ImageCaptureCommand {
      *            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;
     }
 
@@ -150,7 +157,7 @@ class ConvergedImageCaptureCommand implements ImageCaptureCommand {
 
     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
@@ -160,7 +167,7 @@ class ConvergedImageCaptureCommand implements ImageCaptureCommand {
 
     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
@@ -196,7 +203,7 @@ class ConvergedImageCaptureCommand implements ImageCaptureCommand {
         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));
index 5edba36..a83f690 100644 (file)
@@ -37,8 +37,8 @@ public final class PictureTakerFactory {
             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);
     }
index bd4decf..83cc41d 100644 (file)
@@ -54,7 +54,8 @@ public class ZslPictureTakerFactory {
         // This command will perform a full AF & AE sequence.
         ImageCaptureCommand fallbackCommand = new ConvergedImageCaptureCommand(
                 sharedImageReader, frameServer, rootRequestBuilder,
-                CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG, Arrays.asList(rootRequestBuilder));
+                CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG, CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG,
+                Arrays.asList(rootRequestBuilder));
 
         // When flash is ON, always use the ConvergedImageCaptureCommand which
         // performs the AF & AE precapture sequence.