Camera2: Enable Face Authentication
- Add API in HWI to register face image
- Add offline reprocess channel to register face image
- Add CAM_FORMAT_JPEG into image format, needed for offline
reprocess as input format
- Move crop info into metadata, and hence change ZoomDone
handling in metadata stream CB instead of in event handling
Change-Id: I99ed3efc013c85b9041f3de91099390bee09d245
diff --git a/QCamera2/HAL/QCameraStateMachine.cpp b/QCamera2/HAL/QCameraStateMachine.cpp
index 1e119dd..882f443 100644
--- a/QCamera2/HAL/QCameraStateMachine.cpp
+++ b/QCamera2/HAL/QCameraStateMachine.cpp
@@ -508,6 +508,21 @@
m_parent->signalAPIResult(&result);
}
break;
+ case QCAMERA_SM_EVT_REG_FACE_IMAGE:
+ {
+ int32_t faceID = 0;
+ qcamera_sm_evt_reg_face_payload_t *reg_payload =
+ (qcamera_sm_evt_reg_face_payload_t *)payload;
+ rc = m_parent->registerFaceImage(reg_payload->img_ptr,
+ reg_payload->config,
+ faceID);
+ result.status = rc;
+ result.request_api = evt;
+ result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE;
+ result.handle = faceID;
+ m_parent->signalAPIResult(&result);
+ }
+ break;
case QCAMERA_SM_EVT_EVT_INTERNAL:
case QCAMERA_SM_EVT_EVT_NOTIFY:
case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY:
@@ -740,6 +755,21 @@
m_parent->signalAPIResult(&result);
}
break;
+ case QCAMERA_SM_EVT_REG_FACE_IMAGE:
+ {
+ int32_t faceID = 0;
+ qcamera_sm_evt_reg_face_payload_t *reg_payload =
+ (qcamera_sm_evt_reg_face_payload_t *)payload;
+ rc = m_parent->registerFaceImage(reg_payload->img_ptr,
+ reg_payload->config,
+ faceID);
+ result.status = rc;
+ result.request_api = evt;
+ result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE;
+ result.handle = faceID;
+ m_parent->signalAPIResult(&result);
+ }
+ break;
case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW:
case QCAMERA_SM_EVT_START_RECORDING:
case QCAMERA_SM_EVT_STOP_RECORDING:
@@ -1020,6 +1050,21 @@
m_parent->signalAPIResult(&result);
}
break;
+ case QCAMERA_SM_EVT_REG_FACE_IMAGE:
+ {
+ int32_t faceID = 0;
+ qcamera_sm_evt_reg_face_payload_t *reg_payload =
+ (qcamera_sm_evt_reg_face_payload_t *)payload;
+ rc = m_parent->registerFaceImage(reg_payload->img_ptr,
+ reg_payload->config,
+ faceID);
+ result.status = rc;
+ result.request_api = evt;
+ result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE;
+ result.handle = faceID;
+ m_parent->signalAPIResult(&result);
+ }
+ break;
case QCAMERA_SM_EVT_CANCEL_PICTURE:
case QCAMERA_SM_EVT_STOP_RECORDING:
case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME:
@@ -1050,9 +1095,6 @@
{
mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload;
switch (cam_evt->server_event_type) {
- case CAM_EVENT_TYPE_ZOOM_DONE:
- rc = m_parent->processZoomEvent(cam_evt->status);
- break;
default:
ALOGD("%s: no handling for server evt (%d) at this state",
__func__, cam_evt->server_event_type);
@@ -1274,6 +1316,21 @@
m_parent->signalAPIResult(&result);
}
break;
+ case QCAMERA_SM_EVT_REG_FACE_IMAGE:
+ {
+ int32_t faceID = 0;
+ qcamera_sm_evt_reg_face_payload_t *reg_payload =
+ (qcamera_sm_evt_reg_face_payload_t *)payload;
+ rc = m_parent->registerFaceImage(reg_payload->img_ptr,
+ reg_payload->config,
+ faceID);
+ result.status = rc;
+ result.request_api = evt;
+ result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE;
+ result.handle = faceID;
+ m_parent->signalAPIResult(&result);
+ }
+ break;
case QCAMERA_SM_EVT_TAKE_PICTURE:
case QCAMERA_SM_EVT_START_RECORDING:
case QCAMERA_SM_EVT_STOP_RECORDING:
@@ -1307,9 +1364,6 @@
{
mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload;
switch (cam_evt->server_event_type) {
- case CAM_EVENT_TYPE_ZOOM_DONE:
- rc = m_parent->processZoomEvent(cam_evt->status);
- break;
default:
ALOGD("%s: no handling for server evt (%d) at this state",
__func__, cam_evt->server_event_type);
@@ -1565,6 +1619,21 @@
m_parent->signalAPIResult(&result);
}
break;
+ case QCAMERA_SM_EVT_REG_FACE_IMAGE:
+ {
+ int32_t faceID = 0;
+ qcamera_sm_evt_reg_face_payload_t *reg_payload =
+ (qcamera_sm_evt_reg_face_payload_t *)payload;
+ rc = m_parent->registerFaceImage(reg_payload->img_ptr,
+ reg_payload->config,
+ faceID);
+ result.status = rc;
+ result.request_api = evt;
+ result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE;
+ result.handle = faceID;
+ m_parent->signalAPIResult(&result);
+ }
+ break;
case QCAMERA_SM_EVT_CANCEL_PICTURE:
case QCAMERA_SM_EVT_START_PREVIEW:
case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW:
@@ -1596,9 +1665,6 @@
{
mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload;
switch (cam_evt->server_event_type) {
- case CAM_EVENT_TYPE_ZOOM_DONE:
- rc = m_parent->processZoomEvent(cam_evt->status);
- break;
default:
ALOGD("%s: no handling for server evt (%d) at this state",
__func__, cam_evt->server_event_type);
@@ -1835,6 +1901,21 @@
m_parent->signalAPIResult(&result);
}
break;
+ case QCAMERA_SM_EVT_REG_FACE_IMAGE:
+ {
+ int32_t faceID = 0;
+ qcamera_sm_evt_reg_face_payload_t *reg_payload =
+ (qcamera_sm_evt_reg_face_payload_t *)payload;
+ rc = m_parent->registerFaceImage(reg_payload->img_ptr,
+ reg_payload->config,
+ faceID);
+ result.status = rc;
+ result.request_api = evt;
+ result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE;
+ result.handle = faceID;
+ m_parent->signalAPIResult(&result);
+ }
+ break;
case QCAMERA_SM_EVT_START_RECORDING:
case QCAMERA_SM_EVT_START_PREVIEW:
case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW:
@@ -1867,9 +1948,6 @@
{
mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload;
switch (cam_evt->server_event_type) {
- case CAM_EVENT_TYPE_ZOOM_DONE:
- rc = m_parent->processZoomEvent(cam_evt->status);
- break;
default:
ALOGD("%s: no handling for server evt (%d) at this state",
__func__, cam_evt->server_event_type);
@@ -2133,6 +2211,21 @@
m_parent->signalAPIResult(&result);
}
break;
+ case QCAMERA_SM_EVT_REG_FACE_IMAGE:
+ {
+ int32_t faceID = 0;
+ qcamera_sm_evt_reg_face_payload_t *reg_payload =
+ (qcamera_sm_evt_reg_face_payload_t *)payload;
+ rc = m_parent->registerFaceImage(reg_payload->img_ptr,
+ reg_payload->config,
+ faceID);
+ result.status = rc;
+ result.request_api = evt;
+ result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE;
+ result.handle = faceID;
+ m_parent->signalAPIResult(&result);
+ }
+ break;
case QCAMERA_SM_EVT_STOP_RECORDING:
case QCAMERA_SM_EVT_START_PREVIEW:
case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW:
@@ -2165,9 +2258,6 @@
{
mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload;
switch (cam_evt->server_event_type) {
- case CAM_EVENT_TYPE_ZOOM_DONE:
- rc = m_parent->processZoomEvent(cam_evt->status);
- break;
default:
ALOGD("%s: no handling for server evt (%d) at this state",
__func__, cam_evt->server_event_type);