Android camera2 capture burst is too slow

前端 未结 3 1538
难免孤独
难免孤独 2020-12-05 05:37

I am trying to modify the android-Camera2Basic code to capture a burst of pictures. However, I can\'t get the delay between pictures any faster than 200-300ms on my Nexus 5,

3条回答
  •  再見小時候
    2020-12-05 06:27

    Try to set following capture request parameters

    requestBuilder = camDevice
            .createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
    
    requestBuilder.set(CaptureRequest.EDGE_MODE,
            CaptureRequest.EDGE_MODE_OFF);
    requestBuilder.set(
            CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE,
            CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE_ON);
    requestBuilder.set(
            CaptureRequest.COLOR_CORRECTION_ABERRATION_MODE,
            CaptureRequest.COLOR_CORRECTION_ABERRATION_MODE_OFF);
    requestBuilder.set(CaptureRequest.NOISE_REDUCTION_MODE,
            CaptureRequest.NOISE_REDUCTION_MODE_OFF);
    requestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER,
            CaptureRequest.CONTROL_AF_TRIGGER_CANCEL);
    
    requestBuilder.set(CaptureRequest.CONTROL_AE_LOCK, true);
    requestBuilder.set(CaptureRequest.CONTROL_AWB_LOCK, true);
    

    I am not sure about how fast info comes into CameraCaptureSession.CaptureCallback. It's not have image data, and it could be called before or after ImageReader.OnImageAvailableListener. Try to measure time between ImageReader.OnImageAvailableListener calls. And don't forget to read images and release them, because new images are not available if buffer is filled and images not released. For example:

    private class imageAvailableListener implements
                ImageReader.OnImageAvailableListener {
            @Override
            public void onImageAvailable(ImageReader ir) {
                Log.i(TAG, "Time = " + System.currentTimeMillis());
                Image im = ir.acquireNextImage();
                im.close();
            }
        }
    
    ImageReader mImageReader = ImageReader.newInstance(imageReaderWidth,
                        imageReaderHeight, ImageFormat.YUV_420_888, 2);
    mImageReader.setOnImageAvailableListener(
                        new imageAvailableListener(), null);
    

提交回复
热议问题