summaryrefslogtreecommitdiffstats
path: root/camera
diff options
context:
space:
mode:
authorEmilian Peev <epeev@mm-sol.com>2012-03-14 10:26:55 +0200
committerEino-Ville Talvala <etalvala@google.com>2012-03-23 12:11:09 -0700
commitf2170decdf6bf41e590842b0fe5c0ed3852ebec3 (patch)
tree0d36860b5c21080a91789f9222f04ee21289e118 /camera
parentfe3dccf76b03fe7e226ecc7c128dbc9e53d835a9 (diff)
downloadhardware_ti_omap4xxx-f2170decdf6bf41e590842b0fe5c0ed3852ebec3.zip
hardware_ti_omap4xxx-f2170decdf6bf41e590842b0fe5c0ed3852ebec3.tar.gz
hardware_ti_omap4xxx-f2170decdf6bf41e590842b0fe5c0ed3852ebec3.tar.bz2
CameraHal: Speedup face detection start
- Currently when face detection gets enabled the face priority for AE and AF is getting configured as well. This configuration takes around 18 ms. on average and can delay the overall startup time. The optimization will move the algo setup away from face detection enablement and in to the FillBufferDone callback. Bug: 5488236 Change-Id: I2b0e8df9fdead7a5d761a1efbcbf57d39e27ae3c Signed-off-by: Emilian Peev <epeev@mm-sol.com>
Diffstat (limited to 'camera')
-rwxr-xr-xcamera/OMXCameraAdapter/OMXCameraAdapter.cpp12
-rw-r--r--camera/OMXCameraAdapter/OMXFD.cpp13
-rw-r--r--camera/inc/OMXCameraAdapter/OMXCameraAdapter.h1
3 files changed, 16 insertions, 10 deletions
diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
index eb77c07..a41327c 100755
--- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
+++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
@@ -277,6 +277,7 @@ status_t OMXCameraAdapter::initialize(CameraProperties::Properties* caps)
mMeasurementEnabled = false;
mFaceDetectionRunning = false;
mFaceDetectionPaused = false;
+ mFDSwitchAlgoPriority = false;
memset(&mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mImagePortIndex], 0, sizeof(OMXCameraPortParameters));
memset(&mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex], 0, sizeof(OMXCameraPortParameters));
@@ -2979,6 +2980,17 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE
notifyFaceSubscribers(fdResult);
fdResult.clear();
}
+ if ( mFDSwitchAlgoPriority ) {
+
+ //Disable region priority and enable face priority for AF
+ setAlgoPriority(REGION_PRIORITY, FOCUS_ALGO, false);
+ setAlgoPriority(FACE_PRIORITY, FOCUS_ALGO , true);
+
+ //Disable Region priority and enable Face priority
+ setAlgoPriority(REGION_PRIORITY, EXPOSURE_ALGO, false);
+ setAlgoPriority(FACE_PRIORITY, EXPOSURE_ALGO, true);
+ mFDSwitchAlgoPriority = false;
+ }
}
}
diff --git a/camera/OMXCameraAdapter/OMXFD.cpp b/camera/OMXCameraAdapter/OMXFD.cpp
index 55723b0..26bbd87 100644
--- a/camera/OMXCameraAdapter/OMXFD.cpp
+++ b/camera/OMXCameraAdapter/OMXFD.cpp
@@ -62,16 +62,9 @@ status_t OMXCameraAdapter::startFaceDetection()
goto out;
}
- if ( mFaceDetectionRunning )
- {
- //Disable region priority and enable face priority for AF
- setAlgoPriority(REGION_PRIORITY, FOCUS_ALGO, false);
- setAlgoPriority(FACE_PRIORITY, FOCUS_ALGO , true);
-
- //Disable Region priority and enable Face priority
- setAlgoPriority(REGION_PRIORITY, EXPOSURE_ALGO, false);
- setAlgoPriority(FACE_PRIORITY, EXPOSURE_ALGO, true);
- }
+ if ( mFaceDetectionRunning ) {
+ mFDSwitchAlgoPriority = true;
+ }
// Note: White balance will not be face prioritized, since
// the algorithm needs full frame statistics, and not face
diff --git a/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h b/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h
index 6ab5ff1..0fdc770 100644
--- a/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h
+++ b/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h
@@ -821,6 +821,7 @@ private:
//Face detection status
bool mFaceDetectionRunning;
bool mFaceDetectionPaused;
+ bool mFDSwitchAlgoPriority;
camera_face_t faceDetectionLastOutput [MAX_NUM_FACES_SUPPORTED];
int faceDetectionNumFacesLastOutput;