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