diff options
author | Emilian Peev <epeev@mm-sol.com> | 2012-01-06 09:26:08 +0200 |
---|---|---|
committer | Daniel Levin <dendy@ti.com> | 2012-07-25 08:55:39 -0500 |
commit | e4be82844d537c6b927bbdcc25311b7d08494bc8 (patch) | |
tree | a8029139e8fd64cda0042f7a6ccdd9f126f98ecf /camera/OMXCameraAdapter | |
parent | a975b934a8b6216494c94328b029f3ca215da98e (diff) | |
download | hardware_ti_omap4-e4be82844d537c6b927bbdcc25311b7d08494bc8.zip hardware_ti_omap4-e4be82844d537c6b927bbdcc25311b7d08494bc8.tar.gz hardware_ti_omap4-e4be82844d537c6b927bbdcc25311b7d08494bc8.tar.bz2 |
CameraHal: Fixes a corner case with sensor overclocking
- An issue with FOV can be observed when sensor overclocking
is enabled and then disabled. In most cases when sensor
overclocking is active the sensor will use a dedicated
sensor mode. If this mode is no longer needed and the client
configures a smaller resolution ( but for some reason sensor
overclocking is still enabled ), then the sensor will remain
in the same mode and as a result cropping might be applied.
The issue which this patch resolves is an error returned
by the camera when trying to disable sensor overclocking.
When this case occurs the preview port resolution will get
set before sensor overclocking configured.
Signed-off-by: Emilian Peev <epeev@mm-sol.com>
Change-Id: Ie9669376d556fef2984f2dc0edc66a8f65563b47
Diffstat (limited to 'camera/OMXCameraAdapter')
-rw-r--r-- | camera/OMXCameraAdapter/OMXAlgo.cpp | 15 | ||||
-rw-r--r-- | camera/OMXCameraAdapter/OMXCameraAdapter.cpp | 12 |
2 files changed, 21 insertions, 6 deletions
diff --git a/camera/OMXCameraAdapter/OMXAlgo.cpp b/camera/OMXCameraAdapter/OMXAlgo.cpp index 2a299ad..6638b5c 100644 --- a/camera/OMXCameraAdapter/OMXAlgo.cpp +++ b/camera/OMXCameraAdapter/OMXAlgo.cpp @@ -1071,6 +1071,13 @@ status_t OMXCameraAdapter::setSensorOrientation(unsigned int degree) mPreviewData->mWidth = 640; mPreviewData->mHeight = 480; ret = setFormat(OMX_CAMERA_PORT_VIDEO_OUT_PREVIEW, *mPreviewData); + + // Handles one corner case in which sensor overclocking + // would incorrectly return an error. + if ( BAD_VALUE == ret ) { + ret = setFormat (OMX_CAMERA_PORT_VIDEO_OUT_PREVIEW, *mPreviewData); + } + if ( ret != NO_ERROR ) { CAMHAL_LOGEB("setFormat() failed %d", ret); } @@ -1099,6 +1106,14 @@ status_t OMXCameraAdapter::setSensorOrientation(unsigned int degree) if ( NO_ERROR == ret ) { ret = setFormat (mCameraAdapterParameters.mPrevPortIndex, mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex]); + + // Handles one corner case in which sensor overclocking + // would incorrectly return an error. + if ( BAD_VALUE == ret ) { + ret = setFormat (mCameraAdapterParameters.mPrevPortIndex, + mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex]); + } + if ( NO_ERROR != ret ) { CAMHAL_LOGEB("setFormat() failed %d", ret); } diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp index 431ec9e..935429f 100644 --- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp +++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp @@ -787,6 +787,7 @@ status_t OMXCameraAdapter::setFormat(OMX_U32 port, OMXCameraPortParameters &port int sensorID = -1; size_t bufferCount; status_t ret = NO_ERROR; + status_t overclockStatus = NO_ERROR; LOG_FUNCTION_NAME; @@ -826,9 +827,9 @@ status_t OMXCameraAdapter::setFormat(OMX_U32 port, OMXCameraPortParameters &port ( ( sensorID == SENSORID_OV5640 ) && ( portCheck.format.video.nFrameWidth >= overclockWidth ) && ( portCheck.format.video.nFrameHeight >= overclockHeight ) ) ){ - setSensorOverclock(true); + overclockStatus = setSensorOverclock(true); } else { - setSensorOverclock(false); + overclockStatus = setSensorOverclock(false); } portCheck.format.video.xFramerate = portParams.mFrameRate<<16; @@ -948,7 +949,7 @@ status_t OMXCameraAdapter::setFormat(OMX_U32 port, OMXCameraPortParameters &port LOG_FUNCTION_NAME_EXIT; - return ErrorUtils::omxToAndroidError(eError); + return ErrorUtils::omxToAndroidError(eError) | overclockStatus; EXIT: @@ -956,7 +957,7 @@ status_t OMXCameraAdapter::setFormat(OMX_U32 port, OMXCameraPortParameters &port LOG_FUNCTION_NAME_EXIT; - return ErrorUtils::omxToAndroidError(eError); + return ErrorUtils::omxToAndroidError(eError) | overclockStatus; } status_t OMXCameraAdapter::flushBuffers() @@ -2153,7 +2154,6 @@ status_t OMXCameraAdapter::setSensorOverclock(bool enable) if ( OMX_ErrorNone != eError ) { CAMHAL_LOGEB("Error while setting Sensor overclock 0x%x", eError); - ret = BAD_VALUE; } else { @@ -2163,7 +2163,7 @@ status_t OMXCameraAdapter::setSensorOverclock(bool enable) LOG_FUNCTION_NAME_EXIT; - return ret; + return ErrorUtils::omxToAndroidError(eError); } status_t OMXCameraAdapter::printComponentVersion(OMX_HANDLETYPE handle) |