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