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