diff options
Diffstat (limited to 'camera/OMXCameraAdapter/OMX3A.cpp')
-rw-r--r-- | camera/OMXCameraAdapter/OMX3A.cpp | 2005 |
1 files changed, 0 insertions, 2005 deletions
diff --git a/camera/OMXCameraAdapter/OMX3A.cpp b/camera/OMXCameraAdapter/OMX3A.cpp deleted file mode 100644 index 040d816..0000000 --- a/camera/OMXCameraAdapter/OMX3A.cpp +++ /dev/null @@ -1,2005 +0,0 @@ -/* - * Copyright (C) Texas Instruments - http://www.ti.com/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** -* @file OMX3A.cpp -* -* This file contains functionality for handling 3A configurations. -* -*/ - -#include "CameraHal.h" -#include "OMXCameraAdapter.h" -#include "ErrorUtils.h" - -#include <cutils/properties.h> - -#define METERING_AREAS_RANGE 0xFF - -static const char PARAM_SEP[] = ","; - -namespace Ti { -namespace Camera { - -const SceneModesEntry* OMXCameraAdapter::getSceneModeEntry(const char* name, - OMX_SCENEMODETYPE scene) { - const SceneModesEntry* cameraLUT = NULL; - const SceneModesEntry* entry = NULL; - unsigned int numEntries = 0; - - // 1. Find camera's scene mode LUT - for (unsigned int i = 0; i < ARRAY_SIZE(CameraToSensorModesLUT); i++) { - if (strcmp(CameraToSensorModesLUT[i].name, name) == 0) { - cameraLUT = CameraToSensorModesLUT[i].Table; - numEntries = CameraToSensorModesLUT[i].size; - break; - } - } - - // 2. Find scene mode entry in table - if (!cameraLUT) { - goto EXIT; - } - - for (unsigned int i = 0; i < numEntries; i++) { - if(cameraLUT[i].scene == scene) { - entry = cameraLUT + i; - break; - } - } - EXIT: - return entry; -} - -status_t OMXCameraAdapter::setParameters3A(const android::CameraParameters ¶ms, - BaseCameraAdapter::AdapterState state) -{ - status_t ret = NO_ERROR; - int mode = 0; - const char *str = NULL; - int varint = 0; - BaseCameraAdapter::AdapterState nextState; - BaseCameraAdapter::getNextState(nextState); - - LOG_FUNCTION_NAME; - - android::AutoMutex lock(m3ASettingsUpdateLock); - - str = params.get(android::CameraParameters::KEY_SCENE_MODE); - mode = getLUTvalue_HALtoOMX( str, SceneLUT); - if ( mFirstTimeInit || ((str != NULL) && ( mParameters3A.SceneMode != mode )) ) { - if ( 0 <= mode ) { - mParameters3A.SceneMode = mode; - if ((mode == OMX_Manual) && (mFirstTimeInit == false)){//Auto mode - mFirstTimeInit = true; - } - if ((mode != OMX_Manual) && - (state & PREVIEW_ACTIVE) && !(nextState & CAPTURE_ACTIVE)) { - // if setting preset scene mode, previewing, and not in the middle of capture - // set preset scene mode immediately instead of in next FBD - // for feedback params to work properly since they need to be read - // by application in subsequent getParameters() - ret |= setScene(mParameters3A); - // re-apply EV compensation after setting scene mode since it probably reset it - if(mParameters3A.EVCompensation) { - setEVCompensation(mParameters3A); - } - return ret; - } else { - mPending3Asettings |= SetSceneMode; - } - } else { - mParameters3A.SceneMode = OMX_Manual; - } - CAMHAL_LOGVB("SceneMode %d", mParameters3A.SceneMode); - } - -#ifdef OMAP_ENHANCEMENT - if ( (str = params.get(TICameraParameters::KEY_EXPOSURE_MODE)) != NULL ) { - mode = getLUTvalue_HALtoOMX(str, ExpLUT); - if ( mParameters3A.Exposure != mode ) { - // If either the new or the old exposure mode is manual set also - // the SetManualExposure flag to call setManualExposureVal where - // the auto gain and exposure flags are configured - if ( mParameters3A.Exposure == OMX_ExposureControlOff || - mode == OMX_ExposureControlOff ) { - mPending3Asettings |= SetManualExposure; - } - mParameters3A.Exposure = mode; - CAMHAL_LOGDB("Exposure mode %d", mode); - if ( 0 <= mParameters3A.Exposure ) { - mPending3Asettings |= SetExpMode; - } - } - if ( mode == OMX_ExposureControlOff ) { - mode = params.getInt(TICameraParameters::KEY_MANUAL_EXPOSURE); - if ( mParameters3A.ManualExposure != mode ) { - mParameters3A.ManualExposure = mode; - CAMHAL_LOGDB("Manual Exposure = %d", mode); - mPending3Asettings |= SetManualExposure; - } - mode = params.getInt(TICameraParameters::KEY_MANUAL_EXPOSURE_RIGHT); - if ( mParameters3A.ManualExposureRight != mode ) { - mParameters3A.ManualExposureRight = mode; - CAMHAL_LOGDB("Manual Exposure right = %d", mode); - mPending3Asettings |= SetManualExposure; - } - mode = params.getInt(TICameraParameters::KEY_MANUAL_GAIN_ISO); - if ( mParameters3A.ManualGain != mode ) { - mParameters3A.ManualGain = mode; - CAMHAL_LOGDB("Manual Gain = %d", mode); - mPending3Asettings |= SetManualExposure; - } - mode = params.getInt(TICameraParameters::KEY_MANUAL_GAIN_ISO_RIGHT); - if ( mParameters3A.ManualGainRight != mode ) { - mParameters3A.ManualGainRight = mode; - CAMHAL_LOGDB("Manual Gain right = %d", mode); - mPending3Asettings |= SetManualExposure; - } - } - } -#endif - - str = params.get(android::CameraParameters::KEY_WHITE_BALANCE); - mode = getLUTvalue_HALtoOMX( str, WBalLUT); - if (mFirstTimeInit || ((str != NULL) && (mode != mParameters3A.WhiteBallance))) - { - mParameters3A.WhiteBallance = mode; - CAMHAL_LOGDB("Whitebalance mode %d", mode); - if ( 0 <= mParameters3A.WhiteBallance ) - { - mPending3Asettings |= SetWhiteBallance; - } - } - -#ifdef OMAP_ENHANCEMENT - varint = params.getInt(TICameraParameters::KEY_CONTRAST); - if ( 0 <= varint ) - { - if ( mFirstTimeInit || - ( (mParameters3A.Contrast + CONTRAST_OFFSET) != varint ) ) - { - mParameters3A.Contrast = varint - CONTRAST_OFFSET; - CAMHAL_LOGDB("Contrast %d", mParameters3A.Contrast); - mPending3Asettings |= SetContrast; - } - } - - varint = params.getInt(TICameraParameters::KEY_SHARPNESS); - if ( 0 <= varint ) - { - if ( mFirstTimeInit || - ((mParameters3A.Sharpness + SHARPNESS_OFFSET) != varint )) - { - mParameters3A.Sharpness = varint - SHARPNESS_OFFSET; - CAMHAL_LOGDB("Sharpness %d", mParameters3A.Sharpness); - mPending3Asettings |= SetSharpness; - } - } - - varint = params.getInt(TICameraParameters::KEY_SATURATION); - if ( 0 <= varint ) - { - if ( mFirstTimeInit || - ((mParameters3A.Saturation + SATURATION_OFFSET) != varint ) ) - { - mParameters3A.Saturation = varint - SATURATION_OFFSET; - CAMHAL_LOGDB("Saturation %d", mParameters3A.Saturation); - mPending3Asettings |= SetSaturation; - } - } - - varint = params.getInt(TICameraParameters::KEY_BRIGHTNESS); - if ( 0 <= varint ) - { - if ( mFirstTimeInit || - (( mParameters3A.Brightness != varint )) ) - { - mParameters3A.Brightness = (unsigned) varint; - CAMHAL_LOGDB("Brightness %d", mParameters3A.Brightness); - mPending3Asettings |= SetBrightness; - } - } -#endif - - str = params.get(android::CameraParameters::KEY_ANTIBANDING); - mode = getLUTvalue_HALtoOMX(str,FlickerLUT); - if ( mFirstTimeInit || ( ( str != NULL ) && ( mParameters3A.Flicker != mode ) )) - { - mParameters3A.Flicker = mode; - CAMHAL_LOGDB("Flicker %d", mParameters3A.Flicker); - if ( 0 <= mParameters3A.Flicker ) - { - mPending3Asettings |= SetFlicker; - } - } - -#ifdef OMAP_ENHANCEMENT - str = params.get(TICameraParameters::KEY_ISO); - mode = getLUTvalue_HALtoOMX(str, IsoLUT); - CAMHAL_LOGVB("ISO mode arrived in HAL : %s", str); - if ( mFirstTimeInit || ( ( str != NULL ) && ( mParameters3A.ISO != mode )) ) - { - mParameters3A.ISO = mode; - CAMHAL_LOGDB("ISO %d", mParameters3A.ISO); - if ( 0 <= mParameters3A.ISO ) - { - mPending3Asettings |= SetISO; - } - } -#endif - - str = params.get(android::CameraParameters::KEY_FOCUS_MODE); - mode = getLUTvalue_HALtoOMX(str, FocusLUT); - if ( (mFirstTimeInit || ((str != NULL) && (mParameters3A.Focus != mode)))) - { - mPending3Asettings |= SetFocus; - - mParameters3A.Focus = mode; - - // if focus mode is set to infinity...update focus distance immediately - if (mode == OMX_IMAGE_FocusControlAutoInfinity) { - updateFocusDistances(mParameters); - } - - CAMHAL_LOGDB("Focus %x", mParameters3A.Focus); - } - - str = params.get(android::CameraParameters::KEY_EXPOSURE_COMPENSATION); - varint = params.getInt(android::CameraParameters::KEY_EXPOSURE_COMPENSATION); - if ( mFirstTimeInit || (str && (mParameters3A.EVCompensation != varint))) { - CAMHAL_LOGDB("Setting EV Compensation to %d", varint); - mParameters3A.EVCompensation = varint; - mPending3Asettings |= SetEVCompensation; - } - - str = params.get(android::CameraParameters::KEY_FLASH_MODE); - mode = getLUTvalue_HALtoOMX( str, FlashLUT); - if ( mFirstTimeInit || (( str != NULL ) && ( mParameters3A.FlashMode != mode )) ) - { - if ( 0 <= mode ) - { - mParameters3A.FlashMode = mode; - mPending3Asettings |= SetFlash; - } - else - { - mParameters3A.FlashMode = OMX_IMAGE_FlashControlAuto; - } - } - - CAMHAL_LOGVB("Flash Setting %s", str); - CAMHAL_LOGVB("FlashMode %d", mParameters3A.FlashMode); - - str = params.get(android::CameraParameters::KEY_EFFECT); - mode = getLUTvalue_HALtoOMX( str, EffLUT); - if ( mFirstTimeInit || (( str != NULL ) && ( mParameters3A.Effect != mode )) ) - { - mParameters3A.Effect = mode; - CAMHAL_LOGDB("Effect %d", mParameters3A.Effect); - if ( 0 <= mParameters3A.Effect ) - { - mPending3Asettings |= SetEffect; - } - } - - str = params.get(android::CameraParameters::KEY_AUTO_EXPOSURE_LOCK_SUPPORTED); - if ( (str != NULL) && (!strcmp(str, android::CameraParameters::TRUE)) ) - { - OMX_BOOL lock = OMX_FALSE; - mUserSetExpLock = OMX_FALSE; - str = params.get(android::CameraParameters::KEY_AUTO_EXPOSURE_LOCK); - if (str && ((strcmp(str, android::CameraParameters::TRUE)) == 0)) - { - CAMHAL_LOGVA("Locking Exposure"); - lock = OMX_TRUE; - mUserSetExpLock = OMX_TRUE; - } - else - { - CAMHAL_LOGVA("UnLocking Exposure"); - } - - if (mParameters3A.ExposureLock != lock) - { - mParameters3A.ExposureLock = lock; - CAMHAL_LOGDB("ExposureLock %d", lock); - mPending3Asettings |= SetExpLock; - } - } - - str = params.get(android::CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED); - if ( (str != NULL) && (!strcmp(str, android::CameraParameters::TRUE)) ) - { - OMX_BOOL lock = OMX_FALSE; - mUserSetWbLock = OMX_FALSE; - str = params.get(android::CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK); - if (str && ((strcmp(str, android::CameraParameters::TRUE)) == 0)) - { - CAMHAL_LOGVA("Locking WhiteBalance"); - lock = OMX_TRUE; - mUserSetWbLock = OMX_TRUE; - } - else - { - CAMHAL_LOGVA("UnLocking WhiteBalance"); - } - if (mParameters3A.WhiteBalanceLock != lock) - { - mParameters3A.WhiteBalanceLock = lock; - CAMHAL_LOGDB("WhiteBalanceLock %d", lock); - mPending3Asettings |= SetWBLock; - } - } - - str = params.get(TICameraParameters::KEY_AUTO_FOCUS_LOCK); - if (str && (strcmp(str, android::CameraParameters::TRUE) == 0) && (mParameters3A.FocusLock != OMX_TRUE)) { - CAMHAL_LOGVA("Locking Focus"); - mParameters3A.FocusLock = OMX_TRUE; - setFocusLock(mParameters3A); - } else if (str && (strcmp(str, android::CameraParameters::FALSE) == 0) && (mParameters3A.FocusLock != OMX_FALSE)) { - CAMHAL_LOGVA("UnLocking Focus"); - mParameters3A.FocusLock = OMX_FALSE; - setFocusLock(mParameters3A); - } - - str = params.get(android::CameraParameters::KEY_METERING_AREAS); - if ( (str != NULL) ) { - size_t MAX_METERING_AREAS; - android::Vector<android::sp<CameraArea> > tempAreas; - - MAX_METERING_AREAS = atoi(params.get(android::CameraParameters::KEY_MAX_NUM_METERING_AREAS)); - - android::AutoMutex lock(mMeteringAreasLock); - - ret = CameraArea::parseAreas(str, ( strlen(str) + 1 ), tempAreas); - - CAMHAL_LOGVB("areAreasDifferent? = %d", - CameraArea::areAreasDifferent(mMeteringAreas, tempAreas)); - - if ( (NO_ERROR == ret) && CameraArea::areAreasDifferent(mMeteringAreas, tempAreas) ) { - mMeteringAreas.clear(); - mMeteringAreas = tempAreas; - - if ( MAX_METERING_AREAS >= mMeteringAreas.size() ) { - CAMHAL_LOGDB("Setting Metering Areas %s", - params.get(android::CameraParameters::KEY_METERING_AREAS)); - - mPending3Asettings |= SetMeteringAreas; - } else { - CAMHAL_LOGEB("Metering areas supported %d, metering areas set %d", - MAX_METERING_AREAS, mMeteringAreas.size()); - ret = -EINVAL; - } - } - } - -// TI extensions for enable/disable algos -#ifndef OMAP_TUNA - declareParameter3ABool(params, TICameraParameters::KEY_ALGO_FIXED_GAMMA, - mParameters3A.AlgoFixedGamma, SetAlgoFixedGamma, "Fixed Gamma"); - declareParameter3ABool(params, TICameraParameters::KEY_ALGO_NSF1, - mParameters3A.AlgoNSF1, SetAlgoNSF1, "NSF1"); - declareParameter3ABool(params, TICameraParameters::KEY_ALGO_NSF2, - mParameters3A.AlgoNSF2, SetAlgoNSF2, "NSF2"); - declareParameter3ABool(params, TICameraParameters::KEY_ALGO_SHARPENING, - mParameters3A.AlgoSharpening, SetAlgoSharpening, "Sharpening"); - declareParameter3ABool(params, TICameraParameters::KEY_ALGO_THREELINCOLORMAP, - mParameters3A.AlgoThreeLinColorMap, SetAlgoThreeLinColorMap, "ThreeLinColorMap"); - declareParameter3ABool(params, TICameraParameters::KEY_ALGO_GIC, mParameters3A.AlgoGIC, SetAlgoGIC, "GIC"); -#endif - - LOG_FUNCTION_NAME_EXIT; - - return ret; -} - -void OMXCameraAdapter::declareParameter3ABool(const android::CameraParameters ¶ms, const char *key, - OMX_BOOL ¤t_setting, E3ASettingsFlags pending, - const char *msg) -{ - OMX_BOOL val = OMX_TRUE; - const char *str = params.get(key); - - if (str && ((strcmp(str, android::CameraParameters::FALSE)) == 0)) - { - CAMHAL_LOGVB("Disabling %s", msg); - val = OMX_FALSE; - } - else - { - CAMHAL_LOGVB("Enabling %s", msg); - } - if (current_setting != val) - { - current_setting = val; - CAMHAL_LOGDB("%s %s", msg, current_setting ? "enabled" : "disabled"); - mPending3Asettings |= pending; - } -} - -int OMXCameraAdapter::getLUTvalue_HALtoOMX(const char * HalValue, LUTtype LUT) -{ - int LUTsize = LUT.size; - if( HalValue ) - for(int i = 0; i < LUTsize; i++) - if( 0 == strcmp(LUT.Table[i].userDefinition, HalValue) ) - return LUT.Table[i].omxDefinition; - - return -ENOENT; -} - -const char* OMXCameraAdapter::getLUTvalue_OMXtoHAL(int OMXValue, LUTtype LUT) -{ - int LUTsize = LUT.size; - for(int i = 0; i < LUTsize; i++) - if( LUT.Table[i].omxDefinition == OMXValue ) - return LUT.Table[i].userDefinition; - - return NULL; -} - -int OMXCameraAdapter::getMultipleLUTvalue_OMXtoHAL(int OMXValue, LUTtype LUT, char * supported) -{ - int num = 0; - int remaining_size; - int LUTsize = LUT.size; - for(int i = 0; i < LUTsize; i++) - if( LUT.Table[i].omxDefinition == OMXValue ) - { - num++; - if (supported[0] != '\0') { - strncat(supported, PARAM_SEP, 1); - } - remaining_size = ((((int)MAX_PROP_VALUE_LENGTH - 1 - (int)strlen(supported)) < 0) ? 0 : (MAX_PROP_VALUE_LENGTH - 1 - strlen(supported))); - strncat(supported, LUT.Table[i].userDefinition, remaining_size); - } - - return num; -} - -status_t OMXCameraAdapter::setExposureMode(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_EXPOSURECONTROLTYPE exp; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&exp, OMX_CONFIG_EXPOSURECONTROLTYPE); - exp.nPortIndex = OMX_ALL; - exp.eExposureControl = (OMX_EXPOSURECONTROLTYPE)Gen3A.Exposure; - - eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonExposure, - &exp); - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while configuring exposure mode 0x%x", eError); - } - else - { - CAMHAL_LOGDA("Camera exposure mode configured successfully"); - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -#ifndef OMAP_TUNA -static bool isFlashDisabled() { -#if (PROPERTY_VALUE_MAX < 5) -#error "PROPERTY_VALUE_MAX must be at least 5" -#endif - - // Ignore flash_off system property for user build. - char buildType[PROPERTY_VALUE_MAX]; - if (property_get("ro.build.type", buildType, NULL) && - !strcasecmp(buildType, "user")) { - return false; - } - - char value[PROPERTY_VALUE_MAX]; - if (property_get("camera.flash_off", value, NULL) && - (!strcasecmp(value, android::CameraParameters::TRUE) || !strcasecmp(value, "1"))) { - CAMHAL_LOGW("flash is disabled for testing purpose"); - return true; - } - - return false; -} -#endif - -status_t OMXCameraAdapter::setManualExposureVal(Gen3A_settings& Gen3A) { - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_EXPOSUREVALUETYPE expVal; - OMX_TI_CONFIG_EXPOSUREVALUERIGHTTYPE expValRight; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&expVal, OMX_CONFIG_EXPOSUREVALUETYPE); - OMX_INIT_STRUCT_PTR (&expValRight, OMX_TI_CONFIG_EXPOSUREVALUERIGHTTYPE); - expVal.nPortIndex = OMX_ALL; - expValRight.nPortIndex = OMX_ALL; - - eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonExposureValue, - &expVal); - if ( OMX_ErrorNone == eError ) { - eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE) OMX_TI_IndexConfigRightExposureValue, - &expValRight); - } - if ( OMX_ErrorNone != eError ) { - CAMHAL_LOGEB("OMX_GetConfig error 0x%x (manual exposure values)", eError); - return Utils::ErrorUtils::omxToAndroidError(eError); - } - - if ( Gen3A.Exposure != OMX_ExposureControlOff ) { - expVal.bAutoShutterSpeed = OMX_TRUE; - expVal.bAutoSensitivity = OMX_TRUE; - } else { - expVal.bAutoShutterSpeed = OMX_FALSE; - expVal.nShutterSpeedMsec = Gen3A.ManualExposure; - expValRight.nShutterSpeedMsec = Gen3A.ManualExposureRight; - if ( Gen3A.ManualGain <= 0 || Gen3A.ManualGainRight <= 0 ) { - expVal.bAutoSensitivity = OMX_TRUE; - } else { - expVal.bAutoSensitivity = OMX_FALSE; - expVal.nSensitivity = Gen3A.ManualGain; - expValRight.nSensitivity = Gen3A.ManualGainRight; - } - } - - eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonExposureValue, - &expVal); - if ( OMX_ErrorNone == eError ) { - eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE) OMX_TI_IndexConfigRightExposureValue, - &expValRight); - } - - if ( OMX_ErrorNone != eError ) { - CAMHAL_LOGEB("Error 0x%x while configuring manual exposure values", eError); - } else { - CAMHAL_LOGDA("Camera manual exposure values configured successfully"); - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::setFlashMode(Gen3A_settings& Gen3A) -{ - status_t ret = NO_ERROR; - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_IMAGE_PARAM_FLASHCONTROLTYPE flash; - OMX_CONFIG_FOCUSASSISTTYPE focusAssist; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&flash, OMX_IMAGE_PARAM_FLASHCONTROLTYPE); - flash.nPortIndex = OMX_ALL; - -#ifndef OMAP_TUNA - if (isFlashDisabled()) { - flash.eFlashControl = ( OMX_IMAGE_FLASHCONTROLTYPE ) OMX_IMAGE_FlashControlOff; - } else { -#endif - flash.eFlashControl = ( OMX_IMAGE_FLASHCONTROLTYPE ) Gen3A.FlashMode; -#ifndef OMAP_TUNA - } -#endif - - CAMHAL_LOGDB("Configuring flash mode 0x%x", flash.eFlashControl); - eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE) OMX_IndexConfigFlashControl, - &flash); - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while configuring flash mode 0x%x", eError); - } - else - { - CAMHAL_LOGDA("Camera flash mode configured successfully"); - } - - if ( OMX_ErrorNone == eError ) - { - OMX_INIT_STRUCT_PTR (&focusAssist, OMX_CONFIG_FOCUSASSISTTYPE); - focusAssist.nPortIndex = OMX_ALL; - if ( flash.eFlashControl == OMX_IMAGE_FlashControlOff ) - { - focusAssist.bFocusAssist = OMX_FALSE; - } - else - { - focusAssist.bFocusAssist = OMX_TRUE; - } - - CAMHAL_LOGDB("Configuring AF Assist mode 0x%x", focusAssist.bFocusAssist); - eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE) OMX_IndexConfigFocusAssist, - &focusAssist); - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while configuring AF Assist mode 0x%x", eError); - } - else - { - CAMHAL_LOGDA("Camera AF Assist mode configured successfully"); - } - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::getFlashMode(Gen3A_settings& Gen3A) -{ - status_t ret = NO_ERROR; - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_IMAGE_PARAM_FLASHCONTROLTYPE flash; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&flash, OMX_IMAGE_PARAM_FLASHCONTROLTYPE); - flash.nPortIndex = OMX_ALL; - - eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE) OMX_IndexConfigFlashControl, - &flash); - - if ( OMX_ErrorNone != eError ) { - CAMHAL_LOGEB("Error while getting flash mode 0x%x", eError); - } else { - Gen3A.FlashMode = flash.eFlashControl; - CAMHAL_LOGDB("Gen3A.FlashMode 0x%x", Gen3A.FlashMode); - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::setFocusMode(Gen3A_settings& Gen3A) -{ - status_t ret = NO_ERROR; - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE focus; - size_t top, left, width, height, weight; - OMX_CONFIG_BOOLEANTYPE bOMX; - - LOG_FUNCTION_NAME; - - BaseCameraAdapter::AdapterState state; - BaseCameraAdapter::getState(state); - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - - ///Face detection takes precedence over touch AF - if ( mFaceDetectionRunning ) - { - //Disable region priority first - setAlgoPriority(REGION_PRIORITY, FOCUS_ALGO, false); - - //Enable face algorithm priority for focus - setAlgoPriority(FACE_PRIORITY, FOCUS_ALGO , true); - - //Do normal focus afterwards - ////FIXME: Check if the extended focus control is needed? this overrides caf - //focusControl.eFocusControl = ( OMX_IMAGE_FOCUSCONTROLTYPE ) OMX_IMAGE_FocusControlExtended; - } - else if ( (!mFocusAreas.isEmpty()) && (!mFocusAreas.itemAt(0)->isZeroArea()) ) - { - - //Disable face priority first - setAlgoPriority(FACE_PRIORITY, FOCUS_ALGO, false); - - //Enable region algorithm priority - setAlgoPriority(REGION_PRIORITY, FOCUS_ALGO, true); - - - //Do normal focus afterwards - //FIXME: Check if the extended focus control is needed? this overrides caf - //focus.eFocusControl = ( OMX_IMAGE_FOCUSCONTROLTYPE ) OMX_IMAGE_FocusControlExtended; - - } - else - { - - //Disable both region and face priority - setAlgoPriority(REGION_PRIORITY, FOCUS_ALGO, false); - - setAlgoPriority(FACE_PRIORITY, FOCUS_ALGO, false); - - } - - if ( NO_ERROR == ret && ((state & AF_ACTIVE) == 0) ) - { - OMX_INIT_STRUCT_PTR (&bOMX, OMX_CONFIG_BOOLEANTYPE); - - if ( Gen3A.Focus == OMX_IMAGE_FocusControlAutoInfinity) - { - // Don't lock at infinity, otherwise the AF cannot drive - // the lens at infinity position - if( set3ALock(mUserSetExpLock, mUserSetWbLock, OMX_FALSE) != NO_ERROR) - { - CAMHAL_LOGEA("Error Applying 3A locks"); - } else { - CAMHAL_LOGDA("Focus locked. Applied focus locks successfully"); - } - } - if ( Gen3A.Focus == OMX_IMAGE_FocusControlAuto || - Gen3A.Focus == OMX_IMAGE_FocusControlAutoInfinity) - { - // Run focus scanning if switching to continuous infinity focus mode - bOMX.bEnabled = OMX_TRUE; - } - else - { - bOMX.bEnabled = OMX_FALSE; - } - - eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE)OMX_TI_IndexConfigAutofocusEnable, - &bOMX); - - OMX_INIT_STRUCT_PTR (&focus, OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE); - focus.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - focus.eFocusControl = (OMX_IMAGE_FOCUSCONTROLTYPE)Gen3A.Focus; - - CAMHAL_LOGDB("Configuring focus mode 0x%x", focus.eFocusControl); - eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, OMX_IndexConfigFocusControl, &focus); - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while configuring focus mode 0x%x", eError); - } - else - { - CAMHAL_LOGDA("Camera focus mode configured successfully"); - } - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::getFocusMode(Gen3A_settings& Gen3A) -{ - status_t ret = NO_ERROR; - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE focus; - size_t top, left, width, height, weight; - - LOG_FUNCTION_NAME; - - if (OMX_StateInvalid == mComponentState) { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&focus, OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE); - focus.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigFocusControl, &focus); - - if (OMX_ErrorNone != eError) { - CAMHAL_LOGEB("Error while configuring focus mode 0x%x", eError); - } else { - Gen3A.Focus = focus.eFocusControl; - CAMHAL_LOGDB("Gen3A.Focus 0x%x", Gen3A.Focus); - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::setScene(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_SCENEMODETYPE scene; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&scene, OMX_CONFIG_SCENEMODETYPE); - scene.nPortIndex = OMX_ALL; - scene.eSceneMode = ( OMX_SCENEMODETYPE ) Gen3A.SceneMode; - - CAMHAL_LOGDB("Configuring scene mode 0x%x", scene.eSceneMode); - eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, - ( OMX_INDEXTYPE ) OMX_TI_IndexConfigSceneMode, - &scene); - - if (OMX_ErrorNone != eError) { - CAMHAL_LOGEB("Error while configuring scene mode 0x%x", eError); - } else { - CAMHAL_LOGDA("Camera scene configured successfully"); - if (Gen3A.SceneMode != OMX_Manual) { - // Get preset scene mode feedback - getFocusMode(Gen3A); - getFlashMode(Gen3A); - getWBMode(Gen3A); - - // TODO(XXX): Re-enable these for mainline - // getSharpness(Gen3A); - // getSaturation(Gen3A); - // getISO(Gen3A); - } - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::setEVCompensation(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_EXPOSUREVALUETYPE expValues; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&expValues, OMX_CONFIG_EXPOSUREVALUETYPE); - expValues.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - - OMX_GetConfig( mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonExposureValue, - &expValues); - CAMHAL_LOGDB("old EV Compensation for OMX = 0x%x", (int)expValues.xEVCompensation); - CAMHAL_LOGDB("EV Compensation for HAL = %d", Gen3A.EVCompensation); - - expValues.xEVCompensation = ( Gen3A.EVCompensation * ( 1 << Q16_OFFSET ) ) / 10; - eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonExposureValue, - &expValues); - CAMHAL_LOGDB("new EV Compensation for OMX = 0x%x", (int)expValues.xEVCompensation); - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while configuring EV Compensation 0x%x error = 0x%x", - ( unsigned int ) expValues.xEVCompensation, - eError); - } - else - { - CAMHAL_LOGDB("EV Compensation 0x%x configured successfully", - ( unsigned int ) expValues.xEVCompensation); - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::getEVCompensation(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_EXPOSUREVALUETYPE expValues; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&expValues, OMX_CONFIG_EXPOSUREVALUETYPE); - expValues.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - - OMX_GetConfig(mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonExposureValue, - &expValues); - - if ( OMX_ErrorNone != eError ) { - CAMHAL_LOGEB("Error while getting EV Compensation error = 0x%x", eError); - } else { - Gen3A.EVCompensation = (10 * expValues.xEVCompensation) / (1 << Q16_OFFSET); - CAMHAL_LOGDB("Gen3A.EVCompensation 0x%x", Gen3A.EVCompensation); - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::setWBMode(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_WHITEBALCONTROLTYPE wb; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&wb, OMX_CONFIG_WHITEBALCONTROLTYPE); - wb.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - wb.eWhiteBalControl = ( OMX_WHITEBALCONTROLTYPE ) Gen3A.WhiteBallance; - - // disable face and region priorities - setAlgoPriority(FACE_PRIORITY, WHITE_BALANCE_ALGO, false); - setAlgoPriority(REGION_PRIORITY, WHITE_BALANCE_ALGO, false); - - eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonWhiteBalance, - &wb); - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while configuring Whitebalance mode 0x%x error = 0x%x", - ( unsigned int ) wb.eWhiteBalControl, - eError); - } - else - { - CAMHAL_LOGDB("Whitebalance mode 0x%x configured successfully", - ( unsigned int ) wb.eWhiteBalControl); - } - - LOG_FUNCTION_NAME_EXIT; - - return eError; -} - -status_t OMXCameraAdapter::getWBMode(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_WHITEBALCONTROLTYPE wb; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&wb, OMX_CONFIG_WHITEBALCONTROLTYPE); - wb.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - - eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonWhiteBalance, - &wb); - - if (OMX_ErrorNone != eError) { - CAMHAL_LOGEB("Error while getting Whitebalance mode error = 0x%x", eError); - } else { - Gen3A.WhiteBallance = wb.eWhiteBalControl; - CAMHAL_LOGDB("Gen3A.WhiteBallance 0x%x", Gen3A.WhiteBallance); - } - - LOG_FUNCTION_NAME_EXIT; - - return eError; -} - -status_t OMXCameraAdapter::setFlicker(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_FLICKERCANCELTYPE flicker; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&flicker, OMX_CONFIG_FLICKERCANCELTYPE); - flicker.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - flicker.eFlickerCancel = (OMX_COMMONFLICKERCANCELTYPE)Gen3A.Flicker; - - eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE)OMX_IndexConfigFlickerCancel, - &flicker ); - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while configuring Flicker mode 0x%x error = 0x%x", - ( unsigned int ) flicker.eFlickerCancel, - eError); - } - else - { - CAMHAL_LOGDB("Flicker mode 0x%x configured successfully", - ( unsigned int ) flicker.eFlickerCancel); - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::setBrightness(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_BRIGHTNESSTYPE brightness; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&brightness, OMX_CONFIG_BRIGHTNESSTYPE); - brightness.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - brightness.nBrightness = Gen3A.Brightness; - - eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonBrightness, - &brightness); - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while configuring Brightness 0x%x error = 0x%x", - ( unsigned int ) brightness.nBrightness, - eError); - } - else - { - CAMHAL_LOGDB("Brightness 0x%x configured successfully", - ( unsigned int ) brightness.nBrightness); - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::setContrast(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_CONTRASTTYPE contrast; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&contrast, OMX_CONFIG_CONTRASTTYPE); - contrast.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - contrast.nContrast = Gen3A.Contrast; - - eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonContrast, - &contrast); - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while configuring Contrast 0x%x error = 0x%x", - ( unsigned int ) contrast.nContrast, - eError); - } - else - { - CAMHAL_LOGDB("Contrast 0x%x configured successfully", - ( unsigned int ) contrast.nContrast); - } - - LOG_FUNCTION_NAME_EXIT; - - return eError; -} - -status_t OMXCameraAdapter::setSharpness(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_IMAGE_CONFIG_PROCESSINGLEVELTYPE procSharpness; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&procSharpness, OMX_IMAGE_CONFIG_PROCESSINGLEVELTYPE); - procSharpness.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - procSharpness.nLevel = Gen3A.Sharpness; - - if( procSharpness.nLevel == 0 ) - { - procSharpness.bAuto = OMX_TRUE; - } - else - { - procSharpness.bAuto = OMX_FALSE; - } - - eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE)OMX_IndexConfigSharpeningLevel, - &procSharpness); - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while configuring Sharpness 0x%x error = 0x%x", - ( unsigned int ) procSharpness.nLevel, - eError); - } - else - { - CAMHAL_LOGDB("Sharpness 0x%x configured successfully", - ( unsigned int ) procSharpness.nLevel); - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::getSharpness(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_IMAGE_CONFIG_PROCESSINGLEVELTYPE procSharpness; - - LOG_FUNCTION_NAME; - - if (OMX_StateInvalid == mComponentState) { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&procSharpness, OMX_IMAGE_CONFIG_PROCESSINGLEVELTYPE); - procSharpness.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - - eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE)OMX_IndexConfigSharpeningLevel, - &procSharpness); - - if (OMX_ErrorNone != eError) { - CAMHAL_LOGEB("Error while configuring Sharpness error = 0x%x", eError); - } else { - Gen3A.Sharpness = procSharpness.nLevel; - CAMHAL_LOGDB("Gen3A.Sharpness 0x%x", Gen3A.Sharpness); - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::setSaturation(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_SATURATIONTYPE saturation; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&saturation, OMX_CONFIG_SATURATIONTYPE); - saturation.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - saturation.nSaturation = Gen3A.Saturation; - - eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonSaturation, - &saturation); - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while configuring Saturation 0x%x error = 0x%x", - ( unsigned int ) saturation.nSaturation, - eError); - } - else - { - CAMHAL_LOGDB("Saturation 0x%x configured successfully", - ( unsigned int ) saturation.nSaturation); - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::getSaturation(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_SATURATIONTYPE saturation; - - LOG_FUNCTION_NAME; - - if (OMX_StateInvalid == mComponentState) { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&saturation, OMX_CONFIG_SATURATIONTYPE); - saturation.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - - eError = OMX_GetConfig( mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonSaturation, - &saturation); - - if (OMX_ErrorNone != eError) { - CAMHAL_LOGEB("Error while getting Saturation error = 0x%x", eError); - } else { - Gen3A.Saturation = saturation.nSaturation; - CAMHAL_LOGDB("Gen3A.Saturation 0x%x", Gen3A.Saturation); - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::setISO(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_EXPOSUREVALUETYPE expValues; - OMX_TI_CONFIG_EXPOSUREVALUERIGHTTYPE expValRight; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - // In case of manual exposure Gain is applied from setManualExposureVal - if ( Gen3A.Exposure == OMX_ExposureControlOff ) { - return NO_ERROR; - } - - OMX_INIT_STRUCT_PTR (&expValues, OMX_CONFIG_EXPOSUREVALUETYPE); - OMX_INIT_STRUCT_PTR (&expValRight, OMX_TI_CONFIG_EXPOSUREVALUERIGHTTYPE); - expValues.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - expValRight.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - - eError = OMX_GetConfig( mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonExposureValue, - &expValues); - - if ( OMX_ErrorNone == eError ) { - eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE) OMX_TI_IndexConfigRightExposureValue, - &expValRight); - } - - if ( OMX_ErrorNone != eError ) { - CAMHAL_LOGEB("OMX_GetConfig error 0x%x (manual exposure values)", eError); - return Utils::ErrorUtils::omxToAndroidError(eError); - } - - if( 0 == Gen3A.ISO ) { - expValues.bAutoSensitivity = OMX_TRUE; - } else { - expValues.bAutoSensitivity = OMX_FALSE; - expValues.nSensitivity = Gen3A.ISO; - expValRight.nSensitivity = expValues.nSensitivity; - } - - eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonExposureValue, - &expValues); - - if ( OMX_ErrorNone == eError ) { - eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE) OMX_TI_IndexConfigRightExposureValue, - &expValRight); - } - if ( OMX_ErrorNone != eError ) { - CAMHAL_LOGEB("Error while configuring ISO 0x%x error = 0x%x", - ( unsigned int ) expValues.nSensitivity, - eError); - } else { - CAMHAL_LOGDB("ISO 0x%x configured successfully", - ( unsigned int ) expValues.nSensitivity); - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::getISO(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_EXPOSUREVALUETYPE expValues; - - LOG_FUNCTION_NAME; - - if (OMX_StateInvalid == mComponentState) { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&expValues, OMX_CONFIG_EXPOSUREVALUETYPE); - expValues.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - - OMX_GetConfig( mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonExposureValue, - &expValues); - - if (OMX_ErrorNone != eError) { - CAMHAL_LOGEB("Error while getting ISO error = 0x%x", eError); - } else { - Gen3A.ISO = expValues.nSensitivity; - CAMHAL_LOGDB("Gen3A.ISO %d", Gen3A.ISO); - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::setEffect(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_IMAGEFILTERTYPE effect; - - LOG_FUNCTION_NAME; - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&effect, OMX_CONFIG_IMAGEFILTERTYPE); - effect.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - effect.eImageFilter = (OMX_IMAGEFILTERTYPE ) Gen3A.Effect; - - eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigCommonImageFilter, - &effect); - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while configuring Effect 0x%x error = 0x%x", - ( unsigned int ) effect.eImageFilter, - eError); - } - else - { - CAMHAL_LOGDB("Effect 0x%x configured successfully", - ( unsigned int ) effect.eImageFilter); - } - - LOG_FUNCTION_NAME_EXIT; - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::setWhiteBalanceLock(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_IMAGE_CONFIG_LOCKTYPE lock; - - LOG_FUNCTION_NAME - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&lock, OMX_IMAGE_CONFIG_LOCKTYPE); - lock.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - lock.bLock = Gen3A.WhiteBalanceLock; - eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE)OMX_IndexConfigImageWhiteBalanceLock, - &lock); - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while configuring WhiteBalance Lock error = 0x%x", eError); - } - else - { - CAMHAL_LOGDB("WhiteBalance Lock configured successfully %d ", lock.bLock); - } - LOG_FUNCTION_NAME_EXIT - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::setExposureLock(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_IMAGE_CONFIG_LOCKTYPE lock; - - LOG_FUNCTION_NAME - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&lock, OMX_IMAGE_CONFIG_LOCKTYPE); - lock.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - lock.bLock = Gen3A.ExposureLock; - eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE)OMX_IndexConfigImageExposureLock, - &lock); - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while configuring Exposure Lock error = 0x%x", eError); - } - else - { - CAMHAL_LOGDB("Exposure Lock configured successfully %d ", lock.bLock); - } - LOG_FUNCTION_NAME_EXIT - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::setFocusLock(Gen3A_settings& Gen3A) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_IMAGE_CONFIG_LOCKTYPE lock; - - LOG_FUNCTION_NAME - - if ( OMX_StateInvalid == mComponentState ) { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&lock, OMX_IMAGE_CONFIG_LOCKTYPE); - lock.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - - lock.bLock = Gen3A.FocusLock; - eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE)OMX_IndexConfigImageFocusLock, - &lock); - - if ( OMX_ErrorNone != eError ) { - CAMHAL_LOGEB("Error while configuring Focus Lock error = 0x%x", eError); - } else { - CAMHAL_LOGDB("Focus Lock configured successfully %d ", lock.bLock); - } - - LOG_FUNCTION_NAME_EXIT - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::set3ALock(OMX_BOOL toggleExp, OMX_BOOL toggleWb, OMX_BOOL toggleFocus) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_IMAGE_CONFIG_LOCKTYPE lock; - - LOG_FUNCTION_NAME - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&lock, OMX_IMAGE_CONFIG_LOCKTYPE); - lock.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - - mParameters3A.ExposureLock = toggleExp; - mParameters3A.FocusLock = toggleFocus; - mParameters3A.WhiteBalanceLock = toggleWb; - - eError = OMX_GetConfig( mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE)OMX_IndexConfigImageExposureLock, - &lock); - - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error GetConfig Exposure Lock error = 0x%x", eError); - goto EXIT; - } - else - { - CAMHAL_LOGDA("Exposure Lock GetConfig successfull"); - - /* Apply locks only when not applied already */ - if ( lock.bLock != toggleExp ) - { - setExposureLock(mParameters3A); - } - - } - - OMX_INIT_STRUCT_PTR (&lock, OMX_IMAGE_CONFIG_LOCKTYPE); - lock.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - eError = OMX_GetConfig( mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE)OMX_IndexConfigImageFocusLock, - &lock); - - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error GetConfig Focus Lock error = 0x%x", eError); - goto EXIT; - } - else - { - CAMHAL_LOGDB("Focus Lock GetConfig successfull bLock(%d)", lock.bLock); - - /* Apply locks only when not applied already */ - if ( lock.bLock != toggleFocus ) - { - setFocusLock(mParameters3A); - } - } - - OMX_INIT_STRUCT_PTR (&lock, OMX_IMAGE_CONFIG_LOCKTYPE); - lock.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; - eError = OMX_GetConfig( mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE)OMX_IndexConfigImageWhiteBalanceLock, - &lock); - - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error GetConfig WhiteBalance Lock error = 0x%x", eError); - goto EXIT; - } - else - { - CAMHAL_LOGDA("WhiteBalance Lock GetConfig successfull"); - - /* Apply locks only when not applied already */ - if ( lock.bLock != toggleWb ) - { - setWhiteBalanceLock(mParameters3A); - } - - } - EXIT: - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -status_t OMXCameraAdapter::setMeteringAreas(Gen3A_settings& Gen3A) -{ - status_t ret = NO_ERROR; - OMX_ERRORTYPE eError = OMX_ErrorNone; - - CameraBuffer *bufferlist; - OMX_ALGOAREASTYPE *meteringAreas; - OMX_TI_CONFIG_SHAREDBUFFER sharedBuffer; - MemoryManager memMgr; - int areasSize = 0; - - LOG_FUNCTION_NAME - - ret = memMgr.initialize(); - if ( ret != OK ) { - CAMHAL_LOGE("MemoryManager initialization failed, error: %d", ret); - return ret; - } - - android::AutoMutex lock(mMeteringAreasLock); - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - areasSize = ((sizeof(OMX_ALGOAREASTYPE)+4095)/4096)*4096; - bufferlist = memMgr.allocateBufferList(0, 0, NULL, areasSize, 1); - meteringAreas = (OMX_ALGOAREASTYPE *)bufferlist[0].opaque; - - OMXCameraPortParameters * mPreviewData = NULL; - mPreviewData = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex]; - - if (!meteringAreas) - { - CAMHAL_LOGEB("Error allocating buffer for metering areas %d", eError); - return -ENOMEM; - } - - OMX_INIT_STRUCT_PTR (meteringAreas, OMX_ALGOAREASTYPE); - - meteringAreas->nPortIndex = OMX_ALL; - meteringAreas->nNumAreas = mMeteringAreas.size(); - meteringAreas->nAlgoAreaPurpose = OMX_AlgoAreaExposure; - - for ( unsigned int n = 0; n < mMeteringAreas.size(); n++) - { - int widthDivisor = 1; - int heightDivisor = 1; - - if (mPreviewData->mFrameLayoutType == OMX_TI_StereoFrameLayoutTopBottom) { - heightDivisor = 2; - } - if (mPreviewData->mFrameLayoutType == OMX_TI_StereoFrameLayoutLeftRight) { - widthDivisor = 2; - } - - // transform the coordinates to 3A-type coordinates - mMeteringAreas.itemAt(n)->transfrom((size_t)mPreviewData->mWidth/widthDivisor, - (size_t)mPreviewData->mHeight/heightDivisor, - (size_t&)meteringAreas->tAlgoAreas[n].nTop, - (size_t&)meteringAreas->tAlgoAreas[n].nLeft, - (size_t&)meteringAreas->tAlgoAreas[n].nWidth, - (size_t&)meteringAreas->tAlgoAreas[n].nHeight); - - meteringAreas->tAlgoAreas[n].nLeft = - ( meteringAreas->tAlgoAreas[n].nLeft * METERING_AREAS_RANGE ) / mPreviewData->mWidth; - meteringAreas->tAlgoAreas[n].nTop = - ( meteringAreas->tAlgoAreas[n].nTop* METERING_AREAS_RANGE ) / mPreviewData->mHeight; - meteringAreas->tAlgoAreas[n].nWidth = - ( meteringAreas->tAlgoAreas[n].nWidth * METERING_AREAS_RANGE ) / mPreviewData->mWidth; - meteringAreas->tAlgoAreas[n].nHeight = - ( meteringAreas->tAlgoAreas[n].nHeight * METERING_AREAS_RANGE ) / mPreviewData->mHeight; - - meteringAreas->tAlgoAreas[n].nPriority = mMeteringAreas.itemAt(n)->getWeight(); - - CAMHAL_LOGDB("Metering area %d : top = %d left = %d width = %d height = %d prio = %d", - n, (int)meteringAreas->tAlgoAreas[n].nTop, (int)meteringAreas->tAlgoAreas[n].nLeft, - (int)meteringAreas->tAlgoAreas[n].nWidth, (int)meteringAreas->tAlgoAreas[n].nHeight, - (int)meteringAreas->tAlgoAreas[n].nPriority); - - } - - OMX_INIT_STRUCT_PTR (&sharedBuffer, OMX_TI_CONFIG_SHAREDBUFFER); - - sharedBuffer.nPortIndex = OMX_ALL; - sharedBuffer.nSharedBuffSize = areasSize; - sharedBuffer.pSharedBuff = (OMX_U8 *)camera_buffer_get_omx_ptr (&bufferlist[0]); - - if ( NULL == sharedBuffer.pSharedBuff ) - { - CAMHAL_LOGEA("No resources to allocate OMX shared buffer"); - ret = -ENOMEM; - goto EXIT; - } - - eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, - (OMX_INDEXTYPE) OMX_TI_IndexConfigAlgoAreas, &sharedBuffer); - - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while setting Focus Areas configuration 0x%x", eError); - ret = -EINVAL; - } - else - { - CAMHAL_LOGDA("Metering Areas SetConfig successfull."); - } - - EXIT: - if (NULL != bufferlist) - { - memMgr.freeBufferList(bufferlist); - } - - return ret; -} - -//TI extensions for enable/disable algos -status_t OMXCameraAdapter::setParameter3ABoolInvert(const OMX_INDEXTYPE omx_idx, - const OMX_BOOL data, const char *msg) -{ - OMX_BOOL inv_data; - - if (OMX_TRUE == data) - { - inv_data = OMX_FALSE; - } - else if (OMX_FALSE == data) - { - inv_data = OMX_TRUE; - } - else - { - return BAD_VALUE; - } - return setParameter3ABool(omx_idx, inv_data, msg); -} - -status_t OMXCameraAdapter::setParameter3ABool(const OMX_INDEXTYPE omx_idx, - const OMX_BOOL data, const char *msg) -{ - OMX_ERRORTYPE eError = OMX_ErrorNone; - OMX_CONFIG_BOOLEANTYPE cfgdata; - - LOG_FUNCTION_NAME - - if ( OMX_StateInvalid == mComponentState ) - { - CAMHAL_LOGEA("OMX component is in invalid state"); - return NO_INIT; - } - - OMX_INIT_STRUCT_PTR (&cfgdata, OMX_CONFIG_BOOLEANTYPE); - cfgdata.bEnabled = data; - eError = OMX_SetConfig( mCameraAdapterParameters.mHandleComp, - omx_idx, - &cfgdata); - if ( OMX_ErrorNone != eError ) - { - CAMHAL_LOGEB("Error while configuring %s error = 0x%x", msg, eError); - } - else - { - CAMHAL_LOGDB("%s configured successfully %d ", msg, cfgdata.bEnabled); - } - - LOG_FUNCTION_NAME_EXIT - - return Utils::ErrorUtils::omxToAndroidError(eError); -} - -#ifndef OMAP_TUNA -status_t OMXCameraAdapter::setAlgoFixedGamma(Gen3A_settings& Gen3A) -{ - return setParameter3ABool((OMX_INDEXTYPE) OMX_TI_IndexConfigFixedGamma, Gen3A.AlgoFixedGamma, "Fixed Gamma"); -} - -status_t OMXCameraAdapter::setAlgoNSF1(Gen3A_settings& Gen3A) -{ - return setParameter3ABoolInvert((OMX_INDEXTYPE) OMX_TI_IndexConfigDisableNSF1, Gen3A.AlgoNSF1, "NSF1"); -} - -status_t OMXCameraAdapter::setAlgoNSF2(Gen3A_settings& Gen3A) -{ - return setParameter3ABoolInvert((OMX_INDEXTYPE) OMX_TI_IndexConfigDisableNSF2, Gen3A.AlgoNSF2, "NSF2"); -} - -status_t OMXCameraAdapter::setAlgoSharpening(Gen3A_settings& Gen3A) -{ - return setParameter3ABoolInvert((OMX_INDEXTYPE) OMX_TI_IndexConfigDisableSharpening, Gen3A.AlgoSharpening, "Sharpening"); -} - -status_t OMXCameraAdapter::setAlgoThreeLinColorMap(Gen3A_settings& Gen3A) -{ - return setParameter3ABoolInvert((OMX_INDEXTYPE) OMX_TI_IndexConfigDisableThreeLinColorMap, Gen3A.AlgoThreeLinColorMap, "Color Conversion"); -} - -status_t OMXCameraAdapter::setAlgoGIC(Gen3A_settings& Gen3A) -{ - return setParameter3ABoolInvert((OMX_INDEXTYPE) OMX_TI_IndexConfigDisableGIC, Gen3A.AlgoGIC, "Green Inballance Correction"); -} -#endif - -status_t OMXCameraAdapter::apply3Asettings( Gen3A_settings& Gen3A ) -{ - status_t ret = NO_ERROR; - unsigned int currSett; // 32 bit - int portIndex; - - LOG_FUNCTION_NAME; - - android::AutoMutex lock(m3ASettingsUpdateLock); - - /* - * Scenes have a priority during the process - * of applying 3A related parameters. - * They can override pretty much all other 3A - * settings and similarly get overridden when - * for instance the focus mode gets switched. - * There is only one exception to this rule, - * the manual a.k.a. auto scene. - */ - if (SetSceneMode & mPending3Asettings) { - mPending3Asettings &= ~SetSceneMode; - ret |= setScene(Gen3A); - // re-apply EV compensation after setting scene mode since it probably reset it - if(Gen3A.EVCompensation) { - setEVCompensation(Gen3A); - } - return ret; - } else if (OMX_Manual != Gen3A.SceneMode) { - // only certain settings are allowed when scene mode is set - mPending3Asettings &= (SetEVCompensation | SetFocus | SetWBLock | - SetExpLock | SetWhiteBallance | SetFlash); - if ( mPending3Asettings == 0 ) return NO_ERROR; - } - - for( currSett = 1; currSett < E3aSettingMax; currSett <<= 1) - { - if( currSett & mPending3Asettings ) - { - switch( currSett ) - { - case SetEVCompensation: - { - ret |= setEVCompensation(Gen3A); - break; - } - - case SetWhiteBallance: - { - ret |= setWBMode(Gen3A); - break; - } - - case SetFlicker: - { - ret |= setFlicker(Gen3A); - break; - } - - case SetBrightness: - { - ret |= setBrightness(Gen3A); - break; - } - - case SetContrast: - { - ret |= setContrast(Gen3A); - break; - } - - case SetSharpness: - { - ret |= setSharpness(Gen3A); - break; - } - - case SetSaturation: - { - ret |= setSaturation(Gen3A); - break; - } - - case SetISO: - { - ret |= setISO(Gen3A); - break; - } - - case SetEffect: - { - ret |= setEffect(Gen3A); - break; - } - - case SetFocus: - { - ret |= setFocusMode(Gen3A); - break; - } - - case SetExpMode: - { - ret |= setExposureMode(Gen3A); - break; - } - - case SetManualExposure: { - ret |= setManualExposureVal(Gen3A); - break; - } - - case SetFlash: - { - ret |= setFlashMode(Gen3A); - break; - } - - case SetExpLock: - { - ret |= setExposureLock(Gen3A); - break; - } - - case SetWBLock: - { - ret |= setWhiteBalanceLock(Gen3A); - break; - } - case SetMeteringAreas: - { - ret |= setMeteringAreas(Gen3A); - } - break; - -#ifndef OMAP_TUNA - //TI extensions for enable/disable algos - case SetAlgoFixedGamma: - { - ret |= setAlgoFixedGamma(Gen3A); - } - break; - - case SetAlgoNSF1: - { - ret |= setAlgoNSF1(Gen3A); - } - break; - - case SetAlgoNSF2: - { - ret |= setAlgoNSF2(Gen3A); - } - break; - - case SetAlgoSharpening: - { - ret |= setAlgoSharpening(Gen3A); - } - break; - - case SetAlgoThreeLinColorMap: - { - ret |= setAlgoThreeLinColorMap(Gen3A); - } - break; - - case SetAlgoGIC: - { - ret |= setAlgoGIC(Gen3A); - } - break; -#endif - - default: - CAMHAL_LOGEB("this setting (0x%x) is still not supported in CameraAdapter ", - currSett); - break; - } - mPending3Asettings &= ~currSett; - } - } - - LOG_FUNCTION_NAME_EXIT; - - return ret; -} - -} // namespace Camera -} // namespace Ti |