camera: enable face detection
Activate Face Detectioin functionality with FEATURE in Camera HAL.
Bug: 7281333
Change-Id: I507dfc9859e40f1d6db2c4f953d8747eef8c9a83
Signed-off-by: Iliyan Malchev <malchev@google.com>
diff --git a/camera/QCameraHWI.cpp b/camera/QCameraHWI.cpp
index eec8adb..81b4272 100755
--- a/camera/QCameraHWI.cpp
+++ b/camera/QCameraHWI.cpp
@@ -477,20 +477,6 @@
Mutex::Autolock l(&mLock);
switch (command) {
- #if 0
- case CAMERA_CMD_HISTOGRAM_ON:
- ALOGE("histogram set to on");
- rc = setHistogram(1);
- break;
- case CAMERA_CMD_HISTOGRAM_OFF:
- ALOGE("histogram set to off");
- rc = setHistogram(0);
- break;
- case CAMERA_CMD_HISTOGRAM_SEND_DATA:
- ALOGE("histogram send data");
- mSendData = true;
- rc = NO_ERROR;
- break;
case CAMERA_CMD_START_FACE_DETECTION:
if(supportsFaceDetection() == false){
ALOGE("Face detection support is not available");
@@ -505,7 +491,22 @@
}
setFaceDetection("off");
return runFaceDetection();
- case CAMERA_CMD_SEND_META_DATA:
+
+ #if 0
+ case CAMERA_CMD_HISTOGRAM_ON:
+ ALOGE("histogram set to on");
+ rc = setHistogram(1);
+ break;
+ case CAMERA_CMD_HISTOGRAM_OFF:
+ ALOGE("histogram set to off");
+ rc = setHistogram(0);
+ break;
+ case CAMERA_CMD_HISTOGRAM_SEND_DATA:
+ ALOGE("histogram send data");
+ mSendData = true;
+ rc = NO_ERROR;
+ break;
+ case CAMERA_CMD_SEND_META_DATA:
mMetaDataWaitLock.lock();
if(mFaceDetectOn == true) {
mSendMetaData = true;
diff --git a/camera/QCameraHWI_Parm.cpp b/camera/QCameraHWI_Parm.cpp
index 0c98fbe..2bcacb4 100644
--- a/camera/QCameraHWI_Parm.cpp
+++ b/camera/QCameraHWI_Parm.cpp
@@ -1190,7 +1190,7 @@
//Set Face Detection
mParameters.set(QCameraParameters::KEY_FACE_DETECTION,
- QCameraParameters::FACE_DETECTION_OFF);
+ QCameraParameters::FACE_DETECTION_ON);
mParameters.set(QCameraParameters::KEY_SUPPORTED_FACE_DETECTION,
mFaceDetectionValues);
diff --git a/camera/QCameraHWI_Preview.cpp b/camera/QCameraHWI_Preview.cpp
index c5b43ed..e6e5513 100644
--- a/camera/QCameraHWI_Preview.cpp
+++ b/camera/QCameraHWI_Preview.cpp
@@ -399,6 +399,7 @@
void QCameraStream_preview::notifyROIEvent(fd_roi_t roi)
{
+ camera_memory_t *data = mHalCamCtrl->mGetMemory(-1, 1, 1, NULL);
switch (roi.type) {
case FD_ROI_TYPE_HEADER:
{
@@ -419,14 +420,14 @@
if (pcb && (mHalCamCtrl->mMsgEnabled & CAMERA_MSG_PREVIEW_METADATA)){
ALOGE("%s: Face detection RIO callback", __func__);
- pcb(CAMERA_MSG_PREVIEW_METADATA, NULL, 0, &mHalCamCtrl->mMetadata, mHalCamCtrl->mCallbackCookie);
+ pcb(CAMERA_MSG_PREVIEW_METADATA, data, 0, &mHalCamCtrl->mMetadata, mHalCamCtrl->mCallbackCookie);
}
}
}
break;
case FD_ROI_TYPE_DATA:
{
- #if 0
+ #if 1
mDisplayLock.lock();
int idx = roi.d.data.idx;
if (idx >= mHalCamCtrl->mMetadata.number_of_faces) {
@@ -462,7 +463,7 @@
roi.d.data.face.right_eye_center[0]*2000/mHalCamCtrl->mDimension.display_width - 1000;
mHalCamCtrl->mFace[idx].right_eye[1] =
roi.d.data.face.right_eye_center[1]*2000/mHalCamCtrl->mDimension.display_height - 1000;
-
+#if 0
// Center of mouth
mHalCamCtrl->mFace[idx].mouth[0] =
roi.d.data.face.mouth_center[0]*2000/mHalCamCtrl->mDimension.display_width - 1000;
@@ -499,7 +500,7 @@
mHalCamCtrl->mFace[idx].leftright_dir, mHalCamCtrl->mFace[idx].roll_dir,
mHalCamCtrl->mFace[idx].blink_detected,
mHalCamCtrl->mFace[idx].leye_blink, mHalCamCtrl->mFace[idx].reye_blink);
-
+#endif
mNumFDRcvd++;
mDisplayLock.unlock();
@@ -510,13 +511,14 @@
if (pcb && (mHalCamCtrl->mMsgEnabled & CAMERA_MSG_PREVIEW_METADATA)){
ALOGE("%s: Face detection RIO callback with %d faces detected (score=%d)", __func__, mNumFDRcvd, mHalCamCtrl->mFace[idx].score);
- pcb(CAMERA_MSG_PREVIEW_METADATA, NULL, 0, &mHalCamCtrl->mMetadata, mHalCamCtrl->mCallbackCookie);
+ pcb(CAMERA_MSG_PREVIEW_METADATA, data, 0, &mHalCamCtrl->mMetadata, mHalCamCtrl->mCallbackCookie);
}
}
#endif
}
break;
}
+ if(NULL != data) data->release(data);
}
status_t QCameraStream_preview::initDisplayBuffers()