diff options
Diffstat (limited to 'camera/OMXCameraAdapter/OMXZoom.cpp')
-rw-r--r-- | camera/OMXCameraAdapter/OMXZoom.cpp | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/camera/OMXCameraAdapter/OMXZoom.cpp b/camera/OMXCameraAdapter/OMXZoom.cpp index e39a3b0..af5c5db 100644 --- a/camera/OMXCameraAdapter/OMXZoom.cpp +++ b/camera/OMXCameraAdapter/OMXZoom.cpp @@ -24,6 +24,15 @@ #include "CameraHal.h" #include "OMXCameraAdapter.h" +#ifdef CAMERAHAL_TUNA +namespace { + // Experimentally determined values that make + // overlapping bands go away in video mode. + const int32_t FrontSensorVideoMinZoom = 66816; // 65536 + 1280 + const int32_t BackSensorVideoMinZoom = 66304; // 65536 + 768 +} +#endif + namespace Ti { namespace Camera { @@ -45,6 +54,18 @@ const int32_t OMXCameraAdapter::ZOOM_STEPS [ZOOM_STAGES] = { 456131, 472515, 488899, 506593, 524288 }; +#ifdef CAMERAHAL_TUNA +int32_t OMXCameraAdapter::getZoomStep(int index) +{ + if (index != 0 || !mPrevZoomModeIsVideo) { + return OMXCameraAdapter::ZOOM_STEPS[index]; + } else if (mSensorIndex == 1) { + return FrontSensorVideoMinZoom; + } else { + return BackSensorVideoMinZoom; + } +} +#endif status_t OMXCameraAdapter::setParametersZoom(const android::CameraParameters ¶ms, BaseCameraAdapter::AdapterState state) @@ -98,17 +119,29 @@ status_t OMXCameraAdapter::doZoom(int index) ret = -EINVAL; } - if (mPreviousZoomIndx == index ) + bool curZoomModeIsVideo = (mCapMode == OMXCameraAdapter::VIDEO_MODE || + mCapMode == OMXCameraAdapter::VIDEO_MODE_HQ); + + // When index == 0 and there was a switch between video and non-video mode or between sensors, + // we do need to perform the zoom, as 0th index is different between video and non-video modes + // and between different sensors. + if (mPreviousZoomIndx == index && (index != 0 || (curZoomModeIsVideo == mPrevZoomModeIsVideo && + mSensorIndex == mPrevZoomSensorIndex))) { return NO_ERROR; } + mPrevZoomModeIsVideo = curZoomModeIsVideo; + mPrevZoomSensorIndex = mSensorIndex; + if ( NO_ERROR == ret ) { OMX_INIT_STRUCT_PTR (&zoomControl, OMX_CONFIG_SCALEFACTORTYPE); zoomControl.nPortIndex = OMX_ALL; - zoomControl.xHeight = ZOOM_STEPS[index]; - zoomControl.xWidth = ZOOM_STEPS[index]; +#ifdef CAMERAHAL_TUNA + zoomControl.xHeight = getZoomStep(index); + zoomControl.xWidth = zoomControl.xHeight; +#endif eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, OMX_IndexConfigCommonDigitalZoom, |