diff options
author | Tyler Luu <tluu@ti.com> | 2011-10-26 22:35:48 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-10-26 22:35:48 +0000 |
commit | df6023f6fd9a515da9cec0e98ea303306b14c5d8 (patch) | |
tree | 3431416f492463b55cc2dbd0e754a4f870b74842 /camera/OMXCameraAdapter/OMXCameraAdapter.cpp | |
parent | 37bf2859181aedae7f0f74462e13279863349e06 (diff) | |
parent | fd705eb8b757a4f3d1d80b736cf20cade04524d7 (diff) | |
download | hardware_ti_omap4xxx-df6023f6fd9a515da9cec0e98ea303306b14c5d8.tar.gz hardware_ti_omap4xxx-df6023f6fd9a515da9cec0e98ea303306b14c5d8.tar.bz2 hardware_ti_omap4xxx-df6023f6fd9a515da9cec0e98ea303306b14c5d8.zip |
am fd705eb8: CameraHal: Fixes for #testFocusDistance
* commit 'fd705eb8b757a4f3d1d80b736cf20cade04524d7':
CameraHal: Fixes for #testFocusDistance
Diffstat (limited to 'camera/OMXCameraAdapter/OMXCameraAdapter.cpp')
-rwxr-xr-x | camera/OMXCameraAdapter/OMXCameraAdapter.cpp | 62 |
1 files changed, 51 insertions, 11 deletions
diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp index c3feeee..6dab841 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 ) { |