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);
5820db9de9c050c698df5c160249e4060efa96e10a7Vladimir Petrov    status_t setAlgoExternalGamma(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
5890db9de9c050c698df5c160249e4060efa96e10a7Vladimir Petrov    //Gamma table
5900db9de9c050c698df5c160249e4060efa96e10a7Vladimir Petrov    void updateGammaTable(const char* gamma);
5910db9de9c050c698df5c160249e4060efa96e10a7Vladimir Petrov    status_t setGammaTable(Gen3A_settings& Gen3A);
5920db9de9c050c698df5c160249e4060efa96e10a7Vladimir Petrov
593e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getEVCompensation(Gen3A_settings& Gen3A);
594e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getWBMode(Gen3A_settings& Gen3A);
595e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getSharpness(Gen3A_settings& Gen3A);
596e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getSaturation(Gen3A_settings& Gen3A);
597e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    status_t getISO(Gen3A_settings& Gen3A);
598e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu
599e552120201f0e53a6e5c9f816e91739dc4ec1e0bTyler Luu    // 3A locks
600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setExposureLock(Gen3A_settings& Gen3A);
6019dc08c5fb736308cfca6659f66b14165b265baebTyler Luu    status_t setFocusLock(Gen3A_settings& Gen3A);
602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setWhiteBalanceLock(Gen3A_settings& Gen3A);
6039dc08c5fb736308cfca6659f66b14165b265baebTyler Luu    status_t set3ALock(OMX_BOOL toggleExp, OMX_BOOL toggleWb, OMX_BOOL toggleFocus);
604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
605f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    //Stereo 3D
606f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    void setParamS3D(OMX_U32 port, const char *valstr);
607f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setS3DFrameLayout(OMX_U32 port) const;
608f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //API to set FrameRate using VFR interface
610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setVFramerate(OMX_U32 minFrameRate,OMX_U32 maxFrameRate);
611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
612f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setParametersAlgo(const android::CameraParameters &params,
613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               BaseCameraAdapter::AdapterState state);
614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Noise filtering
616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setNSF(OMXCameraAdapter::IPPMode mode);
617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //LDC
619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setLDC(OMXCameraAdapter::IPPMode mode);
620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //GLBCE
622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setGLBCE(OMXCameraAdapter::BrightnessMode mode);
623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //GBCE
625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setGBCE(OMXCameraAdapter::BrightnessMode mode);
626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t printComponentVersion(OMX_HANDLETYPE handle);
628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Touch AF
630708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev    status_t setTouchFocus();
631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Face detection
633f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setParametersFD(const android::CameraParameters &params,
634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                             BaseCameraAdapter::AdapterState state);
635f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t updateFocusDistances(android::CameraParameters &params);
636f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setFaceDetectionOrientation(OMX_U32 orientation);
637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setFaceDetection(bool enable, OMX_U32 orientation);
638f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t createPreviewMetadata(OMX_BUFFERHEADERTYPE* pBuffHeader,
639f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                         android::sp<CameraMetadataResult> &result,
640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                         size_t previewWidth,
641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                         size_t previewHeight);
642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t encodeFaceCoordinates(const OMX_FACEDETECTIONTYPE *faceData,
643f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                   camera_frame_metadata_t *metadataResult,
644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                   size_t previewWidth,
645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                   size_t previewHeight);
646f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t encodePreviewMetadata(camera_frame_metadata_t *meta, const OMX_PTR plat_pvt);
647f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
648aa6e62e279cb54ae76c55ba9f8d02da230ce34e7Tyler Luu    void pauseFaceDetection(bool pause);
649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //3A Algorithms priority configuration
651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setAlgoPriority(AlgoPriority priority, Algorithm3A algo, bool enable);
652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Sensor overclocking
654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setSensorOverclock(bool enable);
655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // Utility methods for OMX Capabilities
657f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static bool _checkOmxTiCap(const OMX_TI_CAPTYPE & caps);
658f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static bool _dumpOmxTiCap(int sensorId, const OMX_TI_CAPTYPE & caps);
659f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertCapabilities(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t encodeSizeCap(OMX_TI_CAPRESTYPE&, const CapResolution *, size_t, char *, size_t);
662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t encodeISOCap(OMX_U32, const CapISO*, size_t, char*, size_t);
663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static size_t encodeZoomCap(OMX_S32, const CapZoom*, size_t, char*, size_t);
664f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static void encodeFrameRates(int minFrameRate, int maxFrameRate, const OMX_TI_CAPTYPE & caps,
665f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            const CapFramerate * fixedFrameRates, int frameRateCount, android::Vector<FpsRange> & fpsRanges);
666f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t encodeImageCodingFormatCap(OMX_IMAGE_CODINGTYPE,
667f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                                const CapCodingFormat *,
668f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                                size_t,
669f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                                char *);
670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t encodePixelformatCap(OMX_COLOR_FORMATTYPE,
671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         const CapPixelformat*,
672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         size_t,
673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         char*,
674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         size_t);
675f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t encodeSizeCap3D(OMX_TI_CAPRESTYPE&,
676f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                    const CapResolution*,
677f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                    size_t ,
678f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                    char * ,
679f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                    size_t);
680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertImageSizes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertPreviewSizes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertThumbSizes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertZoomStages(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertImageFormats(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertPreviewFormats(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertFramerates(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertEVs(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertISOModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertIPPModes(CameraProperties::Properties*, OMX_TI_CAPTYPE &);
690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertWBModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertEffects(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertExpModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
693f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertManualExpRanges(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertSceneModes(CameraProperties::Properties*, OMX_TI_CAPTYPE &);
695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertFocusModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertFlickerModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertFlashModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertSenMount(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertDefaults(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static status_t insertLocks(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
701708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev    static status_t insertAreas(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
702f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertMechanicalMisalignmentCorrection(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
703f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertCaptureModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
70472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng    static status_t insertVideoSizes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
705f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertFacing(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
706f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertFocalLength(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
707f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertAutoConvergenceModes(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
708f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertManualConvergenceRange(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
709f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertLayout(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
710f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertVideoSnapshotSupported(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
711f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertVNFSupported(CameraProperties::Properties* params, OMX_TI_CAPTYPE &caps);
712f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertVSTABSupported(CameraProperties::Properties* params, OMX_TI_CAPTYPE &caps);
713f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertGBCESupported(CameraProperties::Properties* params,
714f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                        const OMX_TI_CAPTYPE &caps);
715f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertGLBCESupported(CameraProperties::Properties* params,
716f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                         const OMX_TI_CAPTYPE &caps);
717f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static status_t insertRaw(CameraProperties::Properties*, OMX_TI_CAPTYPE&);
718f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
719f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setParametersCapture(const android::CameraParameters &params,
720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  BaseCameraAdapter::AdapterState state);
721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Exposure Bracketing
723f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t initVectorShot();
724f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setVectorShot(int *evValues, int *evValues2, int *evModes2,
725f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                           size_t evCount, size_t frameCount,
726f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                           bool flush, OMX_BRACKETMODETYPE bracketMode);
727f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setVectorStop(bool toPreview = false);
728f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setExposureBracketing(int *evValues, int *evValues2,
729f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                   size_t evCount, size_t frameCount,
730f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                   OMX_BRACKETMODETYPE bracketMode);
731f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t doExposureBracketing(int *evValues, int *evValues2,
732f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                  int *evModes2,
733f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                  size_t evCount, size_t frameCount,
734f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                  bool flush,
735f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                  OMX_BRACKETMODETYPE bracketMode);
736f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int getBracketingValueMode(const char *a, const char *b) const;
737f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t parseExpRange(const char *rangeStr, int *expRange, int *gainRange,
738f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                           int *expGainModes,
739f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                           size_t count, size_t &validEntries);
740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Temporal Bracketing
742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t doBracketing(OMX_BUFFERHEADERTYPE *pBuffHeader, CameraFrame::FrameType typeOfFrame);
743f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t sendBracketFrames(size_t &framesSent);
744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // Image Capture Service
746f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t startImageCapture(bool bracketing, CachedCaptureParameters*);
747fab72086a1fa5d93037ec1355bc8b01355db0f41Tyler Luu    status_t disableImagePort();
748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Shutter callback notifications
750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setShutterCallback(bool enabled);
751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Sets eithter HQ or HS mode and the frame count
753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setCaptureMode(OMXCameraAdapter::CaptureMode mode);
754f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t UseBuffersCapture(CameraBuffer *bufArr, int num);
755f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t UseBuffersPreviewData(CameraBuffer *bufArr, int num);
756f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t UseBuffersRawCapture(CameraBuffer *bufArr, int num);
757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Used for calculation of the average frame rate during preview
759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t recalculateFPS();
760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Sends the incoming OMX buffer header to subscribers
7625e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    status_t sendCallBacks(CameraFrame frame, OMX_IN OMX_BUFFERHEADERTYPE *pBuffHeader, unsigned int mask, OMXCameraPortParameters *port);
7635e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng
764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t apply3Asettings( Gen3A_settings& Gen3A );
765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // AutoConvergence
767f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setAutoConvergence(const char *valstr, const char *pValManualstr, const android::CameraParameters &params);
768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
769ef73bec8a83a2fd7fbb072d009382c64eb2da0eeTyler Luu    status_t setExtraData(bool enable, OMX_U32, OMX_EXT_EXTRADATATYPE);
770f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_OTHER_EXTRADATATYPE *getExtradata(const OMX_PTR ptrPrivate, OMX_EXTRADATATYPE type) const;
771f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
772f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // Meta data
773f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_CPCAM
774f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    camera_memory_t * getMetaData(const OMX_PTR plat_pvt,
775f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                  camera_request_memory allocator) const;
776f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif
777f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
778f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // Mechanical Misalignment Correction
779f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setMechanicalMisalignmentCorrection(bool enable);
780f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
781f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // DCC file data save
782f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t initDccFileDataSave(OMX_HANDLETYPE* omxHandle, int portIndex);
783f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t sniffDccFileDataSave(OMX_BUFFERHEADERTYPE* pBuffHeader);
784f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t saveDccFileDataSave();
785f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t closeDccFileDataSave();
786f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t fseekDCCuseCasePos(FILE *pFile);
787f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    FILE * fopenCameraDCC(const char *dccFolderPath);
788f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    FILE * parseDCCsubDir(DIR *pDir, char *path);
789f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
790f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef CAMERAHAL_OMX_PROFILING
791f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t storeProfilingData(OMX_BUFFERHEADERTYPE* pBuffHeader);
792f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif
793f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
794f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // Internal buffers
795f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t initInternalBuffers (OMX_U32);
796f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t deinitInternalBuffers (OMX_U32);
797f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
798f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // Reprocess Methods -- implementation in OMXReprocess.cpp
799f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t setParametersReprocess(const android::CameraParameters &params, CameraBuffer* bufs,
800f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                                  BaseCameraAdapter::AdapterState state);
801f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t startReprocess();
802f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t disableReprocess();
803f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t stopReprocess();
804f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    status_t UseBuffersReprocess(CameraBuffer *bufArr, int num);
805cf0a61f13533d70cb7ad700330de94142c2afe6aMilen Mitkov
806f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    class CommandHandler : public android::Thread {
807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        public:
808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CommandHandler(OMXCameraAdapter* ca)
809f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                : android::Thread(false), mCameraAdapter(ca) { }
810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            virtual bool threadLoop() {
812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                bool ret;
813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = Handler();
814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                return ret;
815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
817f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            status_t put(Utils::Message* msg){
818f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                android::AutoMutex lock(mLock);
819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                return mCommandMsgQ.put(msg);
820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
822f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman            void clearCommandQ()
823f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman                {
824f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                android::AutoMutex lock(mLock);
825f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman                mCommandMsgQ.clear();
826f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman                }
827f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman
828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            enum {
829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                COMMAND_EXIT = -1,
830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                CAMERA_START_IMAGE_CAPTURE = 0,
831f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                CAMERA_PERFORM_AUTOFOCUS,
832057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu                CAMERA_SWITCH_TO_EXECUTING,
833f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons                CAMERA_START_REPROCESS
834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            };
835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        private:
837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            bool Handler();
838f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            Utils::MessageQueue mCommandMsgQ;
839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            OMXCameraAdapter* mCameraAdapter;
840f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            android::Mutex mLock;
841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
842f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::sp<CommandHandler> mCommandHandler;
843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic:
845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
846f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    class OMXCallbackHandler : public android::Thread {
847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        public:
848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMXCallbackHandler(OMXCameraAdapter* ca)
849f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            : Thread(false), mCameraAdapter(ca)
850f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        {
851f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mIsProcessed = true;
852f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        }
853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        virtual bool threadLoop() {
855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            bool ret;
856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ret = Handler();
857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return ret;
858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
860f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        status_t put(Utils::Message* msg){
861f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            android::AutoMutex lock(mLock);
862f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            mIsProcessed = false;
863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return mCommandMsgQ.put(msg);
864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
866f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman        void clearCommandQ()
867f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman            {
868f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            android::AutoMutex lock(mLock);
869f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman            mCommandMsgQ.clear();
870f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman            }
871f9df3ee5cfb3c3177bcc630abf6d756e8a60254cSundar Raman
872f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        void flush();
873f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        enum {
875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            COMMAND_EXIT = -1,
876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMERA_FILL_BUFFER_DONE,
877f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons            CAMERA_FOCUS_STATUS
878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    private:
881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        bool Handler();
882f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        Utils::MessageQueue mCommandMsgQ;
883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMXCameraAdapter* mCameraAdapter;
884f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        android::Mutex mLock;
885f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        android::Condition mCondition;
886f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons        bool mIsProcessed;
887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
889f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::sp<OMXCallbackHandler> mOMXCallbackHandler;
890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprivate:
892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //AF callback
894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t setFocusCallback(bool enabled);
895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //OMX Capabilities data
897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapResolution mImageCapRes [];
898f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const CapResolution mImageCapResSS [];
899f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const CapResolution mImageCapResTB [];
900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapResolution mPreviewRes [];
901f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const CapResolution mPreviewResSS [];
902f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const CapResolution mPreviewResTB [];
903f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const CapResolution mPreviewPortraitRes [];
904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapResolution mThumbRes [];
905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapPixelformat mPixelformats [];
906f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const userToOMX_LUT mFrameLayout [];
907f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const LUTtype mLayoutLUT;
908f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const CapCodingFormat mImageCodingFormat[];
909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapFramerate mFramerates [];
910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapU32 mSensorNames[] ;
911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapZoom mZoomStages [];
912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const CapISO mISOStages [];
913f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_IMX060;
914f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_OV5650;
915f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_OV5640;
916f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_OV14825;
917f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_S5K4E1GA;
918f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_S5K6A1GX03;
919f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_OV8830;
920f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int SENSORID_OV2722;
921f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const CapU32 mFacing [];
922f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const userToOMX_LUT mAutoConvergence [];
923f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const LUTtype mAutoConvergenceLUT;
924f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const userToOMX_LUT mBracketingModes[];
925f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const LUTtype mBracketingModesLUT;
926f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
927f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int FPS_MIN;
928f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int FPS_MAX;
929f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const int FPS_MAX_EXTENDED;
930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // OMX Camera defaults
932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_ANTIBANDING[];
933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_BRIGHTNESS[];
934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_CONTRAST[];
935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_EFFECT[];
936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_EV_COMPENSATION[];
937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_EV_STEP[];
938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_EXPOSURE_MODE[];
939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_FLASH_MODE[];
940edd46f9fca8856c26bb367ba2d7a29a7002ed9afSundar Raman    static const char DEFAULT_FOCUS_MODE_PREFERRED[];
941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_FOCUS_MODE[];
942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_IPP[];
943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_ISO_MODE[];
944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_JPEG_QUALITY[];
945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_THUMBNAIL_QUALITY[];
946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_THUMBNAIL_SIZE[];
947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_PICTURE_FORMAT[];
948f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_S3D_PICTURE_LAYOUT[];
949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_PICTURE_SIZE[];
950f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_PICTURE_SS_SIZE[];
951f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_PICTURE_TB_SIZE[];
952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_PREVIEW_FORMAT[];
953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_FRAMERATE[];
954f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_S3D_PREVIEW_LAYOUT[];
955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_PREVIEW_SIZE[];
956f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_PREVIEW_SS_SIZE[];
957f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_PREVIEW_TB_SIZE[];
958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_NUM_PREV_BUFS[];
959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_NUM_PIC_BUFS[];
960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_SATURATION[];
961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_SCENE_MODE[];
962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_SHARPNESS[];
963f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char * DEFAULT_VSTAB;
964f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char * DEFAULT_VNF;
965c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_WB[];
966c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_ZOOM[];
967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_MAX_FD_HW_FACES[];
968c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const char DEFAULT_MAX_FD_SW_FACES[];
969f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char * DEFAULT_AE_LOCK;
970f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char * DEFAULT_AWB_LOCK;
9714b85b17296d877e53a5197b2c0c8306c63839a12Sundar Raman    static const char DEFAULT_HOR_ANGLE[];
9724b85b17296d877e53a5197b2c0c8306c63839a12Sundar Raman    static const char DEFAULT_VER_ANGLE[];
97372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng    static const char DEFAULT_VIDEO_SIZE[];
974f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_SENSOR_ORIENTATION[];
975f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_AUTOCONVERGENCE_MODE[];
976f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_MANUAL_CONVERGENCE[];
977f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char * DEFAULT_MECHANICAL_MISALIGNMENT_CORRECTION_MODE;
978f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_EXIF_MODEL[];
979f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_EXIF_MAKE[];
980f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
9819919dafce4d57f0b9b9aedafc95b756464685009Tyler Luu    static const size_t MAX_FOCUS_AREAS;
982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
983f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef CAMERAHAL_OMX_PROFILING
984f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
985f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const char DEFAULT_PROFILE_PATH[];
986f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int mDebugProfile;
987f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
988f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif
989f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_VERSIONTYPE mCompRevision;
991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //OMX Component UUID
993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_UUIDTYPE mCompUUID;
994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Current Focus distances
996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char mFocusDistNear[FOCUS_DIST_SIZE];
997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char mFocusDistOptimal[FOCUS_DIST_SIZE];
998c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char mFocusDistFar[FOCUS_DIST_SIZE];
999c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char mFocusDistBuffer[FOCUS_DIST_BUFFER_SIZE];
1000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1001c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // Current Focus areas
1002f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Vector<android::sp<CameraArea> > mFocusAreas;
1003f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mFocusAreasLock;
1004f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1005f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // Current Touch convergence areas
1006f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Vector<android::sp<CameraArea> > mTouchAreas;
1007f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mTouchAreasLock;
1008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1009708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev    // Current Metering areas
1010f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Vector<android::sp<CameraArea> > mMeteringAreas;
1011f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mMeteringAreasLock;
1012708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev
1013f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OperatingMode mCapabilitiesOpMode;
1014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CaptureMode mCapMode;
1015f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // TODO(XXX): Do we really need this lock? Let's
1016f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // try to merge temporal bracketing and burst
1017f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // capture later
1018f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mBurstLock;
1019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size_t mBurstFrames;
1020f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    size_t mBurstFramesAccum;
1021f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    size_t mBurstFramesQueued;
1022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size_t mCapturedFrames;
1023f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mFlushShotConfigQueue;
1024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mMeasurementEnabled;
1026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Exposure Bracketing
1028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mExposureBracketingValues[EXP_BRACKET_RANGE];
1029f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int mExposureGainBracketingValues[EXP_BRACKET_RANGE];
1030f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int mExposureGainBracketingModes[EXP_BRACKET_RANGE];
1031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size_t mExposureBracketingValidEntries;
1032f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_BRACKETMODETYPE mExposureBracketMode;
1033f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1034f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    //Zoom Bracketing
1035f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int mZoomBracketingValues[ZOOM_BRACKET_RANGE];
1036f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    size_t mZoomBracketingValidEntries;
1037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1038f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const uint32_t FACE_DETECTION_THRESHOLD;
1039f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mFaceDetectionLock;
1040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Face detection status
1041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mFaceDetectionRunning;
1042aa6e62e279cb54ae76c55ba9f8d02da230ce34e7Tyler Luu    bool mFaceDetectionPaused;
1043f2170decdf6bf41e590842b0fe5c0ed3852ebec3Emilian Peev    bool mFDSwitchAlgoPriority;
1044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1045f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    camera_face_t  faceDetectionLastOutput[MAX_NUM_FACES_SUPPORTED];
10467762bf32b7bd874ce34948eb53a3bfa3906f4aefTyler Luu    int faceDetectionNumFacesLastOutput;
1047f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int metadataLastAnalogGain;
1048f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int metadataLastExposureTime;
10497762bf32b7bd874ce34948eb53a3bfa3906f4aefTyler Luu
1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Geo-tagging
1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    EXIFData mEXIFData;
1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Image post-processing
1054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    IPPMode mIPP;
1055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //jpeg Picture Quality
1057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mPictureQuality;
1058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //thumbnail resolution
1060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mThumbWidth, mThumbHeight;
1061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //thumbnail quality
1063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mThumbQuality;
1064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //variables holding the estimated framerate
1066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    float mFPS, mLastFPS;
1067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //automatically disable AF after a given amount of frames
1069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mFocusThreshold;
1070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //This is needed for the CTS tests. They falsely assume, that during
1072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //smooth zoom the current zoom stage will not change within the
1073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //zoom callback scope, which in a real world situation is not always the
1074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //case. This variable will "simulate" the expected behavior
1075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mZoomParameterIdx;
1076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //current zoom
1078f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex mZoomLock;
1079f9e7d93cfc739190426ae5c3d204980ec8b2e475Akwasi Boateng    unsigned int mCurrentZoomIdx, mTargetZoomIdx, mPreviousZoomIndx;
10801c7383822ebd9f8e70d7eec6dd204bb691d29c47Sundar Raman    bool mZoomUpdating, mZoomUpdate;
1081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mZoomInc;
1082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mReturnZoomStatus;
1083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static const int32_t ZOOM_STEPS [];
1084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     //local copy
1086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_VERSIONTYPE mLocalVersionParam;
1087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mPending3Asettings;
1089f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex m3ASettingsUpdateLock;
1090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Gen3A_settings mParameters3A;
1091c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev    const char *mPictureFormatFromClient;
1092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1093f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    BrightnessMode mGBCE;
1094f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    BrightnessMode mGLBCE;
1095f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
109600479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman    OMX_TI_CONFIG_3A_FACE_PRIORITY mFacePriority;
109700479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman    OMX_TI_CONFIG_3A_REGION_PRIORITY mRegionPriority;
109800479a8f1d791824870513b8b0b9edd67d2560ffSundar Raman
1099f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::CameraParameters mParams;
1100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CameraProperties::Properties* mCapabilities;
1101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mPictureRotation;
1102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mWaitingForSnapshot;
1103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mCaptureConfigured;
1104b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5Tyler Luu    unsigned int mPendingCaptureSettings;
1105f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    unsigned int mPendingPreviewSettings;
1106f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    unsigned int mPendingReprocessSettings;
1107ef73bec8a83a2fd7fbb072d009382c64eb2da0eeTyler Luu    OMX_TI_ANCILLARYDATATYPE* mCaptureAncillaryData;
1108ef73bec8a83a2fd7fbb072d009382c64eb2da0eeTyler Luu    OMX_TI_WHITEBALANCERESULTTYPE* mWhiteBalanceData;
1109f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mReprocConfigured;
1110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Temporal bracketing management data
1112f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mBracketingSet;
1113f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mBracketingLock;
1114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool *mBracketingBuffersQueued;
1115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mBracketingBuffersQueuedCount;
1116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mLastBracetingBufferIdx;
1117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mBracketingEnabled;
1118f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mZoomBracketingEnabled;
1119f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    size_t mBracketingRange;
1120f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int mCurrentZoomBracketing;
1121f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::CameraParameters mParameters;
1122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1123f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef CAMERAHAL_TUNA
1124c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev    bool mIternalRecordingHint;
1125f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif
1126c78626b15e9f29a5bcf85447ceafb17dcbf58b69Emilian Peev
1127c387abd774bbc0aa23314bb989c1dec23e588a22Akwasi Boateng    bool mOmxInitialized;
1128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMXCameraAdapterComponentContext mCameraAdapterParameters;
1129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mFirstTimeInit;
1130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///Semaphores used internally
1132f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mInitSem;
1133f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mFlushSem;
1134f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mUsePreviewDataSem;
1135f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mUsePreviewSem;
1136f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mUseCaptureSem;
1137f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mStartPreviewSem;
1138f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mStopPreviewSem;
1139f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mStartCaptureSem;
1140f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mStopCaptureSem;
1141f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mSwitchToLoadedSem;
1142f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mSwitchToExecSem;
1143f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mStopReprocSem;
1144f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mUseReprocessSem;
1145f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1146f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mStateSwitchLock;
1147f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    mutable android::Mutex mIdleStateSwitchLock;
1148f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1149f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Vector<Utils::Message *> mEventSignalQ;
1150f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex mEventLock;
1151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_STATETYPE mComponentState;
1153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1154f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_TI_AUTOCONVERGENCEMODETYPE mAutoConv;
1155f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_S32 mManualConv;
1156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mVnfEnabled;
1157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mVstabEnabled;
1158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mSensorOrientation;
1160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mDeviceOrientation;
1161f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int mFaceOrientation;
1162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mSensorOverclock;
1163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Indicates if we should leave
1165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //OMX_Executing state during
1166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //stop-/startPreview
1167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mOMXStateSwitch;
1168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mFrameCount;
1170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int mLastFrameCount;
1171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int mIter;
1172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    nsecs_t mLastFPSTime;
1173f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex mFrameCountMutex;
1174f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Condition mFirstFrameCondition;
1175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1176f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    static const nsecs_t CANCEL_AF_TIMEOUT;
1177f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex mCancelAFMutex;
1178f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Condition mCancelAFCond;
1179f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1180f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex mDoAFMutex;
1181f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Condition mDoAFCond;
1182ac0cf36b98237ec911f49e7b1b93ef6464666e48Emilian Peev
11839a412956d5327ec851ff8adc3e9804640fa30c7fTyler Luu    size_t mSensorIndex;
1184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CodingMode mCodingMode;
1185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    // Time source delta of ducati & system time
1187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_TICKS mTimeSourceDelta;
1188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool onlyOnce;
1189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1190f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    Utils::Semaphore mCaptureSem;
1191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bool mCaptureSignalled;
1192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1193ba027fc89ec3950e1ac2f95fcc3f1002442ddabbSundar Raman    OMX_BOOL mUserSetExpLock;
1194ba027fc89ec3950e1ac2f95fcc3f1002442ddabbSundar Raman    OMX_BOOL mUserSetWbLock;
1195ba027fc89ec3950e1ac2f95fcc3f1002442ddabbSundar Raman
1196f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef CAMERAHAL_USE_RAW_IMAGE_SAVING
1197f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mRawCapture;
1198f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mYuvCapture;
1199f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif
1200f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1201f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mSetFormatDone;
1202f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1203f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    OMX_TI_DCCDATATYPE mDccData;
1204f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex mDccDataLock;
1205f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1206f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    int mMaxZoomSupported;
1207f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    android::Mutex mImageCaptureLock;
1208f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1209f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mTunnelDestroyed;
1210f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    bool mPreviewPortInitialized;
1211f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1212f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    // Used for allocations that need to be sent to Ducati
1213f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons    MemoryManager mMemMgr;
1214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev};
1215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1216f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} // namespace Camera
1217f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} // namespace Ti
1218f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons
1219f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif //OMX_CAMERA_ADAPTER_H
1220