1c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*
2c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Copyright (C) Texas Instruments - http://www.ti.com/
3c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
4c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Licensed under the Apache License, Version 2.0 (the "License");
5c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * you may not use this file except in compliance with the License.
6c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * You may obtain a copy of the License at
7c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
8c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *      http://www.apache.org/licenses/LICENSE-2.0
9c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
10c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Unless required by applicable law or agreed to in writing, software
11c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * distributed under the License is distributed on an "AS IS" BASIS,
12c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * See the License for the specific language governing permissions and
14c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * limitations under the License.
15c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
16c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
17c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
18c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* @file OMXAlgo.cpp
19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev*
20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* This file contains functionality for handling algorithm configurations.
21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev*
22c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev*/
23c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "CameraHal.h"
25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMXCameraAdapter.h"
2600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman#include "ErrorUtils.h"
27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
288b0b73df9a2fe8e4fc2c36919d05321f2d96d543Tyler Luu#undef TRUE
298b0b73df9a2fe8e4fc2c36919d05321f2d96d543Tyler Luu
30f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsnamespace Ti {
31f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsnamespace Camera {
32c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
33f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsstatus_t OMXCameraAdapter::setParametersAlgo(const android::CameraParameters &params,
34c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                             BaseCameraAdapter::AdapterState state)
35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    const char *valstr = NULL;
38f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    const char *valManualStr = NULL;
39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    const char *oldstr = NULL;
40f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMXCameraPortParameters *cap;
41f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    BrightnessMode gbce = BRIGHTNESS_OFF;
42f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    BrightnessMode glbce = BRIGHTNESS_OFF;
43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CaptureMode capMode;
4734da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman    CAMHAL_LOGDB("Capture mode %s",  params.get(TICameraParameters::KEY_CAP_MODE));
48f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if ( (valstr = params.get(TICameraParameters::KEY_CAP_MODE)) != NULL ) {
49f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if (strcmp(valstr, (const char *) TICameraParameters::HIGH_PERFORMANCE_MODE) == 0) {
50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            capMode = OMXCameraAdapter::HIGH_SPEED;
51f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mCapabilitiesOpMode = MODE_HIGH_SPEED;
52f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if (strcmp(valstr, (const char *) TICameraParameters::EXPOSURE_BRACKETING) == 0) {
53f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            capMode = OMXCameraAdapter::HIGH_SPEED;
54f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mCapabilitiesOpMode = MODE_HIGH_SPEED;
55f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if (strcmp(valstr, (const char *) TICameraParameters::ZOOM_BRACKETING) == 0) {
56f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            capMode = OMXCameraAdapter::HIGH_SPEED;
57f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mCapabilitiesOpMode = MODE_HIGH_SPEED;
58f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if (strcmp(valstr, (const char *) TICameraParameters::HIGH_QUALITY_MODE) == 0) {
59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            capMode = OMXCameraAdapter::HIGH_QUALITY;
60f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mCapabilitiesOpMode = MODE_HIGH_QUALITY;
61f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if (strcmp(valstr, (const char *) TICameraParameters::HIGH_QUALITY_ZSL_MODE) == 0) {
62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            capMode = OMXCameraAdapter::HIGH_QUALITY_ZSL;
63f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mCapabilitiesOpMode = MODE_ZEROSHUTTERLAG;
64f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if (strcmp(valstr, (const char *) TICameraParameters::VIDEO_MODE) == 0) {
65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            capMode = OMXCameraAdapter::VIDEO_MODE;
66f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mCapabilitiesOpMode = MODE_VIDEO;
67f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if (strcmp(valstr, (const char *) TICameraParameters::VIDEO_MODE_HQ) == 0) {
68f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons              capMode = OMXCameraAdapter::VIDEO_MODE_HQ;
69f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons              mCapabilitiesOpMode = MODE_VIDEO_HIGH_QUALITY;
70f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if (strcmp(valstr, (const char *) TICameraParameters::CP_CAM_MODE) == 0) {
71f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            capMode = OMXCameraAdapter::CP_CAM;
72f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mCapabilitiesOpMode = MODE_CPCAM;
73f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if (strcmp(valstr, (const char *) TICameraParameters::TEMP_BRACKETING) == 0) {
74f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            capMode = OMXCameraAdapter::HIGH_SPEED;
75f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mCapabilitiesOpMode = MODE_HIGH_SPEED;
76f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else {
77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            capMode = OMXCameraAdapter::HIGH_QUALITY;
78f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mCapabilitiesOpMode = MODE_HIGH_QUALITY;
79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
81f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    } else {
82f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        capMode = OMXCameraAdapter::HIGH_QUALITY;
83f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        mCapabilitiesOpMode = MODE_HIGH_QUALITY;
84f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
86f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if ( mSensorIndex == 2 ) {
87f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons       mCapabilitiesOpMode = MODE_STEREO;
88f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
89f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
90f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if ( mCapMode != capMode ) {
91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mCapMode = capMode;
92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mOMXStateSwitch = true;
93f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        mPendingPreviewSettings |= SetCapMode;
94f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CAMHAL_LOGDB("Capture Mode set %d", mCapMode);
97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    /// Configure IPP, LDCNSF, GBCE and GLBCE only in HQ mode
99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    IPPMode ipp;
100d9520b9de06f01b9411307040cf245e6fc7fe361Milen Mitkov    if((mCapMode == OMXCameraAdapter::HIGH_QUALITY) || (mCapMode == OMXCameraAdapter::HIGH_QUALITY_ZSL)
101f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            || (mCapMode == OMXCameraAdapter::VIDEO_MODE)
102f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            || (mCapMode == OMXCameraAdapter::CP_CAM))
103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev          if ( (valstr = params.get(TICameraParameters::KEY_IPP)) != NULL )
105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if (strcmp(valstr, (const char *) TICameraParameters::IPP_LDCNSF) == 0)
107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ipp = OMXCameraAdapter::IPP_LDCNSF;
109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else if (strcmp(valstr, (const char *) TICameraParameters::IPP_LDC) == 0)
111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ipp = OMXCameraAdapter::IPP_LDC;
113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else if (strcmp(valstr, (const char *) TICameraParameters::IPP_NSF) == 0)
115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ipp = OMXCameraAdapter::IPP_NSF;
117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else if (strcmp(valstr, (const char *) TICameraParameters::IPP_NONE) == 0)
119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ipp = OMXCameraAdapter::IPP_NONE;
121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ipp = OMXCameraAdapter::IPP_NONE;
125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        else
128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ipp = OMXCameraAdapter::IPP_NONE;
130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGVB("IPP Mode set %d", ipp);
133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
134f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if (((valstr = params.get(TICameraParameters::KEY_GBCE)) != NULL) ) {
135f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            if (strcmp(valstr, android::CameraParameters::TRUE ) == 0) {
136f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                gbce = BRIGHTNESS_ON;
137f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            } else {
138f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                gbce = BRIGHTNESS_OFF;
139f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            }
140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
141f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            if ( gbce != mGBCE ) {
142f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                mGBCE = gbce;
143f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                setGBCE(mGBCE);
144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
145f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
146f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if(mFirstTimeInit) {
147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            //Disable GBCE by default
148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            setGBCE(OMXCameraAdapter::BRIGHTNESS_OFF);
149f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        }
150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
151f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if ( ( valstr = params.get(TICameraParameters::KEY_GLBCE) ) != NULL ) {
152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
153f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            if (strcmp(valstr, android::CameraParameters::TRUE) == 0) {
154f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                glbce = BRIGHTNESS_ON;
155f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            } else {
156f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                glbce = BRIGHTNESS_OFF;
157f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            }
158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
159f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            if ( glbce != mGLBCE ) {
160f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                mGLBCE = glbce;
161f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                setGLBCE(mGLBCE);
162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
163f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
164f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if(mFirstTimeInit) {
165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            //Disable GLBCE by default
166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            setGLBCE(OMXCameraAdapter::BRIGHTNESS_OFF);
167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
168f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
169f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    } else {
170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ipp = OMXCameraAdapter::IPP_NONE;
171f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( mIPP != ipp )
174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mIPP = ipp;
176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mOMXStateSwitch = true;
177f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        mPendingPreviewSettings |= SetLDC;
178f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        mPendingPreviewSettings |= SetNSF;
179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///Set VNF Configuration
182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool vnfEnabled = false;
183f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    valstr = params.get(TICameraParameters::KEY_VNF);
184f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if (valstr && strcmp(valstr, android::CameraParameters::TRUE) == 0)
185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGDA("VNF Enabled");
187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        vnfEnabled = true;
188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else
190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGDA("VNF Disabled");
192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        vnfEnabled = false;
193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( mVnfEnabled != vnfEnabled )
196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mVnfEnabled = vnfEnabled;
198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mOMXStateSwitch = true;
199f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        mPendingPreviewSettings |= SetVNF;
200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///Set VSTAB Configuration
203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool vstabEnabled = false;
204f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    valstr = params.get(android::CameraParameters::KEY_VIDEO_STABILIZATION);
205f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if (valstr && strcmp(valstr, android::CameraParameters::TRUE) == 0) {
206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGDA("VSTAB Enabled");
207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        vstabEnabled = true;
208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else
210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGDA("VSTAB Disabled");
212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        vstabEnabled = false;
213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( mVstabEnabled != vstabEnabled )
216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mVstabEnabled = vstabEnabled;
218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mOMXStateSwitch = true;
219f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        mPendingPreviewSettings |= SetVSTAB;
220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //A work-around for a failing call to OMX flush buffers
223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( ( capMode = OMXCameraAdapter::VIDEO_MODE ) &&
224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev         ( mVstabEnabled ) )
225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mOMXStateSwitch = true;
227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
229a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev#ifdef OMAP_ENHANCEMENT
230a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev
231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Set Auto Convergence Mode
232f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    valstr = params.get((const char *) TICameraParameters::KEY_AUTOCONVERGENCE_MODE);
233f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    valManualStr = params.get(TICameraParameters::KEY_MANUAL_CONVERGENCE);
234f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
235f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    cap = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex];
236f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
237f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if (cap->mFrameLayoutType != OMX_TI_StereoFrameLayout2D) {
238f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if ((valstr != NULL) || (valManualStr != NULL)) {
239f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            setAutoConvergence(valstr, valManualStr, params);
240f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            if (valstr != NULL) {
241f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                CAMHAL_LOGDB("AutoConvergenceMode %s", valstr);
242f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            }
243f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            if (valManualStr != NULL) {
244f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                CAMHAL_LOGDB("Manual Convergence  %s", valManualStr);
245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
248f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        //Set Mechanical Misalignment Correction
249f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        valstr = params.get(TICameraParameters::KEY_MECHANICAL_MISALIGNMENT_CORRECTION);
250f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if ( valstr != NULL ) {
251f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            setMechanicalMisalignmentCorrection(strcmp(valstr, android::CameraParameters::TRUE) == 0);
252f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            CAMHAL_LOGDB("Mechanical Misalignment Correction %s", valstr);
253f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        }
254f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
255f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
256a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev#endif
257a6e9160507cd4c0d276fbe45a1efb1dae28c3998Emilian Peev
258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
263f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons// Set AutoConvergence
264f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsstatus_t OMXCameraAdapter::setAutoConvergence(const char *pValstr, const char *pValManualstr, const android::CameraParameters &params)
265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE eError = OMX_ErrorNone;
268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_TI_CONFIG_CONVERGENCETYPE ACParams;
269f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    const char *str = NULL;
270f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Vector<android::sp<CameraArea> > tempAreas;
271f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int mode;
272f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int changed = 0;
273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
276f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if ( pValManualstr != NULL ) {
277f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        OMX_S32 manualConvergence = (OMX_S32)strtol(pValManualstr ,0 ,0);
278f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
279f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if (mManualConv != manualConvergence) {
280f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mManualConv = manualConvergence;
281f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            changed = 1;
282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
283f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
284f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
285f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if ( pValstr != NULL ) {
286f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        mode = getLUTvalue_HALtoOMX(pValstr, mAutoConvergenceLUT);
287f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
288f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if ( NAME_NOT_FOUND == mode ) {
289f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            CAMHAL_LOGEB("Wrong convergence mode: %s", pValstr);
290f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            LOG_FUNCTION_NAME_EXIT;
291f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            return mode;
292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
294f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if ( mAutoConv != static_cast<OMX_TI_AUTOCONVERGENCEMODETYPE> (mode) ) {
295f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mAutoConv = static_cast<OMX_TI_AUTOCONVERGENCEMODETYPE> (mode);
296f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            changed = 1;
297f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        }
298f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
300f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if ( OMX_TI_AutoConvergenceModeFocusFaceTouch == mAutoConv ) {
301f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        android::AutoMutex lock(mTouchAreasLock);
302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
303f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        str = params.get(android::CameraParameters::KEY_METERING_AREAS);
304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
305f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if ( NULL != str ) {
306f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            ret = CameraArea::parseAreas(str, ( strlen(str) + 1 ), tempAreas);
307f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else {
308f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            CAMHAL_LOGEB("Touch areas not received in %s",
309f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                         android::CameraParameters::KEY_METERING_AREAS);
310f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            LOG_FUNCTION_NAME_EXIT;
311f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            return BAD_VALUE;
312f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        }
313f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
314f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if ( CameraArea::areAreasDifferent(mTouchAreas, tempAreas) ) {
315f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mTouchAreas.clear();
316f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mTouchAreas = tempAreas;
317f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            changed = 1;
318f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        }
319f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
320f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
321f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if (!changed) {
322f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        LOG_FUNCTION_NAME_EXIT;
323f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        return NO_ERROR;
324f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
326f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMXCameraPortParameters * mPreviewData;
327f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mPreviewData = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex];
328f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
329f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    ACParams.nSize = (OMX_U32)sizeof(OMX_TI_CONFIG_CONVERGENCETYPE);
330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ACParams.nVersion = mLocalVersionParam;
331f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    ACParams.nPortIndex = mCameraAdapterParameters.mPrevPortIndex;
332f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
333f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_GetConfig(mCameraAdapterParameters.mHandleComp,
334f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                  (OMX_INDEXTYPE)OMX_TI_IndexConfigAutoConvergence,
335f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                  &ACParams);
336f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
337f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    ACParams.eACMode = mAutoConv;
338f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    ACParams.nManualConverence = mManualConv;
339f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
340f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if (1 == mTouchAreas.size()) {
341f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        int widthDivisor = 1;
342f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        int heightDivisor = 1;
343f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
344f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if (mPreviewData->mFrameLayoutType == OMX_TI_StereoFrameLayoutTopBottom) {
345f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            heightDivisor = 2;
346f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        }
347f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if (mPreviewData->mFrameLayoutType == OMX_TI_StereoFrameLayoutLeftRight) {
348f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            widthDivisor = 2;
349f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        }
350f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
351f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        // transform the coordinates to 3A-type coordinates
352f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        mTouchAreas.itemAt(0)->transfrom((size_t)mPreviewData->mWidth/widthDivisor,
353f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                         (size_t)mPreviewData->mHeight/heightDivisor,
354f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                         (size_t&) ACParams.nACProcWinStartY,
355f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                         (size_t&) ACParams.nACProcWinStartX,
356f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                         (size_t&) ACParams.nACProcWinWidth,
357f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                         (size_t&) ACParams.nACProcWinHeight);
358f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
359f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
360f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    CAMHAL_LOGDB("nSize %d", (int)ACParams.nSize);
361f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    CAMHAL_LOGDB("nPortIndex %d", (int)ACParams.nPortIndex);
362f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    CAMHAL_LOGDB("nManualConverence %d", (int)ACParams.nManualConverence);
363f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    CAMHAL_LOGDB("eACMode %d", (int)ACParams.eACMode);
364f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    CAMHAL_LOGDB("nACProcWinStartX %d", (int)ACParams.nACProcWinStartX);
365f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    CAMHAL_LOGDB("nACProcWinStartY %d", (int)ACParams.nACProcWinStartY);
366f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    CAMHAL_LOGDB("nACProcWinWidth %d", (int)ACParams.nACProcWinWidth);
367f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    CAMHAL_LOGDB("nACProcWinHeight %d", (int)ACParams.nACProcWinHeight);
368f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    CAMHAL_LOGDB("bACStatus %d", (int)ACParams.bACStatus);
369f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    eError =  OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                            (OMX_INDEXTYPE)OMX_TI_IndexConfigAutoConvergence,
372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                            &ACParams);
373f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
374f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if ( eError != OMX_ErrorNone ) {
375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEB("Error while setting AutoConvergence 0x%x", eError);
376f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        ret = BAD_VALUE;
377f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    } else {
378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGDA("AutoConvergence applied successfully");
379f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::enableVideoNoiseFilter(bool enable)
387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE eError = OMX_ErrorNone;
390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_PARAM_VIDEONOISEFILTERTYPE vnfCfg;
391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMX_INIT_STRUCT_PTR (&vnfCfg, OMX_PARAM_VIDEONOISEFILTERTYPE);
398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( enable )
400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("VNF is enabled");
402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            vnfCfg.eMode = OMX_VideoNoiseFilterModeOn;
403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        else
405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("VNF is disabled");
407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            vnfCfg.eMode = OMX_VideoNoiseFilterModeOff;
408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError =  OMX_SetParameter(mCameraAdapterParameters.mHandleComp,
411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                   ( OMX_INDEXTYPE ) OMX_IndexParamVideoNoiseFilter,
412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                   &vnfCfg);
413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( OMX_ErrorNone != eError )
414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEB("Error while configuring video noise filter 0x%x", eError);
416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ret = -1;
417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        else
419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("Video noise filter is configured successfully");
421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::enableVideoStabilization(bool enable)
430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE eError = OMX_ErrorNone;
433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_CONFIG_FRAMESTABTYPE frameStabCfg;
434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMX_CONFIG_BOOLEANTYPE vstabp;
441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMX_INIT_STRUCT_PTR (&vstabp, OMX_CONFIG_BOOLEANTYPE);
442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if(enable)
443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            vstabp.bEnabled = OMX_TRUE;
445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        else
447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            vstabp.bEnabled = OMX_FALSE;
449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError = OMX_SetParameter(mCameraAdapterParameters.mHandleComp,
452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  (OMX_INDEXTYPE)OMX_IndexParamFrameStabilisation,
453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  &vstabp);
454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( OMX_ErrorNone != eError )
455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEB("Error while configuring video stabilization param 0x%x", eError);
457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ret = -1;
458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        else
460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("Video stabilization param configured successfully");
462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMX_INIT_STRUCT_PTR (&frameStabCfg, OMX_CONFIG_FRAMESTABTYPE);
470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError =  OMX_GetConfig(mCameraAdapterParameters.mHandleComp,
473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                ( OMX_INDEXTYPE ) OMX_IndexConfigCommonFrameStabilisation,
474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                &frameStabCfg);
475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( OMX_ErrorNone != eError )
476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEB("Error while getting video stabilization mode 0x%x",
478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                         (unsigned int)eError);
479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ret = -1;
480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGDB("VSTAB Port Index = %d", (int)frameStabCfg.nPortIndex);
483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        frameStabCfg.nPortIndex = mCameraAdapterParameters.mPrevPortIndex;
485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( enable )
486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("VSTAB is enabled");
488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            frameStabCfg.bStab = OMX_TRUE;
489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        else
491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("VSTAB is disabled");
493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            frameStabCfg.bStab = OMX_FALSE;
494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError =  OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                ( OMX_INDEXTYPE ) OMX_IndexConfigCommonFrameStabilisation,
499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                &frameStabCfg);
500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( OMX_ErrorNone != eError )
501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEB("Error while configuring video stabilization mode 0x%x", eError);
503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ret = -1;
504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        else
506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("Video stabilization mode configured successfully");
508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setGBCE(OMXCameraAdapter::BrightnessMode mode)
517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE eError = OMX_ErrorNone;
520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_TI_CONFIG_LOCAL_AND_GLOBAL_BRIGHTNESSCONTRASTTYPE bControl;
521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( OMX_StateInvalid == mComponentState )
525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("OMX component is in invalid state");
527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ret = -EINVAL;
528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMX_INIT_STRUCT_PTR (&bControl, OMX_TI_CONFIG_LOCAL_AND_GLOBAL_BRIGHTNESSCONTRASTTYPE);
533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        bControl.nPortIndex = OMX_ALL;
535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        switch ( mode )
537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case OMXCameraAdapter::BRIGHTNESS_ON:
539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bControl.eControl = OMX_TI_BceModeOn;
541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case OMXCameraAdapter::BRIGHTNESS_AUTO:
544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bControl.eControl = OMX_TI_BceModeAuto;
546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case OMXCameraAdapter::BRIGHTNESS_OFF:
549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            default:
550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bControl.eControl = OMX_TI_BceModeOff;
552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               ( OMX_INDEXTYPE ) OMX_TI_IndexConfigGlobalBrightnessContrastEnhance,
558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               &bControl);
559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( OMX_ErrorNone != eError )
560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEB("Error while setting GBCE 0x%x", eError);
562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        else
564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDB("GBCE configured successfully 0x%x", mode);
566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setGLBCE(OMXCameraAdapter::BrightnessMode mode)
575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE eError = OMX_ErrorNone;
578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_TI_CONFIG_LOCAL_AND_GLOBAL_BRIGHTNESSCONTRASTTYPE bControl;
579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( OMX_StateInvalid == mComponentState )
583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("OMX component is in invalid state");
585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ret = -EINVAL;
586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMX_INIT_STRUCT_PTR (&bControl, OMX_TI_CONFIG_LOCAL_AND_GLOBAL_BRIGHTNESSCONTRASTTYPE);
591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        bControl.nPortIndex = OMX_ALL;
592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        switch ( mode )
594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case OMXCameraAdapter::BRIGHTNESS_ON:
596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bControl.eControl = OMX_TI_BceModeOn;
598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case OMXCameraAdapter::BRIGHTNESS_AUTO:
601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bControl.eControl = OMX_TI_BceModeAuto;
603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case OMXCameraAdapter::BRIGHTNESS_OFF:
606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            default:
607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bControl.eControl = OMX_TI_BceModeOff;
609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               ( OMX_INDEXTYPE ) OMX_TI_IndexConfigLocalBrightnessContrastEnhance,
615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               &bControl);
616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( OMX_ErrorNone != eError )
617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEB("Error while configure GLBCE 0x%x", eError);
619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        else
621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("GLBCE configured successfully");
623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setCaptureMode(OMXCameraAdapter::CaptureMode mode)
632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE eError = OMX_ErrorNone;
635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_CONFIG_CAMOPERATINGMODETYPE camMode;
636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_CONFIG_BOOLEANTYPE bCAC;
637f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_TI_CONFIG_SINGLEPREVIEWMODETYPE singlePrevMode;
638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
6414164de02d63220e48eaca08def1d6c5802a8693fSundar Raman    //CAC is disabled by default
642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_INIT_STRUCT_PTR (&bCAC, OMX_CONFIG_BOOLEANTYPE);
643f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_INIT_STRUCT_PTR (&singlePrevMode, OMX_TI_CONFIG_SINGLEPREVIEWMODETYPE);
644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bCAC.bEnabled = OMX_FALSE;
645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMX_INIT_STRUCT_PTR (&camMode, OMX_CONFIG_CAMOPERATINGMODETYPE);
650f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if ( mSensorIndex == OMX_TI_StereoSensor ) {
651f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            if ( OMXCameraAdapter::VIDEO_MODE == mode ) {
652f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                CAMHAL_LOGDA("Camera mode: STEREO VIDEO");
653f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                camMode.eCamOperatingMode = OMX_TI_StereoVideo;
654f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            } else {
655f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                CAMHAL_LOGDA("Camera mode: STEREO");
656f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                camMode.eCamOperatingMode = OMX_CaptureStereoImageCapture;
657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
658f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if ( OMXCameraAdapter::HIGH_SPEED == mode ) {
659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("Camera mode: HIGH SPEED");
660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            camMode.eCamOperatingMode = OMX_CaptureImageHighSpeedTemporalBracketing;
661f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if ( OMXCameraAdapter::CP_CAM == mode ) {
662f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            CAMHAL_LOGDA("Camera mode: CP CAM");
663f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            camMode.eCamOperatingMode = OMX_TI_CPCam;
664f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            // TODO(XXX): Hardcode for now until we implement re-proc pipe
665f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            singlePrevMode.eMode = OMX_TI_SinglePreviewMode_ImageCaptureHighSpeed;
666f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if( OMXCameraAdapter::HIGH_QUALITY == mode ) {
667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("Camera mode: HIGH QUALITY");
668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            camMode.eCamOperatingMode = OMX_CaptureImageProfileBase;
669f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if( OMXCameraAdapter::HIGH_QUALITY_ZSL== mode ) {
6709743353b9dd1da8d1755218a7b961400ce825bd1Tyler Luu            const char* valstr = NULL;
671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("Camera mode: HIGH QUALITY_ZSL");
672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            camMode.eCamOperatingMode = OMX_TI_CaptureImageProfileZeroShutterLag;
6739743353b9dd1da8d1755218a7b961400ce825bd1Tyler Luu
674f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef CAMERAHAL_TUNA
675c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev            if ( !mIternalRecordingHint ) {
6769743353b9dd1da8d1755218a7b961400ce825bd1Tyler Luu                zslHistoryLen.nHistoryLen = 5;
6779743353b9dd1da8d1755218a7b961400ce825bd1Tyler Luu            }
678f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif
679c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev
680f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if( OMXCameraAdapter::VIDEO_MODE == mode ) {
681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("Camera mode: VIDEO MODE");
682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            camMode.eCamOperatingMode = OMX_CaptureVideo;
683f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else if( OMXCameraAdapter::VIDEO_MODE_HQ == mode ) {
684f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            CAMHAL_LOGDA("Camera mode: VIDEO MODE HQ");
685f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            camMode.eCamOperatingMode = OMX_CaptureHighQualityVideo;
686f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        } else {
687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEA("Camera mode: INVALID mode passed!");
688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return BAD_VALUE;
689f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        }
690308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov
69110e47a001f5c979a3cd7f72238cb35c9eee40c1eTyler Luu        if( NO_ERROR == ret )
692308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov            {
693308c2a428da0f71b413d24fca55433ece1625603Vladislav Hristov            eError =  OMX_SetParameter(mCameraAdapterParameters.mHandleComp,
694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                       ( OMX_INDEXTYPE ) OMX_IndexCameraOperatingMode,
695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                       &camMode);
696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( OMX_ErrorNone != eError )
697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                CAMHAL_LOGEB("Error while configuring camera mode 0x%x", eError);
699f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                ret = Utils::ErrorUtils::omxToAndroidError(eError);
700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                CAMHAL_LOGDA("Camera mode configured successfully");
704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
707f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if((NO_ERROR == ret) && (OMXCameraAdapter::CP_CAM == mode)) {
708f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            //Configure Single Preview Mode
709f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            eError =  OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
710f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                    ( OMX_INDEXTYPE ) OMX_TI_IndexConfigSinglePreviewMode,
711f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                    &singlePrevMode);
712f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            if ( OMX_ErrorNone != eError ) {
713f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                CAMHAL_LOGEB("Error while configuring single preview mode 0x%x", eError);
714f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                ret = Utils::ErrorUtils::omxToAndroidError(eError);
715f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            } else {
716f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                CAMHAL_LOGDA("single preview mode configured successfully");
717f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            }
718f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        }
719f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
720f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
72110e47a001f5c979a3cd7f72238cb35c9eee40c1eTyler Luu        if( NO_ERROR == ret )
722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            //Configure CAC
724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            eError =  OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                    ( OMX_INDEXTYPE ) OMX_IndexConfigChromaticAberrationCorrection,
726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                    &bCAC);
727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( OMX_ErrorNone != eError )
728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                CAMHAL_LOGEB("Error while configuring CAC 0x%x", eError);
730f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                ret = Utils::ErrorUtils::omxToAndroidError(eError);
731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                CAMHAL_LOGDA("CAC configured successfully");
735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setLDC(OMXCameraAdapter::IPPMode mode)
745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE eError = OMX_ErrorNone;
748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_CONFIG_BOOLEANTYPE bOMX;
749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( OMX_StateLoaded != mComponentState )
753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("OMX component is not in loaded state");
755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ret = -EINVAL;
756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMX_INIT_STRUCT_PTR (&bOMX, OMX_CONFIG_BOOLEANTYPE);
761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        switch ( mode )
763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case OMXCameraAdapter::IPP_LDCNSF:
765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case OMXCameraAdapter::IPP_LDC:
766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bOMX.bEnabled = OMX_TRUE;
768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case OMXCameraAdapter::IPP_NONE:
771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case OMXCameraAdapter::IPP_NSF:
772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            default:
773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bOMX.bEnabled = OMX_FALSE;
775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGVB("Configuring LDC mode 0x%x", bOMX.bEnabled);
780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError = OMX_SetParameter(mCameraAdapterParameters.mHandleComp,
781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  ( OMX_INDEXTYPE ) OMX_IndexParamLensDistortionCorrection,
782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  &bOMX);
783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( OMX_ErrorNone != eError )
784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEA("Error while setting LDC");
786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ret = -1;
787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setNSF(OMXCameraAdapter::IPPMode mode)
796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE eError = OMX_ErrorNone;
799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_PARAM_ISONOISEFILTERTYPE nsf;
800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( OMX_StateLoaded != mComponentState )
804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("OMX component is not in loaded state");
806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ret = -EINVAL;
807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMX_INIT_STRUCT_PTR (&nsf, OMX_PARAM_ISONOISEFILTERTYPE);
812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        nsf.nPortIndex = OMX_ALL;
813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        switch ( mode )
815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case OMXCameraAdapter::IPP_LDCNSF:
817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case OMXCameraAdapter::IPP_NSF:
818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                nsf.eMode = OMX_ISONoiseFilterModeOn;
820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case OMXCameraAdapter::IPP_LDC:
823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case OMXCameraAdapter::IPP_NONE:
824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            default:
825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                nsf.eMode = OMX_ISONoiseFilterModeOff;
827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGVB("Configuring NSF mode 0x%x", nsf.eMode);
832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError = OMX_SetParameter(mCameraAdapterParameters.mHandleComp,
833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  (OMX_INDEXTYPE)OMX_IndexParamHighISONoiseFiler,
834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  &nsf);
835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( OMX_ErrorNone != eError )
836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEA("Error while setting NSF");
838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ret = -1;
839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setImageQuality(unsigned int quality)
848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE eError = OMX_ErrorNone;
851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IMAGE_PARAM_QFACTORTYPE jpegQualityConf;
852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( OMX_StateInvalid == mComponentState )
856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("OMX component is in invalid state");
858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ret = -EINVAL;
859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMX_INIT_STRUCT(jpegQualityConf, OMX_IMAGE_PARAM_QFACTORTYPE);
864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        jpegQualityConf.nQFactor = quality;
865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        jpegQualityConf.nPortIndex = mCameraAdapterParameters.mImagePortIndex;
866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError = OMX_SetParameter(mCameraAdapterParameters.mHandleComp,
868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  OMX_IndexParamQFactor,
869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  &jpegQualityConf);
870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( OMX_ErrorNone != eError )
871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEB("Error while configuring jpeg Quality 0x%x", eError);
873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ret = -1;
874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setThumbnailParams(unsigned int width,
883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                              unsigned int height,
884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                              unsigned int quality)
885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE eError = OMX_ErrorNone;
888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_PARAM_THUMBNAILTYPE thumbConf;
889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( OMX_StateInvalid == mComponentState )
893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("OMX component is in invalid state");
895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ret = -EINVAL;
896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMX_INIT_STRUCT(thumbConf, OMX_PARAM_THUMBNAILTYPE);
901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        thumbConf.nPortIndex = mCameraAdapterParameters.mImagePortIndex;
902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError = OMX_GetParameter(mCameraAdapterParameters.mHandleComp,
904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  ( OMX_INDEXTYPE ) OMX_IndexParamThumbnail,
905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  &thumbConf);
906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( OMX_ErrorNone != eError )
907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEB("Error while retrieving thumbnail size 0x%x", eError);
909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ret = -1;
910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        //CTS Requirement: width or height equal to zero should
913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        //result in absent EXIF thumbnail
914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( ( 0 == width ) || ( 0 == height ) )
915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            thumbConf.nWidth = mThumbRes[0].width;
917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            thumbConf.nHeight = mThumbRes[0].height;
918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            thumbConf.eCompressionFormat = OMX_IMAGE_CodingUnused;
919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        else
921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            thumbConf.nWidth = width;
923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            thumbConf.nHeight = height;
924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            thumbConf.nQuality = quality;
925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            thumbConf.eCompressionFormat = OMX_IMAGE_CodingJPEG;
926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGDB("Thumbnail width = %d, Thumbnail Height = %d", width, height);
929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError = OMX_SetParameter(mCameraAdapterParameters.mHandleComp,
931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  ( OMX_INDEXTYPE ) OMX_IndexParamThumbnail,
932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  &thumbConf);
933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( OMX_ErrorNone != eError )
934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEB("Error while configuring thumbnail size 0x%x", eError);
936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ret = -1;
937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setAlgoPriority(AlgoPriority priority,
946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                           Algorithm3A algo,
947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                           bool enable)
948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE eError = OMX_ErrorNone;
950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
95300479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman    if ( OMX_StateInvalid == mComponentState ) {
954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("OMX component is in invalid state");
95500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        return NO_INIT;
95600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman    }
957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
95800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman    if ( FACE_PRIORITY == priority ) {
959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
96000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        if ( algo & WHITE_BALANCE_ALGO ) {
96100479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            if ( enable ) {
96200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                mFacePriority.bAwbFaceEnable =  OMX_TRUE;
96300479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            } else {
96400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                mFacePriority.bAwbFaceEnable =  OMX_FALSE;
96500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            }
96600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        }
967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
96800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        if ( algo & EXPOSURE_ALGO ) {
96900479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            if ( enable ) {
97000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                mFacePriority.bAeFaceEnable =  OMX_TRUE;
97100479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            } else {
97200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                mFacePriority.bAeFaceEnable =  OMX_FALSE;
973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
97400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        }
975c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
97600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        if ( algo & FOCUS_ALGO ) {
97700479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            if ( enable ) {
97800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                mFacePriority.bAfFaceEnable =  OMX_TRUE;
97900479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            } else {
98000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                mFacePriority.bAfFaceEnable =  OMX_FALSE;
98100479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            }
98200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        }
983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
98400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        eError =  OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
98500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                                ( OMX_INDEXTYPE ) OMX_TI_IndexConfigFacePriority3a,
98600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                                &mFacePriority);
98700479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        if ( OMX_ErrorNone != eError ) {
98800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            CAMHAL_LOGEB("Error while configuring face priority 0x%x", eError);
98900479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        } else {
99000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            CAMHAL_LOGDB("Face priority for algorithms set successfully 0x%x, 0x%x, 0x%x",
99100479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                         mFacePriority.bAfFaceEnable,
99200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                         mFacePriority.bAeFaceEnable,
99300479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                         mFacePriority.bAwbFaceEnable);
99400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        }
995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
99600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman    } else if ( REGION_PRIORITY == priority ) {
997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
99800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        if ( algo & WHITE_BALANCE_ALGO ) {
99900479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            if ( enable ) {
100000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                mRegionPriority.bAwbRegionEnable= OMX_TRUE;
100100479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            } else {
100200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                mRegionPriority.bAwbRegionEnable = OMX_FALSE;
100300479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            }
100400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        }
1005c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
100600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        if ( algo & EXPOSURE_ALGO ) {
100700479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            if ( enable ) {
100800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                mRegionPriority.bAeRegionEnable = OMX_TRUE;
100900479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            } else {
101000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                mRegionPriority.bAeRegionEnable = OMX_FALSE;
101100479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            }
101200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        }
1013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
101400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        if ( algo & FOCUS_ALGO ) {
101500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            if ( enable ) {
101600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                mRegionPriority.bAfRegionEnable = OMX_TRUE;
101700479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            } else {
101800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                mRegionPriority.bAfRegionEnable = OMX_FALSE;
1019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
102000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        }
1021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
102200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        eError =  OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
102300479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                                ( OMX_INDEXTYPE ) OMX_TI_IndexConfigRegionPriority3a,
102400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                                &mRegionPriority);
102500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        if ( OMX_ErrorNone != eError ) {
102600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            CAMHAL_LOGEB("Error while configuring region priority 0x%x", eError);
102700479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman        } else {
102800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman            CAMHAL_LOGDB("Region priority for algorithms set successfully 0x%x, 0x%x, 0x%x",
102900479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                         mRegionPriority.bAfRegionEnable,
103000479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                         mRegionPriority.bAeRegionEnable,
103100479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman                         mRegionPriority.bAwbRegionEnable);
1032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
103400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman    }
103500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman
1036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1038f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    return Utils::ErrorUtils::omxToAndroidError(eError);
1039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setPictureRotation(unsigned int degree)
1042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE eError = OMX_ErrorNone;
1045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_CONFIG_ROTATIONTYPE rotation;
1046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( OMX_StateInvalid == mComponentState )
1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("OMX component is in invalid state");
1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ret = -1;
1053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
1056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMX_INIT_STRUCT(rotation, OMX_CONFIG_ROTATIONTYPE);
1058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        rotation.nRotation = degree;
1059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        rotation.nPortIndex = mCameraAdapterParameters.mImagePortIndex;
1060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
1062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               OMX_IndexConfigCommonRotate,
1063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               &rotation);
1064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( OMX_ErrorNone != eError )
1065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
1066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEB("Error while configuring rotation 0x%x", eError);
1067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setSensorOrientation(unsigned int degree)
1076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE eError = OMX_ErrorNone;
1079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_CONFIG_ROTATIONTYPE sensorOrientation;
1080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int tmpHeight, tmpWidth;
1081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMXCameraPortParameters *mPreviewData = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex];
1082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1084f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if ( OMX_StateInvalid == mComponentState ) {
1085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("OMX component is in invalid state");
1086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ret = -1;
1087f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
1088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    /* Set Temproary Port resolution.
1090f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    * For resolution with height >= 720,
1091f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    * resolution cannot be set without configuring orientation.
1092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    * So we first set a temp resolution. We have used VGA
1093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    */
1094f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if ( mPreviewData->mHeight >= 720 ) {
1095f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        tmpHeight = mPreviewData->mHeight;
1096f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        tmpWidth = mPreviewData->mWidth;
1097f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        mPreviewData->mWidth = 640;
1098f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        mPreviewData->mHeight = 480;
1099f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1100f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        ret = setFormat(OMX_CAMERA_PORT_VIDEO_OUT_PREVIEW, *mPreviewData);
1101f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if ( NO_ERROR != ret ) {
1102f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            CAMHAL_LOGEB("Error while configuring format 0x%x", ret);
1103f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            return ret;
1104f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        }
1105f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1106f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        mPreviewData->mWidth = tmpWidth;
1107f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        mPreviewData->mHeight = tmpHeight;
1108f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        mPreviewPortInitialized = true;
1109f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
1110f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    else if (!mPreviewPortInitialized) {
1111f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        ret = setFormat(OMX_CAMERA_PORT_VIDEO_OUT_PREVIEW, *mPreviewData);
1112f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if ( NO_ERROR != ret ) {
1113f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            CAMHAL_LOGEB("Error while configuring format 0x%x", ret);
1114f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            return ret;
1115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1116f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        mPreviewPortInitialized = true;
1117f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
1118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    /* Now set Required Orientation*/
1120f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if ( NO_ERROR == ret ) {
1121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMX_INIT_STRUCT(sensorOrientation, OMX_CONFIG_ROTATIONTYPE);
1122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        sensorOrientation.nPortIndex = mCameraAdapterParameters.mPrevPortIndex;
1123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        sensorOrientation.nRotation = degree;
1124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
1125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               OMX_IndexConfigCommonRotate,
1126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               &sensorOrientation);
1127f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if ( OMX_ErrorNone != eError ) {
1128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEB("Error while configuring rotation 0x%x", eError);
1129f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        }
1130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGVB(" Currently Sensor Orientation is set to : %d",
1131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     ( unsigned int ) sensorOrientation.nRotation);
1132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGVB(" Sensor Configured for Port : %d",
1133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     ( unsigned int ) sensorOrientation.nPortIndex);
1134f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
1135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    /* Now set the required resolution as requested */
1137f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if ( NO_ERROR == ret ) {
1138f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        bool portConfigured = false;
1139f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        ret = setSensorQuirks(degree,
1140f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex],
1141f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                portConfigured);
1142f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if ( NO_ERROR != ret ) {
1143f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            CAMHAL_LOGEB("Error while configuring setSensorQuirks 0x%x", ret);
1144f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            return ret;
1145f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        }
1146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1147f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        if ( !portConfigured ) {
1148f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            ret = setFormat (mCameraAdapterParameters.mPrevPortIndex,
1149f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                             mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex]);
1150f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            if ( NO_ERROR != ret ) {
1151f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                CAMHAL_LOGEB("Error while configuring format 0x%x", ret);
1152f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                return ret;
1153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1154f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1155f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            // Another WA: Setting the port definition will reset the VFR
1156f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            //             configuration.
1157f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            setVFramerate(mPreviewData->mMinFrameRate,
1158f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                          mPreviewData->mMaxFrameRate);
1159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1160f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
1161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t OMXCameraAdapter::setVFramerate(OMX_U32 minFrameRate, OMX_U32 maxFrameRate)
1168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE eError = OMX_ErrorNone;
1171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_TI_CONFIG_VARFRMRANGETYPE vfr;
117234da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman    OMXCameraPortParameters * mPreviewData =
117334da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman        &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex];
1174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
117734da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman    if ( OMX_StateInvalid == mComponentState ) {
1178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("OMX component is in invalid state");
1179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ret = -EINVAL;
118034da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman    }
1181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1182f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if ( !mSetFormatDone ) {
118334da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman        return NO_INIT;
118434da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman    }
118534da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman
118634da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman    if ( NO_ERROR == ret ) {
1187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMX_INIT_STRUCT_PTR (&vfr, OMX_TI_CONFIG_VARFRMRANGETYPE);
1188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        vfr.xMin = minFrameRate<<16;
1190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        vfr.xMax = maxFrameRate<<16;
1191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
1193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               (OMX_INDEXTYPE)OMX_TI_IndexConfigVarFrmRange,
1194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               &vfr);
119534da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman        if(OMX_ErrorNone != eError) {
1196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEB("Error while setting VFR min = %d, max = %d, error = 0x%x",
1197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                         ( unsigned int ) minFrameRate,
1198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                         ( unsigned int ) maxFrameRate,
1199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                         eError);
1200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ret = -1;
120134da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman        } else {
1202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDB("VFR Configured Successfully [%d:%d]",
1203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        ( unsigned int ) minFrameRate,
1204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        ( unsigned int ) maxFrameRate);
1205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
120634da992571ff2af3274d2e3fcaaadf6383c83996Sundar Raman    }
1207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }
1210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1211f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsstatus_t OMXCameraAdapter::setMechanicalMisalignmentCorrection(const bool enable)
1212f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons{
1213f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t ret = NO_ERROR;
1214f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_ERRORTYPE eError = OMX_ErrorNone;
1215f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_TI_CONFIG_MM mm;
1216f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1217f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    LOG_FUNCTION_NAME;
1218f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1219f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mm.nVersion = mLocalVersionParam;
1220f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mm.nSize = sizeof(OMX_TI_CONFIG_MM);
1221f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mm.nPortIndex = mCameraAdapterParameters.mPrevPortIndex;
1222f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mm.bMM = enable ? OMX_TRUE : OMX_FALSE;
1223f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1224f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
1225f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                           (OMX_INDEXTYPE)OMX_TI_IndexConfigMechanicalMisalignment,
1226f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                           &mm);
1227f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1228f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if(OMX_ErrorNone != eError) {
1229f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        CAMHAL_LOGEB("Error while enabling mechanical misalignment correction. error = 0x%x", eError);
1230f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        ret = -1;
1231f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }
1232f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1233f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    LOG_FUNCTION_NAME_EXIT;
1234f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1235f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    return ret;
1236f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons}
1237f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1238f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} // namespace Camera
1239f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} // namespace Ti
1240