Я написал приложение, которое захватывает изображения с помощью камеры camera2. Обычно все работает, но иногда все пиксели захваченного изображения имеют значение 0x008700. Ни один из обратных вызовов onCaptureFailed (), onCaptureBufferLost (), onCaptureSequenceAborted () или onError () не вызывается. Просто зеленый буфер.
В качестве обходного пути я проверяю полученное растровое изображение и, если первые 10 пикселей имеют размер 0x008700, я прошу пользователя повторно захватить изображение. Обычно это работает.
Я показал код строителя запроса ниже.
Любые подсказки будут с благодарностью!
requestBuilder = camera2Device.createCaptureRequest(CameraDevice.TEMPLATE_MANUAL);
checkHardwareSupport(characteristics); //throws if NG
float availableApertures[] = getAvailableApertures(characteristics);
float availableFocalLengths[] = getAvailableAttributeValues(characteristics,
CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS);
Range<Long> availableShutterTimes = getAvailableShutterSpeedRange(characteristics);
Range<Integer> availableIsoRange = getAvailableISORange(characteristics);
exposureSettings = computeExposureSetting(exposureSettings, //gets populated and returned.
availableApertures,
availableShutterTimes,
availableIsoRange);
requestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT, CONTROL_CAPTURE_INTENT_STILL_CAPTURE);//CONTROL_CAPTURE_INTENT_MANUAL);manual causes Error 4 !!!!
requestBuilder.set(CaptureRequest.CONTROL_MODE,CONTROL_MODE_OFF );
requestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
requestBuilder.set(CaptureRequest.LENS_FOCAL_LENGTH, availableFocalLengths[0]);
requestBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long) (exposureSettings.shutterSpeed * nanosPerSecond));
requestBuilder.set(CaptureRequest.LENS_APERTURE, exposureSettings.fStop);
requestBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, Math.round(exposureSettings.iso));
requestBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE,0.0f);//infinity
requestBuilder.addTarget(imageCaptureSurface);
imageCaptureRequest = requestBuilder.build();