summaryrefslogtreecommitdiffstats
path: root/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
diff options
context:
space:
mode:
authorTyler Luu <tluu@ti.com>2011-10-26 22:51:04 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2011-10-26 22:51:04 +0000
commit2794ffaa278c6112ca357fd46280d450bf5dc002 (patch)
tree8cc0049570e39ffc9fd2da963cb57e40b29c3396 /camera/OMXCameraAdapter/OMXCameraAdapter.cpp
parentbb66b5a6e5bd3a909a57346b9e538b86dfc8e71d (diff)
parentdf6023f6fd9a515da9cec0e98ea303306b14c5d8 (diff)
downloadhardware_ti_omap4xxx-2794ffaa278c6112ca357fd46280d450bf5dc002.tar.gz
hardware_ti_omap4xxx-2794ffaa278c6112ca357fd46280d450bf5dc002.tar.bz2
hardware_ti_omap4xxx-2794ffaa278c6112ca357fd46280d450bf5dc002.zip
am df6023f6: am fd705eb8: CameraHal: Fixes for #testFocusDistance
* commit 'df6023f6fd9a515da9cec0e98ea303306b14c5d8': CameraHal: Fixes for #testFocusDistance
Diffstat (limited to 'camera/OMXCameraAdapter/OMXCameraAdapter.cpp')
-rwxr-xr-xcamera/OMXCameraAdapter/OMXCameraAdapter.cpp62
1 files changed, 51 insertions, 11 deletions
diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
index 3663756..1f5ab37 100755
--- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
+++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
@@ -664,11 +664,8 @@ void OMXCameraAdapter::getParameters(CameraParameters& params)
params.set(CameraParameters::KEY_FOCUS_MODE, valstr);
}
- //Query focus distances only during CAF, Infinity
- //or when focus is running
+ //Query focus distances only when focus is running
if ( ( AF_ACTIVE & state ) ||
- ( mParameters3A.Focus == OMX_IMAGE_FocusControlAuto ) ||
- ( mParameters3A.Focus == OMX_IMAGE_FocusControlAutoInfinity ) ||
( NULL == mParameters.get(CameraParameters::KEY_FOCUS_DISTANCES) ) )
{
updateFocusDistances(params);
@@ -1863,14 +1860,17 @@ status_t OMXCameraAdapter::startPreview()
if ( mPending3Asettings )
apply3Asettings(mParameters3A);
- //Query current focus distance after
- //starting the preview
- updateFocusDistances(mParameters);
-
//reset frame rate estimates
mFPS = 0.0f;
mLastFPS = 0.0f;
- mFrameCount = 0;
+ // start frame count from 0. i.e first frame after
+ // startPreview will be the 0th reference frame
+ // this way we will wait for second frame until
+ // takePicture/autoFocus is allowed to run. we
+ // are seeing SetConfig/GetConfig fail after
+ // calling after the first frame and not failing
+ // after the second frame
+ mFrameCount = -1;
mLastFrameCount = 0;
mIter = 1;
mLastFPSTime = systemTime();
@@ -1911,6 +1911,12 @@ status_t OMXCameraAdapter::stopPreview()
return NO_INIT;
}
+ {
+ Mutex::Autolock lock(mFrameCountMutex);
+ mFrameCount = 0;
+ mFirstFrameCondition.broadcast();
+ }
+
ret = cancelAutoFocus();
if(ret!=NO_ERROR)
{
@@ -2208,10 +2214,25 @@ status_t OMXCameraAdapter::autoFocus()
LOG_FUNCTION_NAME;
+ {
+ Mutex::Autolock lock(mFrameCountMutex);
+ if (mFrameCount < 1) {
+ // first frame may time some time to come...so wait for an adequate amount of time
+ // which 2 * OMX_CAPTURE_TIMEOUT * 1000 will cover.
+ ret = mFirstFrameCondition.waitRelative(mFrameCountMutex,
+ (nsecs_t) 2 * OMX_CAPTURE_TIMEOUT * 1000);
+ if ((NO_ERROR != ret) || (mFrameCount == 0)) {
+ goto EXIT;
+ }
+ }
+ }
+
msg.command = CommandHandler::CAMERA_PERFORM_AUTOFOCUS;
msg.arg1 = mErrorNotifier;
ret = mCommandHandler->put(&msg);
+ EXIT:
+
LOG_FUNCTION_NAME;
return ret;
@@ -2224,10 +2245,24 @@ status_t OMXCameraAdapter::takePicture()
LOG_FUNCTION_NAME;
+ {
+ Mutex::Autolock lock(mFrameCountMutex);
+ if (mFrameCount < 1) {
+ // first frame may time some time to come...so wait for an adequate amount of time
+ // which 2 * OMX_CAPTURE_TIMEOUT * 1000 will cover.
+ ret = mFirstFrameCondition.waitRelative(mFrameCountMutex,
+ (nsecs_t) 2 * OMX_CAPTURE_TIMEOUT * 1000);
+ if ((NO_ERROR != ret) || (mFrameCount == 0)) {
+ goto EXIT;
+ }
+ }
+ }
+
msg.command = CommandHandler::CAMERA_START_IMAGE_CAPTURE;
msg.arg1 = mErrorNotifier;
ret = mCommandHandler->put(&msg);
+ EXIT:
LOG_FUNCTION_NAME_EXIT;
return ret;
@@ -2929,7 +2964,6 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE
{
apply3Asettings(mParameters3A);
}
-
}
else if( pBuffHeader->nOutputPortIndex == OMX_CAMERA_PORT_VIDEO_OUT_MEASUREMENT )
{
@@ -3041,7 +3075,13 @@ status_t OMXCameraAdapter::recalculateFPS()
{
float currentFPS;
- mFrameCount++;
+ {
+ Mutex::Autolock lock(mFrameCountMutex);
+ mFrameCount++;
+ if (mFrameCount == 1) {
+ mFirstFrameCondition.broadcast();
+ }
+ }
if ( ( mFrameCount % FPS_PERIOD ) == 0 )
{