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 ¶ms, 507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev BaseCameraAdapter::AdapterState state); 508bea7955fe043c646d21243e9889afbfe1d671ad9Tyler Luu status_t convertGPSCoord(double coord, int °, 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 ¶ms, 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 ¶ms, 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 ¶ms, 544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev BaseCameraAdapter::AdapterState state); 545f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons void declareParameter3ABool(const android::CameraParameters ¶ms, const char *key, 546f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons OMX_BOOL ¤t_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 ¶ms, 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 ¶ms, 634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev BaseCameraAdapter::AdapterState state); 635f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t updateFocusDistances(android::CameraParameters ¶ms); 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 ¶ms, 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 ¶ms); 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 ¶ms, 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