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
19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifndef OMX_CAMERA_ADAPTER_H
20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_ADAPTER_H
21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
22c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "CameraHal.h"
23c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_Types.h"
24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_Core.h"
25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_CoreExt.h"
26c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_IVCommon.h"
27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_Component.h"
28c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_Index.h"
29c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_IndexExt.h"
30c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_Index.h"
31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_IVCommon.h"
32c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_Common.h"
33c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_Image.h"
34c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "General3A_Settings.h"
35759396a116bb2caf006405777a626fe9a8708114Tyler Luu#include "OMXSceneModeTables.h"
36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "BaseCameraAdapter.h"
3836e9bdd56757ff8048e08f6e52f234480c44f122Tyler Luu#include "Encoder_libjpeg.h"
39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "DebugUtils.h"
40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern "C"
43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "timm_osal_error.h"
45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "timm_osal_events.h"
46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "timm_osal_trace.h"
47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "timm_osal_semaphores.h"
48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
50b3fb1a45ce906ab0365f247caf596665ea0c9f39Sundar Raman
51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevnamespace android {
52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define Q16_OFFSET                  16
54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CMD_TIMEOUT             3000000  //3 sec.
56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAPTURE_TIMEOUT         5000000  //5 sec.
57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define FOCUS_THRESHOLD             5 //[s.]
59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define MIN_JPEG_QUALITY            1
61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define MAX_JPEG_QUALITY            100
62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define EXP_BRACKET_RANGE           10
63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define FOCUS_DIST_SIZE             100
65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define FOCUS_DIST_BUFFER_SIZE      500
66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define TOUCH_DATA_SIZE             200
68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define DEFAULT_THUMB_WIDTH         160
69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define DEFAULT_THUMB_HEIGHT        120
70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define FRAME_RATE_FULL_HD          27
71704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman#define ZOOM_STAGES                 61
72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define FACE_DETECTION_BUFFER_SIZE  0x1000
747762bf32b7bd874ce34948eb53a3bfa3906f4aefTyler Luu#define MAX_NUM_FACES_SUPPORTED     35
75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define EXIF_MODEL_SIZE             100
77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define EXIF_MAKE_SIZE              100
78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define EXIF_DATE_TIME_SIZE         20
79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
80bea7955fe043c646d21243e9889afbfe1d671ad9Tyler Luu#define GPS_MIN_DIV                 60
81bea7955fe043c646d21243e9889afbfe1d671ad9Tyler Luu#define GPS_SEC_DIV                 60
82bea7955fe043c646d21243e9889afbfe1d671ad9Tyler Luu#define GPS_SEC_ACCURACY            1000
83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_TIMESTAMP_SIZE          6
84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_DATESTAMP_SIZE          11
85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_REF_SIZE                2
86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_MAPDATUM_SIZE           100
87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_PROCESSING_SIZE         100
88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_VERSION_SIZE            4
89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_NORTH_REF               "N"
90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_SOUTH_REF               "S"
91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_EAST_REF                "E"
92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_WEST_REF                "W"
93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* Default portstartnumber of Camera component */
95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_DEFAULT_START_PORT_NUM 0
96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* Define number of ports for differt domains */
98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_OTHER_NUM 1
99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_VIDEO_NUM 4
100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_IMAGE_NUM 1
101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_AUDIO_NUM 0
102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_NUM_PORTS (OMX_CAMERA_PORT_OTHER_NUM + OMX_CAMERA_PORT_VIDEO_NUM + OMX_CAMERA_PORT_IMAGE_NUM + OMX_CAMERA_PORT_AUDIO_NUM)
103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* Define start port number for differt domains */
105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_OTHER_START OMX_CAMERA_DEFAULT_START_PORT_NUM
106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_VIDEO_START (OMX_CAMERA_PORT_OTHER_START + OMX_CAMERA_PORT_OTHER_NUM)
107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_IMAGE_START (OMX_CAMERA_PORT_VIDEO_START + OMX_CAMERA_PORT_VIDEO_NUM)
108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_AUDIO_START (OMX_CAMERA_PORT_IMAGE_START + OMX_CAMERA_PORT_IMAGE_NUM)
109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* Port index for camera component */
111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_OTHER_IN (OMX_CAMERA_PORT_OTHER_START + 0)
112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_VIDEO_IN_VIDEO (OMX_CAMERA_PORT_VIDEO_START + 0)
113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_VIDEO_OUT_PREVIEW (OMX_CAMERA_PORT_VIDEO_START + 1)
114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_VIDEO_OUT_VIDEO (OMX_CAMERA_PORT_VIDEO_START + 2)
115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_VIDEO_OUT_MEASUREMENT (OMX_CAMERA_PORT_VIDEO_START + 3)
116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_IMAGE_OUT_IMAGE (OMX_CAMERA_PORT_IMAGE_START + 0)
117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_INIT_STRUCT(_s_, _name_)	\
120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    memset(&(_s_), 0x0, sizeof(_name_));	\
121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_).nSize = sizeof(_name_);		\
122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_).nVersion.s.nVersionMajor = 0x1;	\
123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_).nVersion.s.nVersionMinor = 0x1;	\
124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_).nVersion.s.nRevision = 0x0;		\
125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_).nVersion.s.nStep = 0x0
126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_INIT_STRUCT_PTR(_s_, _name_)   \
128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    memset((_s_), 0x0, sizeof(_name_));         \
129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_)->nSize = sizeof(_name_);              \
130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_)->nVersion.s.nVersionMajor = 0x1;      \
131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_)->nVersion.s.nVersionMinor = 0x1;      \
132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_)->nVersion.s.nRevision = 0x0;          \
133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_)->nVersion.s.nStep = 0x0
134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GOTO_EXIT_IF(_CONDITION,_ERROR) {                                       \
136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ((_CONDITION)) {                                                         \
137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError = (_ERROR);                                                      \
138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        goto EXIT;                                                              \
139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }                                                                           \
140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
142b8923d57614400f11c61a524e15f040dd68d25bcDevaraj Rangasamyconst int64_t kCameraBufferLatencyNs = 250000000LL; // 250 ms
143b8923d57614400f11c61a524e15f040dd68d25bcDevaraj Rangasamy
144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev///OMX Specific Functions
145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE OMXCameraAdapterEventHandler(OMX_IN OMX_HANDLETYPE hComponent,
146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_PTR pAppData,
147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_EVENTTYPE eEvent,
148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_U32 nData1,
149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_U32 nData2,
150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_PTR pEventData);
151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE OMXCameraAdapterEmptyBufferDone(OMX_IN OMX_HANDLETYPE hComponent,
153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_PTR pAppData,
154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_BUFFERHEADERTYPE* pBuffer);
155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLETYPE hComponent,
157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_PTR pAppData,
158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_BUFFERHEADERTYPE* pBuffHeader);
159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstruct CapResolution {
161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size_t width, height;
162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    const char *param;
163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev};
164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstruct CapPixelformat {
166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_COLOR_FORMATTYPE pixelformat;
167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    const char *param;
168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev};
169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstruct CapU32 {
171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_U32 num;
172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    const char *param;
173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev};
174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
175f26e751771c0794008e466cd8f86601cf55fe572Tyler Luustruct CapU32Pair {
176f26e751771c0794008e466cd8f86601cf55fe572Tyler Luu    OMX_U32 num1, num2;
177f26e751771c0794008e466cd8f86601cf55fe572Tyler Luu    const char *param;
178f26e751771c0794008e466cd8f86601cf55fe572Tyler Luu};
179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstruct CapS32 {
180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_S32 num;
181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    const char *param;
182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev};
183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef CapU32 CapFramerate;
185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef CapU32 CapISO;
186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef CapU32 CapSensorName;
187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef CapS32 CapZoom;
188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef CapS32 CapEVComp;
189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  * Class which completely abstracts the camera hardware interaction from camera hal
192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  * TODO: Need to list down here, all the message types that will be supported by this class
193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Need to implement BufferProvider interface to use AllocateBuffer of OMX if needed
194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  */
195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevclass OMXCameraAdapter : public BaseCameraAdapter
196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic:
198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    /*--------------------Constant declarations----------------------------------------*/
200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const int32_t MAX_NO_BUFFERS = 20;
201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///@remarks OMX Camera has six ports - buffer input, time input, preview, image, video, and meta data
203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const int MAX_NO_PORTS = 6;
204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///Five second timeout
206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const int CAMERA_ADAPTER_TIMEOUT = 5000*1000;
207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    enum OMXCameraEvents
209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMERA_PORT_ENABLE  = 0x1,
211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMERA_PORT_FLUSH   = 0x2,
212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMERA_PORT_DISABLE = 0x4,
213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    enum CaptureMode
216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        HIGH_SPEED = 1,
218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        HIGH_QUALITY = 2,
219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        VIDEO_MODE = 3,
220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        HIGH_QUALITY_ZSL = 4,
221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    enum IPPMode
224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
225024e97a1213041f9d266ee09f7148a0c9b007260Tyler Luu        IPP_NULL = -1,
226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        IPP_NONE = 0,
227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        IPP_NSF,
228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        IPP_LDC,
229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        IPP_LDCNSF,
230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    enum CodingMode
233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CodingNone = 0,
235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CodingJPS,
236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CodingMPO,
237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CodingRAWJPEG,
238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CodingRAWMPO,
239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    enum Algorithm3A
242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        WHITE_BALANCE_ALGO = 0x1,
244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        EXPOSURE_ALGO = 0x2,
245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        FOCUS_ALGO = 0x4,
246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    enum AlgoPriority
249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        FACE_PRIORITY = 0,
251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        REGION_PRIORITY,
252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    enum BrightnessMode
255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        BRIGHTNESS_OFF = 0,
257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        BRIGHTNESS_ON,
258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        BRIGHTNESS_AUTO,
259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
261b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu    enum CaptureSettingsFlags {
262b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu        SetFormat               = 1 << 0,
263b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu        SetThumb                = 1 << 1,
264b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu        SetExpBracket           = 1 << 2,
265b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu        SetQuality              = 1 << 3,
266cacb0651c406df6b9ad2ee3bd48cc756718ba1a2Tyler Luu        SetRotation             = 1 << 4,
267cacb0651c406df6b9ad2ee3bd48cc756718ba1a2Tyler Luu        ECaptureSettingMax,
268cacb0651c406df6b9ad2ee3bd48cc756718ba1a2Tyler Luu        ECapturesettingsAll = ( ((ECaptureSettingMax -1 ) << 1) -1 ) /// all possible flags raised
269b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu    };
270b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu
271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    class GPSData
272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    {
273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        public:
274bea7955fe043c646d21243e9889afbfe1d671ad9Tyler Luu                int mLongDeg, mLongMin, mLongSec, mLongSecDiv;
275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                char mLongRef[GPS_REF_SIZE];
276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mLongValid;
277bea7955fe043c646d21243e9889afbfe1d671ad9Tyler Luu                int mLatDeg, mLatMin, mLatSec, mLatSecDiv;
278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                char mLatRef[GPS_REF_SIZE];
279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mLatValid;
280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                int mAltitude;
281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                unsigned char mAltitudeRef;
282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mAltitudeValid;
283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                char mMapDatum[GPS_MAPDATUM_SIZE];
284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mMapDatumValid;
285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                char mVersionId[GPS_VERSION_SIZE];
286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mVersionIdValid;
287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                char mProcMethod[GPS_PROCESSING_SIZE];
288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mProcMethodValid;
289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                char mDatestamp[GPS_DATESTAMP_SIZE];
290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mDatestampValid;
291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                uint32_t mTimeStampHour;
292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                uint32_t mTimeStampMin;
293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                uint32_t mTimeStampSec;
294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mTimeStampValid;
295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    class EXIFData
298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    {
299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        public:
300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            GPSData mGPSData;
301c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev            char mMake[EXIF_MODEL_SIZE];
302c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev            char mModel[EXIF_MAKE_SIZE];
303c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev            unsigned int mFocalNum, mFocalDen;
304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            bool mMakeValid;
305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            bool mModelValid;
306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///Parameters specific to any port of the OMX Camera component
309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    class OMXCameraPortParameters
310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    {
311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        public:
312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                         mHostBufaddr[MAX_NO_BUFFERS];
313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_BUFFERHEADERTYPE           *mBufferHeader[MAX_NO_BUFFERS];
314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                         mWidth;
315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                         mHeight;
316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                         mStride;
317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U8                          mNumBufs;
318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            // defines maximum number of buffers our of mNumBufs
320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            // queueable at given moment
321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U8                          mMaxQueueable;
322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                         mBufSize;
324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_COLOR_FORMATTYPE            mColorFormat;
325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_PARAM_VIDEONOISEFILTERTYPE  mVNFMode;
326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_PARAM_VIDEOYUVRANGETYPE     mYUVRange;
327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_CONFIG_BOOLEANTYPE          mVidStabParam;
328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_CONFIG_FRAMESTABTYPE        mVidStabConfig;
329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                         mCapFrame;
330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                         mFrameRate;
331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_S32                         mMinFrameRate;
332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_S32                         mMaxFrameRate;
333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CameraFrame::FrameType mImageType;
334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///Context of the OMX Camera component
337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    class OMXCameraAdapterComponentContext
338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    {
339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        public:
340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_HANDLETYPE              mHandleComp;
341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                     mNumPorts;
342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_STATETYPE               mState ;
343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                     mVideoPortIndex;
344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                     mPrevPortIndex;
345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                     mImagePortIndex;
346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                     mMeasurementPortIndex;
347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMXCameraPortParameters     mCameraPortParams[MAX_NO_PORTS];
348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic:
351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
3529a412956d5327ec851ff8adc3e9804640fa30c7fTyler Luu    OMXCameraAdapter(size_t sensor_index);
353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ~OMXCameraAdapter();
354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///Initialzes the camera adapter creates any resources required
3569a412956d5327ec851ff8adc3e9804640fa30c7fTyler Luu    virtual status_t initialize(CameraProperties::Properties*);
357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //APIs to configure Camera adapter and get the current parameter set
359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t setParameters(const CameraParameters& params);
360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual void getParameters(CameraParameters& params);
361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // API
363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t UseBuffersPreview(void* bufArr, int num);
364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //API to flush the buffers for preview
366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t flushBuffers();
367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // API
369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t setFormat(OMX_U32 port, OMXCameraPortParameters &cap);
370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // Function to get and populate caps from handle
372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t getCaps(CameraProperties::Properties* props, OMX_HANDLETYPE handle);
373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char* getLUTvalue_OMXtoHAL(int OMXValue, LUTtype LUT);
374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static int getLUTvalue_HALtoOMX(const char * HalValue, LUTtype LUT);
375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE OMXCameraAdapterEventHandler(OMX_IN OMX_HANDLETYPE hComponent,
377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                    OMX_IN OMX_EVENTTYPE eEvent,
378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                    OMX_IN OMX_U32 nData1,
379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                    OMX_IN OMX_U32 nData2,
380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                    OMX_IN OMX_PTR pEventData);
381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE OMXCameraAdapterEmptyBufferDone(OMX_IN OMX_HANDLETYPE hComponent,
383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                    OMX_IN OMX_BUFFERHEADERTYPE* pBuffer);
384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLETYPE hComponent,
386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                    OMX_IN OMX_BUFFERHEADERTYPE* pBuffHeader);
387b3fb1a45ce906ab0365f247caf596665ea0c9f39Sundar Raman
388b3fb1a45ce906ab0365f247caf596665ea0c9f39Sundar Raman static OMX_ERRORTYPE OMXCameraGetHandle(OMX_HANDLETYPE *handle, OMX_PTR pAppData=NULL);
389b3fb1a45ce906ab0365f247caf596665ea0c9f39Sundar Raman
390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprotected:
391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Parent class method implementation
393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t takePicture();
394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t stopImageCapture();
395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t startBracketing(int range);
396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t stopBracketing();
397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t autoFocus();
398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t cancelAutoFocus();
399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t startSmoothZoom(int targetIdx);
400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t stopSmoothZoom();
401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t startVideoCapture();
402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t stopVideoCapture();
403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t startPreview();
404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t stopPreview();
405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t useBuffers(CameraMode mode, void* bufArr, int num, size_t length, unsigned int queueable);
406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t fillThisBuffer(void* frameBuf, CameraFrame::FrameType frameType);
407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t getFrameSize(size_t &width, size_t &height);
408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t getPictureBufferSize(size_t &length, size_t bufferCount);
409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t getFrameDataSize(size_t &dataFrameSize, size_t bufferCount);
410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t startFaceDetection();
411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t stopFaceDetection();
4127016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng    virtual status_t switchToExecuting();
413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual void onOrientationEvent(uint32_t orientation, uint32_t tilt);
414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprivate:
416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
4177016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng    status_t doSwitchToExecuting();
4187016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng
419b3fb1a45ce906ab0365f247caf596665ea0c9f39Sundar Raman    void performCleanupAfterError();
420b3fb1a45ce906ab0365f247caf596665ea0c9f39Sundar Raman
421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t switchToLoaded();
422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMXCameraPortParameters *getPortParams(CameraFrame::FrameType frameType);
424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE SignalEvent(OMX_IN OMX_HANDLETYPE hComponent,
426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                                  OMX_IN OMX_EVENTTYPE eEvent,
427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                                  OMX_IN OMX_U32 nData1,
428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                                  OMX_IN OMX_U32 nData2,
429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                                  OMX_IN OMX_PTR pEventData);
4309b981b1785b6758b2dc8b147587188e5cf0d893dAkwasi Boateng    OMX_ERRORTYPE RemoveEvent(OMX_IN OMX_HANDLETYPE hComponent,
4319b981b1785b6758b2dc8b147587188e5cf0d893dAkwasi Boateng                              OMX_IN OMX_EVENTTYPE eEvent,
4329b981b1785b6758b2dc8b147587188e5cf0d893dAkwasi Boateng                              OMX_IN OMX_U32 nData1,
4339b981b1785b6758b2dc8b147587188e5cf0d893dAkwasi Boateng                              OMX_IN OMX_U32 nData2,
4349b981b1785b6758b2dc8b147587188e5cf0d893dAkwasi Boateng                              OMX_IN OMX_PTR pEventData);
435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t RegisterForEvent(OMX_IN OMX_HANDLETYPE hComponent,
437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                          OMX_IN OMX_EVENTTYPE eEvent,
438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                          OMX_IN OMX_U32 nData1,
439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                          OMX_IN OMX_U32 nData2,
440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                          OMX_IN Semaphore &semaphore);
441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setPictureRotation(unsigned int degree);
443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setSensorOrientation(unsigned int degree);
444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setImageQuality(unsigned int quality);
445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setThumbnailParams(unsigned int width, unsigned int height, unsigned int quality);
446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //EXIF
448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setParametersEXIF(const CameraParameters &params,
449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               BaseCameraAdapter::AdapterState state);
450bea7955fe043c646d21243e9889afbfe1d671ad9Tyler Luu    status_t convertGPSCoord(double coord, int &deg, int &min, int &sec, int &secDivisor);
451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setupEXIF();
452ef73bec8a83a2fd7fbb072d009382c64eb2da0eeTyler Luu    status_t setupEXIF_libjpeg(ExifElementsTable*, OMX_TI_ANCILLARYDATATYPE*,
453ef73bec8a83a2fd7fbb072d009382c64eb2da0eeTyler Luu                               OMX_TI_WHITEBALANCERESULTTYPE*);
454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Focus functionality
456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t doAutoFocus();
457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t stopAutoFocus();
458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t checkFocus(OMX_PARAM_FOCUSSTATUSTYPE *eFocusStatus);
459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t returnFocusStatus(bool timeoutReached);
46085c859b69b3c003b8db810371e24fe41599fc7deSundar Raman    status_t getFocusMode(OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE &focusMode);
461057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu    void handleFocusCallback();
46285c859b69b3c003b8db810371e24fe41599fc7deSundar Raman
463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Focus distances
465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setParametersFocus(const CameraParameters &params,
466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                BaseCameraAdapter::AdapterState state);
467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t addFocusDistances(OMX_U32 &near,
468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               OMX_U32 &optimal,
469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               OMX_U32 &far,
470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               CameraParameters& params);
471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t encodeFocusDistance(OMX_U32 dist, char *buffer, size_t length);
472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t getFocusDistances(OMX_U32 &near,OMX_U32 &optimal, OMX_U32 &far);
473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //VSTAB and VNF Functionality
475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t enableVideoNoiseFilter(bool enable);
476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t enableVideoStabilization(bool enable);
477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Digital zoom
479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setParametersZoom(const CameraParameters &params,
480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               BaseCameraAdapter::AdapterState state);
481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t doZoom(int index);
482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t advanceZoom();
483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //3A related parameters
485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setParameters3A(const CameraParameters &params,
486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                             BaseCameraAdapter::AdapterState state);
487759396a116bb2caf006405777a626fe9a8708114Tyler Luu
488759396a116bb2caf006405777a626fe9a8708114Tyler Luu    // scene modes
489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setScene(Gen3A_settings& Gen3A);
490759396a116bb2caf006405777a626fe9a8708114Tyler Luu    // returns pointer to SceneModesEntry from the LUT for camera given 'name' and 'scene'
491759396a116bb2caf006405777a626fe9a8708114Tyler Luu    static const SceneModesEntry* getSceneModeEntry(const char* name, OMX_SCENEMODETYPE scene);
492759396a116bb2caf006405777a626fe9a8708114Tyler Luu
493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Flash modes
495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setFlashMode(Gen3A_settings& Gen3A);
496e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getFlashMode(Gen3A_settings& Gen3A);
497e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu
498e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    // Focus modes
499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setFocusMode(Gen3A_settings& Gen3A);
500e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getFocusMode(Gen3A_settings& Gen3A);
501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Exposure Modes
503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setExposureMode(Gen3A_settings& Gen3A);
504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setEVCompensation(Gen3A_settings& Gen3A);
505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setWBMode(Gen3A_settings& Gen3A);
506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setFlicker(Gen3A_settings& Gen3A);
507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setBrightness(Gen3A_settings& Gen3A);
508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setContrast(Gen3A_settings& Gen3A);
509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setSharpness(Gen3A_settings& Gen3A);
510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setSaturation(Gen3A_settings& Gen3A);
511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setISO(Gen3A_settings& Gen3A);
512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setEffect(Gen3A_settings& Gen3A);
513e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t setMeteringAreas(Gen3A_settings& Gen3A);
514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
515e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getEVCompensation(Gen3A_settings& Gen3A);
516e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getWBMode(Gen3A_settings& Gen3A);
517e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getSharpness(Gen3A_settings& Gen3A);
518e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getSaturation(Gen3A_settings& Gen3A);
519e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getISO(Gen3A_settings& Gen3A);
520e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu
521e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    // 3A locks
522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setExposureLock(Gen3A_settings& Gen3A);
5239dc08c5fb736308cfca6659f66b14165b265baebTyler Luu    status_t setFocusLock(Gen3A_settings& Gen3A);
524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setWhiteBalanceLock(Gen3A_settings& Gen3A);
5259dc08c5fb736308cfca6659f66b14165b265baebTyler Luu    status_t set3ALock(OMX_BOOL toggleExp, OMX_BOOL toggleWb, OMX_BOOL toggleFocus);
526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //API to set FrameRate using VFR interface
528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setVFramerate(OMX_U32 minFrameRate,OMX_U32 maxFrameRate);
529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setParametersAlgo(const CameraParameters &params,
531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               BaseCameraAdapter::AdapterState state);
532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Noise filtering
534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setNSF(OMXCameraAdapter::IPPMode mode);
535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //LDC
537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setLDC(OMXCameraAdapter::IPPMode mode);
538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //GLBCE
540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setGLBCE(OMXCameraAdapter::BrightnessMode mode);
541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //GBCE
543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setGBCE(OMXCameraAdapter::BrightnessMode mode);
544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t printComponentVersion(OMX_HANDLETYPE handle);
546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Touch AF
548708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev    status_t setTouchFocus();
549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Face detection
551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setParametersFD(const CameraParameters &params,
552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                             BaseCameraAdapter::AdapterState state);
553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t updateFocusDistances(CameraParameters &params);
554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setFaceDetection(bool enable, OMX_U32 orientation);
555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t detectFaces(OMX_BUFFERHEADERTYPE* pBuffHeader,
556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                         sp<CameraFDResult> &result,
557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                         size_t previewWidth,
558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                         size_t previewHeight);
559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t encodeFaceCoordinates(const OMX_FACEDETECTIONTYPE *faceData,
560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                   camera_frame_metadata_t **pFaces,
561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                   size_t previewWidth,
562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                   size_t previewHeight);
563aa6e62e279cb54ae76c55ba9f8d02da230ce34e7Tyler Luu    void pauseFaceDetection(bool pause);
564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //3A Algorithms priority configuration
566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setAlgoPriority(AlgoPriority priority, Algorithm3A algo, bool enable);
567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Sensor overclocking
569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setSensorOverclock(bool enable);
570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // Utility methods for OMX Capabilities
572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertCapabilities(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t encodeSizeCap(OMX_TI_CAPRESTYPE&, const CapResolution *, size_t, char *, size_t);
574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t encodeISOCap(OMX_U32, const CapISO*, size_t, char*, size_t);
575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static size_t encodeZoomCap(OMX_S32, const CapZoom*, size_t, char*, size_t);
576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t encodeFramerateCap(OMX_U32, OMX_U32, const CapFramerate*, size_t, char*, size_t);
577f26e751771c0794008e466cd8f86601cf55fe572Tyler Luu    static status_t encodeVFramerateCap(OMX_TI_CAPTYPE&, const CapU32Pair*, size_t, char*, char*, size_t);
578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t encodePixelformatCap(OMX_COLOR_FORMATTYPE,
579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         const CapPixelformat*,
580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         size_t,
581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         char*,
582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         size_t);
583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertImageSizes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertPreviewSizes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertThumbSizes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertZoomStages(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertImageFormats(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertPreviewFormats(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertFramerates(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertVFramerates(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertEVs(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertISOModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertIPPModes(CameraProperties::Properties*, OMX_TI_CAPTYPE &);
594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertWBModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertEffects(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertExpModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertSceneModes(CameraProperties::Properties*, OMX_TI_CAPTYPE &);
598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertFocusModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertFlickerModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertFlashModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertSenMount(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertDefaults(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertLocks(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
604708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev    static status_t insertAreas(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
60572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng    static status_t insertVideoSizes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setParametersCapture(const CameraParameters &params,
608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  BaseCameraAdapter::AdapterState state);
609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Exposure Bracketing
611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setExposureBracketing(int *evValues, size_t evCount, size_t frameCount);
612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t parseExpRange(const char *rangeStr, int * expRange, size_t count, size_t &validEntries);
613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Temporal Bracketing
615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t doBracketing(OMX_BUFFERHEADERTYPE *pBuffHeader, CameraFrame::FrameType typeOfFrame);
616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t sendBracketFrames();
617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // Image Capture Service
619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t startImageCapture();
620fab72086a1fa5d93037ec1355bc8b01355db0f41Tyler Luu    status_t disableImagePort();
621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Shutter callback notifications
623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setShutterCallback(bool enabled);
624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Sets eithter HQ or HS mode and the frame count
626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setCaptureMode(OMXCameraAdapter::CaptureMode mode);
627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t UseBuffersCapture(void* bufArr, int num);
628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t UseBuffersPreviewData(void* bufArr, int num);
629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Used for calculation of the average frame rate during preview
631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t recalculateFPS();
632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Helper method for initializing a CameFrame object
634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t initCameraFrame(CameraFrame &frame, OMX_IN OMX_BUFFERHEADERTYPE *pBuffHeader, int typeOfFrame, OMXCameraPortParameters *port);
635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Sends the incoming OMX buffer header to subscribers
637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t sendFrame(CameraFrame &frame);
638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
6395e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    status_t sendCallBacks(CameraFrame frame, OMX_IN OMX_BUFFERHEADERTYPE *pBuffHeader, unsigned int mask, OMXCameraPortParameters *port);
6405e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng
641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t apply3Asettings( Gen3A_settings& Gen3A );
642da310a303b2b48404f31645cf660063517da3e8aEmilian Peev    status_t init3AParams(Gen3A_settings &Gen3A);
643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // AutoConvergence
645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setAutoConvergence(OMX_TI_AUTOCONVERGENCEMODETYPE pACMode, OMX_S32 pManualConverence);
646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t getAutoConvergence(OMX_TI_AUTOCONVERGENCEMODETYPE *pACMode, OMX_S32 *pManualConverence);
647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
648ef73bec8a83a2fd7fbb072d009382c64eb2da0eeTyler Luu    status_t setExtraData(bool enable, OMX_U32, OMX_EXT_EXTRADATATYPE);
649cf0a61f13533d70cb7ad700330de94142c2afe6aMilen Mitkov    OMX_OTHER_EXTRADATATYPE *getExtradata(OMX_OTHER_EXTRADATATYPE *extraData, OMX_EXTRADATATYPE type);
650cf0a61f13533d70cb7ad700330de94142c2afe6aMilen Mitkov
651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    class CommandHandler : public Thread {
652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        public:
653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CommandHandler(OMXCameraAdapter* ca)
654782a084e5fec691d3985b31c3ab7be1584d879b3Iliyan Malchev                : Thread(false), mCameraAdapter(ca) { }
655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            virtual bool threadLoop() {
657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool ret;
658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = Handler();
659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                return ret;
660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            status_t put(TIUTILS::Message* msg){
663f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman                Mutex::Autolock lock(mLock);
664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                return mCommandMsgQ.put(msg);
665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
667f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman            void clearCommandQ()
668f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman                {
669f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman                Mutex::Autolock lock(mLock);
670f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman                mCommandMsgQ.clear();
671f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman                }
672f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman
673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            enum {
674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                COMMAND_EXIT = -1,
675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                CAMERA_START_IMAGE_CAPTURE = 0,
6767016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng                CAMERA_PERFORM_AUTOFOCUS = 1,
677057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu                CAMERA_SWITCH_TO_EXECUTING,
678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            };
679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        private:
681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            bool Handler();
682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            TIUTILS::MessageQueue mCommandMsgQ;
683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMXCameraAdapter* mCameraAdapter;
684f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman            Mutex mLock;
685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    sp<CommandHandler> mCommandHandler;
687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic:
689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    class OMXCallbackHandler : public Thread {
691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        public:
692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMXCallbackHandler(OMXCameraAdapter* ca)
693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            : Thread(false), mCameraAdapter(ca) { }
694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        virtual bool threadLoop() {
696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            bool ret;
697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ret = Handler();
698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return ret;
699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        status_t put(TIUTILS::Message* msg){
702f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman            Mutex::Autolock lock(mLock);
703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return mCommandMsgQ.put(msg);
704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
706f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman        void clearCommandQ()
707f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman            {
708f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman            Mutex::Autolock lock(mLock);
709f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman            mCommandMsgQ.clear();
710f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman            }
711f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman
712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        enum {
713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            COMMAND_EXIT = -1,
714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMERA_FILL_BUFFER_DONE,
715057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu            CAMERA_FOCUS_STATUS,
716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    private:
719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        bool Handler();
720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        TIUTILS::MessageQueue mCommandMsgQ;
721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMXCameraAdapter* mCameraAdapter;
722f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman        Mutex mLock;
723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    sp<OMXCallbackHandler> mOMXCallbackHandler;
726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprivate:
728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //AF callback
730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setFocusCallback(bool enabled);
731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //OMX Capabilities data
733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapResolution mImageCapRes [];
734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapResolution mPreviewRes [];
735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapResolution mThumbRes [];
736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapPixelformat mPixelformats [];
737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapFramerate mFramerates [];
738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapU32 mSensorNames[] ;
739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapZoom mZoomStages [];
740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapEVComp mEVCompRanges [];
741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapISO mISOStages [];
742f26e751771c0794008e466cd8f86601cf55fe572Tyler Luu    static const CapU32Pair mVarFramerates [];
743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // OMX Camera defaults
745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_ANTIBANDING[];
746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_BRIGHTNESS[];
747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_CONTRAST[];
748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_EFFECT[];
749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_EV_COMPENSATION[];
750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_EV_STEP[];
751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_EXPOSURE_MODE[];
752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_FLASH_MODE[];
753edd46f9fca8856c26bb367ba2d7a29a7002ed9afSundar Raman    static const char DEFAULT_FOCUS_MODE_PREFERRED[];
754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_FOCUS_MODE[];
755524cc0cda6ed8cb07e0469fc931657ac60335aa1Sundar Raman    static const char DEFAULT_FRAMERATE_RANGE_IMAGE[];
756524cc0cda6ed8cb07e0469fc931657ac60335aa1Sundar Raman    static const char DEFAULT_FRAMERATE_RANGE_VIDEO[];
757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_IPP[];
758d054c26243e4cf49e5fe04789e4437e5e0f3f574Sundar Raman    static const char DEFAULT_GBCE[];
759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_ISO_MODE[];
760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_JPEG_QUALITY[];
761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_THUMBNAIL_QUALITY[];
762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_THUMBNAIL_SIZE[];
763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_PICTURE_FORMAT[];
764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_PICTURE_SIZE[];
765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_PREVIEW_FORMAT[];
766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_FRAMERATE[];
767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_PREVIEW_SIZE[];
768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_NUM_PREV_BUFS[];
769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_NUM_PIC_BUFS[];
770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_MAX_FOCUS_AREAS[];
771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_SATURATION[];
772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_SCENE_MODE[];
773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_SHARPNESS[];
774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_VSTAB[];
7758b0b73df9a2fe8e4fc2c36919d05321f2d96d543Tyler Luu    static const char DEFAULT_VSTAB_SUPPORTED[];
776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_WB[];
777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_ZOOM[];
778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_MAX_FD_HW_FACES[];
779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_MAX_FD_SW_FACES[];
780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_AE_LOCK[];
781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_AWB_LOCK[];
782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_MAX_NUM_METERING_AREAS[];
783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_LOCK_SUPPORTED[];
784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_LOCK_UNSUPPORTED[];
785d16343600a83478ed6223e51aa41f717f28b6351Sundar Raman    static const char DEFAULT_FOCAL_LENGTH_PRIMARY[];
786d16343600a83478ed6223e51aa41f717f28b6351Sundar Raman    static const char DEFAULT_FOCAL_LENGTH_SECONDARY[];
7874b85b17296d877e53a5197b2c0c8306c63839a12Sundar Raman    static const char DEFAULT_HOR_ANGLE[];
7884b85b17296d877e53a5197b2c0c8306c63839a12Sundar Raman    static const char DEFAULT_VER_ANGLE[];
7899919dafce4d57f0b9b9aedafc95b756464685009Tyler Luu    static const char DEFAULT_VIDEO_SNAPSHOT_SUPPORTED[];
79072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng    static const char DEFAULT_VIDEO_SIZE[];
79172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng    static const char DEFAULT_PREFERRED_PREVIEW_SIZE_FOR_VIDEO[];
7929919dafce4d57f0b9b9aedafc95b756464685009Tyler Luu    static const size_t MAX_FOCUS_AREAS;
793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_VERSIONTYPE mCompRevision;
795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //OMX Component UUID
797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_UUIDTYPE mCompUUID;
798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Current Focus distances
800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char mFocusDistNear[FOCUS_DIST_SIZE];
801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char mFocusDistOptimal[FOCUS_DIST_SIZE];
802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char mFocusDistFar[FOCUS_DIST_SIZE];
803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char mFocusDistBuffer[FOCUS_DIST_BUFFER_SIZE];
804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // Current Focus areas
806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Vector< sp<CameraArea> > mFocusAreas;
807d55379a7e975f992db1d10bba425f456447d14a8Tyler Luu    mutable Mutex mFocusAreasLock;
808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
809708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev    // Current Metering areas
810708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev    Vector< sp<CameraArea> > mMeteringAreas;
811d9c52eb4fa1e27ffd33f22d9987f60a8a714b7bfTyler Luu    mutable Mutex mMeteringAreasLock;
812708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev
813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CaptureMode mCapMode;
814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size_t mBurstFrames;
815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size_t mCapturedFrames;
816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mMeasurementEnabled;
818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Exposure Bracketing
820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mExposureBracketingValues[EXP_BRACKET_RANGE];
821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size_t mExposureBracketingValidEntries;
822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mutable Mutex mFaceDetectionLock;
824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Face detection status
825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mFaceDetectionRunning;
826aa6e62e279cb54ae76c55ba9f8d02da230ce34e7Tyler Luu    bool mFaceDetectionPaused;
827f2170decdf6bf41e590842b0fe5c0ed3852ebec3Emilian Peev    bool mFDSwitchAlgoPriority;
828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
8297762bf32b7bd874ce34948eb53a3bfa3906f4aefTyler Luu    camera_face_t  faceDetectionLastOutput [MAX_NUM_FACES_SUPPORTED];
8307762bf32b7bd874ce34948eb53a3bfa3906f4aefTyler Luu    int faceDetectionNumFacesLastOutput;
8317762bf32b7bd874ce34948eb53a3bfa3906f4aefTyler Luu
832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Geo-tagging
833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    EXIFData mEXIFData;
834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Image post-processing
836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    IPPMode mIPP;
837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //jpeg Picture Quality
839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mPictureQuality;
840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //thumbnail resolution
842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mThumbWidth, mThumbHeight;
843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //thumbnail quality
845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mThumbQuality;
846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //variables holding the estimated framerate
848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    float mFPS, mLastFPS;
849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //automatically disable AF after a given amount of frames
851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mFocusThreshold;
852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //This is needed for the CTS tests. They falsely assume, that during
854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //smooth zoom the current zoom stage will not change within the
855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //zoom callback scope, which in a real world situation is not always the
856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //case. This variable will "simulate" the expected behavior
857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mZoomParameterIdx;
858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //current zoom
860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Mutex mZoomLock;
861f9e7d93cfc739190426ae5c3d204980ec8b2e475Akwasi Boateng    unsigned int mCurrentZoomIdx, mTargetZoomIdx, mPreviousZoomIndx;
8621c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman    bool mZoomUpdating, mZoomUpdate;
863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mZoomInc;
864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mReturnZoomStatus;
865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const int32_t ZOOM_STEPS [];
866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     //local copy
868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_VERSIONTYPE mLocalVersionParam;
869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mPending3Asettings;
8712facbeb345500d62f74eac01ebb49a069fe034c1Raji Reddy Kandi    Mutex m3ASettingsUpdateLock;
872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Gen3A_settings mParameters3A;
873c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev    const char *mPictureFormatFromClient;
874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
87500479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman    OMX_TI_CONFIG_3A_FACE_PRIORITY mFacePriority;
87600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman    OMX_TI_CONFIG_3A_REGION_PRIORITY mRegionPriority;
87700479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman
878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CameraParameters mParams;
879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CameraProperties::Properties* mCapabilities;
880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mPictureRotation;
881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mWaitingForSnapshot;
882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mSnapshotCount;
883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mCaptureConfigured;
884b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu    unsigned int mPendingCaptureSettings;
885ef73bec8a83a2fd7fbb072d009382c64eb2da0eeTyler Luu    OMX_TI_ANCILLARYDATATYPE* mCaptureAncillaryData;
886ef73bec8a83a2fd7fbb072d009382c64eb2da0eeTyler Luu    OMX_TI_WHITEBALANCERESULTTYPE* mWhiteBalanceData;
887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Temporal bracketing management data
889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mutable Mutex mBracketingLock;
890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool *mBracketingBuffersQueued;
891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mBracketingBuffersQueuedCount;
892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mLastBracetingBufferIdx;
893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mBracketingEnabled;
894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mBracketingRange;
895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
896c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev    bool mIternalRecordingHint;
897c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev
898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CameraParameters mParameters;
899c387abd774bbc0aa23314bb989c1dec23e588a22Akwasi Boateng    bool mOmxInitialized;
900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMXCameraAdapterComponentContext mCameraAdapterParameters;
901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mFirstTimeInit;
902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///Semaphores used internally
904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Semaphore mInitSem;
905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Semaphore mFlushSem;
906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Semaphore mUsePreviewDataSem;
907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Semaphore mUsePreviewSem;
908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Semaphore mUseCaptureSem;
909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Semaphore mStartPreviewSem;
910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Semaphore mStopPreviewSem;
911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Semaphore mStartCaptureSem;
912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Semaphore mStopCaptureSem;
913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Semaphore mSwitchToLoadedSem;
9147016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng    Semaphore mSwitchToExecSem;
9157016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng
916312fa6b1a184b5e3aaedf66e6a348d17d9e38bd8Tyler Luu    mutable Mutex mStateSwitchLock;
917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Vector<struct TIUTILS::Message *> mEventSignalQ;
919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Mutex mEventLock;
920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_STATETYPE mComponentState;
922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mVnfEnabled;
924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mVstabEnabled;
925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mSensorOrientation;
927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mDeviceOrientation;
928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mSensorOverclock;
929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Indicates if we should leave
931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //OMX_Executing state during
932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //stop-/startPreview
933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mOMXStateSwitch;
934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mFrameCount;
936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mLastFrameCount;
937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mIter;
938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    nsecs_t mLastFPSTime;
939fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu    Mutex mFrameCountMutex;
940fd705eb8b757a4f3d1d80b736cf20cade04524d7Tyler Luu    Condition mFirstFrameCondition;
941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
942ac0cf36b98237ec911f49e7b1b93ef6464666e48Emilian Peev    Mutex mDoAFMutex;
943ac0cf36b98237ec911f49e7b1b93ef6464666e48Emilian Peev    Condition mDoAFCond;
944ac0cf36b98237ec911f49e7b1b93ef6464666e48Emilian Peev
9459a412956d5327ec851ff8adc3e9804640fa30c7fTyler Luu    size_t mSensorIndex;
946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CodingMode mCodingMode;
947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // Time source delta of ducati & system time
949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_TICKS mTimeSourceDelta;
950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool onlyOnce;
951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Semaphore mCaptureSem;
953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mCaptureSignalled;
954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
955ba027fc89ec3950e1ac2f95fcc3f1002442ddabbSundar Raman    OMX_BOOL mUserSetExpLock;
956ba027fc89ec3950e1ac2f95fcc3f1002442ddabbSundar Raman    OMX_BOOL mUserSetWbLock;
957ba027fc89ec3950e1ac2f95fcc3f1002442ddabbSundar Raman
958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev};
959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; //// namespace
960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif //OMX_CAMERA_ADAPTER_H
961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
962