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