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 | |
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>
-rw-r--r-- | camera/CameraHal.cpp | 22 | ||||
-rw-r--r-- | camera/OMXCameraAdapter/OMX3A.cpp | 14 | ||||
-rw-r--r-- | camera/OMXCameraAdapter/OMXAlgo.cpp | 112 | ||||
-rw-r--r-- | camera/OMXCameraAdapter/OMXCameraAdapter.cpp | 2 | ||||
-rw-r--r-- | camera/OMXCameraAdapter/OMXFocus.cpp | 19 | ||||
-rw-r--r-- | camera/inc/OMXCameraAdapter/OMXCameraAdapter.h | 2 |
6 files changed, 111 insertions, 60 deletions
diff --git a/camera/CameraHal.cpp b/camera/CameraHal.cpp index 6e3b683..ba92d40 100644 --- a/camera/CameraHal.cpp +++ b/camera/CameraHal.cpp @@ -630,17 +630,23 @@ int CameraHal::setParameters(const CameraParameters& params) } ///Update the current parameter set - if ( (valstr = params.get(TICameraParameters::KEY_AUTOCONVERGENCE_MODE)) != NULL ) - { + if ( (valstr = params.get(TICameraParameters::KEY_AUTOCONVERGENCE_MODE)) != NULL ) { CAMHAL_LOGDB("AutoConvergence mode set = %s", valstr); mParameters.set(TICameraParameters::KEY_AUTOCONVERGENCE_MODE, valstr); - } + } - if ( (valstr = params.get(TICameraParameters::KEY_MANUAL_CONVERGENCE)) != NULL ) - { - CAMHAL_LOGDB("ManualConvergence Value = %s", valstr); - mParameters.set(TICameraParameters::KEY_MANUAL_CONVERGENCE, valstr); - } + if ( (valstr = params.get(TICameraParameters::KEY_MANUAL_CONVERGENCE)) != NULL ) { + int manualConvergence = (int)strtol(valstr, 0, 0); + + if ( ( manualConvergence < strtol(mCameraProperties->get(CameraProperties::SUPPORTED_MANUAL_CONVERGENCE_MIN), 0, 0) ) || + ( manualConvergence > strtol(mCameraProperties->get(CameraProperties::SUPPORTED_MANUAL_CONVERGENCE_MAX), 0, 0) ) ) { + CAMHAL_LOGEB("ERROR: Invalid Manual Convergence = %d", manualConvergence); + return BAD_VALUE; + } else { + CAMHAL_LOGDB("ManualConvergence Value = %d", manualConvergence); + mParameters.set(TICameraParameters::KEY_MANUAL_CONVERGENCE, valstr); + } + } if((valstr = params.get(TICameraParameters::KEY_MECHANICAL_MISALIGNMENT_CORRECTION)) != NULL) { if (isParameterValid(valstr, diff --git a/camera/OMXCameraAdapter/OMX3A.cpp b/camera/OMXCameraAdapter/OMX3A.cpp index 1299c94..9318a4b 100644 --- a/camera/OMXCameraAdapter/OMX3A.cpp +++ b/camera/OMXCameraAdapter/OMX3A.cpp @@ -1621,9 +1621,19 @@ status_t OMXCameraAdapter::setMeteringAreas(Gen3A_settings& Gen3A) for ( unsigned int n = 0; n < mMeteringAreas.size(); n++) { + 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 - mMeteringAreas.itemAt(n)->transfrom((size_t)mPreviewData->mWidth, - (size_t)mPreviewData->mHeight, + mMeteringAreas.itemAt(n)->transfrom((size_t)mPreviewData->mWidth/widthDivisor, + (size_t)mPreviewData->mHeight/heightDivisor, (size_t&)meteringAreas[0]->tAlgoAreas[n].nTop, (size_t&)meteringAreas[0]->tAlgoAreas[n].nLeft, (size_t&)meteringAreas[0]->tAlgoAreas[n].nWidth, 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, diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp index 5a5a245..b61e020 100644 --- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp +++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp @@ -200,7 +200,7 @@ status_t OMXCameraAdapter::initialize(CameraProperties::Properties* caps) mExposureBracketingValidEntries = 0; mSensorOverclock = false; mAutoConv = OMX_TI_AutoConvergenceModeMax; - mManualConv = 0x7FFFFFFF; + mManualConv = 0; mDeviceOrientation = 0; mCapabilities = caps; mZoomUpdating = false; diff --git a/camera/OMXCameraAdapter/OMXFocus.cpp b/camera/OMXCameraAdapter/OMXFocus.cpp index a7255a6..44965c8 100644 --- a/camera/OMXCameraAdapter/OMXFocus.cpp +++ b/camera/OMXCameraAdapter/OMXFocus.cpp @@ -746,11 +746,20 @@ status_t OMXCameraAdapter::setTouchFocus() focusAreas[0]->nNumAreas = 0; } - for ( unsigned int n = 0; n < mFocusAreas.size(); n++) - { + for ( unsigned int n = 0; n < mFocusAreas.size(); n++) { + 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 - mFocusAreas.itemAt(n)->transfrom((size_t)mPreviewData->mWidth, - (size_t)mPreviewData->mHeight, + mFocusAreas.itemAt(n)->transfrom((size_t)mPreviewData->mWidth/widthDivisor, + (size_t)mPreviewData->mHeight/heightDivisor, (size_t&)focusAreas[0]->tAlgoAreas[n].nTop, (size_t&)focusAreas[0]->tAlgoAreas[n].nLeft, (size_t&)focusAreas[0]->tAlgoAreas[n].nWidth, @@ -770,7 +779,7 @@ status_t OMXCameraAdapter::setTouchFocus() n, (int)focusAreas[0]->tAlgoAreas[n].nTop, (int)focusAreas[0]->tAlgoAreas[n].nLeft, (int)focusAreas[0]->tAlgoAreas[n].nWidth, (int)focusAreas[0]->tAlgoAreas[n].nHeight, (int)focusAreas[0]->tAlgoAreas[n].nPriority); - } + } OMX_INIT_STRUCT_PTR (&sharedBuffer, OMX_TI_CONFIG_SHAREDBUFFER); diff --git a/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h b/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h index babf75c..6052467 100644 --- a/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h +++ b/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h @@ -681,7 +681,7 @@ private: status_t apply3Asettings( Gen3A_settings& Gen3A ); // AutoConvergence - status_t setAutoConvergence(const char *valstr,const CameraParameters ¶ms); + status_t setAutoConvergence(const char *valstr, const char *pValManualstr, const CameraParameters ¶ms); OMX_OTHER_EXTRADATATYPE *getExtradata(OMX_OTHER_EXTRADATATYPE *extraData, OMX_EXTRADATATYPE type); |