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