Pictures with Camera2 API are really dark

前端 未结 3 1400
悲哀的现实
悲哀的现实 2020-12-05 15:51

I\'m working on Android and I\'m trying to capture a picture without displaying any preview. I tried to simplify the process by making a class. It\'s working but all the pic

3条回答
  •  清歌不尽
    2020-12-05 16:32

    In my case just configuration FPS helps me. And don't forget to put it to CaptureRequest.Builder for preview and ALSO to CaptureRequest.Builder capture builder. As usual FPS 10 or 15 frames quite enough for photo and preview.

    Capture builder

    // This is the CaptureRequest.Builder that we use to take a picture.
    final CaptureRequest.Builder captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
    ...
    setupFPS(captureBuilder);
    

    Preview builder:

    // We set up a CaptureRequest.Builder with the output Surface.
    mPreviewRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
    mPreviewRequestBuilder.addTarget(surface);
                    ...
    // set FPS rate
    setupFPS(mPreviewRequestBuilder);
    

    Where setupFPS:

    private void setupFPS(CaptureRequest.Builder builder){
            if(fpsRange != null) {
                builder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, fpsRange);
            }
    }
    

    And initialization of FPS with:

    CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
    try {
                        Range[] ranges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
                        if(ranges != null) {
                            for (Range range : ranges) {
                                int upper = range.getUpper();
                                Log.i(TAG, "[FPS Range Available]:" + range);
                                if (upper >= 10) {
                                    if (fpsRange == null || upper < fpsRange.getUpper()) {
                                        fpsRange = range;
                                    }
                                }
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    Log.i(TAG, "[FPS Range] is:" + fpsRange);
    

提交回复
热议问题