-1

I use burst capture based on camera2, set Iso and exposure time value. Set ISO 50, EXPOSURE TIME 1/30s, but some pictures would turn to ISO 100, Exposure time 1/60. Why?

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
Dylan Xia
  • 11
  • 3

1 Answers1

1

I have gotten the pictures with my setting value, reference: https://android.googlesource.com/platform/cts/+/a0077cc/tests/tests/hardware/src/android/hardware/camera2/cts/BurstCaptureRawTest.java

  • Construct an array of burst request with manual exposure and sensitivity.
    • For each capture request, 3A and post processing (noise reduction, sharpening, etc) will be
    • turned off. Then exposure and sensitivity value will be configured, which are determined by
    • EXPOSURE_MULIPLIERS and SENSITIVITY_MULTIPLIERS.
    • *
    • @param rawBurstBuilder The builder needs to have targets setup.
    • @return An array list capture request for burst. */ private ArrayList createBurstRequest(CaptureRequest.Builder rawBurstBuilder) { return createBurstRequest(rawBurstBuilder, EXPOSURE_MULTIPLIERS, SENSITIVITY_MLTIPLIERS); } private ArrayList createBurstRequest(CaptureRequest.Builder rawBurstBuilder, long[] exposureMultipliers, int[] sensitivityMultipliers) { // set manual mode rawBurstBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF); rawBurstBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_OFF); rawBurstBuilder.set(CaptureRequest.NOISE_REDUCTION_MODE, CaptureRequest.NOISE_REDUCTION_MODE_OFF); rawBurstBuilder.set(CaptureRequest.EDGE_MODE, CaptureRequest.EDGE_MODE_OFF); // exposure has higher priority over frame duration; therefore the frame readout time: // exposure time + overhead rawBurstBuilder.set(CaptureRequest.SENSOR_FRAME_DURATION, 0L); // get the exposure and sensitivity range Range exposureRangeNs = new Range(mStaticInfo.getExposureMinimumOrDefault(), mStaticInfo.getExposureMaximumOrDefault()); Range isoRange = new Range(mStaticInfo.getSensitivityMinimumOrDefault(), mStaticInfo.getSensitivityMaximumOrDefault()); Log.i(TAG, String.format("Exposure time - max: %d, min: %d.", exposureRangeNs.getUpper(), exposureRangeNs.getLower())); Log.i(TAG, String.format("Sensitivity - max: %d, min: %d.", isoRange.getUpper(), isoRange.getLower())); // building burst request int maxFramesBurst = exposureMultipliers.length * sensitivityMultipliers.length; Log.i(TAG, String.format("Setting up burst = %d frames.", maxFramesBurst)); ArrayList rawRequestList = new ArrayList(maxFramesBurst); for (int i = 0; i < exposureMultipliers.length; i++) { for (int j = 0; j < sensitivityMultipliers.length; j++) { long desiredExposure = Math.min( exposureRangeNs.getLower() * exposureMultipliers[i], exposureRangeNs.getUpper()); int desiredSensitivity = Math.min(isoRange.getLower() * sensitivityMultipliers[j], isoRange.getUpper()); rawBurstBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, desiredExposure); rawBurstBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, desiredSensitivity); rawRequestList.add(rawBurstBuilder.build()); } } return rawRequestList; }
Dylan Xia
  • 11
  • 3