Loading services/camera/libcameraservice/Android.mk +6 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ LOCAL_SRC_FILES := \ device3/StatusTracker.cpp \ device3/Camera3BufferManager.cpp \ device3/Camera3StreamSplitter.cpp \ device3/DistortionMapper.cpp \ gui/RingBufferConsumer.cpp \ utils/CameraTraces.cpp \ utils/AutoConditionLock.cpp \ Loading Loading @@ -96,3 +97,8 @@ LOCAL_CFLAGS += -Wall -Wextra -Werror LOCAL_MODULE:= libcameraservice include $(BUILD_SHARED_LIBRARY) # Build tests too include $(LOCAL_PATH)/tests/Android.mk services/camera/libcameraservice/api1/client2/FrameProcessor.cpp +0 −1 Original line number Diff line number Diff line Loading @@ -197,7 +197,6 @@ status_t FrameProcessor::processFaceDetect(const CameraMetadata &frame, faceRects[i*4 + 2], scalerCrop); face.rect[3] = l.mParameters.arrayYToNormalizedWithCrop( faceRects[i*4 + 3], scalerCrop); face.score = faceScores[i]; if (faceDetectMode == ANDROID_STATISTICS_FACE_DETECT_MODE_FULL) { face.id = faceIds[i]; Loading services/camera/libcameraservice/api1/client2/Parameters.cpp +22 −2 Original line number Diff line number Diff line Loading @@ -961,6 +961,17 @@ status_t Parameters::initialize(const CameraMetadata *info, int deviceVersion) { } } isDistortionCorrectionSupported = false; camera_metadata_ro_entry_t distortionCorrectionModes = staticInfo(ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES); for (size_t i = 0; i < distortionCorrectionModes.count; i++) { if (distortionCorrectionModes.data.u8[i] != ANDROID_DISTORTION_CORRECTION_MODE_OFF) { isDistortionCorrectionSupported = true; break; } } if (isDeviceZslSupported || slowJpegMode || property_get_bool("camera.disable_zsl_mode", false)) { ALOGI("Camera %d: Disabling ZSL mode", cameraId); Loading Loading @@ -2097,15 +2108,24 @@ status_t Parameters::updateRequest(CameraMetadata *request) const { if (intent.count == 0) return BAD_VALUE; uint8_t distortionMode = ANDROID_DISTORTION_CORRECTION_MODE_OFF; if (intent.data.u8[0] == ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE) { res = request->update(ANDROID_CONTROL_AE_TARGET_FPS_RANGE, fastInfo.bestStillCaptureFpsRange, 2); distortionMode = ANDROID_DISTORTION_CORRECTION_MODE_HIGH_QUALITY; } else { res = request->update(ANDROID_CONTROL_AE_TARGET_FPS_RANGE, previewFpsRange, 2); distortionMode = ANDROID_DISTORTION_CORRECTION_MODE_FAST; } if (res != OK) return res; if (isDistortionCorrectionSupported) { res = request->update(ANDROID_DISTORTION_CORRECTION_MODE, &distortionMode, 1); if (res != OK) return res; } if (autoWhiteBalanceLockAvailable) { uint8_t reqWbLock = autoWhiteBalanceLock ? ANDROID_CONTROL_AWB_LOCK_ON : ANDROID_CONTROL_AWB_LOCK_OFF; Loading services/camera/libcameraservice/api1/client2/Parameters.h +2 −0 Original line number Diff line number Diff line Loading @@ -177,6 +177,8 @@ struct Parameters { bool isZslReprocessPresent; // Whether the device supports enableZsl. bool isDeviceZslSupported; // Whether the device supports geometric distortion correction bool isDistortionCorrectionSupported; // Overall camera state enum State { Loading services/camera/libcameraservice/device3/Camera3Device.cpp +32 −1 Original line number Diff line number Diff line Loading @@ -249,6 +249,14 @@ status_t Camera3Device::initializeCommonLocked() { } } if (DistortionMapper::isDistortionSupported(mDeviceInfo)) { res = mDistortionMapper.setupStaticInfo(mDeviceInfo); if (res != OK) { SET_ERR_L("Unable to read necessary calibration fields for distortion correction"); return res; } } return OK; } Loading Loading @@ -2983,6 +2991,14 @@ void Camera3Device::sendCaptureResult(CameraMetadata &pendingMetadata, } } // Fix up some result metadata to account for HAL-level distortion correction status_t res = mDistortionMapper.correctCaptureResult(&captureResult.mMetadata); if (res != OK) { SET_ERR("Unable to correct capture result metadata for frame %d: %s (%d)", frameNumber, strerror(res), res); return; } mTagMonitor.monitorMetadata(TagMonitor::RESULT, frameNumber, timestamp.data.i64[0], captureResult.mMetadata); Loading Loading @@ -4705,13 +4721,13 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { // Insert any queued triggers (before metadata is locked) status_t res = insertTriggers(captureRequest); if (res < 0) { SET_ERR("RequestThread: Unable to insert triggers " "(capture request %d, HAL device: %s (%d)", halRequest->frame_number, strerror(-res), res); return INVALID_OPERATION; } int triggerCount = res; bool triggersMixedIn = (triggerCount > 0 || mPrevTriggers > 0); mPrevTriggers = triggerCount; Loading @@ -4731,6 +4747,21 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { return INVALID_OPERATION; } { // Correct metadata regions for distortion correction if enabled sp<Camera3Device> parent = mParent.promote(); if (parent != nullptr) { res = parent->mDistortionMapper.correctCaptureRequest( &(captureRequest->mSettingsList.begin()->metadata)); if (res != OK) { SET_ERR("RequestThread: Unable to correct capture requests " "for lens distortion for request %d: %s (%d)", halRequest->frame_number, strerror(-res), res); return INVALID_OPERATION; } } } /** * The request should be presorted so accesses in HAL * are O(logn). Sidenote, sorting a sorted metadata is nop. Loading Loading
services/camera/libcameraservice/Android.mk +6 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ LOCAL_SRC_FILES := \ device3/StatusTracker.cpp \ device3/Camera3BufferManager.cpp \ device3/Camera3StreamSplitter.cpp \ device3/DistortionMapper.cpp \ gui/RingBufferConsumer.cpp \ utils/CameraTraces.cpp \ utils/AutoConditionLock.cpp \ Loading Loading @@ -96,3 +97,8 @@ LOCAL_CFLAGS += -Wall -Wextra -Werror LOCAL_MODULE:= libcameraservice include $(BUILD_SHARED_LIBRARY) # Build tests too include $(LOCAL_PATH)/tests/Android.mk
services/camera/libcameraservice/api1/client2/FrameProcessor.cpp +0 −1 Original line number Diff line number Diff line Loading @@ -197,7 +197,6 @@ status_t FrameProcessor::processFaceDetect(const CameraMetadata &frame, faceRects[i*4 + 2], scalerCrop); face.rect[3] = l.mParameters.arrayYToNormalizedWithCrop( faceRects[i*4 + 3], scalerCrop); face.score = faceScores[i]; if (faceDetectMode == ANDROID_STATISTICS_FACE_DETECT_MODE_FULL) { face.id = faceIds[i]; Loading
services/camera/libcameraservice/api1/client2/Parameters.cpp +22 −2 Original line number Diff line number Diff line Loading @@ -961,6 +961,17 @@ status_t Parameters::initialize(const CameraMetadata *info, int deviceVersion) { } } isDistortionCorrectionSupported = false; camera_metadata_ro_entry_t distortionCorrectionModes = staticInfo(ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES); for (size_t i = 0; i < distortionCorrectionModes.count; i++) { if (distortionCorrectionModes.data.u8[i] != ANDROID_DISTORTION_CORRECTION_MODE_OFF) { isDistortionCorrectionSupported = true; break; } } if (isDeviceZslSupported || slowJpegMode || property_get_bool("camera.disable_zsl_mode", false)) { ALOGI("Camera %d: Disabling ZSL mode", cameraId); Loading Loading @@ -2097,15 +2108,24 @@ status_t Parameters::updateRequest(CameraMetadata *request) const { if (intent.count == 0) return BAD_VALUE; uint8_t distortionMode = ANDROID_DISTORTION_CORRECTION_MODE_OFF; if (intent.data.u8[0] == ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE) { res = request->update(ANDROID_CONTROL_AE_TARGET_FPS_RANGE, fastInfo.bestStillCaptureFpsRange, 2); distortionMode = ANDROID_DISTORTION_CORRECTION_MODE_HIGH_QUALITY; } else { res = request->update(ANDROID_CONTROL_AE_TARGET_FPS_RANGE, previewFpsRange, 2); distortionMode = ANDROID_DISTORTION_CORRECTION_MODE_FAST; } if (res != OK) return res; if (isDistortionCorrectionSupported) { res = request->update(ANDROID_DISTORTION_CORRECTION_MODE, &distortionMode, 1); if (res != OK) return res; } if (autoWhiteBalanceLockAvailable) { uint8_t reqWbLock = autoWhiteBalanceLock ? ANDROID_CONTROL_AWB_LOCK_ON : ANDROID_CONTROL_AWB_LOCK_OFF; Loading
services/camera/libcameraservice/api1/client2/Parameters.h +2 −0 Original line number Diff line number Diff line Loading @@ -177,6 +177,8 @@ struct Parameters { bool isZslReprocessPresent; // Whether the device supports enableZsl. bool isDeviceZslSupported; // Whether the device supports geometric distortion correction bool isDistortionCorrectionSupported; // Overall camera state enum State { Loading
services/camera/libcameraservice/device3/Camera3Device.cpp +32 −1 Original line number Diff line number Diff line Loading @@ -249,6 +249,14 @@ status_t Camera3Device::initializeCommonLocked() { } } if (DistortionMapper::isDistortionSupported(mDeviceInfo)) { res = mDistortionMapper.setupStaticInfo(mDeviceInfo); if (res != OK) { SET_ERR_L("Unable to read necessary calibration fields for distortion correction"); return res; } } return OK; } Loading Loading @@ -2983,6 +2991,14 @@ void Camera3Device::sendCaptureResult(CameraMetadata &pendingMetadata, } } // Fix up some result metadata to account for HAL-level distortion correction status_t res = mDistortionMapper.correctCaptureResult(&captureResult.mMetadata); if (res != OK) { SET_ERR("Unable to correct capture result metadata for frame %d: %s (%d)", frameNumber, strerror(res), res); return; } mTagMonitor.monitorMetadata(TagMonitor::RESULT, frameNumber, timestamp.data.i64[0], captureResult.mMetadata); Loading Loading @@ -4705,13 +4721,13 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { // Insert any queued triggers (before metadata is locked) status_t res = insertTriggers(captureRequest); if (res < 0) { SET_ERR("RequestThread: Unable to insert triggers " "(capture request %d, HAL device: %s (%d)", halRequest->frame_number, strerror(-res), res); return INVALID_OPERATION; } int triggerCount = res; bool triggersMixedIn = (triggerCount > 0 || mPrevTriggers > 0); mPrevTriggers = triggerCount; Loading @@ -4731,6 +4747,21 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { return INVALID_OPERATION; } { // Correct metadata regions for distortion correction if enabled sp<Camera3Device> parent = mParent.promote(); if (parent != nullptr) { res = parent->mDistortionMapper.correctCaptureRequest( &(captureRequest->mSettingsList.begin()->metadata)); if (res != OK) { SET_ERR("RequestThread: Unable to correct capture requests " "for lens distortion for request %d: %s (%d)", halRequest->frame_number, strerror(-res), res); return INVALID_OPERATION; } } } /** * The request should be presorted so accesses in HAL * are O(logn). Sidenote, sorting a sorted metadata is nop. Loading