1/*
2 * Copyright (C) Texas Instruments - http://www.ti.com/
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/**
18* @file General3A_Settings.h
19*
20* This file maps the Camera Hardware Interface to OMX.
21*
22*/
23
24#include "OMX_TI_IVCommon.h"
25#include "OMX_TI_Common.h"
26#include "OMX_TI_Index.h"
27#include "TICameraParameters.h"
28
29#ifndef GENERAL_3A_SETTINGS_H
30#define GENERAL_3A_SETTINGS_H
31
32#define FOCUS_FACE_PRIORITY OMX_IMAGE_FocusControlMax -1
33#define FOCUS_REGION_PRIORITY OMX_IMAGE_FocusControlMax -2
34#define WB_FACE_PRIORITY OMX_WhiteBalControlMax -1
35#define EXPOSURE_FACE_PRIORITY OMX_ExposureControlMax - 1
36
37namespace android {
38
39struct userToOMX_LUT{
40    const char * userDefinition;
41    int         omxDefinition;
42};
43
44struct LUTtype{
45    int size;
46    const userToOMX_LUT *Table;
47};
48
49const userToOMX_LUT isoUserToOMX[] = {
50    { TICameraParameters::ISO_MODE_AUTO, 0 },
51    { TICameraParameters::ISO_MODE_100, 100 },
52    { TICameraParameters::ISO_MODE_200, 200 },
53    { TICameraParameters::ISO_MODE_400, 400 },
54    { TICameraParameters::ISO_MODE_800, 800 },
55    { TICameraParameters::ISO_MODE_1000, 1000 },
56    { TICameraParameters::ISO_MODE_1200, 1200 },
57    { TICameraParameters::ISO_MODE_1600, 1600 },
58};
59
60const userToOMX_LUT effects_UserToOMX [] = {
61    { CameraParameters::EFFECT_NONE, OMX_ImageFilterNone },
62    { CameraParameters::EFFECT_NEGATIVE, OMX_ImageFilterNegative },
63    { CameraParameters::EFFECT_SOLARIZE,  OMX_ImageFilterSolarize },
64    { CameraParameters::EFFECT_SEPIA, OMX_ImageFilterSepia },
65    { CameraParameters::EFFECT_MONO, OMX_ImageFilterGrayScale },
66    { CameraParameters::EFFECT_BLACKBOARD, OMX_TI_ImageFilterBlackBoard },
67    { CameraParameters::EFFECT_WHITEBOARD, OMX_TI_ImageFilterWhiteBoard },
68    { CameraParameters::EFFECT_AQUA, OMX_TI_ImageFilterAqua },
69    { CameraParameters::EFFECT_POSTERIZE, OMX_TI_ImageFilterPosterize },
70#ifdef OMAP_ENHANCEMENT
71    { TICameraParameters::EFFECT_NATURAL, OMX_ImageFilterNatural },
72    { TICameraParameters::EFFECT_VIVID, OMX_ImageFilterVivid },
73    { TICameraParameters::EFFECT_COLOR_SWAP, OMX_ImageFilterColourSwap   },
74    { TICameraParameters::EFFECT_BLACKWHITE, OMX_TI_ImageFilterBlackWhite }
75#endif
76};
77
78const userToOMX_LUT scene_UserToOMX [] = {
79    { CameraParameters::SCENE_MODE_AUTO, OMX_Manual },
80    { CameraParameters::SCENE_MODE_ACTION, OMX_TI_Action },
81    { CameraParameters::SCENE_MODE_NIGHT, OMX_TI_Night },
82    { CameraParameters::SCENE_MODE_PARTY, OMX_TI_Party },
83    { CameraParameters::SCENE_MODE_SUNSET, OMX_TI_Sunset },
84/*********** TODO: These scene modes are not verified. ************
85 ***************** Have to verify and reeable later. **************
86    { CameraParameters::SCENE_MODE_THEATRE, OMX_TI_Theatre },
87    { CameraParameters::SCENE_MODE_LANDSCAPE, OMX_Landscape },
88    { CameraParameters::SCENE_MODE_NIGHT_PORTRAIT, OMX_NightPortrait },
89    { CameraParameters::SCENE_MODE_FIREWORKS, OMX_Fireworks },
90    { CameraParameters::SCENE_MODE_BEACH, OMX_TI_Beach },
91    { CameraParameters::SCENE_MODE_CANDLELIGHT, OMX_TI_Candlelight },
92    { CameraParameters::SCENE_MODE_PORTRAIT, OMX_TI_Portrait },
93    { CameraParameters::SCENE_MODE_SNOW, OMX_TI_Snow },
94    { CameraParameters::SCENE_MODE_STEADYPHOTO, OMX_TI_Steadyphoto },
95*********************************************************************/
96#ifdef OMAP_ENHANCEMENT
97    { TICameraParameters::SCENE_MODE_CLOSEUP, OMX_Closeup },
98    { TICameraParameters::SCENE_MODE_AQUA, OMX_Underwater },
99    { TICameraParameters::SCENE_MODE_SPORT, OMX_Sport },
100    { TICameraParameters::SCENE_MODE_MOOD, OMX_Mood },
101    { TICameraParameters::SCENE_MODE_NIGHT_INDOOR, OMX_NightIndoor },
102    { TICameraParameters::SCENE_MODE_DOCUMENT, OMX_Document },
103    { TICameraParameters::SCENE_MODE_BARCODE, OMX_Barcode },
104    { TICameraParameters::SCENE_MODE_VIDEO_SUPER_NIGHT, OMX_SuperNight },
105    { TICameraParameters::SCENE_MODE_VIDEO_CINE, OMX_Cine },
106    { TICameraParameters::SCENE_MODE_VIDEO_OLD_FILM, OMX_OldFilm },
107#endif
108};
109
110const userToOMX_LUT whiteBal_UserToOMX [] = {
111    { CameraParameters::WHITE_BALANCE_AUTO, OMX_WhiteBalControlAuto },
112    { CameraParameters::WHITE_BALANCE_DAYLIGHT, OMX_WhiteBalControlSunLight },
113    { CameraParameters::WHITE_BALANCE_CLOUDY_DAYLIGHT, OMX_WhiteBalControlCloudy },
114    { CameraParameters::WHITE_BALANCE_FLUORESCENT, OMX_WhiteBalControlFluorescent },
115    { CameraParameters::WHITE_BALANCE_INCANDESCENT, OMX_WhiteBalControlIncandescent },
116/********************** THESE ARE CURRENT NOT TUNED PROPERLY *************************
117    { CameraParameters::WHITE_BALANCE_SHADE, OMX_TI_WhiteBalControlShade },
118    { CameraParameters::WHITE_BALANCE_TWILIGHT, OMX_TI_WhiteBalControlTwilight },
119    { CameraParameters::WHITE_BALANCE_WARM_FLUORESCENT, OMX_TI_WhiteBalControlWarmFluorescent },
120**************************************************************************************/
121#ifdef OMAP_ENHANCEMENT
122    { TICameraParameters::WHITE_BALANCE_TUNGSTEN, OMX_WhiteBalControlTungsten },
123    { TICameraParameters::WHITE_BALANCE_HORIZON, OMX_WhiteBalControlHorizon },
124    { TICameraParameters::WHITE_BALANCE_FACE, WB_FACE_PRIORITY },
125    { TICameraParameters::WHITE_BALANCE_SUNSET, OMX_TI_WhiteBalControlSunset }
126#endif
127};
128
129const userToOMX_LUT antibanding_UserToOMX [] = {
130    { CameraParameters::ANTIBANDING_OFF, OMX_FlickerCancelOff },
131    { CameraParameters::ANTIBANDING_AUTO, OMX_FlickerCancelAuto },
132    { CameraParameters::ANTIBANDING_50HZ, OMX_FlickerCancel50 },
133    { CameraParameters::ANTIBANDING_60HZ, OMX_FlickerCancel60 }
134};
135
136const userToOMX_LUT focus_UserToOMX [] = {
137    { CameraParameters::FOCUS_MODE_AUTO, OMX_IMAGE_FocusControlAutoLock },
138    { CameraParameters::FOCUS_MODE_INFINITY, OMX_IMAGE_FocusControlAutoInfinity },
139    { CameraParameters::FOCUS_MODE_INFINITY, OMX_IMAGE_FocusControlHyperfocal },
140    { CameraParameters::FOCUS_MODE_MACRO, OMX_IMAGE_FocusControlAutoMacro },
141    { CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO, OMX_IMAGE_FocusControlAuto },
142    { CameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE, OMX_IMAGE_FocusControlAuto },
143#ifdef OMAP_ENHANCEMENT
144    { TICameraParameters::FOCUS_MODE_FACE , FOCUS_FACE_PRIORITY },
145    { TICameraParameters::FOCUS_MODE_PORTRAIT, OMX_IMAGE_FocusControlPortrait },
146    { TICameraParameters::FOCUS_MODE_EXTENDED, OMX_IMAGE_FocusControlExtended },
147#endif
148};
149
150const userToOMX_LUT exposure_UserToOMX [] = {
151    { TICameraParameters::EXPOSURE_MODE_OFF, OMX_ExposureControlOff },
152    { TICameraParameters::EXPOSURE_MODE_AUTO, OMX_ExposureControlAuto },
153    { TICameraParameters::EXPOSURE_MODE_NIGHT, OMX_ExposureControlNight },
154    { TICameraParameters::EXPOSURE_MODE_BACKLIGHT, OMX_ExposureControlBackLight },
155    { TICameraParameters::EXPOSURE_MODE_SPOTLIGHT, OMX_ExposureControlSpotLight},
156    { TICameraParameters::EXPOSURE_MODE_SPORTS, OMX_ExposureControlSports },
157    { TICameraParameters::EXPOSURE_MODE_SNOW, OMX_ExposureControlSnow },
158    { TICameraParameters::EXPOSURE_MODE_BEACH, OMX_ExposureControlBeach },
159    { TICameraParameters::EXPOSURE_MODE_APERTURE, OMX_ExposureControlLargeAperture },
160    { TICameraParameters::EXPOSURE_MODE_SMALL_APERTURE, OMX_ExposureControlSmallApperture },
161    { TICameraParameters::EXPOSURE_MODE_FACE, EXPOSURE_FACE_PRIORITY },
162};
163
164const userToOMX_LUT flash_UserToOMX [] = {
165    { CameraParameters::FLASH_MODE_OFF           ,OMX_IMAGE_FlashControlOff             },
166    { CameraParameters::FLASH_MODE_ON            ,OMX_IMAGE_FlashControlOn              },
167    { CameraParameters::FLASH_MODE_AUTO          ,OMX_IMAGE_FlashControlAuto            },
168    { CameraParameters::FLASH_MODE_TORCH         ,OMX_IMAGE_FlashControlTorch           },
169    { CameraParameters::FLASH_MODE_RED_EYE        ,OMX_IMAGE_FlashControlRedEyeReduction },
170#ifdef OMAP_ENHANCEMENT
171    { TICameraParameters::FLASH_MODE_FILL_IN        ,OMX_IMAGE_FlashControlFillin          }
172#endif
173};
174
175const LUTtype ExpLUT =
176    {
177    sizeof(exposure_UserToOMX)/sizeof(exposure_UserToOMX[0]),
178    exposure_UserToOMX
179    };
180
181const LUTtype WBalLUT =
182    {
183    sizeof(whiteBal_UserToOMX)/sizeof(whiteBal_UserToOMX[0]),
184    whiteBal_UserToOMX
185    };
186
187const LUTtype FlickerLUT =
188    {
189    sizeof(antibanding_UserToOMX)/sizeof(antibanding_UserToOMX[0]),
190    antibanding_UserToOMX
191    };
192
193const LUTtype SceneLUT =
194    {
195    sizeof(scene_UserToOMX)/sizeof(scene_UserToOMX[0]),
196    scene_UserToOMX
197    };
198
199const LUTtype FlashLUT =
200    {
201    sizeof(flash_UserToOMX)/sizeof(flash_UserToOMX[0]),
202    flash_UserToOMX
203    };
204
205const LUTtype EffLUT =
206    {
207    sizeof(effects_UserToOMX)/sizeof(effects_UserToOMX[0]),
208    effects_UserToOMX
209    };
210
211const LUTtype FocusLUT =
212    {
213    sizeof(focus_UserToOMX)/sizeof(focus_UserToOMX[0]),
214    focus_UserToOMX
215    };
216
217const LUTtype IsoLUT =
218    {
219    sizeof(isoUserToOMX)/sizeof(isoUserToOMX[0]),
220    isoUserToOMX
221    };
222
223/*
224*   class Gen3A_settings
225*   stores the 3A settings
226*   also defines the look up tables
227*   for mapping settings from Hal to OMX
228*/
229class Gen3A_settings{
230    public:
231
232    int Exposure;
233    int WhiteBallance;
234    int Flicker;
235    int SceneMode;
236    int Effect;
237    int Focus;
238    int EVCompensation;
239    int Contrast;
240    int Saturation;
241    int Sharpness;
242    int ISO;
243    int FlashMode;
244
245    unsigned int Brightness;
246    OMX_BOOL ExposureLock;
247    OMX_BOOL FocusLock;
248    OMX_BOOL WhiteBalanceLock;
249};
250
251/*
252*   Flags raised when a setting is changed
253*/
254enum E3ASettingsFlags
255{
256    SetSceneMode            = 1 << 0,
257    SetEVCompensation       = 1 << 1,
258    SetWhiteBallance        = 1 << 2,
259    SetFlicker              = 1 << 3,
260    SetExposure             = 1 << 4,
261    SetSharpness            = 1 << 5,
262    SetBrightness           = 1 << 6,
263    SetContrast             = 1 << 7,
264    SetISO                  = 1 << 8,
265    SetSaturation           = 1 << 9,
266    SetEffect               = 1 << 10,
267    SetFocus                = 1 << 11,
268    SetExpMode              = 1 << 14,
269    SetFlash                = 1 << 15,
270    SetExpLock              = 1 << 16,
271    SetWBLock               = 1 << 17,
272    SetMeteringAreas        = 1 << 18,
273
274    E3aSettingMax,
275    E3AsettingsAll = ( ((E3aSettingMax -1 ) << 1) -1 ) /// all possible flags raised
276};
277
278};
279
280#endif //GENERAL_3A_SETTINGS_H
281