diff options
author | Ivan Evlogiev <x0099089@ti.com> | 2012-01-16 19:21:20 +0200 |
---|---|---|
committer | Daniel Levin <dendy@ti.com> | 2012-07-25 08:55:41 -0500 |
commit | d1b826a38125ae01deb5e2805100f40fd28a6c6c (patch) | |
tree | be8b99a4b3fa8a8f63a81965bce27a1314692d9c /camera/OMXCameraAdapter/OMXAlgo.cpp | |
parent | b1c72e2293619b4fb54598d7285d0e9770adb708 (diff) | |
download | hardware_ti_omap4-d1b826a38125ae01deb5e2805100f40fd28a6c6c.zip hardware_ti_omap4-d1b826a38125ae01deb5e2805100f40fd28a6c6c.tar.gz hardware_ti_omap4-d1b826a38125ae01deb5e2805100f40fd28a6c6c.tar.bz2 |
CameraHAL: Fix manual convergence handling
Manual convergence is also valid for auto modes.
It needs to be applied for all convergence modes.
Default manual needs to be 0. Otherwize
correction will be applied on ducati side
Change-Id: I0b40942dc680b6046c22f5176e4cc7806b2f3f27
Signed-off-by: Ivan Evlogiev <x0099089@ti.com>
Diffstat (limited to 'camera/OMXCameraAdapter/OMXAlgo.cpp')
-rw-r--r-- | camera/OMXCameraAdapter/OMXAlgo.cpp | 112 |
1 files changed, 69 insertions, 43 deletions
diff --git a/camera/OMXCameraAdapter/OMXAlgo.cpp b/camera/OMXCameraAdapter/OMXAlgo.cpp index df1fd97..516050d 100644 --- a/camera/OMXCameraAdapter/OMXAlgo.cpp +++ b/camera/OMXCameraAdapter/OMXAlgo.cpp @@ -34,7 +34,9 @@ status_t OMXCameraAdapter::setParametersAlgo(const CameraParameters ¶ms, { status_t ret = NO_ERROR; const char *valstr = NULL; + const char *valManualStr = NULL; const char *oldstr = NULL; + OMXCameraPortParameters *cap; LOG_FUNCTION_NAME; @@ -253,22 +255,30 @@ status_t OMXCameraAdapter::setParametersAlgo(const CameraParameters ¶ms, mOMXStateSwitch = true; } - if ( mSensorIndex == OMX_TI_StereoSensor ) { - //Set Auto Convergence Mode - valstr = params.get((const char *) TICameraParameters::KEY_AUTOCONVERGENCE_MODE); - if ( valstr != NULL ) { - setAutoConvergence(valstr, params); + //Set Auto Convergence Mode + valstr = params.get((const char *) TICameraParameters::KEY_AUTOCONVERGENCE_MODE); + valManualStr = params.get(TICameraParameters::KEY_MANUAL_CONVERGENCE); + + cap = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex]; + + if (cap->mFrameLayoutType != OMX_TI_StereoFrameLayout2D) { + if ((valstr != NULL) || (valManualStr != NULL)) { + setAutoConvergence(valstr, valManualStr, params); + if (valstr != NULL) { CAMHAL_LOGDB("AutoConvergenceMode %s", valstr); + } + if (valManualStr != NULL) { + CAMHAL_LOGDB("Manual Convergence %s", valManualStr); + } } - } - //Set Mechanical Misalignment Correction - valstr = params.get((const char *) TICameraParameters::KEY_MECHANICAL_MISALIGNMENT_CORRECTION); - if ( valstr != NULL ) - { - setMechanicalMisalignmentCorrection(valstr); - CAMHAL_LOGDB("Mechanical Misalignment Correction %s", valstr); + //Set Mechanical Misalignment Correction + valstr = params.get((const char *) TICameraParameters::KEY_MECHANICAL_MISALIGNMENT_CORRECTION); + if ( valstr != NULL ) { + setMechanicalMisalignmentCorrection(valstr); + CAMHAL_LOGDB("Mechanical Misalignment Correction %s", valstr); } + } LOG_FUNCTION_NAME_EXIT; @@ -276,20 +286,43 @@ status_t OMXCameraAdapter::setParametersAlgo(const CameraParameters ¶ms, } // Set AutoConvergence -status_t OMXCameraAdapter::setAutoConvergence(const char *pValstr, const CameraParameters ¶ms) +status_t OMXCameraAdapter::setAutoConvergence(const char *pValstr, const char *pValManualstr, const CameraParameters ¶ms) { status_t ret = NO_ERROR; OMX_ERRORTYPE eError = OMX_ErrorNone; OMX_TI_CONFIG_CONVERGENCETYPE ACParams; const char *str = NULL; Vector< sp<CameraArea> > tempAreas; - OMX_S32 manualconvergence = 0; - int mode = 0; + int mode; + int changed = 0; LOG_FUNCTION_NAME; - mode = getLUTvalue_HALtoOMX(pValstr, mAutoConvergenceLUT); - if ( OMX_TI_AutoConvergenceModeFocusFaceTouch == mode ) { + if ( pValManualstr != NULL ) { + OMX_S32 manualConvergence = (OMX_S32)strtol(pValManualstr ,0 ,0); + + if (mManualConv != manualConvergence) { + mManualConv = manualConvergence; + changed = 1; + } + } + + if ( pValstr != NULL ) { + mode = getLUTvalue_HALtoOMX(pValstr, mAutoConvergenceLUT); + + if ( NAME_NOT_FOUND == mode ) { + CAMHAL_LOGEB("Wrong convergence mode: %s", pValstr); + LOG_FUNCTION_NAME_EXIT; + return mode; + } + + if ( mAutoConv != static_cast<OMX_TI_AUTOCONVERGENCEMODETYPE> (mode) ) { + mAutoConv = static_cast<OMX_TI_AUTOCONVERGENCEMODETYPE> (mode); + changed = 1; + } + } + + if ( OMX_TI_AutoConvergenceModeFocusFaceTouch == mAutoConv ) { Mutex::Autolock lock(mTouchAreasLock); str = params.get((const char *)CameraParameters::KEY_METERING_AREAS); @@ -299,39 +332,22 @@ status_t OMXCameraAdapter::setAutoConvergence(const char *pValstr, const CameraP } else { CAMHAL_LOGEB("Touch areas not received in %s", CameraParameters::KEY_METERING_AREAS); - ret = BAD_VALUE; + LOG_FUNCTION_NAME_EXIT; + return BAD_VALUE; } - if ( NO_ERROR != ret ) { - return ret; - } else if ( CameraArea::areAreasDifferent(mTouchAreas, tempAreas) || - ( mAutoConv != mode ) ) { + if ( CameraArea::areAreasDifferent(mTouchAreas, tempAreas) ) { mTouchAreas.clear(); mTouchAreas = tempAreas; - } else { - return NO_ERROR; + changed = 1; } + } - } else if ( OMX_TI_AutoConvergenceModeManual == mode ) { - str = params.get(TICameraParameters::KEY_MANUAL_CONVERGENCE); - if ( str != NULL ) { - manualconvergence = (OMX_S32)params.getInt(TICameraParameters::KEY_MANUAL_CONVERGENCE); - if ( ( mAutoConv != mode ) || ( manualconvergence != mManualConv ) ) { - mManualConv = manualconvergence; - } else { - return NO_ERROR; - } - } else { - return BAD_VALUE; - } - } else if ( mAutoConv == mode ) { + if (!changed) { + LOG_FUNCTION_NAME_EXIT; return NO_ERROR; - } else if ( NAME_NOT_FOUND == mode ) { - return mode; } - mAutoConv = static_cast<OMX_TI_AUTOCONVERGENCEMODETYPE> (mode); - OMXCameraPortParameters * mPreviewData; mPreviewData = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex]; @@ -347,9 +363,19 @@ status_t OMXCameraAdapter::setAutoConvergence(const char *pValstr, const CameraP ACParams.nManualConverence = mManualConv; if (1 == mTouchAreas.size()) { + int widthDivisor = 1; + int heightDivisor = 1; + + if (mPreviewData->mFrameLayoutType == OMX_TI_StereoFrameLayoutTopBottom) { + heightDivisor = 2; + } + if (mPreviewData->mFrameLayoutType == OMX_TI_StereoFrameLayoutLeftRight) { + widthDivisor = 2; + } + // transform the coordinates to 3A-type coordinates - mTouchAreas.itemAt(0)->transfrom((size_t)mPreviewData->mWidth, - (size_t)mPreviewData->mHeight, + mTouchAreas.itemAt(0)->transfrom((size_t)mPreviewData->mWidth/widthDivisor, + (size_t)mPreviewData->mHeight/heightDivisor, (size_t&) ACParams.nACProcWinStartY, (size_t&) ACParams.nACProcWinStartX, (size_t&) ACParams.nACProcWinWidth, |