OMX3A.cpp revision 708ed7306c85286aa50d05ba15e0c33106e52ed0
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 328cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 338cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman#define TRUE "true" 348cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman#define FALSE "false" 358cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 36708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev#define METERING_AREAS_RANGE 0xFF 37708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 38c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevnamespace android { 39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setParameters3A(const CameraParameters ¶ms, 41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev BaseCameraAdapter::AdapterState state) 42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mode = 0; 45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev const char *str = NULL; 46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(TICameraParameters::KEY_EXPOSURE_MODE); 50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mode = getLUTvalue_HALtoOMX( str, ExpLUT); 518cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman if ( ( str != NULL ) && ( mParameters3A.Exposure != mode )) 52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.Exposure = mode; 54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Exposure mode %d", mode); 55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= mParameters3A.Exposure ) 56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetExpMode; 58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_WHITE_BALANCE); 62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mode = getLUTvalue_HALtoOMX( str, WBalLUT); 638cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman if (mFirstTimeInit || ((str != NULL) && (mode != mParameters3A.WhiteBallance))) 64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.WhiteBallance = mode; 66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Whitebalance mode %d", mode); 67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= mParameters3A.WhiteBallance ) 68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetWhiteBallance; 70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= params.getInt(TICameraParameters::KEY_CONTRAST) ) 74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || 76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( (mParameters3A.Contrast + CONTRAST_OFFSET) != 77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.getInt(TICameraParameters::KEY_CONTRAST)) ) 78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.Contrast = params.getInt(TICameraParameters::KEY_CONTRAST) - CONTRAST_OFFSET; 80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Contrast %d", mParameters3A.Contrast); 81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetContrast; 82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= params.getInt(TICameraParameters::KEY_SHARPNESS) ) 86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || 88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ((mParameters3A.Sharpness + SHARPNESS_OFFSET) != 89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.getInt(TICameraParameters::KEY_SHARPNESS))) 90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.Sharpness = params.getInt(TICameraParameters::KEY_SHARPNESS) - SHARPNESS_OFFSET; 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Sharpness %d", mParameters3A.Sharpness); 93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetSharpness; 94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= params.getInt(TICameraParameters::KEY_SATURATION) ) 98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || 100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ((mParameters3A.Saturation + SATURATION_OFFSET) != 101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.getInt(TICameraParameters::KEY_SATURATION)) ) 102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.Saturation = params.getInt(TICameraParameters::KEY_SATURATION) - SATURATION_OFFSET; 104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Saturation %d", mParameters3A.Saturation); 105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetSaturation; 106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= params.getInt(TICameraParameters::KEY_BRIGHTNESS) ) 110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || 112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (( mParameters3A.Brightness != 113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) params.getInt(TICameraParameters::KEY_BRIGHTNESS))) ) 114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.Brightness = (unsigned)params.getInt(TICameraParameters::KEY_BRIGHTNESS); 116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Brightness %d", mParameters3A.Brightness); 117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetBrightness; 118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_ANTIBANDING); 122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mode = getLUTvalue_HALtoOMX(str,FlickerLUT); 123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || ( ( str != NULL ) && ( mParameters3A.Flicker != mode ) )) 124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.Flicker = mode; 126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Flicker %d", mParameters3A.Flicker); 127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= mParameters3A.Flicker ) 128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetFlicker; 130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(TICameraParameters::KEY_ISO); 134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mode = getLUTvalue_HALtoOMX(str, IsoLUT); 135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVB("ISO mode arrived in HAL : %s", str); 136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || ( ( str != NULL ) && ( mParameters3A.ISO != mode )) ) 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.ISO = mode; 139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("ISO %d", mParameters3A.ISO); 140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= mParameters3A.ISO ) 141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetISO; 143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_FOCUS_MODE); 147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mode = getLUTvalue_HALtoOMX(str, FocusLUT); 1488cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman if ( (mFirstTimeInit || ((str != NULL) && (mParameters3A.Focus != mode)))) 149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Apply focus mode immediatly only if CAF or Inifinity are selected 151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ( mode == OMX_IMAGE_FocusControlAuto ) || 152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( mode == OMX_IMAGE_FocusControlAutoInfinity ) ) 153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetFocus; 155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.Focus = mode; 158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Focus %x", mParameters3A.Focus); 159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_EXPOSURE_COMPENSATION); 162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || 163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (( str != NULL ) && 164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (mParameters3A.EVCompensation != 165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.getInt(CameraParameters::KEY_EXPOSURE_COMPENSATION)))) 166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Setting EV Compensation to %d", 168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.getInt(CameraParameters::KEY_EXPOSURE_COMPENSATION)); 169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.EVCompensation = params.getInt(CameraParameters::KEY_EXPOSURE_COMPENSATION); 171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetEVCompensation; 172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_SCENE_MODE); 175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mode = getLUTvalue_HALtoOMX( str, SceneLUT); 176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || (( str != NULL ) && ( mParameters3A.SceneMode != mode )) ) 177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= mode ) 179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.SceneMode = mode; 181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetSceneMode; 182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.SceneMode = OMX_Manual; 186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("SceneMode %d", mParameters3A.SceneMode); 189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_FLASH_MODE); 192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mode = getLUTvalue_HALtoOMX( str, FlashLUT); 193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || (( str != NULL ) && ( mParameters3A.FlashMode != mode )) ) 194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= mode ) 196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.FlashMode = mode; 198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetFlash; 199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.FlashMode = OMX_Manual; 203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVB("Flash Setting %s", str); 207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVB("FlashMode %d", mParameters3A.FlashMode); 208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_EFFECT); 210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mode = getLUTvalue_HALtoOMX( str, EffLUT); 211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFirstTimeInit || (( str != NULL ) && ( mParameters3A.Effect != mode )) ) 212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.Effect = mode; 214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Effect %d", mParameters3A.Effect); 215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 <= mParameters3A.Effect ) 216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetEffect; 218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_AUTO_EXPOSURE_LOCK_SUPPORTED); 222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( (str != NULL) && (!strcmp(str, "true")) ) 223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_BOOL lock = OMX_FALSE; 225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_AUTO_EXPOSURE_LOCK); 226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( (strcmp(str, "true")) == 0) 227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVA("Locking Exposure"); 229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lock = OMX_TRUE; 230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVA("UnLocking Exposure"); 234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (mParameters3A.ExposureLock != lock) 236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.ExposureLock = lock; 238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("ExposureLock %d", lock); 239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetExpLock; 240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED); 244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( (str != NULL) && (!strcmp(str, "true")) ) 245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_BOOL lock = OMX_FALSE; 247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev str = params.get(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK); 248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( (strcmp(str, "true")) == 0) 249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVA("Locking WhiteBalance"); 251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lock = OMX_TRUE; 252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVA("UnLocking WhiteBalance"); 256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (mParameters3A.WhiteBalanceLock != lock) 258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mParameters3A.WhiteBalanceLock = lock; 260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("WhiteBalanceLock %d", lock); 261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings |= SetWBLock; 262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 265708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev str = params.get(CameraParameters::KEY_METERING_AREAS); 266708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev if ( (str != NULL) ) 267708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 268708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev size_t MAX_METERING_AREAS; 269708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev MAX_METERING_AREAS = atoi(params.get(CameraParameters::KEY_MAX_NUM_METERING_AREAS)); 270708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 271708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev mMeteringAreas.clear(); 272708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 273708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev CameraArea::parseFocusArea(str, strlen(str), mMeteringAreas); 274708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 275708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev if ( MAX_METERING_AREAS > mMeteringAreas.size() ) 276708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 277708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev CAMHAL_LOGDB("Setting Metering Areas %s", 278708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev params.get(CameraParameters::KEY_METERING_AREAS)); 279708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 280708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev mPending3Asettings |= SetMeteringAreas; 281708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 282708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev else 283708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 284708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev CAMHAL_LOGEB("Metering areas supported %d, metering areas set %d", 285708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev MAX_METERING_AREAS, mMeteringAreas.size()); 286708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 287708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 288708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint OMXCameraAdapter::getLUTvalue_HALtoOMX(const char * HalValue, LUTtype LUT) 295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int LUTsize = LUT.size; 297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( HalValue ) 298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for(int i = 0; i < LUTsize; i++) 299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( 0 == strcmp(LUT.Table[i].userDefinition, HalValue) ) 300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return LUT.Table[i].omxDefinition; 301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -ENOENT; 303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char* OMXCameraAdapter::getLUTvalue_OMXtoHAL(int OMXValue, LUTtype LUT) 306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int LUTsize = LUT.size; 308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for(int i = 0; i < LUTsize; i++) 309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( LUT.Table[i].omxDefinition == OMXValue ) 310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return LUT.Table[i].userDefinition; 311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NULL; 313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 315024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luustatus_t OMXCameraAdapter::apply3ADefaults(Gen3A_settings &Gen3A) 316024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu{ 317024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu status_t ret = NO_ERROR; 318024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 319024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu LOG_FUNCTION_NAME; 320024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 321024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.Effect = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_EFFECT, EffLUT); 322024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu ret |= setEffect(Gen3A); 323024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 324024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.FlashMode = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_FLASH_MODE, FlashLUT); 325024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu ret |= setFlashMode(Gen3A); 326024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 327024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.SceneMode = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_SCENE_MODE, SceneLUT); 328024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu ret |= setScene(Gen3A); 329024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 330024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.EVCompensation = atoi(OMXCameraAdapter::DEFAULT_EV_COMPENSATION); 331024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu ret |= setEVCompensation(Gen3A); 332024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 333024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.Focus = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_FOCUS_MODE, FocusLUT); 334024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu ret |= setFocusMode(Gen3A); 335024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 336024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.ISO = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_ISO_MODE, IsoLUT); 337024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu ret |= setISO(Gen3A); 338024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 339024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.Flicker = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_ANTIBANDING, FlickerLUT); 340024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu ret |= setFlicker(Gen3A); 341024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 342024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.Brightness = atoi(OMXCameraAdapter::DEFAULT_BRIGHTNESS); 343024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu ret |= setBrightness(Gen3A); 344024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 345024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.Saturation = atoi(OMXCameraAdapter::DEFAULT_SATURATION); 346024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu ret |= setSaturation(Gen3A); 347024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 348024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.Sharpness = atoi(OMXCameraAdapter::DEFAULT_SHARPNESS); 349024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu ret |= setSharpness(Gen3A); 350024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 351024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.Contrast = atoi(OMXCameraAdapter::DEFAULT_CONTRAST); 352024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu ret |= setContrast(Gen3A); 353024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 354024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.WhiteBallance = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_WB, WBalLUT); 355024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu ret |= setWBMode(Gen3A); 356024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 357024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.Exposure = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_EXPOSURE_MODE, ExpLUT); 358024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu ret |= setExposureMode(Gen3A); 359024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 360024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.ExposureLock = OMX_FALSE; 361024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu ret |= setExposureLock(Gen3A); 362024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 363024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu Gen3A.WhiteBalanceLock = OMX_FALSE; 364024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu ret |= setWhiteBalanceLock(Gen3A); 365024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 366024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu LOG_FUNCTION_NAME_EXIT; 367024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 368024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu return NO_ERROR; 369024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu} 370024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu 371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setExposureMode(Gen3A_settings& Gen3A) 372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_EXPOSURECONTROLTYPE exp; 375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 38400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman OMX_INIT_STRUCT_PTR (&exp, OMX_CONFIG_EXPOSURECONTROLTYPE); 38500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman exp.nPortIndex = OMX_ALL; 38600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman exp.eExposureControl = (OMX_EXPOSURECONTROLTYPE)Gen3A.Exposure; 38700479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman 3888cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman///FIXME: Face priority exposure metering is not stable because of varying face sizes 3898cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman///coming from the FD module. So disabling it for now. 3908cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman#if 0 3918cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman if ( mFaceDetectionRunning ) 392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Disable Region priority and enable Face priority 394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAlgoPriority(REGION_PRIORITY, EXPOSURE_ALGO, false); 395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAlgoPriority(FACE_PRIORITY, EXPOSURE_ALGO, true); 396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 3988cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman#endif 399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 4008cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //Disable Region priority and Face priority 401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAlgoPriority(REGION_PRIORITY, EXPOSURE_ALGO, false); 4028cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman setAlgoPriority(FACE_PRIORITY, EXPOSURE_ALGO, false); 403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonExposure, 407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &exp); 408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring exposure mode 0x%x", eError); 411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Camera exposure mode configured successfully"); 415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setFlashMode(Gen3A_settings& Gen3A) 423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IMAGE_PARAM_FLASHCONTROLTYPE flash; 427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&flash, OMX_IMAGE_PARAM_FLASHCONTROLTYPE); 437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev flash.nPortIndex = OMX_ALL; 438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev flash.eFlashControl = ( OMX_IMAGE_FLASHCONTROLTYPE ) Gen3A.FlashMode; 439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Configuring flash mode 0x%x", flash.eFlashControl); 441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE) OMX_IndexConfigFlashControl, 443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &flash); 444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring flash mode 0x%x", eError); 447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Camera flash mode configured successfully"); 451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setFocusMode(Gen3A_settings& Gen3A) 459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE focus; 4638cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman size_t top, left, width, height, weight; 4648cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman sp<CameraArea> focusArea = NULL; 465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 468183fa757c75d9270b1ee2f25da195499ae6d6946Akwasi Boateng BaseCameraAdapter::AdapterState state; 469183fa757c75d9270b1ee2f25da195499ae6d6946Akwasi Boateng BaseCameraAdapter::getState(state); 470183fa757c75d9270b1ee2f25da195499ae6d6946Akwasi Boateng 471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 4778cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman { 478d55379a7e975f992db1d10bba425f456447d14a8Tyler Luu Mutex::Autolock lock(mFocusAreasLock); 4798cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 480d55379a7e975f992db1d10bba425f456447d14a8Tyler Luu if ( !mFocusAreas.isEmpty() ) 481d55379a7e975f992db1d10bba425f456447d14a8Tyler Luu { 482d55379a7e975f992db1d10bba425f456447d14a8Tyler Luu focusArea = mFocusAreas.itemAt(0); 483d55379a7e975f992db1d10bba425f456447d14a8Tyler Luu } 484d55379a7e975f992db1d10bba425f456447d14a8Tyler Luu } 4858cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 4868cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman ///Face detection takes precedence over touch AF 4878cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman if ( mFaceDetectionRunning ) 4888cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman { 4898cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //Disable region priority first 4908cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman setAlgoPriority(REGION_PRIORITY, FOCUS_ALGO, false); 4918cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 4928cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //Enable face algorithm priority for focus 4938cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman setAlgoPriority(FACE_PRIORITY, FOCUS_ALGO , true); 4948cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 4958cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //Do normal focus afterwards 4968cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman ////FIXME: Check if the extended focus control is needed? this overrides caf 4978cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //focusControl.eFocusControl = ( OMX_IMAGE_FOCUSCONTROLTYPE ) OMX_IMAGE_FocusControlExtended; 4988cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman } 4998cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman else if ( ( NULL != focusArea.get() ) && ( focusArea->isValid() ) ) 5008cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman { 5018cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 5028cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //Disable face priority first 5038cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman setAlgoPriority(FACE_PRIORITY, FOCUS_ALGO, false); 5048cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 5058cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //Enable region algorithm priority 5068cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman setAlgoPriority(REGION_PRIORITY, FOCUS_ALGO, true); 5078cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 508708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev setTouchFocus(); 5098cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 5108cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //Do normal focus afterwards 5118cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //FIXME: Check if the extended focus control is needed? this overrides caf 5128cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //focus.eFocusControl = ( OMX_IMAGE_FOCUSCONTROLTYPE ) OMX_IMAGE_FocusControlExtended; 5138cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 5148cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman } 5158cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman else 5168cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman { 5178cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 5188cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman //Disable both region and face priority 5198cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman setAlgoPriority(REGION_PRIORITY, FOCUS_ALGO, false); 5208cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 5218cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman setAlgoPriority(FACE_PRIORITY, FOCUS_ALGO, false); 5228cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman 5238cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman } 524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 525183fa757c75d9270b1ee2f25da195499ae6d6946Akwasi Boateng if ( NO_ERROR == ret && ((state & AF_ACTIVE) == 0) ) 526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&focus, OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE); 528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev focus.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev focus.eFocusControl = (OMX_IMAGE_FOCUSCONTROLTYPE)Gen3A.Focus; 530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Configuring focus mode 0x%x", focus.eFocusControl); 532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, OMX_IndexConfigFocusControl, &focus); 533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring focus mode 0x%x", eError); 536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Camera focus mode configured successfully"); 540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setScene(Gen3A_settings& Gen3A) 549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_SCENEMODETYPE scene; 552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&scene, OMX_CONFIG_SCENEMODETYPE); 562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev scene.nPortIndex = OMX_ALL; 563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev scene.eSceneMode = ( OMX_SCENEMODETYPE ) Gen3A.SceneMode; 564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Configuring scene mode 0x%x", scene.eSceneMode); 566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( OMX_INDEXTYPE ) OMX_TI_IndexConfigSceneMode, 568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &scene); 569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring scene mode 0x%x", eError); 572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Camera scene configured successfully"); 576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setEVCompensation(Gen3A_settings& Gen3A) 584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_EXPOSUREVALUETYPE expValues; 587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&expValues, OMX_CONFIG_EXPOSUREVALUETYPE); 597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev expValues.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_GetConfig( mCameraAdapterParameters.mHandleComp, 600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonExposureValue, 601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &expValues); 602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("old EV Compensation for OMX = 0x%x", (int)expValues.xEVCompensation); 603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("EV Compensation for HAL = %d", Gen3A.EVCompensation); 604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev expValues.xEVCompensation = ( Gen3A.EVCompensation * ( 1 << Q16_OFFSET ) ) / 10; 606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonExposureValue, 608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &expValues); 609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("new EV Compensation for OMX = 0x%x", (int)expValues.xEVCompensation); 610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring EV Compensation 0x%x error = 0x%x", 613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) expValues.xEVCompensation, 614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("EV Compensation 0x%x configured successfully", 619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) expValues.xEVCompensation); 620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setWBMode(Gen3A_settings& Gen3A) 628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_WHITEBALCONTROLTYPE wb; 631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&wb, OMX_CONFIG_WHITEBALCONTROLTYPE); 641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev wb.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev wb.eWhiteBalControl = ( OMX_WHITEBALCONTROLTYPE ) Gen3A.WhiteBallance; 643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( WB_FACE_PRIORITY == Gen3A.WhiteBallance ) 645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Disable Region priority and enable Face priority 647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAlgoPriority(REGION_PRIORITY, WHITE_BALANCE_ALGO, false); 648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAlgoPriority(FACE_PRIORITY, WHITE_BALANCE_ALGO, true); 649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Then set the mode to auto 65100479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman wb.eWhiteBalControl = OMX_WhiteBalControlAuto; 652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Disable Face and Region priority 656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAlgoPriority(FACE_PRIORITY, WHITE_BALANCE_ALGO, false); 657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAlgoPriority(REGION_PRIORITY, WHITE_BALANCE_ALGO, false); 658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonWhiteBalance, 662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &wb); 663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Whitebalance mode 0x%x error = 0x%x", 666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) wb.eWhiteBalControl, 667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Whitebalance mode 0x%x configured successfully", 672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) wb.eWhiteBalControl); 673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setFlicker(Gen3A_settings& Gen3A) 681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_FLICKERCANCELTYPE flicker; 684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&flicker, OMX_CONFIG_FLICKERCANCELTYPE); 694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev flicker.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev flicker.eFlickerCancel = (OMX_COMMONFLICKERCANCELTYPE)Gen3A.Flicker; 696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE)OMX_IndexConfigFlickerCancel, 699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &flicker ); 700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Flicker mode 0x%x error = 0x%x", 703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) flicker.eFlickerCancel, 704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Flicker mode 0x%x configured successfully", 709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) flicker.eFlickerCancel); 710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setBrightness(Gen3A_settings& Gen3A) 718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_BRIGHTNESSTYPE brightness; 721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&brightness, OMX_CONFIG_BRIGHTNESSTYPE); 731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev brightness.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev brightness.nBrightness = Gen3A.Brightness; 733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonBrightness, 736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &brightness); 737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Brightness 0x%x error = 0x%x", 740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) brightness.nBrightness, 741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Brightness 0x%x configured successfully", 746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) brightness.nBrightness); 747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setContrast(Gen3A_settings& Gen3A) 755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_CONTRASTTYPE contrast; 758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&contrast, OMX_CONFIG_CONTRASTTYPE); 768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev contrast.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev contrast.nContrast = Gen3A.Contrast; 770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonContrast, 773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &contrast); 774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Contrast 0x%x error = 0x%x", 777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) contrast.nContrast, 778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Contrast 0x%x configured successfully", 783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) contrast.nContrast); 784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setSharpness(Gen3A_settings& Gen3A) 792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IMAGE_CONFIG_PROCESSINGLEVELTYPE procSharpness; 795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&procSharpness, OMX_IMAGE_CONFIG_PROCESSINGLEVELTYPE); 805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev procSharpness.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev procSharpness.nLevel = Gen3A.Sharpness; 807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( procSharpness.nLevel == 0 ) 809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev procSharpness.bAuto = OMX_TRUE; 811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev procSharpness.bAuto = OMX_FALSE; 815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE)OMX_IndexConfigSharpeningLevel, 819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &procSharpness); 820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Sharpness 0x%x error = 0x%x", 823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) procSharpness.nLevel, 824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Sharpness 0x%x configured successfully", 829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) procSharpness.nLevel); 830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setSaturation(Gen3A_settings& Gen3A) 838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_SATURATIONTYPE saturation; 841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&saturation, OMX_CONFIG_SATURATIONTYPE); 851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev saturation.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev saturation.nSaturation = Gen3A.Saturation; 853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonSaturation, 856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &saturation); 857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Saturation 0x%x error = 0x%x", 860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) saturation.nSaturation, 861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Saturation 0x%x configured successfully", 866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) saturation.nSaturation); 867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setISO(Gen3A_settings& Gen3A) 875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_EXPOSUREVALUETYPE expValues; 878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&expValues, OMX_CONFIG_EXPOSUREVALUETYPE); 888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev expValues.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_GetConfig( mCameraAdapterParameters.mHandleComp, 891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonExposureValue, 892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &expValues); 893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( 0 == Gen3A.ISO ) 895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev expValues.bAutoSensitivity = OMX_TRUE; 897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev expValues.bAutoSensitivity = OMX_FALSE; 901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev expValues.nSensitivity = Gen3A.ISO; 902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonExposureValue, 906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &expValues); 907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring ISO 0x%x error = 0x%x", 910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) expValues.nSensitivity, 911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("ISO 0x%x configured successfully", 916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) expValues.nSensitivity); 917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setEffect(Gen3A_settings& Gen3A) 925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_IMAGEFILTERTYPE effect; 928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&effect, OMX_CONFIG_IMAGEFILTERTYPE); 938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev effect.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev effect.eImageFilter = (OMX_IMAGEFILTERTYPE ) Gen3A.Effect; 940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonImageFilter, 943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &effect); 944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Effect 0x%x error = 0x%x", 947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) effect.eImageFilter, 948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Effect 0x%x configured successfully", 953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) effect.eImageFilter); 954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 956c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setWhiteBalanceLock(Gen3A_settings& Gen3A) 962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 964c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IMAGE_CONFIG_LOCKTYPE lock; 965c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 966c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME 967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 968c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 972c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 974c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&lock, OMX_IMAGE_CONFIG_LOCKTYPE); 975c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lock.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 976c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lock.bLock = Gen3A.WhiteBalanceLock; 977c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 978c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE)OMX_IndexConfigImageWhiteBalanceLock, 979c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &lock); 980c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 981c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring WhiteBalance Lock error = 0x%x", eError); 983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 984c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 985c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 986c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("WhiteBalance Lock configured successfully %d ", lock.bLock); 987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT 989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setExposureLock(Gen3A_settings& Gen3A) 994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IMAGE_CONFIG_LOCKTYPE lock; 997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 998c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME 999c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 1001c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1002c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 1003c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 1004c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1005c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1006c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&lock, OMX_IMAGE_CONFIG_LOCKTYPE); 1007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lock.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 1008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lock.bLock = Gen3A.ExposureLock; 1009c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, 1010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE)OMX_IndexConfigImageExposureLock, 1011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &lock); 1012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 1013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring Exposure Lock error = 0x%x", eError); 1015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 1017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Exposure Lock configured successfully %d ", lock.bLock); 1019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT 1021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ErrorUtils::omxToAndroidError(eError); 1023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 102580c50ac56bfa97be0cf04332ec1d314637c8770fSundar Ramanstatus_t OMXCameraAdapter::set3ALock(OMX_BOOL toggle) 1026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 1028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IMAGE_CONFIG_LOCKTYPE lock; 10298cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman char* index = FALSE; 1030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME 1032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 1034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 1036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 1037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&lock, OMX_IMAGE_CONFIG_LOCKTYPE); 1040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lock.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 1041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 104280c50ac56bfa97be0cf04332ec1d314637c8770fSundar Raman mParameters3A.ExposureLock = toggle; 104380c50ac56bfa97be0cf04332ec1d314637c8770fSundar Raman mParameters3A.WhiteBalanceLock = toggle; 1044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_GetConfig( mCameraAdapterParameters.mHandleComp, 1046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE)OMX_IndexConfigImageExposureLock, 1047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &lock); 1048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 1049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error GetConfig Exposure Lock error = 0x%x", eError); 1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 1053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Exposure Lock GetConfig successfull"); 1055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 105780c50ac56bfa97be0cf04332ec1d314637c8770fSundar Raman /* Apply locks only when not applied already */ 105880c50ac56bfa97be0cf04332ec1d314637c8770fSundar Raman if ( lock.bLock != toggle ) 1059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setExposureLock(mParameters3A); 1061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_GetConfig( mCameraAdapterParameters.mHandleComp, 1064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE)OMX_IndexConfigImageWhiteBalanceLock, 1065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &lock); 1066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 1067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error GetConfig WhiteBalance Lock error = 0x%x", eError); 1069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 1071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("WhiteBalance Lock GetConfig successfull"); 1073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 107580c50ac56bfa97be0cf04332ec1d314637c8770fSundar Raman /* Apply locks only when not applied already */ 107680c50ac56bfa97be0cf04332ec1d314637c8770fSundar Raman if ( lock.bLock != toggle ) 1077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setWhiteBalanceLock(mParameters3A); 1079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 10818cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman const char *lock_state = toggle ? TRUE : FALSE; 10828cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman mParams.set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK, lock_state); 10838cb48e582f4f3c93aa25159c1116a7c83bfa388aSundar Raman mParams.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, lock_state); 108480c50ac56bfa97be0cf04332ec1d314637c8770fSundar Raman 108580c50ac56bfa97be0cf04332ec1d314637c8770fSundar Raman return ErrorUtils::omxToAndroidError(eError); 1086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1089708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchevstatus_t OMXCameraAdapter::setMeteringAreas(Gen3A_settings& Gen3A) 1090708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev{ 1091708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev status_t ret = NO_ERROR; 1092708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 1093708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1094708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev OMX_ALGOAREASTYPE **meteringAreas; 1095708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev OMX_TI_CONFIG_SHAREDBUFFER sharedBuffer; 1096708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev MemoryManager memMgr; 1097708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev int areasSize = 0; 1098708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1099708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev LOG_FUNCTION_NAME 1100708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1101708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 1102708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1103708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 1104708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev return NO_INIT; 1105708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 1106708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1107708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev areasSize = ((sizeof(OMX_ALGOAREASTYPE)+4095)/4096)*4096; 1108708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas = (OMX_ALGOAREASTYPE**) memMgr.allocateBuffer(0, 0, NULL, areasSize, 1); 1109708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1110708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev OMXCameraPortParameters * mPreviewData = NULL; 1111708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev mPreviewData = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex]; 1112708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1113708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev if (!meteringAreas) 1114708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1115708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev CAMHAL_LOGEB("Error allocating buffer for metering areas %d", eError); 1116708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev return -ENOMEM; 1117708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 1118708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1119708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev OMX_INIT_STRUCT_PTR (meteringAreas[0], OMX_ALGOAREASTYPE); 1120708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1121708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->nPortIndex = OMX_ALL; 1122708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->nNumAreas = mMeteringAreas.size(); 1123708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->nAlgoAreaPurpose = OMX_AlgoAreaExposure; 1124708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1125708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev for ( unsigned int n = 0; n < mMeteringAreas.size(); n++) 1126708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1127708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev // transform the coordinates to 3A-type coordinates 1128708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev mMeteringAreas.itemAt(n)->transfrom((size_t)mPreviewData->mWidth, 1129708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (size_t)mPreviewData->mHeight, 1130708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (size_t&)meteringAreas[0]->tAlgoAreas[n].nTop, 1131708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (size_t&)meteringAreas[0]->tAlgoAreas[n].nLeft, 1132708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (size_t&)meteringAreas[0]->tAlgoAreas[n].nWidth, 1133708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (size_t&)meteringAreas[0]->tAlgoAreas[n].nHeight); 1134708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1135708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->tAlgoAreas[n].nLeft = 1136708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev ( meteringAreas[0]->tAlgoAreas[n].nLeft * METERING_AREAS_RANGE ) / mPreviewData->mWidth; 1137708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->tAlgoAreas[n].nTop = 1138708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev ( meteringAreas[0]->tAlgoAreas[n].nTop* METERING_AREAS_RANGE ) / mPreviewData->mHeight; 1139708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->tAlgoAreas[n].nWidth = 1140708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev ( meteringAreas[0]->tAlgoAreas[n].nWidth * METERING_AREAS_RANGE ) / mPreviewData->mWidth; 1141708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->tAlgoAreas[n].nHeight = 1142708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev ( meteringAreas[0]->tAlgoAreas[n].nHeight * METERING_AREAS_RANGE ) / mPreviewData->mHeight; 1143708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1144708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas[0]->tAlgoAreas[n].nPriority = mMeteringAreas.itemAt(n)->getWeight(); 1145708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1146708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev CAMHAL_LOGDB("Metering area %d : top = %d left = %d width = %d height = %d prio = %d", 1147708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev n, (int)meteringAreas[0]->tAlgoAreas[n].nTop, (int)meteringAreas[0]->tAlgoAreas[n].nLeft, 1148708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (int)meteringAreas[0]->tAlgoAreas[n].nWidth, (int)meteringAreas[0]->tAlgoAreas[n].nHeight, 1149708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (int)meteringAreas[0]->tAlgoAreas[n].nPriority); 1150708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1151708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 1152708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1153708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev OMX_INIT_STRUCT_PTR (&sharedBuffer, OMX_TI_CONFIG_SHAREDBUFFER); 1154708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1155708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev sharedBuffer.nPortIndex = OMX_ALL; 1156708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev sharedBuffer.nSharedBuffSize = areasSize; 1157708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev sharedBuffer.pSharedBuff = (OMX_U8 *) meteringAreas[0]; 1158708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1159708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev if ( NULL == sharedBuffer.pSharedBuff ) 1160708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1161708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev CAMHAL_LOGEA("No resources to allocate OMX shared buffer"); 1162708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev ret = -ENOMEM; 1163708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev goto EXIT; 1164708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 1165708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1166708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 1167708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev (OMX_INDEXTYPE) OMX_TI_IndexConfigAlgoAreas, &sharedBuffer); 1168708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1169708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev if ( OMX_ErrorNone != eError ) 1170708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1171708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev CAMHAL_LOGEB("Error while setting Focus Areas configuration 0x%x", eError); 1172708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev ret = -EINVAL; 1173708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 1174708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev else 1175708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1176708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev CAMHAL_LOGDA("Metering Areas SetConfig successfull."); 1177708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 1178708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1179708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev EXIT: 1180708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev if (NULL != meteringAreas) 1181708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1182708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev memMgr.freeBuffer((void*) meteringAreas); 1183708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev meteringAreas = NULL; 1184708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 1185708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1186708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev return ret; 1187708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev} 1188708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 1189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::apply3Asettings( Gen3A_settings& Gen3A ) 1190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned int currSett; // 32 bit 1193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int portIndex; 1194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* 1196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Scenes have a priority during the process 1197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * of applying 3A related parameters. 1198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * They can override pretty much all other 3A 1199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * settings and similarly get overridden when 1200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * for instance the focus mode gets switched. 1201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * There is only one exception to this rule, 1202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * the manual a.k.a. auto scene. 1203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ( SetSceneMode & mPending3Asettings ) ) 1205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings &= ~SetSceneMode; 1207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return setScene(Gen3A); 1208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( OMX_Manual != Gen3A.SceneMode ) 1210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings = 0; 1212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_ERROR; 1213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for( currSett = 1; currSett < E3aSettingMax; currSett <<= 1) 1216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( currSett & mPending3Asettings ) 1218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch( currSett ) 1220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetEVCompensation: 1222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setEVCompensation(Gen3A); 1224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetWhiteBallance: 1228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setWBMode(Gen3A); 1230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetFlicker: 1234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setFlicker(Gen3A); 1236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetBrightness: 1240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setBrightness(Gen3A); 1242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetContrast: 1246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setContrast(Gen3A); 1248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetSharpness: 1252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setSharpness(Gen3A); 1254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetSaturation: 1258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setSaturation(Gen3A); 1260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetISO: 1264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setISO(Gen3A); 1266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetEffect: 1270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setEffect(Gen3A); 1272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetFocus: 1276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setFocusMode(Gen3A); 1278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetExpMode: 1282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setExposureMode(Gen3A); 1284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetFlash: 1288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setFlashMode(Gen3A); 1290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetExpLock: 1294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setExposureLock(Gen3A); 1296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case SetWBLock: 1300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= setWhiteBalanceLock(Gen3A); 1302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1304708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev case SetMeteringAreas: 1305708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 1306708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev ret |= setMeteringAreas(Gen3A); 1307708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 1308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 1310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("this setting (0x%x) is still not supported in CameraAdapter ", 1311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev currSett); 1312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPending3Asettings &= ~currSett; 1315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 1321