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 OMX3A.cpp 19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* 20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* This file contains functionality for handling 3A 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#include "ErrorUtils.h" 31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 326014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong#include <cutils/properties.h> 336014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong 3436e9bdd56757ff8048e08f6e52f234480c44f122Tyler Luu#undef TRUE 3536e9bdd56757ff8048e08f6e52f234480c44f122Tyler Luu#undef FALSE 368cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman#define TRUE "true" 378cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman#define FALSE "false" 388cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 39708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev#define METERING_AREAS_RANGE 0xFF 40708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevnamespace android { 42759396a116bb2caf006405777a626fe9a8708114Tyler Luuconst SceneModesEntry* OMXCameraAdapter::getSceneModeEntry(const char* name, 43759396a116bb2caf006405777a626fe9a8708114Tyler Luu OMX_SCENEMODETYPE scene) { 44759396a116bb2caf006405777a626fe9a8708114Tyler Luu const SceneModesEntry* cameraLUT = NULL; 45759396a116bb2caf006405777a626fe9a8708114Tyler Luu const SceneModesEntry* entry = NULL; 46759396a116bb2caf006405777a626fe9a8708114Tyler Luu unsigned int numEntries = 0; 47759396a116bb2caf006405777a626fe9a8708114Tyler Luu 48759396a116bb2caf006405777a626fe9a8708114Tyler Luu // 1. Find camera's scene mode LUT 49759396a116bb2caf006405777a626fe9a8708114Tyler Luu for (unsigned int i = 0; i < ARRAY_SIZE(CameraToSensorModesLUT); i++) { 50759396a116bb2caf006405777a626fe9a8708114Tyler Luu if (strcmp(CameraToSensorModesLUT[i].name, name) == 0) { 51759396a116bb2caf006405777a626fe9a8708114Tyler Luu cameraLUT = CameraToSensorModesLUT[i].Table; 52759396a116bb2caf006405777a626fe9a8708114Tyler Luu numEntries = CameraToSensorModesLUT[i].size; 53759396a116bb2caf006405777a626fe9a8708114Tyler Luu break; 54759396a116bb2caf006405777a626fe9a8708114Tyler Luu } 55759396a116bb2caf006405777a626fe9a8708114Tyler Luu } 56759396a116bb2caf006405777a626fe9a8708114Tyler Luu 57759396a116bb2caf006405777a626fe9a8708114Tyler Luu // 2. Find scene mode entry in table 58759396a116bb2caf006405777a626fe9a8708114Tyler Luu if (!cameraLUT) { 59759396a116bb2caf006405777a626fe9a8708114Tyler Luu goto EXIT; 60759396a116bb2caf006405777a626fe9a8708114Tyler Luu } 61759396a116bb2caf006405777a626fe9a8708114Tyler Luu 62759396a116bb2caf006405777a626fe9a8708114Tyler Luu for (unsigned int i = 0; i < numEntries; i++) { 63759396a116bb2caf006405777a626fe9a8708114Tyler Luu if(cameraLUT[i].scene == scene) { 64759396a116bb2caf006405777a626fe9a8708114Tyler Luu entry = cameraLUT + i; 65759396a116bb2caf006405777a626fe9a8708114Tyler Luu break; 66759396a116bb2caf006405777a626fe9a8708114Tyler Luu } 67759396a116bb2caf006405777a626fe9a8708114Tyler Luu } 68759396a116bb2caf006405777a626fe9a8708114Tyler Luu EXIT: 69759396a116bb2caf006405777a626fe9a8708114Tyler Luu return entry; 70759396a116bb2caf006405777a626fe9a8708114Tyler Luu} 71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setParameters3A(const CameraParameters ¶ms, 73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev BaseCameraAdapter::AdapterState state) 74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mode = 0; 77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev const char *str = NULL; 78a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev int varint = 0; 79e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu BaseCameraAdapter::AdapterState nextState; 80e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu BaseCameraAdapter::getNextState(nextState); 81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 842facbeb345500d62f74eac01ebb49a069fe034c1Raji Reddy Kandi Mutex::Autolock lock(m3ASettingsUpdateLock); 852facbeb345500d62f74eac01ebb49a069fe034c1Raji Reddy Kandi 864c0157e43ed1fad64fd0075549bbbe30f03ee608Akwasi Boateng str = params.get(CameraParameters::KEY_SCENE_MODE); 874c0157e43ed1fad64fd0075549bbbe30f03ee608Akwasi Boateng mode = getLUTvalue_HALtoOMX( str, SceneLUT); 88e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if ( mFirstTimeInit || ((str != NULL) && ( mParameters3A.SceneMode != mode )) ) { 89e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if ( 0 <= mode ) { 90e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu mParameters3A.SceneMode = mode; 91e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if ((mode == OMX_Manual) && (mFirstTimeInit == false)){//Auto mode 92e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu mFirstTimeInit = true; 93e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 94e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if ((mode != OMX_Manual) && 95e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu (state & PREVIEW_ACTIVE) && !(nextState & CAPTURE_ACTIVE)) { 96e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu // if setting preset scene mode, previewing, and not in the middle of capture 97e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu // set preset scene mode immediately instead of in next FBD 98e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu // for feedback params to work properly since they need to be read 99e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu // by application in subsequent getParameters() 100517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu ret |= setScene(mParameters3A); 101517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu // re-apply EV compensation after setting scene mode since it probably reset it 102517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu if(mParameters3A.EVCompensation) { 103517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu setEVCompensation(mParameters3A); 104517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu } 105517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu return ret; 106e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } else { 107e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu mPending3Asettings |= SetSceneMode; 108e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 109e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } else { 110e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu mParameters3A.SceneMode = OMX_Manual; 1114c0157e43ed1fad64fd0075549bbbe30f03ee608Akwasi Boateng } 112e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGVB("SceneMode %d", mParameters3A.SceneMode); 1134c0157e43ed1fad64fd0075549bbbe30f03ee608Akwasi Boateng } 1144c0157e43ed1fad64fd0075549bbbe30f03ee608Akwasi Boateng 115a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev#ifdef OMAP_ENHANCEMENT 116a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev 117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(TICameraParameters::KEY_EXPOSURE_MODE); 118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mode = getLUTvalue_HALtoOMX( str, ExpLUT); 1198cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman if ( ( str != NULL ) && ( mParameters3A.Exposure != mode )) 120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.Exposure = mode; 122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Exposure mode %d", mode); 123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= mParameters3A.Exposure ) 124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetExpMode; 126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 129a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev#endif 130a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev 131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_WHITE_BALANCE); 132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mode = getLUTvalue_HALtoOMX( str, WBalLUT); 1338cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman if (mFirstTimeInit || ((str != NULL) && (mode != mParameters3A.WhiteBallance))) 134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.WhiteBallance = mode; 136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Whitebalance mode %d", mode); 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= mParameters3A.WhiteBallance ) 138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetWhiteBallance; 140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 143a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev#ifdef OMAP_ENHANCEMENT 144a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev 145a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev varint = params.getInt(TICameraParameters::KEY_CONTRAST); 146a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev if ( 0 <= varint ) 147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || 149a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev ( (mParameters3A.Contrast + CONTRAST_OFFSET) != varint ) ) 150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 151a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev mParameters3A.Contrast = varint - CONTRAST_OFFSET; 152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Contrast %d", mParameters3A.Contrast); 153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetContrast; 154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 157a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev varint = params.getInt(TICameraParameters::KEY_SHARPNESS); 158a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev if ( 0 <= varint ) 159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || 161a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev ((mParameters3A.Sharpness + SHARPNESS_OFFSET) != varint )) 162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 163a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev mParameters3A.Sharpness = varint - SHARPNESS_OFFSET; 164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Sharpness %d", mParameters3A.Sharpness); 165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetSharpness; 166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 169a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev varint = params.getInt(TICameraParameters::KEY_SATURATION); 170a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev if ( 0 <= varint ) 171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || 173a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev ((mParameters3A.Saturation + SATURATION_OFFSET) != varint ) ) 174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 175a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev mParameters3A.Saturation = varint - SATURATION_OFFSET; 176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Saturation %d", mParameters3A.Saturation); 177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetSaturation; 178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 181a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev varint = params.getInt(TICameraParameters::KEY_BRIGHTNESS); 182a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev if ( 0 <= varint ) 183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || 185a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev (( mParameters3A.Brightness != varint )) ) 186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 187a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev mParameters3A.Brightness = (unsigned) varint; 188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Brightness %d", mParameters3A.Brightness); 189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetBrightness; 190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 193a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev#endif 194a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev 195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_ANTIBANDING); 196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mode = getLUTvalue_HALtoOMX(str,FlickerLUT); 197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || ( ( str != NULL ) && ( mParameters3A.Flicker != mode ) )) 198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.Flicker = mode; 200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Flicker %d", mParameters3A.Flicker); 201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= mParameters3A.Flicker ) 202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetFlicker; 204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 207a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev#ifdef OMAP_ENHANCEMENT 208a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev 209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(TICameraParameters::KEY_ISO); 210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mode = getLUTvalue_HALtoOMX(str, IsoLUT); 211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVB("ISO mode arrived in HAL : %s", str); 212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || ( ( str != NULL ) && ( mParameters3A.ISO != mode )) ) 213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.ISO = mode; 215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("ISO %d", mParameters3A.ISO); 216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= mParameters3A.ISO ) 217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetISO; 219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 222a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev#endif 223a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev 224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_FOCUS_MODE); 225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mode = getLUTvalue_HALtoOMX(str, FocusLUT); 2268cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman if ( (mFirstTimeInit || ((str != NULL) && (mParameters3A.Focus != mode)))) 227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2282136042f80a20aeeef3ece24bab027c401426334Milen Mitkov mPending3Asettings |= SetFocus; 229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.Focus = mode; 231fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu 232fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu // if focus mode is set to infinity...update focus distance immediately 233fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu if (mode == OMX_IMAGE_FocusControlAutoInfinity) { 234fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu updateFocusDistances(mParameters); 235fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu } 236fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu 237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Focus %x", mParameters3A.Focus); 238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_EXPOSURE_COMPENSATION); 241a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev varint = params.getInt(CameraParameters::KEY_EXPOSURE_COMPENSATION); 242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || 243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (( str != NULL ) && 244a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev (mParameters3A.EVCompensation != varint ))) 245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 246a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev CAMHAL_LOGDB("Setting EV Compensation to %d", varint); 247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 248a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev mParameters3A.EVCompensation = varint; 249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetEVCompensation; 250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_FLASH_MODE); 253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mode = getLUTvalue_HALtoOMX( str, FlashLUT); 254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || (( str != NULL ) && ( mParameters3A.FlashMode != mode )) ) 255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= mode ) 257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.FlashMode = mode; 259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetFlash; 260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.FlashMode = OMX_Manual; 264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVB("Flash Setting %s", str); 268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVB("FlashMode %d", mParameters3A.FlashMode); 269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_EFFECT); 271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mode = getLUTvalue_HALtoOMX( str, EffLUT); 272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || (( str != NULL ) && ( mParameters3A.Effect != mode )) ) 273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.Effect = mode; 275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Effect %d", mParameters3A.Effect); 276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= mParameters3A.Effect ) 277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetEffect; 279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_AUTO_EXPOSURE_LOCK_SUPPORTED); 283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( (str != NULL) && (!strcmp(str, "true")) ) 284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_BOOL lock = OMX_FALSE; 286ba027fc89ec3950e1ac2f95fcc3f1002442ddabbSundar Raman mUserSetExpLock = OMX_FALSE; 287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_AUTO_EXPOSURE_LOCK); 288bedd4917f415925c438e73430484302f918896f5Tyler Luu if (str && ((strcmp(str, "true")) == 0)) 289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVA("Locking Exposure"); 291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lock = OMX_TRUE; 292ba027fc89ec3950e1ac2f95fcc3f1002442ddabbSundar Raman mUserSetExpLock = OMX_TRUE; 293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVA("UnLocking Exposure"); 297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 298ba027fc89ec3950e1ac2f95fcc3f1002442ddabbSundar Raman 299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (mParameters3A.ExposureLock != lock) 300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.ExposureLock = lock; 302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("ExposureLock %d", lock); 303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetExpLock; 304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED); 308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( (str != NULL) && (!strcmp(str, "true")) ) 309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_BOOL lock = OMX_FALSE; 311ba027fc89ec3950e1ac2f95fcc3f1002442ddabbSundar Raman mUserSetWbLock = OMX_FALSE; 312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK); 313bedd4917f415925c438e73430484302f918896f5Tyler Luu if (str && ((strcmp(str, "true")) == 0)) 314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVA("Locking WhiteBalance"); 316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lock = OMX_TRUE; 317ba027fc89ec3950e1ac2f95fcc3f1002442ddabbSundar Raman mUserSetWbLock = OMX_TRUE; 318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVA("UnLocking WhiteBalance"); 322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (mParameters3A.WhiteBalanceLock != lock) 324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.WhiteBalanceLock = lock; 326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("WhiteBalanceLock %d", lock); 327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetWBLock; 328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 331fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu str = params.get(TICameraParameters::KEY_AUTO_FOCUS_LOCK); 332fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu if (str && (strcmp(str, TRUE) == 0) && (mParameters3A.FocusLock != OMX_TRUE)) { 333fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu CAMHAL_LOGVA("Locking Focus"); 334fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu mParameters3A.FocusLock = OMX_TRUE; 335fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu setFocusLock(mParameters3A); 336fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu } else if (str && (strcmp(str, FALSE) == 0) && (mParameters3A.FocusLock != OMX_FALSE)) { 337fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu CAMHAL_LOGVA("UnLocking Focus"); 338fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu mParameters3A.FocusLock = OMX_FALSE; 339fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu setFocusLock(mParameters3A); 340fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu } 341fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu 342708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev str = params.get(CameraParameters::KEY_METERING_AREAS); 3432f15c6a9f1d24904705ddab6a6c005126e8846ddSundar Raman if ( (str != NULL) ) { 344708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev size_t MAX_METERING_AREAS; 3455458bdc45048501d1919b14d22456de91f7e8950Tyler Luu Vector< sp<CameraArea> > tempAreas; 3465458bdc45048501d1919b14d22456de91f7e8950Tyler Luu 347708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev MAX_METERING_AREAS = atoi(params.get(CameraParameters::KEY_MAX_NUM_METERING_AREAS)); 348708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 349d9c52eb4fa1e27ffd33f22d9987f60a8a714b7bfTyler Luu Mutex::Autolock lock(mMeteringAreasLock); 350d9c52eb4fa1e27ffd33f22d9987f60a8a714b7bfTyler Luu 3515458bdc45048501d1919b14d22456de91f7e8950Tyler Luu ret = CameraArea::parseAreas(str, ( strlen(str) + 1 ), tempAreas); 3525458bdc45048501d1919b14d22456de91f7e8950Tyler Luu 3535458bdc45048501d1919b14d22456de91f7e8950Tyler Luu CAMHAL_LOGVB("areAreasDifferent? = %d", 3545458bdc45048501d1919b14d22456de91f7e8950Tyler Luu CameraArea::areAreasDifferent(mMeteringAreas, tempAreas)); 355708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 3565458bdc45048501d1919b14d22456de91f7e8950Tyler Luu if ( (NO_ERROR == ret) && CameraArea::areAreasDifferent(mMeteringAreas, tempAreas) ) { 3575458bdc45048501d1919b14d22456de91f7e8950Tyler Luu mMeteringAreas.clear(); 3585458bdc45048501d1919b14d22456de91f7e8950Tyler Luu mMeteringAreas = tempAreas; 359708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 3602f15c6a9f1d24904705ddab6a6c005126e8846ddSundar Raman if ( MAX_METERING_AREAS >= mMeteringAreas.size() ) { 3612f15c6a9f1d24904705ddab6a6c005126e8846ddSundar Raman CAMHAL_LOGDB("Setting Metering Areas %s", 3622f15c6a9f1d24904705ddab6a6c005126e8846ddSundar Raman params.get(CameraParameters::KEY_METERING_AREAS)); 363708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 3642f15c6a9f1d24904705ddab6a6c005126e8846ddSundar Raman mPending3Asettings |= SetMeteringAreas; 3652f15c6a9f1d24904705ddab6a6c005126e8846ddSundar Raman } else { 3662f15c6a9f1d24904705ddab6a6c005126e8846ddSundar Raman CAMHAL_LOGEB("Metering areas supported %d, metering areas set %d", 3672f15c6a9f1d24904705ddab6a6c005126e8846ddSundar Raman MAX_METERING_AREAS, mMeteringAreas.size()); 3682f15c6a9f1d24904705ddab6a6c005126e8846ddSundar Raman ret = -EINVAL; 369708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 370708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 3712f15c6a9f1d24904705ddab6a6c005126e8846ddSundar Raman } 372708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint OMXCameraAdapter::getLUTvalue_HALtoOMX(const char * HalValue, LUTtype LUT) 379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int LUTsize = LUT.size; 381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( HalValue ) 382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for(int i = 0; i < LUTsize; i++) 383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( 0 == strcmp(LUT.Table[i].userDefinition, HalValue) ) 384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return LUT.Table[i].omxDefinition; 385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -ENOENT; 387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char* OMXCameraAdapter::getLUTvalue_OMXtoHAL(int OMXValue, LUTtype LUT) 390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int LUTsize = LUT.size; 392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for(int i = 0; i < LUTsize; i++) 393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( LUT.Table[i].omxDefinition == OMXValue ) 394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return LUT.Table[i].userDefinition; 395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NULL; 397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 399da310a303b2b48404f31645cf660063517da3e8aEmilian Peevstatus_t OMXCameraAdapter::init3AParams(Gen3A_settings &Gen3A) 400024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu{ 401024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu LOG_FUNCTION_NAME; 402024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 403024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.Effect = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_EFFECT, EffLUT); 404024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.FlashMode = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_FLASH_MODE, FlashLUT); 405024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.SceneMode = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_SCENE_MODE, SceneLUT); 406024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.EVCompensation = atoi(OMXCameraAdapter::DEFAULT_EV_COMPENSATION); 407024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.Focus = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_FOCUS_MODE, FocusLUT); 408024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.ISO = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_ISO_MODE, IsoLUT); 409024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.Flicker = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_ANTIBANDING, FlickerLUT); 410024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.Brightness = atoi(OMXCameraAdapter::DEFAULT_BRIGHTNESS); 411533be266db006d2c4e371a87be4d15fbf92abc17Milen Mitkov Gen3A.Saturation = atoi(OMXCameraAdapter::DEFAULT_SATURATION) - SATURATION_OFFSET; 412533be266db006d2c4e371a87be4d15fbf92abc17Milen Mitkov Gen3A.Sharpness = atoi(OMXCameraAdapter::DEFAULT_SHARPNESS) - SHARPNESS_OFFSET; 413533be266db006d2c4e371a87be4d15fbf92abc17Milen Mitkov Gen3A.Contrast = atoi(OMXCameraAdapter::DEFAULT_CONTRAST) - CONTRAST_OFFSET; 414024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.WhiteBallance = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_WB, WBalLUT); 415024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.Exposure = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_EXPOSURE_MODE, ExpLUT); 416024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.ExposureLock = OMX_FALSE; 4179dc08c5fb736308cfca6659f66b14165b265baebTyler Luu Gen3A.FocusLock = OMX_FALSE; 418024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.WhiteBalanceLock = OMX_FALSE; 419024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 420024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu LOG_FUNCTION_NAME_EXIT; 421024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 422024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu return NO_ERROR; 423024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu} 424024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setExposureMode(Gen3A_settings& Gen3A) 426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_EXPOSURECONTROLTYPE exp; 429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 43800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman OMX_INIT_STRUCT_PTR (&exp, OMX_CONFIG_EXPOSURECONTROLTYPE); 43900479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman exp.nPortIndex = OMX_ALL; 44000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman exp.eExposureControl = (OMX_EXPOSURECONTROLTYPE)Gen3A.Exposure; 44100479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman 442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonExposure, 444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &exp); 445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring exposure mode 0x%x", eError); 448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Camera exposure mode configured successfully"); 452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 4596014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dongstatic bool isFlashDisabled() { 4606014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong#if (PROPERTY_VALUE_MAX < 5) 4616014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong#error "PROPERTY_VALUE_MAX must be at least 5" 4626014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong#endif 4636014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong 4640bb5454945320db77ff426baf9c0c34631c373abJames Dong // Ignore flash_off system property for user build. 4650bb5454945320db77ff426baf9c0c34631c373abJames Dong char buildType[PROPERTY_VALUE_MAX]; 4660bb5454945320db77ff426baf9c0c34631c373abJames Dong if (property_get("ro.build.type", buildType, NULL) && 4670bb5454945320db77ff426baf9c0c34631c373abJames Dong !strcasecmp(buildType, "user")) { 4680bb5454945320db77ff426baf9c0c34631c373abJames Dong return false; 4690bb5454945320db77ff426baf9c0c34631c373abJames Dong } 4700bb5454945320db77ff426baf9c0c34631c373abJames Dong 4716014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong char value[PROPERTY_VALUE_MAX]; 4726014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong if (property_get("camera.flash_off", value, NULL) && 4736014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong (!strcasecmp(value, "true") || !strcasecmp(value, "1"))) { 474a4e4aeab47b17a82524ac56f2d69daa3e47c1ce7Steve Block ALOGW("flash is disabled for testing purpose"); 4756014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong return true; 4766014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong } 4776014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong 4786014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong return false; 4796014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong} 4806014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong 481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setFlashMode(Gen3A_settings& Gen3A) 482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IMAGE_PARAM_FLASHCONTROLTYPE flash; 486021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov OMX_CONFIG_FOCUSASSISTTYPE focusAssist; 487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&flash, OMX_IMAGE_PARAM_FLASHCONTROLTYPE); 497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev flash.nPortIndex = OMX_ALL; 4986014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong 4996014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong if (isFlashDisabled()) { 5006014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong flash.eFlashControl = ( OMX_IMAGE_FLASHCONTROLTYPE ) OMX_IMAGE_FlashControlOff; 5016014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong } else { 5026014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong flash.eFlashControl = ( OMX_IMAGE_FLASHCONTROLTYPE ) Gen3A.FlashMode; 5036014a8f2648911e7e0f5ba9256afa1a7a9eaf526James Dong } 504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Configuring flash mode 0x%x", flash.eFlashControl); 506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE) OMX_IndexConfigFlashControl, 508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &flash); 509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring flash mode 0x%x", eError); 512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Camera flash mode configured successfully"); 516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 518021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov if ( OMX_ErrorNone == eError ) 519021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov { 520021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov OMX_INIT_STRUCT_PTR (&focusAssist, OMX_CONFIG_FOCUSASSISTTYPE); 521021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov focusAssist.nPortIndex = OMX_ALL; 522021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov if ( flash.eFlashControl == OMX_IMAGE_FlashControlOff ) 523021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov { 524021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov focusAssist.bFocusAssist = OMX_FALSE; 525021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov } 526021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov else 527021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov { 528021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov focusAssist.bFocusAssist = OMX_TRUE; 529021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov } 530021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov 531021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov CAMHAL_LOGDB("Configuring AF Assist mode 0x%x", focusAssist.bFocusAssist); 532021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 533021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov (OMX_INDEXTYPE) OMX_IndexConfigFocusAssist, 534021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov &focusAssist); 535021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov if ( OMX_ErrorNone != eError ) 536021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov { 537021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov CAMHAL_LOGEB("Error while configuring AF Assist mode 0x%x", eError); 538021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov } 539021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov else 540021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov { 541021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov CAMHAL_LOGDA("Camera AF Assist mode configured successfully"); 542021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov } 543021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov } 544021992a8a7b312d520237a7ea4011d29aed3961eVladislav Hristov 545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 550e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luustatus_t OMXCameraAdapter::getFlashMode(Gen3A_settings& Gen3A) 551e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu{ 552e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu status_t ret = NO_ERROR; 553e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_ERRORTYPE eError = OMX_ErrorNone; 554e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_IMAGE_PARAM_FLASHCONTROLTYPE flash; 555e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 556e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu LOG_FUNCTION_NAME; 557e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 558e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if ( OMX_StateInvalid == mComponentState ) { 559e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGEA("OMX component is in invalid state"); 560e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu return NO_INIT; 561e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 562e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 563e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_INIT_STRUCT_PTR (&flash, OMX_IMAGE_PARAM_FLASHCONTROLTYPE); 564e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu flash.nPortIndex = OMX_ALL; 565e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 566e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp, 567e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu (OMX_INDEXTYPE) OMX_IndexConfigFlashControl, 568e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu &flash); 569e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 570e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if ( OMX_ErrorNone != eError ) { 571e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGEB("Error while getting flash mode 0x%x", eError); 572e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } else { 573e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu Gen3A.FlashMode = flash.eFlashControl; 574e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGDB("Gen3A.FlashMode 0x%x", Gen3A.FlashMode); 575e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 576e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 577e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu LOG_FUNCTION_NAME_EXIT; 578e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 579e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu return ErrorUtils::omxToAndroidError(eError); 580e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu} 581e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setFocusMode(Gen3A_settings& Gen3A) 583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE focus; 5878cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman size_t top, left, width, height, weight; 5882136042f80a20aeeef3ece24bab027c401426334Milen Mitkov OMX_CONFIG_BOOLEANTYPE bOMX; 589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 592183fa757c75d9270b1ee2f25da195499ae6d6946Akwasi Boateng BaseCameraAdapter::AdapterState state; 593183fa757c75d9270b1ee2f25da195499ae6d6946Akwasi Boateng BaseCameraAdapter::getState(state); 594183fa757c75d9270b1ee2f25da195499ae6d6946Akwasi Boateng 595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 6018cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 6028cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman ///Face detection takes precedence over touch AF 6038cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman if ( mFaceDetectionRunning ) 6048cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman { 6058cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //Disable region priority first 6068cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman setAlgoPriority(REGION_PRIORITY, FOCUS_ALGO, false); 6078cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 6088cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //Enable face algorithm priority for focus 6098cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman setAlgoPriority(FACE_PRIORITY, FOCUS_ALGO , true); 6108cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 6118cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //Do normal focus afterwards 6128cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman ////FIXME: Check if the extended focus control is needed? this overrides caf 6138cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //focusControl.eFocusControl = ( OMX_IMAGE_FOCUSCONTROLTYPE ) OMX_IMAGE_FocusControlExtended; 6148cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman } 615f2ac1cc4c58440d94972f0015f50bcbb13838611Atanas Stefov else if ( (!mFocusAreas.isEmpty()) && (!mFocusAreas.itemAt(0)->isZeroArea()) ) 6168cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman { 6178cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 6188cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //Disable face priority first 6198cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman setAlgoPriority(FACE_PRIORITY, FOCUS_ALGO, false); 6208cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 6218cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //Enable region algorithm priority 6228cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman setAlgoPriority(REGION_PRIORITY, FOCUS_ALGO, true); 6238cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 6248cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 6258cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //Do normal focus afterwards 6268cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //FIXME: Check if the extended focus control is needed? this overrides caf 6278cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //focus.eFocusControl = ( OMX_IMAGE_FOCUSCONTROLTYPE ) OMX_IMAGE_FocusControlExtended; 6288cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 6298cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman } 6308cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman else 6318cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman { 6328cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 6338cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //Disable both region and face priority 6348cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman setAlgoPriority(REGION_PRIORITY, FOCUS_ALGO, false); 6358cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 6368cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman setAlgoPriority(FACE_PRIORITY, FOCUS_ALGO, false); 6378cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 6388cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman } 639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 640183fa757c75d9270b1ee2f25da195499ae6d6946Akwasi Boateng if ( NO_ERROR == ret && ((state & AF_ACTIVE) == 0) ) 641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 6422136042f80a20aeeef3ece24bab027c401426334Milen Mitkov OMX_INIT_STRUCT_PTR (&bOMX, OMX_CONFIG_BOOLEANTYPE); 6432136042f80a20aeeef3ece24bab027c401426334Milen Mitkov 6442136042f80a20aeeef3ece24bab027c401426334Milen Mitkov if ( Gen3A.Focus == OMX_IMAGE_FocusControlAutoInfinity) 6452136042f80a20aeeef3ece24bab027c401426334Milen Mitkov { 6462136042f80a20aeeef3ece24bab027c401426334Milen Mitkov // Don't lock at infinity, otherwise the AF cannot drive 6472136042f80a20aeeef3ece24bab027c401426334Milen Mitkov // the lens at infinity position 6482136042f80a20aeeef3ece24bab027c401426334Milen Mitkov if( set3ALock(mUserSetExpLock, mUserSetWbLock, OMX_FALSE) != NO_ERROR) 6492136042f80a20aeeef3ece24bab027c401426334Milen Mitkov { 6502136042f80a20aeeef3ece24bab027c401426334Milen Mitkov CAMHAL_LOGEA("Error Applying 3A locks"); 6512136042f80a20aeeef3ece24bab027c401426334Milen Mitkov } else { 6522136042f80a20aeeef3ece24bab027c401426334Milen Mitkov CAMHAL_LOGDA("Focus locked. Applied focus locks successfully"); 6532136042f80a20aeeef3ece24bab027c401426334Milen Mitkov } 6542136042f80a20aeeef3ece24bab027c401426334Milen Mitkov } 6552136042f80a20aeeef3ece24bab027c401426334Milen Mitkov if ( Gen3A.Focus == OMX_IMAGE_FocusControlAuto || 6562136042f80a20aeeef3ece24bab027c401426334Milen Mitkov Gen3A.Focus == OMX_IMAGE_FocusControlAutoInfinity) 6572136042f80a20aeeef3ece24bab027c401426334Milen Mitkov { 6582136042f80a20aeeef3ece24bab027c401426334Milen Mitkov // Run focus scanning if switching to continuous infinity focus mode 6592136042f80a20aeeef3ece24bab027c401426334Milen Mitkov bOMX.bEnabled = OMX_TRUE; 6602136042f80a20aeeef3ece24bab027c401426334Milen Mitkov } 6612136042f80a20aeeef3ece24bab027c401426334Milen Mitkov else 6622136042f80a20aeeef3ece24bab027c401426334Milen Mitkov { 6632136042f80a20aeeef3ece24bab027c401426334Milen Mitkov bOMX.bEnabled = OMX_FALSE; 6642136042f80a20aeeef3ece24bab027c401426334Milen Mitkov } 6652136042f80a20aeeef3ece24bab027c401426334Milen Mitkov 6662136042f80a20aeeef3ece24bab027c401426334Milen Mitkov eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 6672136042f80a20aeeef3ece24bab027c401426334Milen Mitkov (OMX_INDEXTYPE)OMX_TI_IndexConfigAutofocusEnable, 6682136042f80a20aeeef3ece24bab027c401426334Milen Mitkov &bOMX); 6692136042f80a20aeeef3ece24bab027c401426334Milen Mitkov 670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&focus, OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE); 671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev focus.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev focus.eFocusControl = (OMX_IMAGE_FOCUSCONTROLTYPE)Gen3A.Focus; 673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Configuring focus mode 0x%x", focus.eFocusControl); 675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, OMX_IndexConfigFocusControl, &focus); 676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring focus mode 0x%x", eError); 679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Camera focus mode configured successfully"); 683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 691e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luustatus_t OMXCameraAdapter::getFocusMode(Gen3A_settings& Gen3A) 692e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu{ 693e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu status_t ret = NO_ERROR; 694e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_ERRORTYPE eError = OMX_ErrorNone; 695e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE focus; 696e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu size_t top, left, width, height, weight; 697e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 698e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu LOG_FUNCTION_NAME; 699e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 700e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if (OMX_StateInvalid == mComponentState) { 701e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGEA("OMX component is in invalid state"); 702e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu return NO_INIT; 703e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 704e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 705e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_INIT_STRUCT_PTR (&focus, OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE); 706e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu focus.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 707e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp, 708e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_IndexConfigFocusControl, &focus); 709e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 710e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if (OMX_ErrorNone != eError) { 711e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGEB("Error while configuring focus mode 0x%x", eError); 712e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } else { 713e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu Gen3A.Focus = focus.eFocusControl; 714e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGDB("Gen3A.Focus 0x%x", Gen3A.Focus); 715e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 716e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 717e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu LOG_FUNCTION_NAME_EXIT; 718e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 719e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu return ErrorUtils::omxToAndroidError(eError); 720e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu} 721e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setScene(Gen3A_settings& Gen3A) 723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_SCENEMODETYPE scene; 726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&scene, OMX_CONFIG_SCENEMODETYPE); 736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev scene.nPortIndex = OMX_ALL; 737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev scene.eSceneMode = ( OMX_SCENEMODETYPE ) Gen3A.SceneMode; 738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Configuring scene mode 0x%x", scene.eSceneMode); 740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( OMX_INDEXTYPE ) OMX_TI_IndexConfigSceneMode, 742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &scene); 743e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 744e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if (OMX_ErrorNone != eError) { 745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring scene mode 0x%x", eError); 746e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } else { 747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Camera scene configured successfully"); 748e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if (Gen3A.SceneMode != OMX_Manual) { 749e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu // Get preset scene mode feedback 750e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu getFocusMode(Gen3A); 751e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu getFlashMode(Gen3A); 752e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu getWBMode(Gen3A); 753e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 754e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu // TODO(XXX): Re-enable these for mainline 755e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu // getSharpness(Gen3A); 756e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu // getSaturation(Gen3A); 757e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu // getISO(Gen3A); 758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 759e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setEVCompensation(Gen3A_settings& Gen3A) 767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_EXPOSUREVALUETYPE expValues; 770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&expValues, OMX_CONFIG_EXPOSUREVALUETYPE); 780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev expValues.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_GetConfig( mCameraAdapterParameters.mHandleComp, 783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonExposureValue, 784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &expValues); 785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("old EV Compensation for OMX = 0x%x", (int)expValues.xEVCompensation); 786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("EV Compensation for HAL = %d", Gen3A.EVCompensation); 787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev expValues.xEVCompensation = ( Gen3A.EVCompensation * ( 1 << Q16_OFFSET ) ) / 10; 789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonExposureValue, 791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &expValues); 792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("new EV Compensation for OMX = 0x%x", (int)expValues.xEVCompensation); 793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring EV Compensation 0x%x error = 0x%x", 796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) expValues.xEVCompensation, 797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("EV Compensation 0x%x configured successfully", 802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) expValues.xEVCompensation); 803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 810e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luustatus_t OMXCameraAdapter::getEVCompensation(Gen3A_settings& Gen3A) 811e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu{ 812e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_ERRORTYPE eError = OMX_ErrorNone; 813e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_CONFIG_EXPOSUREVALUETYPE expValues; 814e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 815e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu LOG_FUNCTION_NAME; 816e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 817e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if ( OMX_StateInvalid == mComponentState ) { 818e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGEA("OMX component is in invalid state"); 819e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu return NO_INIT; 820e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 821e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 822e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_INIT_STRUCT_PTR (&expValues, OMX_CONFIG_EXPOSUREVALUETYPE); 823e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu expValues.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 824e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 825e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_GetConfig(mCameraAdapterParameters.mHandleComp, 826e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_IndexConfigCommonExposureValue, 827e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu &expValues); 828e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 829e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if ( OMX_ErrorNone != eError ) { 830e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGEB("Error while getting EV Compensation error = 0x%x", eError); 831e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } else { 832e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu Gen3A.EVCompensation = (10 * expValues.xEVCompensation) / (1 << Q16_OFFSET); 833e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGDB("Gen3A.EVCompensation 0x%x", Gen3A.EVCompensation); 834e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 835e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 836e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu LOG_FUNCTION_NAME_EXIT; 837e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 838e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu return ErrorUtils::omxToAndroidError(eError); 839e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu} 840e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setWBMode(Gen3A_settings& Gen3A) 842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_WHITEBALCONTROLTYPE wb; 845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&wb, OMX_CONFIG_WHITEBALCONTROLTYPE); 855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev wb.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev wb.eWhiteBalControl = ( OMX_WHITEBALCONTROLTYPE ) Gen3A.WhiteBallance; 857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( WB_FACE_PRIORITY == Gen3A.WhiteBallance ) 859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Disable Region priority and enable Face priority 861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAlgoPriority(REGION_PRIORITY, WHITE_BALANCE_ALGO, false); 862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAlgoPriority(FACE_PRIORITY, WHITE_BALANCE_ALGO, true); 863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Then set the mode to auto 86500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman wb.eWhiteBalControl = OMX_WhiteBalControlAuto; 866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Disable Face and Region priority 870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAlgoPriority(FACE_PRIORITY, WHITE_BALANCE_ALGO, false); 871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAlgoPriority(REGION_PRIORITY, WHITE_BALANCE_ALGO, false); 872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonWhiteBalance, 876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &wb); 877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Whitebalance mode 0x%x error = 0x%x", 880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) wb.eWhiteBalControl, 881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Whitebalance mode 0x%x configured successfully", 886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) wb.eWhiteBalControl); 887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 894e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luustatus_t OMXCameraAdapter::getWBMode(Gen3A_settings& Gen3A) 895e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu{ 896e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_ERRORTYPE eError = OMX_ErrorNone; 897e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_CONFIG_WHITEBALCONTROLTYPE wb; 898e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 899e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu LOG_FUNCTION_NAME; 900e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 901e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if ( OMX_StateInvalid == mComponentState ) { 902e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGEA("OMX component is in invalid state"); 903e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu return NO_INIT; 904e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 905e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 906e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_INIT_STRUCT_PTR (&wb, OMX_CONFIG_WHITEBALCONTROLTYPE); 907e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu wb.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 908e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 909e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp, 910e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_IndexConfigCommonWhiteBalance, 911e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu &wb); 912e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 913e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if (OMX_ErrorNone != eError) { 914e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGEB("Error while getting Whitebalance mode error = 0x%x", eError); 915e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } else { 916e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu Gen3A.WhiteBallance = wb.eWhiteBalControl; 917e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGDB("Gen3A.WhiteBallance 0x%x", Gen3A.WhiteBallance); 918e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 919e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 920e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu LOG_FUNCTION_NAME_EXIT; 921e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 922e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu return eError; 923e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu} 924e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setFlicker(Gen3A_settings& Gen3A) 926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_FLICKERCANCELTYPE flicker; 929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&flicker, OMX_CONFIG_FLICKERCANCELTYPE); 939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev flicker.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev flicker.eFlickerCancel = (OMX_COMMONFLICKERCANCELTYPE)Gen3A.Flicker; 941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE)OMX_IndexConfigFlickerCancel, 944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &flicker ); 945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Flicker mode 0x%x error = 0x%x", 948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) flicker.eFlickerCancel, 949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Flicker mode 0x%x configured successfully", 954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) flicker.eFlickerCancel); 955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 956c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setBrightness(Gen3A_settings& Gen3A) 963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 964c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 965c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_BRIGHTNESSTYPE brightness; 966c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 968c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 972c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 974c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 975c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&brightness, OMX_CONFIG_BRIGHTNESSTYPE); 976c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev brightness.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 977c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev brightness.nBrightness = Gen3A.Brightness; 978c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 979c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 980c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonBrightness, 981c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &brightness); 982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 984c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Brightness 0x%x error = 0x%x", 985c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) brightness.nBrightness, 986c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Brightness 0x%x configured successfully", 991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) brightness.nBrightness); 992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 998c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 999c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setContrast(Gen3A_settings& Gen3A) 1000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1001c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 1002c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_CONTRASTTYPE contrast; 1003c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1004c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1005c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1006c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 1007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 1009c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 1010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&contrast, OMX_CONFIG_CONTRASTTYPE); 1013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev contrast.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 1014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev contrast.nContrast = Gen3A.Contrast; 1015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 1017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonContrast, 1018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &contrast); 1019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 1020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Contrast 0x%x error = 0x%x", 1022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) contrast.nContrast, 1023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 1024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 1026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Contrast 0x%x configured successfully", 1028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) contrast.nContrast); 1029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 1034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setSharpness(Gen3A_settings& Gen3A) 1037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 1039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IMAGE_CONFIG_PROCESSINGLEVELTYPE procSharpness; 1040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 1044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 1046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 1047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&procSharpness, OMX_IMAGE_CONFIG_PROCESSINGLEVELTYPE); 1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev procSharpness.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev procSharpness.nLevel = Gen3A.Sharpness; 1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( procSharpness.nLevel == 0 ) 1054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev procSharpness.bAuto = OMX_TRUE; 1056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 1058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev procSharpness.bAuto = OMX_FALSE; 1060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 1063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE)OMX_IndexConfigSharpeningLevel, 1064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &procSharpness); 1065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 1066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Sharpness 0x%x error = 0x%x", 1068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) procSharpness.nLevel, 1069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 1070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 1072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Sharpness 0x%x configured successfully", 1074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) procSharpness.nLevel); 1075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 1080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1082e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luustatus_t OMXCameraAdapter::getSharpness(Gen3A_settings& Gen3A) 1083e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu{ 1084e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_ERRORTYPE eError = OMX_ErrorNone; 1085e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_IMAGE_CONFIG_PROCESSINGLEVELTYPE procSharpness; 1086e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1087e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu LOG_FUNCTION_NAME; 1088e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1089e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if (OMX_StateInvalid == mComponentState) { 1090e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGEA("OMX component is in invalid state"); 1091e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu return NO_INIT; 1092e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 1093e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1094e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_INIT_STRUCT_PTR (&procSharpness, OMX_IMAGE_CONFIG_PROCESSINGLEVELTYPE); 1095e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu procSharpness.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 1096e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1097e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp, 1098e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu (OMX_INDEXTYPE)OMX_IndexConfigSharpeningLevel, 1099e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu &procSharpness); 1100e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1101e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if (OMX_ErrorNone != eError) { 1102e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGEB("Error while configuring Sharpness error = 0x%x", eError); 1103e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } else { 1104e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu Gen3A.Sharpness = procSharpness.nLevel; 1105e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGDB("Gen3A.Sharpness 0x%x", Gen3A.Sharpness); 1106e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 1107e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1108e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu LOG_FUNCTION_NAME_EXIT; 1109e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1110e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu return ErrorUtils::omxToAndroidError(eError); 1111e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu} 1112e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setSaturation(Gen3A_settings& Gen3A) 1114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 1116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_SATURATIONTYPE saturation; 1117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 1121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 1123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 1124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&saturation, OMX_CONFIG_SATURATIONTYPE); 1127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev saturation.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 1128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev saturation.nSaturation = Gen3A.Saturation; 1129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 1131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonSaturation, 1132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &saturation); 1133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 1134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Saturation 0x%x error = 0x%x", 1136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) saturation.nSaturation, 1137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 1138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 1140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Saturation 0x%x configured successfully", 1142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) saturation.nSaturation); 1143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 1148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1150e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luustatus_t OMXCameraAdapter::getSaturation(Gen3A_settings& Gen3A) 1151e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu{ 1152e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_ERRORTYPE eError = OMX_ErrorNone; 1153e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_CONFIG_SATURATIONTYPE saturation; 1154e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1155e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu LOG_FUNCTION_NAME; 1156e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1157e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if (OMX_StateInvalid == mComponentState) { 1158e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGEA("OMX component is in invalid state"); 1159e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu return NO_INIT; 1160e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 1161e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1162e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_INIT_STRUCT_PTR (&saturation, OMX_CONFIG_SATURATIONTYPE); 1163e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu saturation.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 1164e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1165e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu eError = OMX_GetConfig( mCameraAdapterParameters.mHandleComp, 1166e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_IndexConfigCommonSaturation, 1167e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu &saturation); 1168e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1169e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if (OMX_ErrorNone != eError) { 1170e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGEB("Error while getting Saturation error = 0x%x", eError); 1171e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } else { 1172e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu Gen3A.Saturation = saturation.nSaturation; 1173e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGDB("Gen3A.Saturation 0x%x", Gen3A.Saturation); 1174e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 1175e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1176e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu LOG_FUNCTION_NAME_EXIT; 1177e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1178e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu return ErrorUtils::omxToAndroidError(eError); 1179e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu} 1180e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setISO(Gen3A_settings& Gen3A) 1182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 1184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_EXPOSUREVALUETYPE expValues; 1185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 1189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 1191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 1192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&expValues, OMX_CONFIG_EXPOSUREVALUETYPE); 1195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev expValues.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 1196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_GetConfig( mCameraAdapterParameters.mHandleComp, 1198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonExposureValue, 1199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &expValues); 1200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( 0 == Gen3A.ISO ) 1202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev expValues.bAutoSensitivity = OMX_TRUE; 1204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 1206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev expValues.bAutoSensitivity = OMX_FALSE; 1208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev expValues.nSensitivity = Gen3A.ISO; 1209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 1212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonExposureValue, 1213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &expValues); 1214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 1215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring ISO 0x%x error = 0x%x", 1217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) expValues.nSensitivity, 1218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 1219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 1221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("ISO 0x%x configured successfully", 1223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) expValues.nSensitivity); 1224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 1229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1231e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luustatus_t OMXCameraAdapter::getISO(Gen3A_settings& Gen3A) 1232e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu{ 1233e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_ERRORTYPE eError = OMX_ErrorNone; 1234e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_CONFIG_EXPOSUREVALUETYPE expValues; 1235e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1236e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu LOG_FUNCTION_NAME; 1237e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1238e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if (OMX_StateInvalid == mComponentState) { 1239e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGEA("OMX component is in invalid state"); 1240e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu return NO_INIT; 1241e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 1242e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1243e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_INIT_STRUCT_PTR (&expValues, OMX_CONFIG_EXPOSUREVALUETYPE); 1244e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu expValues.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 1245e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1246e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_GetConfig( mCameraAdapterParameters.mHandleComp, 1247e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu OMX_IndexConfigCommonExposureValue, 1248e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu &expValues); 1249e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1250e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu if (OMX_ErrorNone != eError) { 1251e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGEB("Error while getting ISO error = 0x%x", eError); 1252e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } else { 1253e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu Gen3A.ISO = expValues.nSensitivity; 1254e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu CAMHAL_LOGDB("Gen3A.ISO %d", Gen3A.ISO); 1255e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu } 1256e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1257e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu LOG_FUNCTION_NAME_EXIT; 1258e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1259e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu return ErrorUtils::omxToAndroidError(eError); 1260e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu} 1261e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu 1262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setEffect(Gen3A_settings& Gen3A) 1263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 1265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_IMAGEFILTERTYPE effect; 1266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 1270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 1272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 1273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&effect, OMX_CONFIG_IMAGEFILTERTYPE); 1276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev effect.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 1277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev effect.eImageFilter = (OMX_IMAGEFILTERTYPE ) Gen3A.Effect; 1278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 1280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonImageFilter, 1281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &effect); 1282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 1283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Effect 0x%x error = 0x%x", 1285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) effect.eImageFilter, 1286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 1287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 1289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Effect 0x%x configured successfully", 1291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) effect.eImageFilter); 1292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 1297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setWhiteBalanceLock(Gen3A_settings& Gen3A) 1300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 1302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IMAGE_CONFIG_LOCKTYPE lock; 1303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME 1305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 1307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 1309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 1310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&lock, OMX_IMAGE_CONFIG_LOCKTYPE); 1313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lock.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 1314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lock.bLock = Gen3A.WhiteBalanceLock; 1315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 1316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE)OMX_IndexConfigImageWhiteBalanceLock, 1317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &lock); 1318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 1319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring WhiteBalance Lock error = 0x%x", eError); 1321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 1323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("WhiteBalance Lock configured successfully %d ", lock.bLock); 1325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT 1327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 1329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setExposureLock(Gen3A_settings& Gen3A) 1332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 1334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IMAGE_CONFIG_LOCKTYPE lock; 1335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME 1337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 1339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 1341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 1342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&lock, OMX_IMAGE_CONFIG_LOCKTYPE); 1345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lock.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 1346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lock.bLock = Gen3A.ExposureLock; 1347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 1348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE)OMX_IndexConfigImageExposureLock, 1349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &lock); 1350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 1351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Exposure Lock error = 0x%x", eError); 1353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 1355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Exposure Lock configured successfully %d ", lock.bLock); 1357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT 1359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 1361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 13639dc08c5fb736308cfca6659f66b14165b265baebTyler Luustatus_t OMXCameraAdapter::setFocusLock(Gen3A_settings& Gen3A) 13649dc08c5fb736308cfca6659f66b14165b265baebTyler Luu{ 13659dc08c5fb736308cfca6659f66b14165b265baebTyler Luu OMX_ERRORTYPE eError = OMX_ErrorNone; 13669dc08c5fb736308cfca6659f66b14165b265baebTyler Luu OMX_IMAGE_CONFIG_LOCKTYPE lock; 13679dc08c5fb736308cfca6659f66b14165b265baebTyler Luu 13689dc08c5fb736308cfca6659f66b14165b265baebTyler Luu LOG_FUNCTION_NAME 13699dc08c5fb736308cfca6659f66b14165b265baebTyler Luu 13709dc08c5fb736308cfca6659f66b14165b265baebTyler Luu if ( OMX_StateInvalid == mComponentState ) { 13719dc08c5fb736308cfca6659f66b14165b265baebTyler Luu CAMHAL_LOGEA("OMX component is in invalid state"); 13729dc08c5fb736308cfca6659f66b14165b265baebTyler Luu return NO_INIT; 13739dc08c5fb736308cfca6659f66b14165b265baebTyler Luu } 13749dc08c5fb736308cfca6659f66b14165b265baebTyler Luu 13759dc08c5fb736308cfca6659f66b14165b265baebTyler Luu OMX_INIT_STRUCT_PTR (&lock, OMX_IMAGE_CONFIG_LOCKTYPE); 13769dc08c5fb736308cfca6659f66b14165b265baebTyler Luu lock.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 13779dc08c5fb736308cfca6659f66b14165b265baebTyler Luu 13789dc08c5fb736308cfca6659f66b14165b265baebTyler Luu lock.bLock = Gen3A.FocusLock; 13799dc08c5fb736308cfca6659f66b14165b265baebTyler Luu eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 13809dc08c5fb736308cfca6659f66b14165b265baebTyler Luu (OMX_INDEXTYPE)OMX_IndexConfigImageFocusLock, 13819dc08c5fb736308cfca6659f66b14165b265baebTyler Luu &lock); 13829dc08c5fb736308cfca6659f66b14165b265baebTyler Luu 13839dc08c5fb736308cfca6659f66b14165b265baebTyler Luu if ( OMX_ErrorNone != eError ) { 13849dc08c5fb736308cfca6659f66b14165b265baebTyler Luu CAMHAL_LOGEB("Error while configuring Focus Lock error = 0x%x", eError); 13859dc08c5fb736308cfca6659f66b14165b265baebTyler Luu } else { 13869dc08c5fb736308cfca6659f66b14165b265baebTyler Luu CAMHAL_LOGDB("Focus Lock configured successfully %d ", lock.bLock); 13879dc08c5fb736308cfca6659f66b14165b265baebTyler Luu } 13889dc08c5fb736308cfca6659f66b14165b265baebTyler Luu 13899dc08c5fb736308cfca6659f66b14165b265baebTyler Luu LOG_FUNCTION_NAME_EXIT 13909dc08c5fb736308cfca6659f66b14165b265baebTyler Luu 13919dc08c5fb736308cfca6659f66b14165b265baebTyler Luu return ErrorUtils::omxToAndroidError(eError); 13929dc08c5fb736308cfca6659f66b14165b265baebTyler Luu} 13939dc08c5fb736308cfca6659f66b14165b265baebTyler Luu 13949dc08c5fb736308cfca6659f66b14165b265baebTyler Luustatus_t OMXCameraAdapter::set3ALock(OMX_BOOL toggleExp, OMX_BOOL toggleWb, OMX_BOOL toggleFocus) 1395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 13968a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu OMX_ERRORTYPE eError = OMX_ErrorNone; 13978a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu OMX_IMAGE_CONFIG_LOCKTYPE lock; 1398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 13998a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu LOG_FUNCTION_NAME 1400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 14018a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu if ( OMX_StateInvalid == mComponentState ) 1402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 1404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 1405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 14078a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu OMX_INIT_STRUCT_PTR (&lock, OMX_IMAGE_CONFIG_LOCKTYPE); 14088a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu lock.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 1409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 14108a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu mParameters3A.ExposureLock = toggleExp; 14119dc08c5fb736308cfca6659f66b14165b265baebTyler Luu mParameters3A.FocusLock = toggleFocus; 14128a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu mParameters3A.WhiteBalanceLock = toggleWb; 1413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 14148a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu eError = OMX_GetConfig( mCameraAdapterParameters.mHandleComp, 14158a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu (OMX_INDEXTYPE)OMX_IndexConfigImageExposureLock, 14168a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu &lock); 14178a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu 14188a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu if ( OMX_ErrorNone != eError ) 1419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 14208a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu CAMHAL_LOGEB("Error GetConfig Exposure Lock error = 0x%x", eError); 14218a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu goto EXIT; 1422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 14238a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu else 1424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 14258a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu const char *lock_state_exp = toggleExp ? TRUE : FALSE; 14268a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu CAMHAL_LOGDA("Exposure Lock GetConfig successfull"); 1427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 14288a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu /* Apply locks only when not applied already */ 14298a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu if ( lock.bLock != toggleExp ) 14308a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu { 14318a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu setExposureLock(mParameters3A); 14328a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu } 1433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 14348a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu mParams.set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK, lock_state_exp); 1435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 14379dc08c5fb736308cfca6659f66b14165b265baebTyler Luu OMX_INIT_STRUCT_PTR (&lock, OMX_IMAGE_CONFIG_LOCKTYPE); 14389dc08c5fb736308cfca6659f66b14165b265baebTyler Luu lock.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 14399dc08c5fb736308cfca6659f66b14165b265baebTyler Luu eError = OMX_GetConfig( mCameraAdapterParameters.mHandleComp, 14409dc08c5fb736308cfca6659f66b14165b265baebTyler Luu (OMX_INDEXTYPE)OMX_IndexConfigImageFocusLock, 14419dc08c5fb736308cfca6659f66b14165b265baebTyler Luu &lock); 14429dc08c5fb736308cfca6659f66b14165b265baebTyler Luu 14439dc08c5fb736308cfca6659f66b14165b265baebTyler Luu if ( OMX_ErrorNone != eError ) 14449dc08c5fb736308cfca6659f66b14165b265baebTyler Luu { 14459dc08c5fb736308cfca6659f66b14165b265baebTyler Luu CAMHAL_LOGEB("Error GetConfig Focus Lock error = 0x%x", eError); 14469dc08c5fb736308cfca6659f66b14165b265baebTyler Luu goto EXIT; 14479dc08c5fb736308cfca6659f66b14165b265baebTyler Luu } 14489dc08c5fb736308cfca6659f66b14165b265baebTyler Luu else 14499dc08c5fb736308cfca6659f66b14165b265baebTyler Luu { 14509dc08c5fb736308cfca6659f66b14165b265baebTyler Luu CAMHAL_LOGDB("Focus Lock GetConfig successfull bLock(%d)", lock.bLock); 14519dc08c5fb736308cfca6659f66b14165b265baebTyler Luu 14529dc08c5fb736308cfca6659f66b14165b265baebTyler Luu /* Apply locks only when not applied already */ 14539dc08c5fb736308cfca6659f66b14165b265baebTyler Luu if ( lock.bLock != toggleFocus ) 14549dc08c5fb736308cfca6659f66b14165b265baebTyler Luu { 14559dc08c5fb736308cfca6659f66b14165b265baebTyler Luu setFocusLock(mParameters3A); 14569dc08c5fb736308cfca6659f66b14165b265baebTyler Luu } 14579dc08c5fb736308cfca6659f66b14165b265baebTyler Luu } 14589dc08c5fb736308cfca6659f66b14165b265baebTyler Luu 14599dc08c5fb736308cfca6659f66b14165b265baebTyler Luu OMX_INIT_STRUCT_PTR (&lock, OMX_IMAGE_CONFIG_LOCKTYPE); 14609dc08c5fb736308cfca6659f66b14165b265baebTyler Luu lock.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 14618a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu eError = OMX_GetConfig( mCameraAdapterParameters.mHandleComp, 14628a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu (OMX_INDEXTYPE)OMX_IndexConfigImageWhiteBalanceLock, 14638a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu &lock); 14648a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu 14658a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu if ( OMX_ErrorNone != eError ) 1466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 14678a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu CAMHAL_LOGEB("Error GetConfig WhiteBalance Lock error = 0x%x", eError); 14688a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu goto EXIT; 1469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 14708a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu else 14718a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu { 14728a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu const char *lock_state_wb = toggleWb ? TRUE : FALSE; 14738a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu CAMHAL_LOGDA("WhiteBalance Lock GetConfig successfull"); 1474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 14758a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu /* Apply locks only when not applied already */ 14768a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu if ( lock.bLock != toggleWb ) 14778a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu { 14788a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu setWhiteBalanceLock(mParameters3A); 14798a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu } 1480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 14818a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu mParams.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, lock_state_wb); 14828a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu } 14838a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu EXIT: 14848a2076796e301670c8d14da7c089fb00fd59f2e0Tyler Luu return ErrorUtils::omxToAndroidError(eError); 1485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1487708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchevstatus_t OMXCameraAdapter::setMeteringAreas(Gen3A_settings& Gen3A) 1488708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev{ 1489708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev status_t ret = NO_ERROR; 1490708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 1491708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1492708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev OMX_ALGOAREASTYPE **meteringAreas; 1493708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev OMX_TI_CONFIG_SHAREDBUFFER sharedBuffer; 1494708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev MemoryManager memMgr; 1495708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev int areasSize = 0; 1496708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1497708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev LOG_FUNCTION_NAME 1498708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1499d9c52eb4fa1e27ffd33f22d9987f60a8a714b7bfTyler Luu Mutex::Autolock lock(mMeteringAreasLock); 1500d9c52eb4fa1e27ffd33f22d9987f60a8a714b7bfTyler Luu 1501708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 1502708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1503708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 1504708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev return NO_INIT; 1505708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 1506708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1507708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev areasSize = ((sizeof(OMX_ALGOAREASTYPE)+4095)/4096)*4096; 1508708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas = (OMX_ALGOAREASTYPE**) memMgr.allocateBuffer(0, 0, NULL, areasSize, 1); 1509708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1510708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev OMXCameraPortParameters * mPreviewData = NULL; 1511708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev mPreviewData = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex]; 1512708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1513708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev if (!meteringAreas) 1514708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1515708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev CAMHAL_LOGEB("Error allocating buffer for metering areas %d", eError); 1516708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev return -ENOMEM; 1517708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 1518708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1519708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev OMX_INIT_STRUCT_PTR (meteringAreas[0], OMX_ALGOAREASTYPE); 1520708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1521708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->nPortIndex = OMX_ALL; 1522708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->nNumAreas = mMeteringAreas.size(); 1523708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->nAlgoAreaPurpose = OMX_AlgoAreaExposure; 1524708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1525708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev for ( unsigned int n = 0; n < mMeteringAreas.size(); n++) 1526708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1527708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev // transform the coordinates to 3A-type coordinates 1528708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev mMeteringAreas.itemAt(n)->transfrom((size_t)mPreviewData->mWidth, 1529708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (size_t)mPreviewData->mHeight, 1530708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (size_t&)meteringAreas[0]->tAlgoAreas[n].nTop, 1531708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (size_t&)meteringAreas[0]->tAlgoAreas[n].nLeft, 1532708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (size_t&)meteringAreas[0]->tAlgoAreas[n].nWidth, 1533708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (size_t&)meteringAreas[0]->tAlgoAreas[n].nHeight); 1534708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1535708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->tAlgoAreas[n].nLeft = 1536708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev ( meteringAreas[0]->tAlgoAreas[n].nLeft * METERING_AREAS_RANGE ) / mPreviewData->mWidth; 1537708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->tAlgoAreas[n].nTop = 1538708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev ( meteringAreas[0]->tAlgoAreas[n].nTop* METERING_AREAS_RANGE ) / mPreviewData->mHeight; 1539708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->tAlgoAreas[n].nWidth = 1540708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev ( meteringAreas[0]->tAlgoAreas[n].nWidth * METERING_AREAS_RANGE ) / mPreviewData->mWidth; 1541708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->tAlgoAreas[n].nHeight = 1542708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev ( meteringAreas[0]->tAlgoAreas[n].nHeight * METERING_AREAS_RANGE ) / mPreviewData->mHeight; 1543708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1544708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->tAlgoAreas[n].nPriority = mMeteringAreas.itemAt(n)->getWeight(); 1545708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1546708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev CAMHAL_LOGDB("Metering area %d : top = %d left = %d width = %d height = %d prio = %d", 1547708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev n, (int)meteringAreas[0]->tAlgoAreas[n].nTop, (int)meteringAreas[0]->tAlgoAreas[n].nLeft, 1548708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (int)meteringAreas[0]->tAlgoAreas[n].nWidth, (int)meteringAreas[0]->tAlgoAreas[n].nHeight, 1549708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (int)meteringAreas[0]->tAlgoAreas[n].nPriority); 1550708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1551708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 1552708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1553708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev OMX_INIT_STRUCT_PTR (&sharedBuffer, OMX_TI_CONFIG_SHAREDBUFFER); 1554708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1555708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev sharedBuffer.nPortIndex = OMX_ALL; 1556708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev sharedBuffer.nSharedBuffSize = areasSize; 1557708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev sharedBuffer.pSharedBuff = (OMX_U8 *) meteringAreas[0]; 1558708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1559708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev if ( NULL == sharedBuffer.pSharedBuff ) 1560708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1561708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev CAMHAL_LOGEA("No resources to allocate OMX shared buffer"); 1562708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev ret = -ENOMEM; 1563708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev goto EXIT; 1564708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 1565708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1566708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 1567708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (OMX_INDEXTYPE) OMX_TI_IndexConfigAlgoAreas, &sharedBuffer); 1568708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1569708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev if ( OMX_ErrorNone != eError ) 1570708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1571708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev CAMHAL_LOGEB("Error while setting Focus Areas configuration 0x%x", eError); 1572708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev ret = -EINVAL; 1573708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 1574708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev else 1575708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1576708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev CAMHAL_LOGDA("Metering Areas SetConfig successfull."); 1577708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 1578708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1579708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev EXIT: 1580708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev if (NULL != meteringAreas) 1581708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1582708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev memMgr.freeBuffer((void*) meteringAreas); 1583708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas = NULL; 1584708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 1585708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1586708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev return ret; 1587708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev} 1588708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::apply3Asettings( Gen3A_settings& Gen3A ) 1590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned int currSett; // 32 bit 1593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int portIndex; 1594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 15952facbeb345500d62f74eac01ebb49a069fe034c1Raji Reddy Kandi LOG_FUNCTION_NAME; 15962facbeb345500d62f74eac01ebb49a069fe034c1Raji Reddy Kandi 15972facbeb345500d62f74eac01ebb49a069fe034c1Raji Reddy Kandi Mutex::Autolock lock(m3ASettingsUpdateLock); 15982facbeb345500d62f74eac01ebb49a069fe034c1Raji Reddy Kandi 1599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* 1600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Scenes have a priority during the process 1601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * of applying 3A related parameters. 1602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * They can override pretty much all other 3A 1603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * settings and similarly get overridden when 1604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * for instance the focus mode gets switched. 1605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * There is only one exception to this rule, 1606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * the manual a.k.a. auto scene. 1607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1608517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu if (SetSceneMode & mPending3Asettings) { 1609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings &= ~SetSceneMode; 1610517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu ret |= setScene(Gen3A); 1611517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu // re-apply EV compensation after setting scene mode since it probably reset it 1612517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu if(Gen3A.EVCompensation) { 1613517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu setEVCompensation(Gen3A); 1614517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu } 1615517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu return ret; 1616517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu } else if (OMX_Manual != Gen3A.SceneMode) { 1617517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu // only certain settings are allowed when scene mode is set 16182950afb136766da122c33491f17e781794b92aafTyler Luu mPending3Asettings &= (SetEVCompensation | SetFocus | SetWBLock | 16192950afb136766da122c33491f17e781794b92aafTyler Luu SetExpLock | SetWhiteBallance | SetFlash); 162040c372a287b4f797b90da3e2a460d3818da4e5d8Milen Mitkov if ( mPending3Asettings == 0 ) return NO_ERROR; 1621517107e1d948fe9268ed51b3baff64891d9b0c20Tyler Luu } 1622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for( currSett = 1; currSett < E3aSettingMax; currSett <<= 1) 1624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( currSett & mPending3Asettings ) 1626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch( currSett ) 1628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetEVCompensation: 1630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setEVCompensation(Gen3A); 1632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetWhiteBallance: 1636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setWBMode(Gen3A); 1638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetFlicker: 1642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setFlicker(Gen3A); 1644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetBrightness: 1648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setBrightness(Gen3A); 1650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetContrast: 1654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setContrast(Gen3A); 1656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetSharpness: 1660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setSharpness(Gen3A); 1662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetSaturation: 1666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setSaturation(Gen3A); 1668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetISO: 1672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setISO(Gen3A); 1674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetEffect: 1678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setEffect(Gen3A); 1680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetFocus: 1684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setFocusMode(Gen3A); 1686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetExpMode: 1690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setExposureMode(Gen3A); 1692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetFlash: 1696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setFlashMode(Gen3A); 1698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetExpLock: 1702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setExposureLock(Gen3A); 1704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetWBLock: 1708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setWhiteBalanceLock(Gen3A); 1710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1712708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev case SetMeteringAreas: 1713708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1714708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev ret |= setMeteringAreas(Gen3A); 1715708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 17165e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng break; 1717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 1718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("this setting (0x%x) is still not supported in CameraAdapter ", 1719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev currSett); 1720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings &= ~currSett; 1723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 17252facbeb345500d62f74eac01ebb49a069fe034c1Raji Reddy Kandi 17262facbeb345500d62f74eac01ebb49a069fe034c1Raji Reddy Kandi LOG_FUNCTION_NAME_EXIT; 17272facbeb345500d62f74eac01ebb49a069fe034c1Raji Reddy Kandi 1728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 1732