1c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* 2c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Copyright (C) Texas Instruments - http://www.ti.com/ 3c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 4c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Licensed under the Apache License, Version 2.0 (the "License"); 5c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * you may not use this file except in compliance with the License. 6c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * You may obtain a copy of the License at 7c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 8c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * http://www.apache.org/licenses/LICENSE-2.0 9c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 10c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Unless required by applicable law or agreed to in writing, software 11c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * distributed under the License is distributed on an "AS IS" BASIS, 12c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * See the License for the specific language governing permissions and 14c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * limitations under the License. 15c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 16c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 17c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 18c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* @file OMXZoom.cpp 19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* 20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* This file contains functionality for handling zoom configurations. 21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* 22c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev*/ 23c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#undef LOG_TAG 25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 26c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define LOG_TAG "CameraHAL" 27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 28c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "CameraHal.h" 29c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMXCameraAdapter.h" 30c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevnamespace android { 32c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 33c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst int32_t OMXCameraAdapter::ZOOM_STEPS [ZOOM_STAGES] = { 34704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman 65536, 68157, 70124, 72745, 35704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman 75366, 77988, 80609, 83231, 36704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman 86508, 89784, 92406, 95683, 37704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman 99615, 102892, 106168, 110100, 38704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman 114033, 117965, 122552, 126484, 39704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman 131072, 135660, 140247, 145490, 40704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman 150733, 155976, 161219, 167117, 41704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman 173015, 178913, 185467, 192020, 42704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman 198574, 205783, 212992, 220201, 43704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman 228065, 236585, 244449, 252969, 44704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman 262144, 271319, 281149, 290980, 45704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman 300810, 311951, 322437, 334234, 46704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman 346030, 357827, 370934, 384041, 47704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman 397148, 411566, 425984, 441057, 48704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman 456131, 472515, 488899, 506593, 49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 524288 }; 50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setParametersZoom(const CameraParameters ¶ms, 53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev BaseCameraAdapter::AdapterState state) 54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mZoomLock); 57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Immediate zoom should not be avaialable while smooth zoom is running 61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ( ZOOM_ACTIVE & state ) != ZOOM_ACTIVE ) 62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int zoom = params.getInt(CameraParameters::KEY_ZOOM); 64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( ( zoom >= 0 ) && ( zoom < ZOOM_STAGES ) ) 65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mTargetZoomIdx = zoom; 67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Immediate zoom should be applied instantly ( CTS requirement ) 69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCurrentZoomIdx = mTargetZoomIdx; 701c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman if(!mZoomUpdating) { 711c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman doZoom(mCurrentZoomIdx); 721c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman mZoomUpdating = true; 731c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman } else { 741c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman mZoomUpdate = true; 751c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman } 76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Zoom by App %d", zoom); 78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::doZoom(int index) 87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_SCALEFACTORTYPE zoomControl; 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ( 0 > index) || ( ( ZOOM_STAGES - 1 ) < index ) ) 101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Zoom index %d out of range", index); 103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -EINVAL; 104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 106f9e7d93cfc739190426ae5c3d204980ec8b2e475Akwasi Boateng if (mPreviousZoomIndx == index ) 107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_ERROR; 109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&zoomControl, OMX_CONFIG_SCALEFACTORTYPE); 114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev zoomControl.nPortIndex = OMX_ALL; 115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev zoomControl.xHeight = ZOOM_STEPS[index]; 116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev zoomControl.xWidth = ZOOM_STEPS[index]; 117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonDigitalZoom, 120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &zoomControl); 121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while applying digital zoom 0x%x", eError); 124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Digital zoom applied successfully"); 129f9e7d93cfc739190426ae5c3d204980ec8b2e475Akwasi Boateng mPreviousZoomIndx = index; 130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::advanceZoom() 139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev AdapterState state; 1421c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman Mutex::Autolock lock(mZoomLock); 1431c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman 144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev BaseCameraAdapter::getState(state); 145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mReturnZoomStatus ) 147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1484fb9d8de9fd6e78637332886ab93b7da9bb6981dSundar Raman mCurrentZoomIdx +=mZoomInc; 149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mTargetZoomIdx = mCurrentZoomIdx; 150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mReturnZoomStatus = false; 151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = doZoom(mCurrentZoomIdx); 152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev notifyZoomSubscribers(mCurrentZoomIdx, true); 153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( mCurrentZoomIdx != mTargetZoomIdx ) 155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ZOOM_ACTIVE & state ) 157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mCurrentZoomIdx < mTargetZoomIdx ) 159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mZoomInc = 1; 161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mZoomInc = -1; 165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCurrentZoomIdx += mZoomInc; 168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCurrentZoomIdx = mTargetZoomIdx; 172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = doZoom(mCurrentZoomIdx); 175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ZOOM_ACTIVE & state ) 177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mCurrentZoomIdx == mTargetZoomIdx ) 179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("[Goal Reached] Smooth Zoom notify currentIdx = %d, targetIdx = %d", 181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCurrentZoomIdx, 182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mTargetZoomIdx); 183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = BaseCameraAdapter::setState(CAMERA_STOP_SMOOTH_ZOOM); 188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = BaseCameraAdapter::commitState(); 192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= BaseCameraAdapter::rollbackState(); 196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 199226b496d5cce18e5898383bf479fdd42f2b5abdbTyler Luu mReturnZoomStatus = false; 200226b496d5cce18e5898383bf479fdd42f2b5abdbTyler Luu notifyZoomSubscribers(mCurrentZoomIdx, true); 201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("[Advancing] Smooth Zoom notify currentIdx = %d, targetIdx = %d", 205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCurrentZoomIdx, 206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mTargetZoomIdx); 207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev notifyZoomSubscribers(mCurrentZoomIdx, false); 208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( (mCurrentZoomIdx == mTargetZoomIdx ) && 212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( ZOOM_ACTIVE & state ) ) 213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2141c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman ret = BaseCameraAdapter::setState(CameraAdapter::CAMERA_STOP_SMOOTH_ZOOM); 2151c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman 2161c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman if ( NO_ERROR == ret ) 2171c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman { 2181c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman ret = BaseCameraAdapter::commitState(); 2191c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman } 2201c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman else 2211c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman { 2221c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman ret |= BaseCameraAdapter::rollbackState(); 2231c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman } 224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2271c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman if(mZoomUpdate) { 2281c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman doZoom(mTargetZoomIdx); 2291c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman mZoomUpdate = false; 2301c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman mZoomUpdating = true; 2311c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman } else { 2321c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman mZoomUpdating = false; 2331c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman } 2341c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman 235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::startSmoothZoom(int targetIdx) 239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mZoomLock); 245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Start smooth zoom target = %d, mCurrentIdx = %d", 247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev targetIdx, 248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCurrentZoomIdx); 249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ( targetIdx >= 0 ) && ( targetIdx < ZOOM_STAGES ) ) 251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mTargetZoomIdx = targetIdx; 253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mZoomParameterIdx = mCurrentZoomIdx; 254226b496d5cce18e5898383bf479fdd42f2b5abdbTyler Luu mReturnZoomStatus = false; 255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Smooth value out of range %d!", targetIdx); 259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -EINVAL; 260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::stopSmoothZoom() 268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mZoomLock); 271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mTargetZoomIdx != mCurrentZoomIdx ) 275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2764fb9d8de9fd6e78637332886ab93b7da9bb6981dSundar Raman if ( mCurrentZoomIdx < mTargetZoomIdx ) 2774fb9d8de9fd6e78637332886ab93b7da9bb6981dSundar Raman { 2784fb9d8de9fd6e78637332886ab93b7da9bb6981dSundar Raman mZoomInc = 1; 2794fb9d8de9fd6e78637332886ab93b7da9bb6981dSundar Raman } 2804fb9d8de9fd6e78637332886ab93b7da9bb6981dSundar Raman else 2814fb9d8de9fd6e78637332886ab93b7da9bb6981dSundar Raman { 2824fb9d8de9fd6e78637332886ab93b7da9bb6981dSundar Raman mZoomInc = -1; 2834fb9d8de9fd6e78637332886ab93b7da9bb6981dSundar Raman } 2844fb9d8de9fd6e78637332886ab93b7da9bb6981dSundar Raman mReturnZoomStatus = true; 285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mReturnZoomStatus = true; 286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Stop smooth zoom mCurrentZoomIdx = %d, mTargetZoomIdx = %d", 287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCurrentZoomIdx, 288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mTargetZoomIdx); 289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 297