summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Evlogiev <x0099089@ti.com>2012-01-16 19:21:20 +0200
committerDaniel Levin <dendy@ti.com>2012-07-25 08:55:41 -0500
commitd1b826a38125ae01deb5e2805100f40fd28a6c6c (patch)
treebe8b99a4b3fa8a8f63a81965bce27a1314692d9c
parentb1c72e2293619b4fb54598d7285d0e9770adb708 (diff)
downloadhardware_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.cpp22
-rw-r--r--camera/OMXCameraAdapter/OMX3A.cpp14
-rw-r--r--camera/OMXCameraAdapter/OMXAlgo.cpp112
-rw-r--r--camera/OMXCameraAdapter/OMXCameraAdapter.cpp2
-rw-r--r--camera/OMXCameraAdapter/OMXFocus.cpp19
-rw-r--r--camera/inc/OMXCameraAdapter/OMXCameraAdapter.h2
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 &params,
{
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 &params,
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 &params,
}
// Set AutoConvergence
-status_t OMXCameraAdapter::setAutoConvergence(const char *pValstr, const CameraParameters &params)
+status_t OMXCameraAdapter::setAutoConvergence(const char *pValstr, const char *pValManualstr, const CameraParameters &params)
{
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 &params);
+ status_t setAutoConvergence(const char *valstr, const char *pValManualstr, const CameraParameters &params);
OMX_OTHER_EXTRADATATYPE *getExtradata(OMX_OTHER_EXTRADATATYPE *extraData, OMX_EXTRADATATYPE type);