OMXCameraAdapter.h revision 9ea65b3dc3b1728a812ff8f0b2cddf4b039f123e
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
51f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsnamespace Ti {
52f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsnamespace Camera {
53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define Q16_OFFSET                  16
55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CMD_TIMEOUT             3000000  //3 sec.
57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAPTURE_TIMEOUT         5000000  //5 sec.
58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define FOCUS_THRESHOLD             5 //[s.]
60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define MIN_JPEG_QUALITY            1
62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define MAX_JPEG_QUALITY            100
63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define EXP_BRACKET_RANGE           10
64f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define ZOOM_BRACKET_RANGE          10
65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define FOCUS_DIST_SIZE             100
67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define FOCUS_DIST_BUFFER_SIZE      500
68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define TOUCH_DATA_SIZE             200
70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define DEFAULT_THUMB_WIDTH         160
71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define DEFAULT_THUMB_HEIGHT        120
72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define FRAME_RATE_FULL_HD          27
73f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define FRAME_RATE_HIGH_HD          60
74f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
75704b8c03d4765b2f6d0a67bd175a7e9c51661c92Sundar Raman#define ZOOM_STAGES                 61
76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define FACE_DETECTION_BUFFER_SIZE  0x1000
787762bf32b7bd874ce34948eb53a3bfa3906f4aefTyler Luu#define MAX_NUM_FACES_SUPPORTED     35
79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define EXIF_MODEL_SIZE             100
81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define EXIF_MAKE_SIZE              100
82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define EXIF_DATE_TIME_SIZE         20
83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
84bea7955fe043c646d21243e9889afbfe1d671ad9Tyler Luu#define GPS_MIN_DIV                 60
85bea7955fe043c646d21243e9889afbfe1d671ad9Tyler Luu#define GPS_SEC_DIV                 60
86bea7955fe043c646d21243e9889afbfe1d671ad9Tyler Luu#define GPS_SEC_ACCURACY            1000
87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_TIMESTAMP_SIZE          6
88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_DATESTAMP_SIZE          11
89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_REF_SIZE                2
90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_MAPDATUM_SIZE           100
91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_PROCESSING_SIZE         100
92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_VERSION_SIZE            4
93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_NORTH_REF               "N"
94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_SOUTH_REF               "S"
95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_EAST_REF                "E"
96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GPS_WEST_REF                "W"
97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* Default portstartnumber of Camera component */
99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_DEFAULT_START_PORT_NUM 0
100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* Define number of ports for differt domains */
102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_OTHER_NUM 1
103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_VIDEO_NUM 4
104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_IMAGE_NUM 1
105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_AUDIO_NUM 0
106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan 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)
107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* Define start port number for differt domains */
109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_OTHER_START OMX_CAMERA_DEFAULT_START_PORT_NUM
110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_VIDEO_START (OMX_CAMERA_PORT_OTHER_START + OMX_CAMERA_PORT_OTHER_NUM)
111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_IMAGE_START (OMX_CAMERA_PORT_VIDEO_START + OMX_CAMERA_PORT_VIDEO_NUM)
112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_AUDIO_START (OMX_CAMERA_PORT_IMAGE_START + OMX_CAMERA_PORT_IMAGE_NUM)
113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* Port index for camera component */
115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_OTHER_IN (OMX_CAMERA_PORT_OTHER_START + 0)
116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_VIDEO_IN_VIDEO (OMX_CAMERA_PORT_VIDEO_START + 0)
117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_VIDEO_OUT_PREVIEW (OMX_CAMERA_PORT_VIDEO_START + 1)
118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_VIDEO_OUT_VIDEO (OMX_CAMERA_PORT_VIDEO_START + 2)
119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_VIDEO_OUT_MEASUREMENT (OMX_CAMERA_PORT_VIDEO_START + 3)
120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_CAMERA_PORT_IMAGE_OUT_IMAGE (OMX_CAMERA_PORT_IMAGE_START + 0)
121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
123f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define OMX_INIT_STRUCT(_s_, _name_)       \
124f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    memset(&(_s_), 0x0, sizeof(_name_));   \
125f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    (_s_).nSize = sizeof(_name_);          \
126f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    (_s_).nVersion.s.nVersionMajor = 0x1;  \
127f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    (_s_).nVersion.s.nVersionMinor = 0x1;  \
128f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    (_s_).nVersion.s.nRevision = 0x0;      \
129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_).nVersion.s.nStep = 0x0
130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_INIT_STRUCT_PTR(_s_, _name_)   \
132f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    memset((_s_), 0x0, sizeof(_name_));    \
133f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    (_s_)->nSize = sizeof(_name_);         \
134f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    (_s_)->nVersion.s.nVersionMajor = 0x1; \
135f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    (_s_)->nVersion.s.nVersionMinor = 0x1; \
136f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    (_s_)->nVersion.s.nRevision = 0x0;     \
137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_)->nVersion.s.nStep = 0x0
138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
139f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define GOTO_EXIT_IF(_CONDITION,_ERROR) {  \
140f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    if ((_CONDITION)) {                    \
141f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        eError = (_ERROR);                 \
142f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        goto EXIT;                         \
143f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    }                                      \
144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
146b8923d57614400f11c61a524e15f040dd68d25bcDevaraj Rangasamyconst int64_t kCameraBufferLatencyNs = 250000000LL; // 250 ms
147b8923d57614400f11c61a524e15f040dd68d25bcDevaraj Rangasamy
148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev///OMX Specific Functions
149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE OMXCameraAdapterEventHandler(OMX_IN OMX_HANDLETYPE hComponent,
150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_PTR pAppData,
151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_EVENTTYPE eEvent,
152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_U32 nData1,
153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_U32 nData2,
154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_PTR pEventData);
155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE OMXCameraAdapterEmptyBufferDone(OMX_IN OMX_HANDLETYPE hComponent,
157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_PTR pAppData,
158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_BUFFERHEADERTYPE* pBuffer);
159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLETYPE hComponent,
161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_PTR pAppData,
162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                        OMX_IN OMX_BUFFERHEADERTYPE* pBuffHeader);
163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstruct CapResolution {
165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size_t width, height;
166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    const char *param;
167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev};
168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstruct CapPixelformat {
170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_COLOR_FORMATTYPE pixelformat;
171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    const char *param;
172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev};
173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
174f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsstruct CapCodingFormat {
175f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_IMAGE_CODINGTYPE imageCodingFormat;
176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    const char *param;
177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev};
178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
179f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsstruct CapU32 {
180f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_U32 num;
181f26e751771c0794008e466cd8f86601cf55fe572Tyler Luu    const char *param;
182f26e751771c0794008e466cd8f86601cf55fe572Tyler Luu};
183f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstruct CapS32 {
185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_S32 num;
186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    const char *param;
187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev};
188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef CapU32 CapFramerate;
190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef CapU32 CapISO;
191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef CapU32 CapSensorName;
192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef CapS32 CapZoom;
193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  * Class which completely abstracts the camera hardware interaction from camera hal
196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  * TODO: Need to list down here, all the message types that will be supported by this class
197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Need to implement BufferProvider interface to use AllocateBuffer of OMX if needed
198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  */
199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevclass OMXCameraAdapter : public BaseCameraAdapter
200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic:
202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    /*--------------------Constant declarations----------------------------------------*/
204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const int32_t MAX_NO_BUFFERS = 20;
205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///@remarks OMX Camera has six ports - buffer input, time input, preview, image, video, and meta data
207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const int MAX_NO_PORTS = 6;
208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///Five second timeout
210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const int CAMERA_ADAPTER_TIMEOUT = 5000*1000;
211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    enum CaptureMode
213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
214f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        INITIAL_MODE = -1,
215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        HIGH_SPEED = 1,
216f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        HIGH_QUALITY,
217f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        VIDEO_MODE,
218f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        HIGH_QUALITY_ZSL,
219f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        CP_CAM,
220f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        VIDEO_MODE_HQ,
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        {
234f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        CodingJPEG = 0,
235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CodingJPS,
236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CodingMPO,
237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    enum Algorithm3A
240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        WHITE_BALANCE_ALGO = 0x1,
242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        EXPOSURE_ALGO = 0x2,
243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        FOCUS_ALGO = 0x4,
244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    enum AlgoPriority
247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        FACE_PRIORITY = 0,
249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        REGION_PRIORITY,
250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    enum BrightnessMode
253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        BRIGHTNESS_OFF = 0,
255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        BRIGHTNESS_ON,
256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        BRIGHTNESS_AUTO,
257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
259b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu    enum CaptureSettingsFlags {
260b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu        SetFormat               = 1 << 0,
261b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu        SetThumb                = 1 << 1,
2629ea65b3dc3b1728a812ff8f0b2cddf4b039f123eVladimir Petrov        SetBurstExpBracket      = 1 << 2,
263b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu        SetQuality              = 1 << 3,
264cacb0651c406df6b9ad2ee3bd48cc756718ba1a2Tyler Luu        SetRotation             = 1 << 4,
265cacb0651c406df6b9ad2ee3bd48cc756718ba1a2Tyler Luu        ECaptureSettingMax,
266f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        ECapturesettingsAll = ( ((ECaptureSettingMax -1 ) << 1) -1 ), /// all possible flags raised
267f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        ECaptureParamSettings = SetFormat | SetThumb | SetQuality, // Settings set with SetParam
268f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        ECaptureConfigSettings = (ECapturesettingsAll & ~ECaptureParamSettings)
269f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    };
270f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
271f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    enum PreviewSettingsFlags {
272f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        SetLDC                  = 1 << 0,
273f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        SetNSF                  = 1 << 1,
274f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        SetCapMode              = 1 << 2,
275f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        SetVNF                  = 1 << 3,
276f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        SetVSTAB                = 1 << 4,
277f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        EPreviewSettingMax,
278f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        EPreviewSettingsAll = ( ((EPreviewSettingMax -1 ) << 1) -1 ) /// all possible flags raised
279f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    };
280f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
281f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    enum BracketingValueMode {
282f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        BracketingValueAbsolute,
283f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        BracketingValueRelative,
284f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        BracketingValueAbsoluteForced,
285f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        BracketingValueRelativeForced,
286f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        BracketingValueCompensation,
287f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        BracketingValueCompensationForced
288b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu    };
289b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu
290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    class GPSData
291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    {
292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        public:
293bea7955fe043c646d21243e9889afbfe1d671ad9Tyler Luu                int mLongDeg, mLongMin, mLongSec, mLongSecDiv;
294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                char mLongRef[GPS_REF_SIZE];
295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mLongValid;
296bea7955fe043c646d21243e9889afbfe1d671ad9Tyler Luu                int mLatDeg, mLatMin, mLatSec, mLatSecDiv;
297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                char mLatRef[GPS_REF_SIZE];
298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mLatValid;
299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                int mAltitude;
300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                unsigned char mAltitudeRef;
301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mAltitudeValid;
302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                char mMapDatum[GPS_MAPDATUM_SIZE];
303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mMapDatumValid;
304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                char mVersionId[GPS_VERSION_SIZE];
305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mVersionIdValid;
306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                char mProcMethod[GPS_PROCESSING_SIZE];
307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mProcMethodValid;
308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                char mDatestamp[GPS_DATESTAMP_SIZE];
309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mDatestampValid;
310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                uint32_t mTimeStampHour;
311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                uint32_t mTimeStampMin;
312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                uint32_t mTimeStampSec;
313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool mTimeStampValid;
314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    class EXIFData
317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    {
318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        public:
319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            GPSData mGPSData;
320c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev            char mMake[EXIF_MODEL_SIZE];
321c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev            char mModel[EXIF_MAKE_SIZE];
322c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev            unsigned int mFocalNum, mFocalDen;
323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            bool mMakeValid;
324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            bool mModelValid;
325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///Parameters specific to any port of the OMX Camera component
328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    class OMXCameraPortParameters
329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    {
330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        public:
331f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            //CameraBuffer *                  mHostBufaddr[MAX_NO_BUFFERS];
332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_BUFFERHEADERTYPE           *mBufferHeader[MAX_NO_BUFFERS];
333f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            OMX_U8                          mStatus[MAX_NO_BUFFERS];
334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                         mWidth;
335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                         mHeight;
336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                         mStride;
337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U8                          mNumBufs;
338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            // defines maximum number of buffers our of mNumBufs
340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            // queueable at given moment
341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U8                          mMaxQueueable;
342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                         mBufSize;
344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_COLOR_FORMATTYPE            mColorFormat;
345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_PARAM_VIDEONOISEFILTERTYPE  mVNFMode;
346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_PARAM_VIDEOYUVRANGETYPE     mYUVRange;
347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_CONFIG_BOOLEANTYPE          mVidStabParam;
348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_CONFIG_FRAMESTABTYPE        mVidStabConfig;
349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                         mCapFrame;
350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                         mFrameRate;
351f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            OMX_U32                         mMinFrameRate;
352f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            OMX_U32                         mMaxFrameRate;
353f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            CameraFrame::FrameType          mImageType;
354f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            OMX_TI_STEREOFRAMELAYOUTTYPE    mFrameLayoutType;
355f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            CameraBufferType                mBufferType;
356f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
357f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            CameraBuffer * lookup_omx_buffer (OMX_BUFFERHEADERTYPE *pBufHeader);
358f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            enum {
359f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons               IDLE = 0, // buffer is neither with HAL or Ducati
360f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons               FILL, // buffer is with Ducati
361f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons               DONE, // buffer is filled and sent to HAL
362f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            };
363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///Context of the OMX Camera component
366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    class OMXCameraAdapterComponentContext
367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    {
368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        public:
369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_HANDLETYPE              mHandleComp;
370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                     mNumPorts;
371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_STATETYPE               mState ;
372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                     mVideoPortIndex;
373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                     mPrevPortIndex;
374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                     mImagePortIndex;
375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMX_U32                     mMeasurementPortIndex;
376f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            OMX_U32                     mVideoInPortIndex;
377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMXCameraPortParameters     mCameraPortParams[MAX_NO_PORTS];
378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
380f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    class CachedCaptureParameters
381f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    {
382f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        public:
383f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            unsigned int mPendingCaptureSettings;
384f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            unsigned int mPictureRotation;
385f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            int mExposureBracketingValues[EXP_BRACKET_RANGE];
386f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            int mExposureGainBracketingValues[EXP_BRACKET_RANGE];
387f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            int mExposureGainBracketingModes[EXP_BRACKET_RANGE];
388f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            size_t mExposureBracketingValidEntries;
389f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            OMX_BRACKETMODETYPE mExposureBracketMode;
390f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            unsigned int mBurstFrames;
391f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            bool mFlushShotConfigQueue;
392f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    };
393f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic:
395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
3969a412956d5327ec851ff8adc3e9804640fa30c7fTyler Luu    OMXCameraAdapter(size_t sensor_index);
397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ~OMXCameraAdapter();
398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///Initialzes the camera adapter creates any resources required
4009a412956d5327ec851ff8adc3e9804640fa30c7fTyler Luu    virtual status_t initialize(CameraProperties::Properties*);
401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //APIs to configure Camera adapter and get the current parameter set
403f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    virtual status_t setParameters(const android::CameraParameters& params);
404f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    virtual void getParameters(android::CameraParameters& params);
405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // API
407f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t UseBuffersPreview(CameraBuffer *bufArr, int num);
408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
409f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    //API to flush the buffers
410f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t flushBuffers(OMX_U32 port = OMX_CAMERA_PORT_VIDEO_OUT_PREVIEW);
411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // API
413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t setFormat(OMX_U32 port, OMXCameraPortParameters &cap);
414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // Function to get and populate caps from handle
416f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t getCaps(int sensorId, CameraProperties::Properties* props, OMX_HANDLETYPE handle);
417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char* getLUTvalue_OMXtoHAL(int OMXValue, LUTtype LUT);
418f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static int getMultipleLUTvalue_OMXtoHAL(int OMXValue, LUTtype LUT, char * supported);
419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static int getLUTvalue_HALtoOMX(const char * HalValue, LUTtype LUT);
420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE OMXCameraAdapterEventHandler(OMX_IN OMX_HANDLETYPE hComponent,
422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                    OMX_IN OMX_EVENTTYPE eEvent,
423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                    OMX_IN OMX_U32 nData1,
424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                    OMX_IN OMX_U32 nData2,
425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                    OMX_IN OMX_PTR pEventData);
426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE OMXCameraAdapterEmptyBufferDone(OMX_IN OMX_HANDLETYPE hComponent,
428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                    OMX_IN OMX_BUFFERHEADERTYPE* pBuffer);
429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLETYPE hComponent,
431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                    OMX_IN OMX_BUFFERHEADERTYPE* pBuffHeader);
432b3fb1a45ce906ab0365f247caf596665ea0c9f39Sundar Raman
433f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static OMX_ERRORTYPE OMXCameraGetHandle(OMX_HANDLETYPE *handle, OMX_PTR pAppData,
434f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        const OMX_CALLBACKTYPE & callbacks);
435b3fb1a45ce906ab0365f247caf596665ea0c9f39Sundar Raman
436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprotected:
437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Parent class method implementation
439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t takePicture();
440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t stopImageCapture();
441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t startBracketing(int range);
442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t stopBracketing();
443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t autoFocus();
444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t cancelAutoFocus();
445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t startSmoothZoom(int targetIdx);
446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t stopSmoothZoom();
447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t startVideoCapture();
448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t stopVideoCapture();
449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t startPreview();
450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t stopPreview();
451f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    virtual status_t useBuffers(CameraMode mode, CameraBuffer * bufArr, int num, size_t length, unsigned int queueable);
452f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    virtual status_t fillThisBuffer(CameraBuffer * frameBuf, CameraFrame::FrameType frameType);
453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t getFrameSize(size_t &width, size_t &height);
454f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    virtual status_t getPictureBufferSize(CameraFrame &frame, size_t bufferCount);
455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t getFrameDataSize(size_t &dataFrameSize, size_t bufferCount);
456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t startFaceDetection();
457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual status_t stopFaceDetection();
4587016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng    virtual status_t switchToExecuting();
459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    virtual void onOrientationEvent(uint32_t orientation, uint32_t tilt);
460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprivate:
462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
463f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // Caches and returns current set of parameters
464f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    CachedCaptureParameters* cacheCaptureParameters();
465f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
4667016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng    status_t doSwitchToExecuting();
4677016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng
468b3fb1a45ce906ab0365f247caf596665ea0c9f39Sundar Raman    void performCleanupAfterError();
469b3fb1a45ce906ab0365f247caf596665ea0c9f39Sundar Raman
470f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t switchToIdle();
471f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
472f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t switchToLoaded(bool bPortEnableRequired = false);
473f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t prevPortEnable();
474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMXCameraPortParameters *getPortParams(CameraFrame::FrameType frameType);
476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_ERRORTYPE SignalEvent(OMX_IN OMX_HANDLETYPE hComponent,
478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                                  OMX_IN OMX_EVENTTYPE eEvent,
479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                                  OMX_IN OMX_U32 nData1,
480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                                  OMX_IN OMX_U32 nData2,
481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                                  OMX_IN OMX_PTR pEventData);
4829b981b1785b6758b2dc8b147587188e5cf0d893dAkwasi Boateng    OMX_ERRORTYPE RemoveEvent(OMX_IN OMX_HANDLETYPE hComponent,
4839b981b1785b6758b2dc8b147587188e5cf0d893dAkwasi Boateng                              OMX_IN OMX_EVENTTYPE eEvent,
4849b981b1785b6758b2dc8b147587188e5cf0d893dAkwasi Boateng                              OMX_IN OMX_U32 nData1,
4859b981b1785b6758b2dc8b147587188e5cf0d893dAkwasi Boateng                              OMX_IN OMX_U32 nData2,
4869b981b1785b6758b2dc8b147587188e5cf0d893dAkwasi Boateng                              OMX_IN OMX_PTR pEventData);
487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t RegisterForEvent(OMX_IN OMX_HANDLETYPE hComponent,
489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                          OMX_IN OMX_EVENTTYPE eEvent,
490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                          OMX_IN OMX_U32 nData1,
491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                          OMX_IN OMX_U32 nData2,
492f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                          OMX_IN Utils::Semaphore &semaphore);
493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setPictureRotation(unsigned int degree);
495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setSensorOrientation(unsigned int degree);
496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setImageQuality(unsigned int quality);
497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setThumbnailParams(unsigned int width, unsigned int height, unsigned int quality);
498f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setSensorQuirks(int orientation,
499f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                             OMXCameraPortParameters &portParams,
500f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                             bool &portConfigured);
501f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
502f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setupTunnel(uint32_t SliceHeight, uint32_t EncoderHandle, uint32_t width, uint32_t height);
503f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t destroyTunnel();
504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //EXIF
506f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setParametersEXIF(const android::CameraParameters &params,
507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               BaseCameraAdapter::AdapterState state);
508bea7955fe043c646d21243e9889afbfe1d671ad9Tyler Luu    status_t convertGPSCoord(double coord, int &deg, int &min, int &sec, int &secDivisor);
509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setupEXIF();
510ef73bec8a83a2fd7fbb072d009382c64eb2da0eeTyler Luu    status_t setupEXIF_libjpeg(ExifElementsTable*, OMX_TI_ANCILLARYDATATYPE*,
511ef73bec8a83a2fd7fbb072d009382c64eb2da0eeTyler Luu                               OMX_TI_WHITEBALANCERESULTTYPE*);
512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Focus functionality
514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t doAutoFocus();
515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t stopAutoFocus();
516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t checkFocus(OMX_PARAM_FOCUSSTATUSTYPE *eFocusStatus);
517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t returnFocusStatus(bool timeoutReached);
51885c859b69b3c003b8db810371e24fe41599fc7deSundar Raman    status_t getFocusMode(OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE &focusMode);
519057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu    void handleFocusCallback();
52085c859b69b3c003b8db810371e24fe41599fc7deSundar Raman
521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Focus distances
523f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setParametersFocus(const android::CameraParameters &params,
524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                BaseCameraAdapter::AdapterState state);
525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t addFocusDistances(OMX_U32 &near,
526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               OMX_U32 &optimal,
527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               OMX_U32 &far,
528f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                               android::CameraParameters& params);
529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t encodeFocusDistance(OMX_U32 dist, char *buffer, size_t length);
530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t getFocusDistances(OMX_U32 &near,OMX_U32 &optimal, OMX_U32 &far);
531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //VSTAB and VNF Functionality
533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t enableVideoNoiseFilter(bool enable);
534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t enableVideoStabilization(bool enable);
535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Digital zoom
537f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setParametersZoom(const android::CameraParameters &params,
538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               BaseCameraAdapter::AdapterState state);
539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t doZoom(int index);
540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t advanceZoom();
541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //3A related parameters
543f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setParameters3A(const android::CameraParameters &params,
544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                             BaseCameraAdapter::AdapterState state);
545f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    void declareParameter3ABool(const android::CameraParameters &params, const char *key,
546f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                OMX_BOOL &current_setting, E3ASettingsFlags pending,
547f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                const char *msg);
548759396a116bb2caf006405777a626fe9a8708114Tyler Luu
549759396a116bb2caf006405777a626fe9a8708114Tyler Luu    // scene modes
550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setScene(Gen3A_settings& Gen3A);
551759396a116bb2caf006405777a626fe9a8708114Tyler Luu    // returns pointer to SceneModesEntry from the LUT for camera given 'name' and 'scene'
552759396a116bb2caf006405777a626fe9a8708114Tyler Luu    static const SceneModesEntry* getSceneModeEntry(const char* name, OMX_SCENEMODETYPE scene);
553759396a116bb2caf006405777a626fe9a8708114Tyler Luu
554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Flash modes
556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setFlashMode(Gen3A_settings& Gen3A);
557e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getFlashMode(Gen3A_settings& Gen3A);
558e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu
559e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    // Focus modes
560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setFocusMode(Gen3A_settings& Gen3A);
561e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getFocusMode(Gen3A_settings& Gen3A);
562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Exposure Modes
564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setExposureMode(Gen3A_settings& Gen3A);
565f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setManualExposureVal(Gen3A_settings& Gen3A);
566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setEVCompensation(Gen3A_settings& Gen3A);
567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setWBMode(Gen3A_settings& Gen3A);
568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setFlicker(Gen3A_settings& Gen3A);
569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setBrightness(Gen3A_settings& Gen3A);
570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setContrast(Gen3A_settings& Gen3A);
571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setSharpness(Gen3A_settings& Gen3A);
572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setSaturation(Gen3A_settings& Gen3A);
573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setISO(Gen3A_settings& Gen3A);
574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setEffect(Gen3A_settings& Gen3A);
575e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t setMeteringAreas(Gen3A_settings& Gen3A);
576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
577f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    //TI extensions for enable/disable algos
578f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setParameter3ABool(const OMX_INDEXTYPE omx_idx,
579f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                const OMX_BOOL data, const char *msg);
580f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setParameter3ABoolInvert(const OMX_INDEXTYPE omx_idx,
581f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                      const OMX_BOOL data, const char *msg);
582f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setAlgoFixedGamma(Gen3A_settings& Gen3A);
583f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setAlgoNSF1(Gen3A_settings& Gen3A);
584f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setAlgoNSF2(Gen3A_settings& Gen3A);
585f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setAlgoSharpening(Gen3A_settings& Gen3A);
586f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setAlgoThreeLinColorMap(Gen3A_settings& Gen3A);
587f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setAlgoGIC(Gen3A_settings& Gen3A);
588f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
589e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getEVCompensation(Gen3A_settings& Gen3A);
590e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getWBMode(Gen3A_settings& Gen3A);
591e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getSharpness(Gen3A_settings& Gen3A);
592e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getSaturation(Gen3A_settings& Gen3A);
593e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getISO(Gen3A_settings& Gen3A);
594e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu
595e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    // 3A locks
596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setExposureLock(Gen3A_settings& Gen3A);
5979dc08c5fb736308cfca6659f66b14165b265baebTyler Luu    status_t setFocusLock(Gen3A_settings& Gen3A);
598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setWhiteBalanceLock(Gen3A_settings& Gen3A);
5999dc08c5fb736308cfca6659f66b14165b265baebTyler Luu    status_t set3ALock(OMX_BOOL toggleExp, OMX_BOOL toggleWb, OMX_BOOL toggleFocus);
600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
601f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    //Stereo 3D
602f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    void setParamS3D(OMX_U32 port, const char *valstr);
603f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setS3DFrameLayout(OMX_U32 port) const;
604f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //API to set FrameRate using VFR interface
606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setVFramerate(OMX_U32 minFrameRate,OMX_U32 maxFrameRate);
607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
608f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setParametersAlgo(const android::CameraParameters &params,
609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               BaseCameraAdapter::AdapterState state);
610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Noise filtering
612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setNSF(OMXCameraAdapter::IPPMode mode);
613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //LDC
615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setLDC(OMXCameraAdapter::IPPMode mode);
616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //GLBCE
618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setGLBCE(OMXCameraAdapter::BrightnessMode mode);
619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //GBCE
621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setGBCE(OMXCameraAdapter::BrightnessMode mode);
622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t printComponentVersion(OMX_HANDLETYPE handle);
624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Touch AF
626708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev    status_t setTouchFocus();
627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Face detection
629f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setParametersFD(const android::CameraParameters &params,
630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                             BaseCameraAdapter::AdapterState state);
631f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t updateFocusDistances(android::CameraParameters &params);
632f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setFaceDetectionOrientation(OMX_U32 orientation);
633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setFaceDetection(bool enable, OMX_U32 orientation);
634f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t createPreviewMetadata(OMX_BUFFERHEADERTYPE* pBuffHeader,
635f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                         android::sp<CameraMetadataResult> &result,
636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                         size_t previewWidth,
637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                         size_t previewHeight);
638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t encodeFaceCoordinates(const OMX_FACEDETECTIONTYPE *faceData,
639f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                   camera_frame_metadata_t *metadataResult,
640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                   size_t previewWidth,
641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                   size_t previewHeight);
642f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t encodePreviewMetadata(camera_frame_metadata_t *meta, const OMX_PTR plat_pvt);
643f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
644aa6e62e279cb54ae76c55ba9f8d02da230ce34e7Tyler Luu    void pauseFaceDetection(bool pause);
645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //3A Algorithms priority configuration
647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setAlgoPriority(AlgoPriority priority, Algorithm3A algo, bool enable);
648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Sensor overclocking
650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setSensorOverclock(bool enable);
651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // Utility methods for OMX Capabilities
653f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static bool _checkOmxTiCap(const OMX_TI_CAPTYPE & caps);
654f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static bool _dumpOmxTiCap(int sensorId, const OMX_TI_CAPTYPE & caps);
655f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertCapabilities(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t encodeSizeCap(OMX_TI_CAPRESTYPE&, const CapResolution *, size_t, char *, size_t);
658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t encodeISOCap(OMX_U32, const CapISO*, size_t, char*, size_t);
659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static size_t encodeZoomCap(OMX_S32, const CapZoom*, size_t, char*, size_t);
660f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static void encodeFrameRates(int minFrameRate, int maxFrameRate, const OMX_TI_CAPTYPE & caps,
661f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            const CapFramerate * fixedFrameRates, int frameRateCount, android::Vector<FpsRange> & fpsRanges);
662f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t encodeImageCodingFormatCap(OMX_IMAGE_CODINGTYPE,
663f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                                const CapCodingFormat *,
664f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                                size_t,
665f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                                char *);
666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t encodePixelformatCap(OMX_COLOR_FORMATTYPE,
667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         const CapPixelformat*,
668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         size_t,
669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         char*,
670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         size_t);
671f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t encodeSizeCap3D(OMX_TI_CAPRESTYPE&,
672f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                    const CapResolution*,
673f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                    size_t ,
674f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                    char * ,
675f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                    size_t);
676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertImageSizes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertPreviewSizes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertThumbSizes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertZoomStages(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertImageFormats(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertPreviewFormats(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertFramerates(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertEVs(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertISOModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertIPPModes(CameraProperties::Properties*, OMX_TI_CAPTYPE &);
686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertWBModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertEffects(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertExpModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
689f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertManualExpRanges(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertSceneModes(CameraProperties::Properties*, OMX_TI_CAPTYPE &);
691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertFocusModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertFlickerModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertFlashModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertSenMount(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertDefaults(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertLocks(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
697708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev    static status_t insertAreas(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
698f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertMechanicalMisalignmentCorrection(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
699f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertCaptureModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
70072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng    static status_t insertVideoSizes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
701f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertFacing(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
702f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertFocalLength(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
703f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertAutoConvergenceModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
704f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertManualConvergenceRange(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
705f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertLayout(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
706f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertVideoSnapshotSupported(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
707f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertVNFSupported(CameraProperties::Properties* params, OMX_TI_CAPTYPE &caps);
708f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertVSTABSupported(CameraProperties::Properties* params, OMX_TI_CAPTYPE &caps);
709f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertGBCESupported(CameraProperties::Properties* params,
710f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                        const OMX_TI_CAPTYPE &caps);
711f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertGLBCESupported(CameraProperties::Properties* params,
712f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                         const OMX_TI_CAPTYPE &caps);
713f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertRaw(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
714f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
715f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setParametersCapture(const android::CameraParameters &params,
716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  BaseCameraAdapter::AdapterState state);
717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Exposure Bracketing
719f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t initVectorShot();
720f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setVectorShot(int *evValues, int *evValues2, int *evModes2,
721f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                           size_t evCount, size_t frameCount,
722f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                           bool flush, OMX_BRACKETMODETYPE bracketMode);
723f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setVectorStop(bool toPreview = false);
724f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setExposureBracketing(int *evValues, int *evValues2,
725f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                   size_t evCount, size_t frameCount,
726f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                   OMX_BRACKETMODETYPE bracketMode);
727f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t doExposureBracketing(int *evValues, int *evValues2,
728f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                  int *evModes2,
729f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                  size_t evCount, size_t frameCount,
730f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                  bool flush,
731f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                  OMX_BRACKETMODETYPE bracketMode);
732f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int getBracketingValueMode(const char *a, const char *b) const;
733f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t parseExpRange(const char *rangeStr, int *expRange, int *gainRange,
734f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                           int *expGainModes,
735f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                           size_t count, size_t &validEntries);
736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Temporal Bracketing
738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t doBracketing(OMX_BUFFERHEADERTYPE *pBuffHeader, CameraFrame::FrameType typeOfFrame);
739f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t sendBracketFrames(size_t &framesSent);
740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // Image Capture Service
742f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t startImageCapture(bool bracketing, CachedCaptureParameters*);
743fab72086a1fa5d93037ec1355bc8b01355db0f41Tyler Luu    status_t disableImagePort();
744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Shutter callback notifications
746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setShutterCallback(bool enabled);
747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Sets eithter HQ or HS mode and the frame count
749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setCaptureMode(OMXCameraAdapter::CaptureMode mode);
750f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t UseBuffersCapture(CameraBuffer *bufArr, int num);
751f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t UseBuffersPreviewData(CameraBuffer *bufArr, int num);
752f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t UseBuffersRawCapture(CameraBuffer *bufArr, int num);
753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Used for calculation of the average frame rate during preview
755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t recalculateFPS();
756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Sends the incoming OMX buffer header to subscribers
7585e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    status_t sendCallBacks(CameraFrame frame, OMX_IN OMX_BUFFERHEADERTYPE *pBuffHeader, unsigned int mask, OMXCameraPortParameters *port);
7595e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng
760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t apply3Asettings( Gen3A_settings& Gen3A );
761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // AutoConvergence
763f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setAutoConvergence(const char *valstr, const char *pValManualstr, const android::CameraParameters &params);
764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
765ef73bec8a83a2fd7fbb072d009382c64eb2da0eeTyler Luu    status_t setExtraData(bool enable, OMX_U32, OMX_EXT_EXTRADATATYPE);
766f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_OTHER_EXTRADATATYPE *getExtradata(const OMX_PTR ptrPrivate, OMX_EXTRADATATYPE type) const;
767f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
768f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // Meta data
769f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_CPCAM
770f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    camera_memory_t * getMetaData(const OMX_PTR plat_pvt,
771f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                  camera_request_memory allocator) const;
772f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif
773f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
774f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // Mechanical Misalignment Correction
775f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setMechanicalMisalignmentCorrection(bool enable);
776f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
777f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // DCC file data save
778f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t initDccFileDataSave(OMX_HANDLETYPE* omxHandle, int portIndex);
779f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t sniffDccFileDataSave(OMX_BUFFERHEADERTYPE* pBuffHeader);
780f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t saveDccFileDataSave();
781f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t closeDccFileDataSave();
782f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t fseekDCCuseCasePos(FILE *pFile);
783f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    FILE * fopenCameraDCC(const char *dccFolderPath);
784f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    FILE * parseDCCsubDir(DIR *pDir, char *path);
785f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
786f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef CAMERAHAL_OMX_PROFILING
787f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t storeProfilingData(OMX_BUFFERHEADERTYPE* pBuffHeader);
788f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif
789f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
790f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // Internal buffers
791f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t initInternalBuffers (OMX_U32);
792f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t deinitInternalBuffers (OMX_U32);
793f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
794f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // Reprocess Methods -- implementation in OMXReprocess.cpp
795f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setParametersReprocess(const android::CameraParameters &params, CameraBuffer* bufs,
796f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                  BaseCameraAdapter::AdapterState state);
797f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t startReprocess();
798f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t disableReprocess();
799f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t stopReprocess();
800f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t UseBuffersReprocess(CameraBuffer *bufArr, int num);
801cf0a61f13533d70cb7ad700330de94142c2afe6aMilen Mitkov
802f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    class CommandHandler : public android::Thread {
803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        public:
804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CommandHandler(OMXCameraAdapter* ca)
805f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                : android::Thread(false), mCameraAdapter(ca) { }
806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            virtual bool threadLoop() {
808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool ret;
809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = Handler();
810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                return ret;
811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
813f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            status_t put(Utils::Message* msg){
814f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                android::AutoMutex lock(mLock);
815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                return mCommandMsgQ.put(msg);
816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
818f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman            void clearCommandQ()
819f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman                {
820f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                android::AutoMutex lock(mLock);
821f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman                mCommandMsgQ.clear();
822f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman                }
823f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman
824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            enum {
825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                COMMAND_EXIT = -1,
826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                CAMERA_START_IMAGE_CAPTURE = 0,
827f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                CAMERA_PERFORM_AUTOFOCUS,
828057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu                CAMERA_SWITCH_TO_EXECUTING,
829f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                CAMERA_START_REPROCESS
830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            };
831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        private:
833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            bool Handler();
834f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            Utils::MessageQueue mCommandMsgQ;
835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMXCameraAdapter* mCameraAdapter;
836f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            android::Mutex mLock;
837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
838f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::sp<CommandHandler> mCommandHandler;
839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic:
841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
842f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    class OMXCallbackHandler : public android::Thread {
843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        public:
844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMXCallbackHandler(OMXCameraAdapter* ca)
845f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            : Thread(false), mCameraAdapter(ca)
846f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        {
847f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mIsProcessed = true;
848f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        }
849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        virtual bool threadLoop() {
851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            bool ret;
852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ret = Handler();
853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return ret;
854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
856f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        status_t put(Utils::Message* msg){
857f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            android::AutoMutex lock(mLock);
858f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mIsProcessed = false;
859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return mCommandMsgQ.put(msg);
860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
862f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman        void clearCommandQ()
863f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman            {
864f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            android::AutoMutex lock(mLock);
865f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman            mCommandMsgQ.clear();
866f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman            }
867f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman
868f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        void flush();
869f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        enum {
871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            COMMAND_EXIT = -1,
872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMERA_FILL_BUFFER_DONE,
873f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            CAMERA_FOCUS_STATUS
874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    private:
877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        bool Handler();
878f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        Utils::MessageQueue mCommandMsgQ;
879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMXCameraAdapter* mCameraAdapter;
880f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        android::Mutex mLock;
881f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        android::Condition mCondition;
882f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        bool mIsProcessed;
883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
885f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::sp<OMXCallbackHandler> mOMXCallbackHandler;
886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprivate:
888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //AF callback
890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setFocusCallback(bool enabled);
891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //OMX Capabilities data
893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapResolution mImageCapRes [];
894f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const CapResolution mImageCapResSS [];
895f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const CapResolution mImageCapResTB [];
896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapResolution mPreviewRes [];
897f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const CapResolution mPreviewResSS [];
898f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const CapResolution mPreviewResTB [];
899f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const CapResolution mPreviewPortraitRes [];
900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapResolution mThumbRes [];
901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapPixelformat mPixelformats [];
902f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const userToOMX_LUT mFrameLayout [];
903f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const LUTtype mLayoutLUT;
904f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const CapCodingFormat mImageCodingFormat[];
905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapFramerate mFramerates [];
906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapU32 mSensorNames[] ;
907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapZoom mZoomStages [];
908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapISO mISOStages [];
909f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_IMX060;
910f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_OV5650;
911f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_OV5640;
912f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_OV14825;
913f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_S5K4E1GA;
914f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_S5K6A1GX03;
915f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_OV8830;
916f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_OV2722;
917f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const CapU32 mFacing [];
918f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const userToOMX_LUT mAutoConvergence [];
919f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const LUTtype mAutoConvergenceLUT;
920f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const userToOMX_LUT mBracketingModes[];
921f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const LUTtype mBracketingModesLUT;
922f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
923f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int FPS_MIN;
924f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int FPS_MAX;
925f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int FPS_MAX_EXTENDED;
926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // OMX Camera defaults
928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_ANTIBANDING[];
929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_BRIGHTNESS[];
930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_CONTRAST[];
931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_EFFECT[];
932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_EV_COMPENSATION[];
933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_EV_STEP[];
934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_EXPOSURE_MODE[];
935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_FLASH_MODE[];
936edd46f9fca8856c26bb367ba2d7a29a7002ed9afSundar Raman    static const char DEFAULT_FOCUS_MODE_PREFERRED[];
937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_FOCUS_MODE[];
938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_IPP[];
939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_ISO_MODE[];
940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_JPEG_QUALITY[];
941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_THUMBNAIL_QUALITY[];
942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_THUMBNAIL_SIZE[];
943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_PICTURE_FORMAT[];
944f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_S3D_PICTURE_LAYOUT[];
945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_PICTURE_SIZE[];
946f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_PICTURE_SS_SIZE[];
947f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_PICTURE_TB_SIZE[];
948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_PREVIEW_FORMAT[];
949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_FRAMERATE[];
950f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_S3D_PREVIEW_LAYOUT[];
951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_PREVIEW_SIZE[];
952f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_PREVIEW_SS_SIZE[];
953f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_PREVIEW_TB_SIZE[];
954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_NUM_PREV_BUFS[];
955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_NUM_PIC_BUFS[];
956c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_SATURATION[];
957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_SCENE_MODE[];
958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_SHARPNESS[];
959f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char * DEFAULT_VSTAB;
960f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char * DEFAULT_VNF;
961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_WB[];
962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_ZOOM[];
963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_MAX_FD_HW_FACES[];
964c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_MAX_FD_SW_FACES[];
965f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char * DEFAULT_AE_LOCK;
966f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char * DEFAULT_AWB_LOCK;
9674b85b17296d877e53a5197b2c0c8306c63839a12Sundar Raman    static const char DEFAULT_HOR_ANGLE[];
9684b85b17296d877e53a5197b2c0c8306c63839a12Sundar Raman    static const char DEFAULT_VER_ANGLE[];
96972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng    static const char DEFAULT_VIDEO_SIZE[];
970f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_SENSOR_ORIENTATION[];
971f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_AUTOCONVERGENCE_MODE[];
972f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_MANUAL_CONVERGENCE[];
973f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char * DEFAULT_MECHANICAL_MISALIGNMENT_CORRECTION_MODE;
974f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_EXIF_MODEL[];
975f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_EXIF_MAKE[];
976f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
9779919dafce4d57f0b9b9aedafc95b756464685009Tyler Luu    static const size_t MAX_FOCUS_AREAS;
978c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
979f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef CAMERAHAL_OMX_PROFILING
980f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
981f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_PROFILE_PATH[];
982f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int mDebugProfile;
983f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
984f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif
985f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
986c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_VERSIONTYPE mCompRevision;
987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //OMX Component UUID
989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_UUIDTYPE mCompUUID;
990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Current Focus distances
992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char mFocusDistNear[FOCUS_DIST_SIZE];
993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char mFocusDistOptimal[FOCUS_DIST_SIZE];
994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char mFocusDistFar[FOCUS_DIST_SIZE];
995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char mFocusDistBuffer[FOCUS_DIST_BUFFER_SIZE];
996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // Current Focus areas
998f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Vector<android::sp<CameraArea> > mFocusAreas;
999f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mFocusAreasLock;
1000f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1001f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // Current Touch convergence areas
1002f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Vector<android::sp<CameraArea> > mTouchAreas;
1003f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mTouchAreasLock;
1004c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1005708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev    // Current Metering areas
1006f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Vector<android::sp<CameraArea> > mMeteringAreas;
1007f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mMeteringAreasLock;
1008708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev
1009f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OperatingMode mCapabilitiesOpMode;
1010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CaptureMode mCapMode;
1011f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // TODO(XXX): Do we really need this lock? Let's
1012f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // try to merge temporal bracketing and burst
1013f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // capture later
1014f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mBurstLock;
1015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size_t mBurstFrames;
1016f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    size_t mBurstFramesAccum;
1017f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    size_t mBurstFramesQueued;
1018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size_t mCapturedFrames;
1019f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mFlushShotConfigQueue;
1020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mMeasurementEnabled;
1022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Exposure Bracketing
1024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mExposureBracketingValues[EXP_BRACKET_RANGE];
1025f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int mExposureGainBracketingValues[EXP_BRACKET_RANGE];
1026f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int mExposureGainBracketingModes[EXP_BRACKET_RANGE];
1027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size_t mExposureBracketingValidEntries;
1028f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_BRACKETMODETYPE mExposureBracketMode;
1029f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1030f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    //Zoom Bracketing
1031f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int mZoomBracketingValues[ZOOM_BRACKET_RANGE];
1032f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    size_t mZoomBracketingValidEntries;
1033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1034f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const uint32_t FACE_DETECTION_THRESHOLD;
1035f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mFaceDetectionLock;
1036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Face detection status
1037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mFaceDetectionRunning;
1038aa6e62e279cb54ae76c55ba9f8d02da230ce34e7Tyler Luu    bool mFaceDetectionPaused;
1039f2170decdf6bf41e590842b0fe5c0ed3852ebec3Emilian Peev    bool mFDSwitchAlgoPriority;
1040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1041f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    camera_face_t  faceDetectionLastOutput[MAX_NUM_FACES_SUPPORTED];
10427762bf32b7bd874ce34948eb53a3bfa3906f4aefTyler Luu    int faceDetectionNumFacesLastOutput;
1043f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int metadataLastAnalogGain;
1044f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int metadataLastExposureTime;
10457762bf32b7bd874ce34948eb53a3bfa3906f4aefTyler Luu
1046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Geo-tagging
1047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    EXIFData mEXIFData;
1048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Image post-processing
1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    IPPMode mIPP;
1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //jpeg Picture Quality
1053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mPictureQuality;
1054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //thumbnail resolution
1056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mThumbWidth, mThumbHeight;
1057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //thumbnail quality
1059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mThumbQuality;
1060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //variables holding the estimated framerate
1062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    float mFPS, mLastFPS;
1063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //automatically disable AF after a given amount of frames
1065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mFocusThreshold;
1066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //This is needed for the CTS tests. They falsely assume, that during
1068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //smooth zoom the current zoom stage will not change within the
1069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //zoom callback scope, which in a real world situation is not always the
1070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //case. This variable will "simulate" the expected behavior
1071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mZoomParameterIdx;
1072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //current zoom
1074f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex mZoomLock;
1075f9e7d93cfc739190426ae5c3d204980ec8b2e475Akwasi Boateng    unsigned int mCurrentZoomIdx, mTargetZoomIdx, mPreviousZoomIndx;
10761c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman    bool mZoomUpdating, mZoomUpdate;
1077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mZoomInc;
1078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mReturnZoomStatus;
1079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const int32_t ZOOM_STEPS [];
1080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     //local copy
1082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_VERSIONTYPE mLocalVersionParam;
1083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mPending3Asettings;
1085f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex m3ASettingsUpdateLock;
1086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Gen3A_settings mParameters3A;
1087c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev    const char *mPictureFormatFromClient;
1088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1089f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    BrightnessMode mGBCE;
1090f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    BrightnessMode mGLBCE;
1091f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
109200479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman    OMX_TI_CONFIG_3A_FACE_PRIORITY mFacePriority;
109300479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman    OMX_TI_CONFIG_3A_REGION_PRIORITY mRegionPriority;
109400479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman
1095f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::CameraParameters mParams;
1096c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CameraProperties::Properties* mCapabilities;
1097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mPictureRotation;
1098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mWaitingForSnapshot;
1099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mCaptureConfigured;
1100b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu    unsigned int mPendingCaptureSettings;
1101f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    unsigned int mPendingPreviewSettings;
1102f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    unsigned int mPendingReprocessSettings;
1103ef73bec8a83a2fd7fbb072d009382c64eb2da0eeTyler Luu    OMX_TI_ANCILLARYDATATYPE* mCaptureAncillaryData;
1104ef73bec8a83a2fd7fbb072d009382c64eb2da0eeTyler Luu    OMX_TI_WHITEBALANCERESULTTYPE* mWhiteBalanceData;
1105f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mReprocConfigured;
1106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Temporal bracketing management data
1108f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mBracketingSet;
1109f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mBracketingLock;
1110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool *mBracketingBuffersQueued;
1111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mBracketingBuffersQueuedCount;
1112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mLastBracetingBufferIdx;
1113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mBracketingEnabled;
1114f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mZoomBracketingEnabled;
1115f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    size_t mBracketingRange;
1116f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int mCurrentZoomBracketing;
1117f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::CameraParameters mParameters;
1118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1119f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef CAMERAHAL_TUNA
1120c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev    bool mIternalRecordingHint;
1121f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif
1122c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev
1123c387abd774bbc0aa23314bb989c1dec23e588a22Akwasi Boateng    bool mOmxInitialized;
1124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMXCameraAdapterComponentContext mCameraAdapterParameters;
1125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mFirstTimeInit;
1126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///Semaphores used internally
1128f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mInitSem;
1129f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mFlushSem;
1130f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mUsePreviewDataSem;
1131f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mUsePreviewSem;
1132f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mUseCaptureSem;
1133f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mStartPreviewSem;
1134f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mStopPreviewSem;
1135f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mStartCaptureSem;
1136f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mStopCaptureSem;
1137f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mSwitchToLoadedSem;
1138f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mSwitchToExecSem;
1139f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mStopReprocSem;
1140f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mUseReprocessSem;
1141f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1142f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mStateSwitchLock;
1143f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mIdleStateSwitchLock;
1144f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1145f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Vector<Utils::Message *> mEventSignalQ;
1146f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex mEventLock;
1147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_STATETYPE mComponentState;
1149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1150f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_TI_AUTOCONVERGENCEMODETYPE mAutoConv;
1151f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_S32 mManualConv;
1152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mVnfEnabled;
1153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mVstabEnabled;
1154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mSensorOrientation;
1156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mDeviceOrientation;
1157f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int mFaceOrientation;
1158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mSensorOverclock;
1159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Indicates if we should leave
1161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //OMX_Executing state during
1162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //stop-/startPreview
1163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mOMXStateSwitch;
1164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mFrameCount;
1166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mLastFrameCount;
1167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mIter;
1168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    nsecs_t mLastFPSTime;
1169f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex mFrameCountMutex;
1170f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Condition mFirstFrameCondition;
1171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1172f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const nsecs_t CANCEL_AF_TIMEOUT;
1173f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex mCancelAFMutex;
1174f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Condition mCancelAFCond;
1175f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1176f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex mDoAFMutex;
1177f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Condition mDoAFCond;
1178ac0cf36b98237ec911f49e7b1b93ef6464666e48Emilian Peev
11799a412956d5327ec851ff8adc3e9804640fa30c7fTyler Luu    size_t mSensorIndex;
1180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CodingMode mCodingMode;
1181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // Time source delta of ducati & system time
1183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_TICKS mTimeSourceDelta;
1184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool onlyOnce;
1185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1186f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mCaptureSem;
1187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mCaptureSignalled;
1188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1189ba027fc89ec3950e1ac2f95fcc3f1002442ddabbSundar Raman    OMX_BOOL mUserSetExpLock;
1190ba027fc89ec3950e1ac2f95fcc3f1002442ddabbSundar Raman    OMX_BOOL mUserSetWbLock;
1191ba027fc89ec3950e1ac2f95fcc3f1002442ddabbSundar Raman
1192f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef CAMERAHAL_USE_RAW_IMAGE_SAVING
1193f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mRawCapture;
1194f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mYuvCapture;
1195f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif
1196f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1197f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mSetFormatDone;
1198f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1199f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_TI_DCCDATATYPE mDccData;
1200f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex mDccDataLock;
1201f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1202f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int mMaxZoomSupported;
1203f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex mImageCaptureLock;
1204f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1205f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mTunnelDestroyed;
1206f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mPreviewPortInitialized;
1207f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1208f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // Used for allocations that need to be sent to Ducati
1209f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    MemoryManager mMemMgr;
1210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev};
1211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1212f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} // namespace Camera
1213f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} // namespace Ti
1214f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1215f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif //OMX_CAMERA_ADAPTER_H
1216