summaryrefslogtreecommitdiffstats
path: root/camera/OMXCameraAdapter/OMXZoom.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'camera/OMXCameraAdapter/OMXZoom.cpp')
-rw-r--r--camera/OMXCameraAdapter/OMXZoom.cpp39
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 &params,
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,