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 OMXAlgo.cpp 19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* 20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* This file contains functionality for handling algorithm 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" 3000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman#include "ErrorUtils.h" 31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 328b0b73df9a2fe8e4fc2c36919d05321f2d96d543Tyler Luu#undef TRUE 338b0b73df9a2fe8e4fc2c36919d05321f2d96d543Tyler Luu 34c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevnamespace android { 35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setParametersAlgo(const CameraParameters ¶ms, 37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev BaseCameraAdapter::AdapterState state) 38c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev const char *valstr = NULL; 41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev const char *oldstr = NULL; 42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CaptureMode capMode; 4634da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman CAMHAL_LOGDB("Capture mode %s", params.get(TICameraParameters::KEY_CAP_MODE)); 47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( (valstr = params.get(TICameraParameters::KEY_CAP_MODE)) != NULL ) 48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (strcmp(valstr, (const char *) TICameraParameters::HIGH_PERFORMANCE_MODE) == 0) 50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev capMode = OMXCameraAdapter::HIGH_SPEED; 52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if (strcmp(valstr, (const char *) TICameraParameters::HIGH_QUALITY_MODE) == 0) 54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev capMode = OMXCameraAdapter::HIGH_QUALITY; 56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if (strcmp(valstr, (const char *) TICameraParameters::HIGH_QUALITY_ZSL_MODE) == 0) 58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev capMode = OMXCameraAdapter::HIGH_QUALITY_ZSL; 60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if (strcmp(valstr, (const char *) TICameraParameters::VIDEO_MODE) == 0) 62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev capMode = OMXCameraAdapter::VIDEO_MODE; 64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev capMode = OMXCameraAdapter::HIGH_QUALITY; 68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev capMode = OMXCameraAdapter::HIGH_QUALITY_ZSL; 73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mCapMode != capMode ) 77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCapMode = capMode; 79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mOMXStateSwitch = true; 80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Capture Mode set %d", mCapMode); 83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /// Configure IPP, LDCNSF, GBCE and GLBCE only in HQ mode 85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev IPPMode ipp; 86d9520b9de06f01b9411307040cf245e6fc7fe361Milen Mitkov if((mCapMode == OMXCameraAdapter::HIGH_QUALITY) || (mCapMode == OMXCameraAdapter::HIGH_QUALITY_ZSL) 87d9520b9de06f01b9411307040cf245e6fc7fe361Milen Mitkov || (mCapMode == OMXCameraAdapter::VIDEO_MODE) ) 88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( (valstr = params.get(TICameraParameters::KEY_IPP)) != NULL ) 90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (strcmp(valstr, (const char *) TICameraParameters::IPP_LDCNSF) == 0) 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ipp = OMXCameraAdapter::IPP_LDCNSF; 94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if (strcmp(valstr, (const char *) TICameraParameters::IPP_LDC) == 0) 96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ipp = OMXCameraAdapter::IPP_LDC; 98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if (strcmp(valstr, (const char *) TICameraParameters::IPP_NSF) == 0) 100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ipp = OMXCameraAdapter::IPP_NSF; 102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if (strcmp(valstr, (const char *) TICameraParameters::IPP_NONE) == 0) 104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ipp = OMXCameraAdapter::IPP_NONE; 106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ipp = OMXCameraAdapter::IPP_NONE; 110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ipp = OMXCameraAdapter::IPP_NONE; 115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVB("IPP Mode set %d", ipp); 118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (((valstr = params.get(TICameraParameters::KEY_GBCE)) != NULL) ) 120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Configure GBCE only if the setting has changed since last time 122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev oldstr = mParams.get(TICameraParameters::KEY_GBCE); 123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool cmpRes = true; 124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL != oldstr ) 125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cmpRes = strcmp(valstr, oldstr) != 0; 127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cmpRes = true; 131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( cmpRes ) 135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (strcmp(valstr, ( const char * ) TICameraParameters::GBCE_ENABLE ) == 0) 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setGBCE(OMXCameraAdapter::BRIGHTNESS_ON); 139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if (strcmp(valstr, ( const char * ) TICameraParameters::GBCE_DISABLE ) == 0) 141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setGBCE(OMXCameraAdapter::BRIGHTNESS_OFF); 143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setGBCE(OMXCameraAdapter::BRIGHTNESS_OFF); 147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 150d6525598477cbfacf893ad569ee50c3a2e905ac1Tyler Luu else if(mParams.get(TICameraParameters::KEY_GBCE) || mFirstTimeInit) 151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Disable GBCE by default 153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setGBCE(OMXCameraAdapter::BRIGHTNESS_OFF); 154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ( valstr = params.get(TICameraParameters::KEY_GLBCE) ) != NULL ) 157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Configure GLBCE only if the setting has changed since last time 159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev oldstr = mParams.get(TICameraParameters::KEY_GLBCE); 161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool cmpRes = true; 162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL != oldstr ) 163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cmpRes = strcmp(valstr, oldstr) != 0; 165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cmpRes = true; 169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( cmpRes ) 173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (strcmp(valstr, ( const char * ) TICameraParameters::GLBCE_ENABLE ) == 0) 175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setGLBCE(OMXCameraAdapter::BRIGHTNESS_ON); 177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if (strcmp(valstr, ( const char * ) TICameraParameters::GLBCE_DISABLE ) == 0) 179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setGLBCE(OMXCameraAdapter::BRIGHTNESS_OFF); 181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setGLBCE(OMXCameraAdapter::BRIGHTNESS_OFF); 185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 188d6525598477cbfacf893ad569ee50c3a2e905ac1Tyler Luu else if(mParams.get(TICameraParameters::KEY_GLBCE) || mFirstTimeInit) 189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Disable GLBCE by default 191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setGLBCE(OMXCameraAdapter::BRIGHTNESS_OFF); 192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ipp = OMXCameraAdapter::IPP_NONE; 197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mIPP != ipp ) 200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mIPP = ipp; 202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mOMXStateSwitch = true; 203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Set VNF Configuration 206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool vnfEnabled = false; 207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( params.getInt(TICameraParameters::KEY_VNF) > 0 ) 208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("VNF Enabled"); 210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vnfEnabled = true; 211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("VNF Disabled"); 215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vnfEnabled = false; 216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mVnfEnabled != vnfEnabled ) 219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mVnfEnabled = vnfEnabled; 221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mOMXStateSwitch = true; 222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Set VSTAB Configuration 225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool vstabEnabled = false; 2268b0b73df9a2fe8e4fc2c36919d05321f2d96d543Tyler Luu valstr = params.get(CameraParameters::KEY_VIDEO_STABILIZATION); 2278b0b73df9a2fe8e4fc2c36919d05321f2d96d543Tyler Luu if (valstr && strcmp(valstr, CameraParameters::TRUE) == 0) { 228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("VSTAB Enabled"); 229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vstabEnabled = true; 230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("VSTAB Disabled"); 234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vstabEnabled = false; 235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mVstabEnabled != vstabEnabled ) 238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mVstabEnabled = vstabEnabled; 240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mOMXStateSwitch = true; 241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //A work-around for a failing call to OMX flush buffers 244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ( capMode = OMXCameraAdapter::VIDEO_MODE ) && 245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( mVstabEnabled ) ) 246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mOMXStateSwitch = true; 248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 250a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev#ifdef OMAP_ENHANCEMENT 251a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev 252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Set Auto Convergence Mode 253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev valstr = params.get((const char *) TICameraParameters::KEY_AUTOCONVERGENCE); 254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( valstr != NULL ) 255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Set ManualConvergence default value 257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 manualconvergence = -30; 258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( strcmp (valstr, (const char *) TICameraParameters::AUTOCONVERGENCE_MODE_DISABLE) == 0 ) 259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAutoConvergence(OMX_TI_AutoConvergenceModeDisable, manualconvergence); 261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( strcmp (valstr, (const char *) TICameraParameters::AUTOCONVERGENCE_MODE_FRAME) == 0 ) 263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAutoConvergence(OMX_TI_AutoConvergenceModeFrame, manualconvergence); 265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( strcmp (valstr, (const char *) TICameraParameters::AUTOCONVERGENCE_MODE_CENTER) == 0 ) 267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAutoConvergence(OMX_TI_AutoConvergenceModeCenter, manualconvergence); 269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( strcmp (valstr, (const char *) TICameraParameters::AUTOCONVERGENCE_MODE_FFT) == 0 ) 271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAutoConvergence(OMX_TI_AutoConvergenceModeFocusFaceTouch, manualconvergence); 273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( strcmp (valstr, (const char *) TICameraParameters::AUTOCONVERGENCE_MODE_MANUAL) == 0 ) 275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev manualconvergence = (OMX_S32)params.getInt(TICameraParameters::KEY_MANUALCONVERGENCE_VALUES); 277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setAutoConvergence(OMX_TI_AutoConvergenceModeManual, manualconvergence); 278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVB("AutoConvergenceMode %s, value = %d", valstr, (int) manualconvergence); 280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 282a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev#endif 283a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev 284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// Get AutoConvergence 290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::getAutoConvergence(OMX_TI_AUTOCONVERGENCEMODETYPE *pACMode, 291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 *pManualConverence) 292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_CONFIG_CONVERGENCETYPE ACParams; 296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ACParams.nSize = sizeof(OMX_TI_CONFIG_CONVERGENCETYPE); 298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ACParams.nVersion = mLocalVersionParam; 299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ACParams.nPortIndex = OMX_ALL; 300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp, 304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE)OMX_TI_IndexConfigAutoConvergence, 305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &ACParams); 306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( eError != OMX_ErrorNone ) 307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while getting AutoConvergence 0x%x", eError); 309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -EINVAL; 310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *pManualConverence = ACParams.nManualConverence; 314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *pACMode = ACParams.eACMode; 315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("AutoConvergence got successfully"); 316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// Set AutoConvergence 324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setAutoConvergence(OMX_TI_AUTOCONVERGENCEMODETYPE pACMode, 325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 pManualConverence) 326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_CONFIG_CONVERGENCETYPE ACParams; 330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ACParams.nSize = sizeof(OMX_TI_CONFIG_CONVERGENCETYPE); 334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ACParams.nVersion = mLocalVersionParam; 335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ACParams.nPortIndex = OMX_ALL; 336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ACParams.nManualConverence = pManualConverence; 337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ACParams.eACMode = pACMode; 338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE)OMX_TI_IndexConfigAutoConvergence, 340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &ACParams); 341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( eError != OMX_ErrorNone ) 342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while setting AutoConvergence 0x%x", eError); 344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -EINVAL; 345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("AutoConvergence applied successfully"); 349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::enableVideoNoiseFilter(bool enable) 357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PARAM_VIDEONOISEFILTERTYPE vnfCfg; 361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&vnfCfg, OMX_PARAM_VIDEONOISEFILTERTYPE); 368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( enable ) 370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("VNF is enabled"); 372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vnfCfg.eMode = OMX_VideoNoiseFilterModeOn; 373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("VNF is disabled"); 377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vnfCfg.eMode = OMX_VideoNoiseFilterModeOff; 378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetParameter(mCameraAdapterParameters.mHandleComp, 381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( OMX_INDEXTYPE ) OMX_IndexParamVideoNoiseFilter, 382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &vnfCfg); 383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring video noise filter 0x%x", eError); 386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Video noise filter is configured successfully"); 391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::enableVideoStabilization(bool enable) 400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_FRAMESTABTYPE frameStabCfg; 404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_BOOLEANTYPE vstabp; 411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&vstabp, OMX_CONFIG_BOOLEANTYPE); 412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(enable) 413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vstabp.bEnabled = OMX_TRUE; 415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vstabp.bEnabled = OMX_FALSE; 419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetParameter(mCameraAdapterParameters.mHandleComp, 422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE)OMX_IndexParamFrameStabilisation, 423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &vstabp); 424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring video stabilization param 0x%x", eError); 427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Video stabilization param configured successfully"); 432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&frameStabCfg, OMX_CONFIG_FRAMESTABTYPE); 440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp, 443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( OMX_INDEXTYPE ) OMX_IndexConfigCommonFrameStabilisation, 444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &frameStabCfg); 445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while getting video stabilization mode 0x%x", 448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (unsigned int)eError); 449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("VSTAB Port Index = %d", (int)frameStabCfg.nPortIndex); 453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frameStabCfg.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( enable ) 456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("VSTAB is enabled"); 458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frameStabCfg.bStab = OMX_TRUE; 459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("VSTAB is disabled"); 463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frameStabCfg.bStab = OMX_FALSE; 464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( OMX_INDEXTYPE ) OMX_IndexConfigCommonFrameStabilisation, 469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &frameStabCfg); 470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring video stabilization mode 0x%x", eError); 473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Video stabilization mode configured successfully"); 478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setGBCE(OMXCameraAdapter::BrightnessMode mode) 487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_CONFIG_LOCAL_AND_GLOBAL_BRIGHTNESSCONTRASTTYPE bControl; 491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -EINVAL; 498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&bControl, OMX_TI_CONFIG_LOCAL_AND_GLOBAL_BRIGHTNESSCONTRASTTYPE); 503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bControl.nPortIndex = OMX_ALL; 505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( mode ) 507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMXCameraAdapter::BRIGHTNESS_ON: 509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bControl.eControl = OMX_TI_BceModeOn; 511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMXCameraAdapter::BRIGHTNESS_AUTO: 514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bControl.eControl = OMX_TI_BceModeAuto; 516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMXCameraAdapter::BRIGHTNESS_OFF: 519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bControl.eControl = OMX_TI_BceModeOff; 522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( OMX_INDEXTYPE ) OMX_TI_IndexConfigGlobalBrightnessContrastEnhance, 528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &bControl); 529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while setting GBCE 0x%x", eError); 532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("GBCE configured successfully 0x%x", mode); 536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setGLBCE(OMXCameraAdapter::BrightnessMode mode) 545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_CONFIG_LOCAL_AND_GLOBAL_BRIGHTNESSCONTRASTTYPE bControl; 549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -EINVAL; 556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&bControl, OMX_TI_CONFIG_LOCAL_AND_GLOBAL_BRIGHTNESSCONTRASTTYPE); 561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bControl.nPortIndex = OMX_ALL; 562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( mode ) 564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMXCameraAdapter::BRIGHTNESS_ON: 566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bControl.eControl = OMX_TI_BceModeOn; 568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMXCameraAdapter::BRIGHTNESS_AUTO: 571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bControl.eControl = OMX_TI_BceModeAuto; 573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMXCameraAdapter::BRIGHTNESS_OFF: 576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bControl.eControl = OMX_TI_BceModeOff; 579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( OMX_INDEXTYPE ) OMX_TI_IndexConfigLocalBrightnessContrastEnhance, 585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &bControl); 586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configure GLBCE 0x%x", eError); 589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("GLBCE configured successfully"); 593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setCaptureMode(OMXCameraAdapter::CaptureMode mode) 602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_CAMOPERATINGMODETYPE camMode; 606308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov OMX_TI_PARAM_ZSLHISTORYLENTYPE zslHistoryLen; 607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_BOOLEANTYPE bCAC; 608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 611308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov //ZSL have 4 buffers history by default 612308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov OMX_INIT_STRUCT_PTR (&zslHistoryLen, OMX_TI_PARAM_ZSLHISTORYLENTYPE); 613308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov zslHistoryLen.nHistoryLen = 4; 614308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov 6154164de02d63220e48eaca08def1d6c5802a8693fSundar Raman //CAC is disabled by default 616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&bCAC, OMX_CONFIG_BOOLEANTYPE); 617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bCAC.bEnabled = OMX_FALSE; 618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&camMode, OMX_CONFIG_CAMOPERATINGMODETYPE); 623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mSensorIndex == OMX_TI_StereoSensor ) 624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Camera mode: STEREO"); 626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camMode.eCamOperatingMode = OMX_CaptureStereoImageCapture; 627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( OMXCameraAdapter::HIGH_SPEED == mode ) 629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Camera mode: HIGH SPEED"); 631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camMode.eCamOperatingMode = OMX_CaptureImageHighSpeedTemporalBracketing; 632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if( OMXCameraAdapter::HIGH_QUALITY == mode ) 634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Camera mode: HIGH QUALITY"); 636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camMode.eCamOperatingMode = OMX_CaptureImageProfileBase; 637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if( OMXCameraAdapter::HIGH_QUALITY_ZSL== mode ) 639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 6409743353b9dd1da8d1755218a7b961400ce825bd1Tyler Luu const char* valstr = NULL; 641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Camera mode: HIGH QUALITY_ZSL"); 642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camMode.eCamOperatingMode = OMX_TI_CaptureImageProfileZeroShutterLag; 6439743353b9dd1da8d1755218a7b961400ce825bd1Tyler Luu 644c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev if ( !mIternalRecordingHint ) { 6459743353b9dd1da8d1755218a7b961400ce825bd1Tyler Luu zslHistoryLen.nHistoryLen = 5; 6469743353b9dd1da8d1755218a7b961400ce825bd1Tyler Luu } 647c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev 648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if( OMXCameraAdapter::VIDEO_MODE == mode ) 650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Camera mode: VIDEO MODE"); 652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camMode.eCamOperatingMode = OMX_CaptureVideo; 653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("Camera mode: INVALID mode passed!"); 657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return BAD_VALUE; 658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 66010e47a001f5c979a3cd7f72238cb35c9eee40c1eTyler Luu if( NO_ERROR == ret ) 661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetParameter(mCameraAdapterParameters.mHandleComp, 663308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov ( OMX_INDEXTYPE ) OMX_TI_IndexParamZslHistoryLen, 664308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov &zslHistoryLen); 665308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov if ( OMX_ErrorNone != eError ) 666308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov { 667308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov CAMHAL_LOGEB("Error while configuring ZSL History len 0x%x", eError); 66810e47a001f5c979a3cd7f72238cb35c9eee40c1eTyler Luu // Don't return status for now 66910e47a001f5c979a3cd7f72238cb35c9eee40c1eTyler Luu // as high history values might lead 67010e47a001f5c979a3cd7f72238cb35c9eee40c1eTyler Luu // to errors on some platforms. 67110e47a001f5c979a3cd7f72238cb35c9eee40c1eTyler Luu // ret = ErrorUtils::omxToAndroidError(eError); 672308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov } 673308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov else 674308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov { 675308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov CAMHAL_LOGDA("ZSL History len configured successfully"); 676308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov } 677308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov } 678308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov 67910e47a001f5c979a3cd7f72238cb35c9eee40c1eTyler Luu if( NO_ERROR == ret ) 680308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov { 681308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov eError = OMX_SetParameter(mCameraAdapterParameters.mHandleComp, 682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( OMX_INDEXTYPE ) OMX_IndexCameraOperatingMode, 683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &camMode); 684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring camera mode 0x%x", eError); 68710e47a001f5c979a3cd7f72238cb35c9eee40c1eTyler Luu ret = ErrorUtils::omxToAndroidError(eError); 688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Camera mode configured successfully"); 692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 69510e47a001f5c979a3cd7f72238cb35c9eee40c1eTyler Luu if( NO_ERROR == ret ) 696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Configure CAC 698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( OMX_INDEXTYPE ) OMX_IndexConfigChromaticAberrationCorrection, 700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &bCAC); 701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring CAC 0x%x", eError); 70410e47a001f5c979a3cd7f72238cb35c9eee40c1eTyler Luu ret = ErrorUtils::omxToAndroidError(eError); 705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("CAC configured successfully"); 709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setLDC(OMXCameraAdapter::IPPMode mode) 719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_BOOLEANTYPE bOMX; 723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateLoaded != mComponentState ) 727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is not in loaded state"); 729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -EINVAL; 730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&bOMX, OMX_CONFIG_BOOLEANTYPE); 735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( mode ) 737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMXCameraAdapter::IPP_LDCNSF: 739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMXCameraAdapter::IPP_LDC: 740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bOMX.bEnabled = OMX_TRUE; 742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMXCameraAdapter::IPP_NONE: 745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMXCameraAdapter::IPP_NSF: 746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bOMX.bEnabled = OMX_FALSE; 749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVB("Configuring LDC mode 0x%x", bOMX.bEnabled); 754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetParameter(mCameraAdapterParameters.mHandleComp, 755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( OMX_INDEXTYPE ) OMX_IndexParamLensDistortionCorrection, 756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &bOMX); 757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("Error while setting LDC"); 760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setNSF(OMXCameraAdapter::IPPMode mode) 770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PARAM_ISONOISEFILTERTYPE nsf; 774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateLoaded != mComponentState ) 778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is not in loaded state"); 780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -EINVAL; 781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&nsf, OMX_PARAM_ISONOISEFILTERTYPE); 786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nsf.nPortIndex = OMX_ALL; 787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( mode ) 789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMXCameraAdapter::IPP_LDCNSF: 791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMXCameraAdapter::IPP_NSF: 792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nsf.eMode = OMX_ISONoiseFilterModeOn; 794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMXCameraAdapter::IPP_LDC: 797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMXCameraAdapter::IPP_NONE: 798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nsf.eMode = OMX_ISONoiseFilterModeOff; 801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVB("Configuring NSF mode 0x%x", nsf.eMode); 806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetParameter(mCameraAdapterParameters.mHandleComp, 807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE)OMX_IndexParamHighISONoiseFiler, 808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &nsf); 809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("Error while setting NSF"); 812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setImageQuality(unsigned int quality) 822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IMAGE_PARAM_QFACTORTYPE jpegQualityConf; 826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -EINVAL; 833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT(jpegQualityConf, OMX_IMAGE_PARAM_QFACTORTYPE); 838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev jpegQualityConf.nQFactor = quality; 839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev jpegQualityConf.nPortIndex = mCameraAdapterParameters.mImagePortIndex; 840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetParameter(mCameraAdapterParameters.mHandleComp, 842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexParamQFactor, 843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &jpegQualityConf); 844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring jpeg Quality 0x%x", eError); 847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setThumbnailParams(unsigned int width, 857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned int height, 858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned int quality) 859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PARAM_THUMBNAILTYPE thumbConf; 863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -EINVAL; 870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT(thumbConf, OMX_PARAM_THUMBNAILTYPE); 875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev thumbConf.nPortIndex = mCameraAdapterParameters.mImagePortIndex; 876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_GetParameter(mCameraAdapterParameters.mHandleComp, 878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( OMX_INDEXTYPE ) OMX_IndexParamThumbnail, 879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &thumbConf); 880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while retrieving thumbnail size 0x%x", eError); 883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //CTS Requirement: width or height equal to zero should 887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //result in absent EXIF thumbnail 888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ( 0 == width ) || ( 0 == height ) ) 889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev thumbConf.nWidth = mThumbRes[0].width; 891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev thumbConf.nHeight = mThumbRes[0].height; 892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev thumbConf.eCompressionFormat = OMX_IMAGE_CodingUnused; 893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev thumbConf.nWidth = width; 897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev thumbConf.nHeight = height; 898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev thumbConf.nQuality = quality; 899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev thumbConf.eCompressionFormat = OMX_IMAGE_CodingJPEG; 900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Thumbnail width = %d, Thumbnail Height = %d", width, height); 903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetParameter(mCameraAdapterParameters.mHandleComp, 905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( OMX_INDEXTYPE ) OMX_IndexParamThumbnail, 906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &thumbConf); 907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring thumbnail size 0x%x", eError); 910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setAlgoPriority(AlgoPriority priority, 920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Algorithm3A algo, 921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool enable) 922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 92700479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( OMX_StateInvalid == mComponentState ) { 928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 92900479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman return NO_INIT; 93000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } 931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 93200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( FACE_PRIORITY == priority ) { 933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 93400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( algo & WHITE_BALANCE_ALGO ) { 93500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( enable ) { 93600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mFacePriority.bAwbFaceEnable = OMX_TRUE; 93700479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } else { 93800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mFacePriority.bAwbFaceEnable = OMX_FALSE; 93900479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } 94000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } 941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 94200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( algo & EXPOSURE_ALGO ) { 94300479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( enable ) { 94400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mFacePriority.bAeFaceEnable = OMX_TRUE; 94500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } else { 94600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mFacePriority.bAeFaceEnable = OMX_FALSE; 947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 94800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } 949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 95000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( algo & FOCUS_ALGO ) { 95100479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( enable ) { 95200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mFacePriority.bAfFaceEnable = OMX_TRUE; 95300479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } else { 95400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mFacePriority.bAfFaceEnable = OMX_FALSE; 95500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } 95600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } 957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 95800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 95900479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman ( OMX_INDEXTYPE ) OMX_TI_IndexConfigFacePriority3a, 96000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman &mFacePriority); 96100479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( OMX_ErrorNone != eError ) { 96200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman CAMHAL_LOGEB("Error while configuring face priority 0x%x", eError); 96300479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } else { 96400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman CAMHAL_LOGDB("Face priority for algorithms set successfully 0x%x, 0x%x, 0x%x", 96500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mFacePriority.bAfFaceEnable, 96600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mFacePriority.bAeFaceEnable, 96700479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mFacePriority.bAwbFaceEnable); 96800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } 969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 97000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } else if ( REGION_PRIORITY == priority ) { 971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 97200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( algo & WHITE_BALANCE_ALGO ) { 97300479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( enable ) { 97400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mRegionPriority.bAwbRegionEnable= OMX_TRUE; 97500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } else { 97600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mRegionPriority.bAwbRegionEnable = OMX_FALSE; 97700479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } 97800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } 979c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 98000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( algo & EXPOSURE_ALGO ) { 98100479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( enable ) { 98200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mRegionPriority.bAeRegionEnable = OMX_TRUE; 98300479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } else { 98400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mRegionPriority.bAeRegionEnable = OMX_FALSE; 98500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } 98600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } 987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 98800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( algo & FOCUS_ALGO ) { 98900479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( enable ) { 99000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mRegionPriority.bAfRegionEnable = OMX_TRUE; 99100479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } else { 99200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mRegionPriority.bAfRegionEnable = OMX_FALSE; 993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 99400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } 995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 99600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 99700479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman ( OMX_INDEXTYPE ) OMX_TI_IndexConfigRegionPriority3a, 99800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman &mRegionPriority); 99900479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman if ( OMX_ErrorNone != eError ) { 100000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman CAMHAL_LOGEB("Error while configuring region priority 0x%x", eError); 100100479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } else { 100200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman CAMHAL_LOGDB("Region priority for algorithms set successfully 0x%x, 0x%x, 0x%x", 100300479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mRegionPriority.bAfRegionEnable, 100400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mRegionPriority.bAeRegionEnable, 100500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman mRegionPriority.bAwbRegionEnable); 1006c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 100800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman } 100900479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman 1010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 101200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman return ErrorUtils::omxToAndroidError(eError); 1013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setPictureRotation(unsigned int degree) 1016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 1019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_ROTATIONTYPE rotation; 1020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 1024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 1026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 1027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 1030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT(rotation, OMX_CONFIG_ROTATIONTYPE); 1032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev rotation.nRotation = degree; 1033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev rotation.nPortIndex = mCameraAdapterParameters.mImagePortIndex; 1034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 1036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonRotate, 1037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &rotation); 1038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 1039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring rotation 0x%x", eError); 1041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setSensorOrientation(unsigned int degree) 1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 1053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_ROTATIONTYPE sensorOrientation; 1054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int tmpHeight, tmpWidth; 1055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMXCameraPortParameters *mPreviewData = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex]; 1056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_StateInvalid == mComponentState ) 1059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 1061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 1062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Set Temproary Port resolution. 1065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * For resolution with height > 1008,resolution cannot be set without configuring orientation. 1066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * So we first set a temp resolution. We have used VGA 1067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tmpHeight = mPreviewData->mHeight; 1069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tmpWidth = mPreviewData->mWidth; 1070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewData->mWidth = 640; 1071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewData->mHeight = 480; 1072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setFormat(OMX_CAMERA_PORT_VIDEO_OUT_PREVIEW, *mPreviewData); 1073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret != NO_ERROR ) 1074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("setFormat() failed %d", ret); 1076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Now set Required Orientation*/ 1079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 1080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT(sensorOrientation, OMX_CONFIG_ROTATIONTYPE); 1082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sensorOrientation.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 1083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp, 1084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonRotate, 1085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &sensorOrientation); 1086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 1087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while Reading Sensor Orientation : 0x%x", eError); 1089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVB(" Currently Sensor Orientation is set to : %d", 1091c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) sensorOrientation.nRotation); 1092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sensorOrientation.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; 1093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sensorOrientation.nRotation = degree; 1094c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 1095c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonRotate, 1096c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &sensorOrientation); 1097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 1098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while configuring rotation 0x%x", eError); 1100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVA(" Read the Parameters that are set"); 1102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp, 1103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IndexConfigCommonRotate, 1104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &sensorOrientation); 1105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( OMX_ErrorNone != eError ) 1106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while Reading Sensor Orientation : 0x%x", eError); 1108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVB(" Currently Sensor Orientation is set to : %d", 1110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) sensorOrientation.nRotation); 1111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGVB(" Sensor Configured for Port : %d", 1112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) sensorOrientation.nPortIndex); 1113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Now set the required resolution as requested */ 1116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewData->mWidth = tmpWidth; 1118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewData->mHeight = tmpHeight; 1119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 1120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setFormat (mCameraAdapterParameters.mPrevPortIndex, 1122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex]); 1123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR != ret ) 1124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("setFormat() failed %d", ret); 1126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setVFramerate(OMX_U32 minFrameRate, OMX_U32 maxFrameRate) 1135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 1138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_CONFIG_VARFRMRANGETYPE vfr; 113934da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman OMXCameraPortParameters * mPreviewData = 114034da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex]; 1141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 114434da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman if ( OMX_StateInvalid == mComponentState ) { 1145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("OMX component is in invalid state"); 1146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -EINVAL; 114734da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman } 1148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 114934da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman // The port framerate should never be smaller 115034da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman // than max framerate. 115134da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman if ( mPreviewData->mFrameRate < maxFrameRate ) { 115234da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman return NO_INIT; 115334da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman } 115434da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman 115534da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman if ( NO_ERROR == ret ) { 1156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INIT_STRUCT_PTR (&vfr, OMX_TI_CONFIG_VARFRMRANGETYPE); 1157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vfr.xMin = minFrameRate<<16; 1159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vfr.xMax = maxFrameRate<<16; 1160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, 1162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_INDEXTYPE)OMX_TI_IndexConfigVarFrmRange, 1163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &vfr); 116434da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman if(OMX_ErrorNone != eError) { 1165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Error while setting VFR min = %d, max = %d, error = 0x%x", 1166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) minFrameRate, 1167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) maxFrameRate, 1168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError); 1169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 117034da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman } else { 1171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("VFR Configured Successfully [%d:%d]", 1172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) minFrameRate, 1173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( unsigned int ) maxFrameRate); 1174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 117534da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman } 1176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 1181