QCamera3HWI.cpp revision 33cb7276f6c4d2eda72253d11cd9242e1f82bf7d
1625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/* Copyright (c) 2012-2013, The Linux Foundataion. All rights reserved. 2625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* 3625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* Redistribution and use in source and binary forms, with or without 4625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* modification, are permitted provided that the following conditions are 5625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* met: 6625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* * Redistributions of source code must retain the above copyright 7625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* notice, this list of conditions and the following disclaimer. 8625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* * Redistributions in binary form must reproduce the above 9625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* copyright notice, this list of conditions and the following 10625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* disclaimer in the documentation and/or other materials provided 11625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* with the distribution. 12625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* * Neither the name of The Linux Foundation nor the names of its 13625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* contributors may be used to endorse or promote products derived 14625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* from this software without specific prior written permission. 15625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* 16625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* 28625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang*/ 29625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 30625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#define LOG_TAG "QCamera3HWI" 31625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 32625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#include <cutils/properties.h> 33625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#include <hardware/camera3.h> 34625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#include <camera/CameraMetadata.h> 35625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#include <stdlib.h> 36625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#include <utils/Log.h> 37625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#include <utils/Errors.h> 38e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang#include <ui/Fence.h> 39625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#include <gralloc_priv.h> 40625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#include "QCamera3HWI.h" 41625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#include "QCamera3Mem.h" 42625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#include "QCamera3Channel.h" 4366cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru#include "QCamera3PostProc.h" 44625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 45625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangusing namespace android; 46625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 47625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangnamespace qcamera { 48625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#define DATA_PTR(MEM_OBJ,INDEX) MEM_OBJ->getPtr( INDEX ) 49625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangcam_capability_t *gCamCapability[MM_CAMERA_MAX_NUM_SENSORS]; 5080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wangparm_buffer_t *prevSettings; 51625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangconst camera_metadata_t *gStaticMetadata; 52625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 53662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godboleconst QCamera3HardwareInterface::QCameraMap QCamera3HardwareInterface::EFFECT_MODES_MAP[] = { 54662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_EFFECT_MODE_OFF, CAM_EFFECT_MODE_OFF }, 55662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_EFFECT_MODE_MONO, CAM_EFFECT_MODE_MONO }, 56662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_EFFECT_MODE_NEGATIVE, CAM_EFFECT_MODE_NEGATIVE }, 57662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_EFFECT_MODE_SOLARIZE, CAM_EFFECT_MODE_SOLARIZE }, 58662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_EFFECT_MODE_SEPIA, CAM_EFFECT_MODE_SEPIA }, 59662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_EFFECT_MODE_POSTERIZE, CAM_EFFECT_MODE_POSTERIZE }, 60662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_EFFECT_MODE_WHITEBOARD, CAM_EFFECT_MODE_WHITEBOARD }, 61662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_EFFECT_MODE_BLACKBOARD, CAM_EFFECT_MODE_BLACKBOARD }, 62662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_EFFECT_MODE_AQUA, CAM_EFFECT_MODE_AQUA } 63662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole}; 64662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 65662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godboleconst QCamera3HardwareInterface::QCameraMap QCamera3HardwareInterface::WHITE_BALANCE_MODES_MAP[] = { 6697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole { ANDROID_CONTROL_AWB_MODE_OFF, CAM_WB_MODE_OFF }, 67662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AWB_MODE_AUTO, CAM_WB_MODE_AUTO }, 68662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AWB_MODE_INCANDESCENT, CAM_WB_MODE_INCANDESCENT }, 69662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AWB_MODE_FLUORESCENT, CAM_WB_MODE_FLUORESCENT }, 70662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AWB_MODE_WARM_FLUORESCENT,CAM_WB_MODE_WARM_FLUORESCENT}, 71662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AWB_MODE_DAYLIGHT, CAM_WB_MODE_DAYLIGHT }, 72662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AWB_MODE_CLOUDY_DAYLIGHT, CAM_WB_MODE_CLOUDY_DAYLIGHT }, 73662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AWB_MODE_TWILIGHT, CAM_WB_MODE_TWILIGHT }, 74662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AWB_MODE_SHADE, CAM_WB_MODE_SHADE } 75662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole}; 76662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 77662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godboleconst QCamera3HardwareInterface::QCameraMap QCamera3HardwareInterface::SCENE_MODES_MAP[] = { 78662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED, CAM_SCENE_MODE_OFF }, 79662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_ACTION, CAM_SCENE_MODE_ACTION }, 80662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_PORTRAIT, CAM_SCENE_MODE_PORTRAIT }, 81662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_LANDSCAPE, CAM_SCENE_MODE_LANDSCAPE }, 82662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_NIGHT, CAM_SCENE_MODE_NIGHT }, 83662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT, CAM_SCENE_MODE_NIGHT_PORTRAIT }, 84662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_THEATRE, CAM_SCENE_MODE_THEATRE }, 85662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_BEACH, CAM_SCENE_MODE_BEACH }, 86662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_SNOW, CAM_SCENE_MODE_SNOW }, 87662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_SUNSET, CAM_SCENE_MODE_SUNSET }, 88662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO, CAM_SCENE_MODE_ANTISHAKE }, 89662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_FIREWORKS , CAM_SCENE_MODE_FIREWORKS }, 90662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_SPORTS , CAM_SCENE_MODE_SPORTS }, 91662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_PARTY, CAM_SCENE_MODE_PARTY }, 92662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT, CAM_SCENE_MODE_CANDLELIGHT }, 9397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole { ANDROID_CONTROL_SCENE_MODE_BARCODE, CAM_SCENE_MODE_BARCODE} 94662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole}; 95662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 96662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godboleconst QCamera3HardwareInterface::QCameraMap QCamera3HardwareInterface::FOCUS_MODES_MAP[] = { 9797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole { ANDROID_CONTROL_AF_MODE_OFF, CAM_FOCUS_MODE_OFF }, 98662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AF_MODE_AUTO, CAM_FOCUS_MODE_AUTO }, 99662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AF_MODE_MACRO, CAM_FOCUS_MODE_MACRO }, 100662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AF_MODE_EDOF, CAM_FOCUS_MODE_EDOF }, 101662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AF_MODE_CONTINUOUS_PICTURE, CAM_FOCUS_MODE_CONTINOUS_PICTURE }, 102662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AF_MODE_CONTINUOUS_VIDEO, CAM_FOCUS_MODE_CONTINOUS_VIDEO } 103662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole}; 104662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 105662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godboleconst QCamera3HardwareInterface::QCameraMap QCamera3HardwareInterface::ANTIBANDING_MODES_MAP[] = { 106662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF, CAM_ANTIBANDING_MODE_OFF }, 107662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AE_ANTIBANDING_MODE_50HZ, CAM_ANTIBANDING_MODE_50HZ }, 108662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AE_ANTIBANDING_MODE_60HZ, CAM_ANTIBANDING_MODE_60HZ }, 109662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO, CAM_ANTIBANDING_MODE_AUTO } 110662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole}; 111662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 112662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godboleconst QCamera3HardwareInterface::QCameraMap QCamera3HardwareInterface::AUTO_EXPOSURE_MAP[] = { 11397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole { ANDROID_CONTROL_AE_MODE_OFF, CAM_AEC_MODE_OFF }, 114662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_CONTROL_AE_MODE_ON, CAM_AEC_MODE_FRAME_AVERAGE }, 115662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole}; 116662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 117662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godboleconst QCamera3HardwareInterface::QCameraMap QCamera3HardwareInterface::FLASH_MODES_MAP[] = { 118662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_FLASH_MODE_OFF, CAM_FLASH_MODE_OFF }, 119662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_FLASH_MODE_SINGLE, CAM_FLASH_MODE_ON }, 120662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { ANDROID_FLASH_MODE_TORCH, CAM_FLASH_MODE_TORCH} 121662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole}; 122662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 123625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 124625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangcamera3_device_ops_t QCamera3HardwareInterface::mCameraOps = { 125625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang initialize: QCamera3HardwareInterface::initialize, 126625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang configure_streams: QCamera3HardwareInterface::configure_streams, 127625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang register_stream_buffers: QCamera3HardwareInterface::register_stream_buffers, 128625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang construct_default_request_settings: QCamera3HardwareInterface::construct_default_request_settings, 129625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang process_capture_request: QCamera3HardwareInterface::process_capture_request, 130625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang get_metadata_vendor_tag_ops: QCamera3HardwareInterface::get_metadata_vendor_tag_ops, 131625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang dump: QCamera3HardwareInterface::dump, 132625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang}; 133625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 134625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 135625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 136625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : QCamera3HardwareInterface 137625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 138625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: constructor of QCamera3HardwareInterface 139625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 140625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : 141625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * @cameraId : camera ID 142625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 143625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : none 144625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 145625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen WangQCamera3HardwareInterface::QCamera3HardwareInterface(int cameraId) 146625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang : mCameraId(cameraId), 147625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang mCameraHandle(NULL), 148625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang mCameraOpened(false), 14997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole mCallbackOps(NULL), 15033cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang mInputStream(NULL), 15133cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang mMetadataChannel(NULL), 15233cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang mFirstRequest(false), 15333cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang mParamHeap(NULL), 15433cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang mParameters(NULL), 15597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole mJpegSettings(NULL) 156625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 157625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang mCameraDevice.common.tag = HARDWARE_DEVICE_TAG; 158e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang mCameraDevice.common.version = CAMERA_DEVICE_API_VERSION_3_0; 159e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang mCameraDevice.common.close = close_camera_device; 160625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang mCameraDevice.ops = &mCameraOps; 161625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang mCameraDevice.priv = this; 162625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang gCamCapability[cameraId]->version = CAM_HAL_V3; 1639de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 1649de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang pthread_mutex_init(&mRequestLock, NULL); 1659de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang pthread_cond_init(&mRequestCond, NULL); 1669de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang mPendingRequest = 0; 167e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 168e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_init(&mMutex, NULL); 16933cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang pthread_mutex_init(&mCaptureResultLock, NULL); 17033cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang 17133cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang for (size_t i = 0; i < CAMERA3_TEMPLATE_COUNT; i++) 17233cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang mDefaultMetadata[i] = NULL; 173625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 174625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 175625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 176625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : ~QCamera3HardwareInterface 177625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 17866cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru * DESCRIPTION: destructor of QCamera3HardwareInterface 179625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 180625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : none 181625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 182625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : none 183625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 184625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen WangQCamera3HardwareInterface::~QCamera3HardwareInterface() 185625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 18697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole if (mJpegSettings != NULL) { 18797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole free(mJpegSettings); 18897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole mJpegSettings = NULL; 18997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole } 19033cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang deinitParameters(); 191625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang closeCamera(); 192e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 19333cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang for (size_t i = 0; i < CAMERA3_TEMPLATE_COUNT; i++) 19433cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang if (mDefaultMetadata[i]) 19533cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang free_camera_metadata(mDefaultMetadata[i]); 19633cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang 197e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_destroy(&mRequestLock); 198e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_cond_destroy(&mRequestCond); 199e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 200e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_destroy(&mMutex); 20133cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang pthread_mutex_destroy(&mCaptureResultLock); 202625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 203625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 204625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 205625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : openCamera 206625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 207625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: open camera 208625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 209625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : 210625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * @hw_device : double ptr for camera device struct 211625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 212625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : int32_t type of status 213625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * NO_ERROR -- success 214625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * none-zero failure code 215625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 216625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangint QCamera3HardwareInterface::openCamera(struct hw_device_t **hw_device) 217625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 218625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang //int rc = NO_ERROR; 219625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang int rc = 0; 220625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (mCameraOpened) { 221625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *hw_device = NULL; 222625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return PERMISSION_DENIED; 223625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 224625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 225625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang rc = openCamera(); 226625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (rc == 0) 227625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *hw_device = &mCameraDevice.common; 228625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang else 229625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *hw_device = NULL; 230625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return rc; 231625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 232625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 233625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 234625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : openCamera 235625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 236625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: open camera 237625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 238625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : none 239625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 240625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : int32_t type of status 241625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * NO_ERROR -- success 242625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * none-zero failure code 243625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 244625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangint QCamera3HardwareInterface::openCamera() 245625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 246625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (mCameraHandle) { 247625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("Failure: Camera already opened"); 248625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return ALREADY_EXISTS; 249625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 250625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang mCameraHandle = camera_open(mCameraId); 251625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (!mCameraHandle) { 252625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("camera_open failed."); 253625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return UNKNOWN_ERROR; 254625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 255625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 256625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang mCameraOpened = true; 257625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 258625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return NO_ERROR; 259625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 260625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 261625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 262625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : closeCamera 263625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 264625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: close camera 265625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 266625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : none 267625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 268625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : int32_t type of status 269625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * NO_ERROR -- success 270625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * none-zero failure code 271625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 272625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangint QCamera3HardwareInterface::closeCamera() 273625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 274625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang int rc = NO_ERROR; 275625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 276625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang rc = mCameraHandle->ops->close_camera(mCameraHandle->camera_handle); 277625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang mCameraHandle = NULL; 278625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang mCameraOpened = false; 279625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 280625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return rc; 281625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 282625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 283625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 284625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : initialize 285625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 286625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: Initialize frameworks callback functions 287625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 288625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : 289625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * @callback_ops : callback function to frameworks 290625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 291625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : 292625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 293625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 294625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangint QCamera3HardwareInterface::initialize( 295625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang const struct camera3_callback_ops *callback_ops) 296625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 2979de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang int rc; 298625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 299e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_lock(&mMutex); 300e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 30133cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang rc = initParameters(); 30233cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang if (rc < 0) { 30333cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang ALOGE("%s: initParamters failed %d", __func__, rc); 30433cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang goto err1; 30533cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang } 3069de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang //Create metadata channel and initialize it 307625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang mMetadataChannel = new QCamera3MetadataChannel(mCameraHandle->camera_handle, 308e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang mCameraHandle->ops, captureResultCb, 309e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang &gCamCapability[mCameraId]->padding_info, this); 310625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (mMetadataChannel == NULL) { 311625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: failed to allocate metadata channel", __func__); 3129de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang rc = -ENOMEM; 31333cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang goto err2; 3149de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } 3159de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang rc = mMetadataChannel->initialize(); 3169de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang if (rc < 0) { 3179de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang ALOGE("%s: metadata channel initialization failed", __func__); 3189de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang goto err3; 3199de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } 3209de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 3219de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang mCallbackOps = callback_ops; 322e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 323e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 3249de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang return 0; 3259de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 3269de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wangerr3: 3279de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang delete mMetadataChannel; 3289de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang mMetadataChannel = NULL; 32933cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wangerr2: 33033cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang deinitParameters(); 3319de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wangerr1: 332e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 3339de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang return rc; 334625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 335625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 336625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 337625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : configureStreams 338625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 339625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: Reset HAL camera device processing pipeline and set up new input 340625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * and output streams. 341625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 342625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : 343625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * @stream_list : streams to be configured 344625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 345625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : 346625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 347625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 348625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangint QCamera3HardwareInterface::configureStreams( 349625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang camera3_stream_configuration_t *streamList) 350625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 351e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_lock(&mMutex); 35233cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang int rc = 0; 353e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 354625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang // Sanity check stream_list 355625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (streamList == NULL) { 356625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: NULL stream configuration", __func__); 357e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 358625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return BAD_VALUE; 359625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 360625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 361625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (streamList->streams == NULL) { 362625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: NULL stream list", __func__); 363e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 364625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return BAD_VALUE; 365625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 366625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 367625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (streamList->num_streams < 1) { 368625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: Bad number of streams requested: %d", __func__, 369625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang streamList->num_streams); 370e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 371625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return BAD_VALUE; 372625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 373625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 374625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang camera3_stream_t *inputStream = NULL; 375625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang for (size_t i = 0; i < streamList->num_streams; i++) { 376625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang camera3_stream_t *newStream = streamList->streams[i]; 377625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (newStream->stream_type == CAMERA3_STREAM_INPUT) { 378625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (inputStream != NULL) { 379625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: Multiple input streams requested!", __func__); 380e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 381625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return BAD_VALUE; 382625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 383625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang inputStream = newStream; 384625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 385625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 386625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang mInputStream = inputStream; 387625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 388625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang /* TODO: Clean up no longer used streams, and maintain others if this 389625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * is not the 1st time configureStreams is called */ 390625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 39133cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang //mMetadataChannel->stop(); 392625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 393625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang /* Allocate channel objects for the requested streams */ 394625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang for (size_t i = 0; i < streamList->num_streams; i++) { 395625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang camera3_stream_t *newStream = streamList->streams[i]; 396625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (newStream->priv == NULL) { 397625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang //New stream, construct channel 398625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 399625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang switch (newStream->stream_type) { 400625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang case CAMERA3_STREAM_INPUT: 401625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang newStream->usage = GRALLOC_USAGE_HW_CAMERA_READ; 402625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang newStream->max_buffers = QCamera3PicChannel::kMaxBuffers; 403625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 404625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang case CAMERA3_STREAM_BIDIRECTIONAL: 405625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang newStream->usage = GRALLOC_USAGE_HW_CAMERA_READ | 406625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang GRALLOC_USAGE_HW_CAMERA_WRITE; 407625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang newStream->max_buffers = QCamera3RegularChannel::kMaxBuffers; 408625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 409625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang case CAMERA3_STREAM_OUTPUT: 410625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang newStream->usage = GRALLOC_USAGE_HW_CAMERA_WRITE; 411625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang newStream->max_buffers = QCamera3RegularChannel::kMaxBuffers; 412625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 413625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang default: 414625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: Invalid stream_type %d", __func__, newStream->stream_type); 415625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 416625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 417625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 418625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (newStream->stream_type == CAMERA3_STREAM_OUTPUT || 419625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang newStream->stream_type == CAMERA3_STREAM_BIDIRECTIONAL) { 420625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang QCamera3Channel *channel; 421625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang switch (newStream->format) { 422625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED: 423625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang channel = new QCamera3RegularChannel(mCameraHandle->camera_handle, 424e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang mCameraHandle->ops, captureResultCb, 425e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang &gCamCapability[mCameraId]->padding_info, this, newStream); 426625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (channel == NULL) { 427625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: allocation of channel failed", __func__); 428e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 429625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return -ENOMEM; 430625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 431625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 432625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang newStream->priv = channel; 433625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 434625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang case HAL_PIXEL_FORMAT_BLOB: 435625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang channel = new QCamera3PicChannel(mCameraHandle->camera_handle, 436e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang mCameraHandle->ops, captureResultCb, 437e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang &gCamCapability[mCameraId]->padding_info, this, newStream); 438625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (channel == NULL) { 439625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: allocation of channel failed", __func__); 440e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 441625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return -ENOMEM; 442625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 44366cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru //Register Jpeg callback with mm-camera-interface 44466cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru rc = channel->initialize(); 44566cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru if (rc < 0) { 44666cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru ALOGE("%s: snapshot channel initialization failed", __func__); 44766cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru delete channel; 44866cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru channel = NULL; 44966cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru goto end; 45066cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru } 451625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 452625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang newStream->priv = channel; 453625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 454625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 455625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang //TODO: Add support for app consumed format? 456625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang default: 457625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: not a supported format 0x%x", __func__, newStream->format); 458625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 459625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 460625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 461625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } else { 462625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang // Channel already exists for this stream 463625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang // Do nothing for now 464625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 465625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 4669de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 46733cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang //settings/parameters don't carry over for new configureStreams 4689de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang memset(mParameters, 0, sizeof(parm_buffer_t)); 46933cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang mFirstRequest = true; 47033cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang 47166cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguruend: 472e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 47333cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang return rc; 474625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 475625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 476625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 477e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * FUNCTION : validateCaptureRequest 478625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 479e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * DESCRIPTION: validate a capture request from camera service 48080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * 48180e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * PARAMETERS : 48280e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * @request : request from framework to process 48380e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * 48480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * RETURN : 48580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * 48680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang *==========================================================================*/ 487e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wangint QCamera3HardwareInterface::validateCaptureRequest( 4889de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang camera3_capture_request_t *request) 48980e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang{ 49080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang int rc = NO_ERROR; 4919de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang ssize_t idx = 0; 4929de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang const camera3_stream_buffer_t *b; 4939de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang CameraMetadata meta; 4949de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 4959de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang /* Sanity check the request */ 4969de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang if (request == NULL) { 4979de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang ALOGE("%s: NULL capture request", __func__); 4989de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang return BAD_VALUE; 4999de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } 5009de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 5019de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang uint32_t frameNumber = request->frame_number; 5029de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang if (request->input_buffer != NULL && 5039de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang request->input_buffer->stream != mInputStream) { 5049de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang ALOGE("%s: Request %d: Input buffer not from input stream!", 5059de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang __FUNCTION__, frameNumber); 5069de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang return BAD_VALUE; 5079de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } 5089de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang if (request->num_output_buffers < 1 || request->output_buffers == NULL) { 5099de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang ALOGE("%s: Request %d: No output buffers provided!", 5109de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang __FUNCTION__, frameNumber); 5119de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang return BAD_VALUE; 5129de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } 5139de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang if (request->input_buffer != NULL) { 5149de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang //TODO 5159de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang ALOGE("%s: Not supporting input buffer yet", __func__); 5169de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang return BAD_VALUE; 5179de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } 5189de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 5199de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang // Validate all buffers 5209de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang b = request->output_buffers; 5219de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang do { 5229de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang QCamera3Channel *channel = 5239de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang static_cast<QCamera3Channel*>(b->stream->priv); 5249de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang if (channel == NULL) { 5259de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang ALOGE("%s: Request %d: Buffer %d: Unconfigured stream!", 5269de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang __func__, frameNumber, idx); 5279de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang return BAD_VALUE; 5289de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } 5299de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang if (b->status != CAMERA3_BUFFER_STATUS_OK) { 5309de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang ALOGE("%s: Request %d: Buffer %d: Status not OK!", 5319de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang __func__, frameNumber, idx); 5329de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang return BAD_VALUE; 5339de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } 5349de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang if (b->release_fence != -1) { 5359de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang ALOGE("%s: Request %d: Buffer %d: Has a release fence!", 5369de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang __func__, frameNumber, idx); 5379de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang return BAD_VALUE; 5389de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } 5399de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang if (b->buffer == NULL) { 5409de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang ALOGE("%s: Request %d: Buffer %d: NULL buffer handle!", 5419de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang __func__, frameNumber, idx); 5429de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang return BAD_VALUE; 5439de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } 5449de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang idx++; 5459de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang b = request->output_buffers + idx; 5469de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } while (idx < (ssize_t)request->num_output_buffers); 5479de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 548e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return NO_ERROR; 549e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang} 550e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 551e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang/*=========================================================================== 552e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * FUNCTION : registerStreamBuffers 553e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 554e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * DESCRIPTION: Register buffers for a given stream with the HAL device. 555e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 556e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * PARAMETERS : 557e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * @stream_list : streams to be configured 558e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 559e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * RETURN : 560e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 561e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang *==========================================================================*/ 562e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wangint QCamera3HardwareInterface::registerStreamBuffers( 563e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang const camera3_stream_buffer_set_t *buffer_set) 564e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang{ 565e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang int rc = 0; 566e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 567e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_lock(&mMutex); 568e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 569e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang if (buffer_set == NULL) { 570e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang ALOGE("%s: Invalid buffer_set parameter.", __func__); 571e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 572e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return -EINVAL; 573e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang } 574e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang if (buffer_set->stream == NULL) { 575e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang ALOGE("%s: Invalid stream parameter.", __func__); 576e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 577e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return -EINVAL; 578e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang } 579e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang if (buffer_set->num_buffers < 1) { 580e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang ALOGE("%s: Invalid num_buffers %d.", __func__, buffer_set->num_buffers); 581e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 582e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return -EINVAL; 583e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang } 584e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang if (buffer_set->buffers == NULL) { 585e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang ALOGE("%s: Invalid buffers parameter.", __func__); 586e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 587e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return -EINVAL; 588e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang } 589e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 590e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang camera3_stream_t *stream = buffer_set->stream; 591e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang QCamera3Channel *channel = (QCamera3Channel *)stream->priv; 592e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 593e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang if (stream->stream_type != CAMERA3_STREAM_OUTPUT) { 594e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang ALOGE("%s: not yet support non output type stream", __func__); 595e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 596e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return -EINVAL; 597e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang } 598e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang rc = channel->registerBuffers(buffer_set->num_buffers, buffer_set->buffers); 599e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang if (rc < 0) { 600e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang ALOGE("%s: registerBUffers for stream %p failed", __func__, stream); 601e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 602e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return -ENODEV; 603e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang } 604e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 605e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 606e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return NO_ERROR; 607e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang} 608e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 609e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang/*=========================================================================== 610e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * FUNCTION : processCaptureRequest 611e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 612e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * DESCRIPTION: process a capture request from camera service 613e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 614e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * PARAMETERS : 615e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * @request : request from framework to process 616e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 617e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * RETURN : 618e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 619e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang *==========================================================================*/ 620e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wangint QCamera3HardwareInterface::processCaptureRequest( 621e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang camera3_capture_request_t *request) 622e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang{ 623e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang int rc = NO_ERROR; 624e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang ssize_t idx = 0; 625e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang const camera3_stream_buffer_t *b; 626e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang CameraMetadata meta; 627e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 628e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_lock(&mMutex); 629e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 630e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang rc = validateCaptureRequest(request); 631e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang if (rc != NO_ERROR) { 632e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang ALOGE("%s: incoming request is not valid", __func__); 633e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 634e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return rc; 635e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang } 636e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 637e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang uint32_t frameNumber = request->frame_number; 638e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 639662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole rc = setFrameParameters(request->frame_number, request->settings); 6409de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang if (rc < 0) { 6419de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang ALOGE("%s: fail to set frame parameters", __func__); 642e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 6439de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang return rc; 6449de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } 64533cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang mFirstRequest = false; 6469de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 647e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang // Acquire all request buffers first 648e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang for (size_t i = 0; i < request->num_output_buffers; i++) { 649e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang const camera3_stream_buffer_t& output = request->output_buffers[i]; 650e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang sp<Fence> acquireFence = new Fence(output.acquire_fence); 65166cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru int format = output.stream->format; 65266cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru 65366cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru if (output.stream->format == HAL_PIXEL_FORMAT_BLOB) { 65466cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru //Call function to store local copy of jpeg data for encode params. 65566cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru rc = getJpegSettings(request->settings); 65666cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru if (rc < 0) { 65766cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru ALOGE("%s: failed to get jpeg parameters"); 65866cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru pthread_mutex_unlock(&mMutex); 65966cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru return rc; 66066cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru } 66166cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru } 66266cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru 663e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang rc = acquireFence->wait(Fence::TIMEOUT_NEVER); 664e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang if (rc != OK) { 665e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang ALOGE("%s: fence wait failed %d", __func__, rc); 666e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 667e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return rc; 668e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang } 669e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang } 670e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 6719de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang // Notify metadata channel we receive a request 672e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang mMetadataChannel->request(NULL, frameNumber); 6739de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 6749de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang // Call request on other streams 6759de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang for (size_t i = 0; i < request->num_output_buffers; i++) { 6769de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang const camera3_stream_buffer_t& output = request->output_buffers[i]; 6779de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang QCamera3Channel *channel = (QCamera3Channel *)output.stream->priv; 67866cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru int format = output.stream->format; 67966cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru 68066cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru 6819de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang if (channel == NULL) { 6829de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang ALOGE("%s: invalid channel pointer for stream", __func__); 6839de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang continue; 6849de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } 6859de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 68666cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru if (output.stream->format == HAL_PIXEL_FORMAT_BLOB) { 68766cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru rc = channel->request(output.buffer, frameNumber, mJpegSettings); 68866cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru } else { 68966cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru rc = channel->request(output.buffer, frameNumber); 69066cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru } 6919de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang if (rc < 0) 6929de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang ALOGE("%s: request failed", __func__); 6939de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } 6949de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 6959de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang //Block on conditional variable 6969de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang pthread_mutex_lock(&mRequestLock); 6979de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang mPendingRequest = 1; 6989de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang while (mPendingRequest == 1) { 6999de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang pthread_cond_wait(&mRequestCond, &mRequestLock); 7009de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } 7019de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang pthread_mutex_unlock(&mRequestLock); 7029de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 703e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 70480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang return rc; 70580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang} 70680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 7079de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang/*=========================================================================== 708e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * FUNCTION : getMetadataVendorTagOps 7099de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang * 710e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * DESCRIPTION: 7119de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang * 7129de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang * PARAMETERS : 713e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 714e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 715e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * RETURN : 716e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang *==========================================================================*/ 717e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wangvoid QCamera3HardwareInterface::getMetadataVendorTagOps(vendor_tag_query_ops_t* ops) 718e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang{ 719e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang /* Enable locks when we eventually add Vendor Tags */ 720e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang /* 721e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_lock(&mMutex); 722e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 723e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 724e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang */ 725e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return; 726e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang} 727e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 728e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang/*=========================================================================== 729e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * FUNCTION : dump 730e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 731e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * DESCRIPTION: 732e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 733e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * PARAMETERS : 734e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 735e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 736e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * RETURN : 737e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang *==========================================================================*/ 738e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wangvoid QCamera3HardwareInterface::dump(int fd) 739e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang{ 740e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang /*Enable lock when we implement this function*/ 741e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang /* 742e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_lock(&mMutex); 743e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 744e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 745e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang */ 746e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return; 747e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang} 748e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 749e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang/*=========================================================================== 750e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * FUNCTION : captureResultCb 751e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 75233cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang * DESCRIPTION: Callback handler for all capture result 75333cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang * (streams, as well as metadata) 754e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 755e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * PARAMETERS : 756e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * @metadata : metadata information 75733cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang * @buffer : actual gralloc buffer to be returned to frameworks. 75833cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang * NULL if metadata. 7599de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang * 7609de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang * RETURN : NONE 7619de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang *==========================================================================*/ 762e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wangvoid QCamera3HardwareInterface::captureResultCb(metadata_buffer_t *metadata, 763e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang camera3_stream_buffer_t *buffer, uint32_t frame_number) 7649de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang{ 765e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_lock(&mCaptureResultLock); 766e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang camera3_capture_result_t result; 767e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 768e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang if (metadata) { 7699de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang // Signal to unblock processCaptureRequest 7709de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang pthread_mutex_lock(&mRequestLock); 7719de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang mPendingRequest = 0; 7729de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang pthread_cond_signal(&mRequestCond); 7739de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang pthread_mutex_unlock(&mRequestLock); 774e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 77533cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang int32_t frame_number_valid = *(int32_t *) 77633cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang POINTER_OF(CAM_INTF_META_FRAME_NUMBER_VALID, metadata); 77733cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang ALOGE("%s: frame_number_valid = %d", __func__, frame_number_valid); 77833cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang if (!frame_number_valid) { 77933cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang ALOGI("%s: Not a valid frame number, used as SOF only", __func__); 78033cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang goto done; 78133cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang } 782e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 78333cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang uint32_t frame_number = *(uint32_t *) 78433cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang POINTER_OF(CAM_INTF_META_FRAME_NUMBER, metadata); 78533cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang#if 1 78633cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang nsecs_t capture_time = 1000000 * frame_number * 33; 78733cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang#else 78833cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang nsecs_t capture_time = *(int64_t *) 78933cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang POINTER_OF(CAM_INTF_META_SENSOR_EXPOSURE_TIME, metadata); 79033cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang#endif 79133cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang ALOGE("%s: notify frame_number = %d, capture_time = %lld", __func__, 79233cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang frame_number, capture_time); 79333cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang 79433cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang /* Send shutter notify */ 79533cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang camera3_notify_msg_t notify_msg; 79633cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang notify_msg.type = CAMERA3_MSG_SHUTTER; 79733cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang notify_msg.message.shutter.frame_number = frame_number; 79833cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang notify_msg.message.shutter.timestamp = capture_time; 79933cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang mCallbackOps->notify(mCallbackOps, ¬ify_msg); 80033cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang 80133cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang /* send capture result with metadata only */ 80297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole result.result = translateCbMetadataToResultMetadata(metadata); 80333cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang if (result.result) { 80433cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang result.frame_number = frame_number; 805e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang result.num_output_buffers = 0; 806e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang result.output_buffers = NULL; 807e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang mCallbackOps->process_capture_result(mCallbackOps, &result); 808e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 80933cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang ALOGE("%s: metadata frame_number = %d, capture_time = %ld", 81033cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang __func__, frame_number, capture_time); 811e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang free_camera_metadata((camera_metadata_t*)result.result); 81233cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang } else { 81333cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang ALOGE("%s: metadata is NULL", __func__); 814e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang } 815e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang } else { 816e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang result.result = NULL; 817e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang result.frame_number = frame_number; 818e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang result.num_output_buffers = 1; 819e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang result.output_buffers = buffer; 82033cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang ALOGE("%s: result frame_number = %d", __func__, frame_number); 821e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang mCallbackOps->process_capture_result(mCallbackOps, &result); 8229de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang } 8239de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 82433cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wangdone: 825e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mCaptureResultLock); 8269de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang return; 8279de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang} 8289de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 82997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole/*=========================================================================== 83097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * FUNCTION : translateCbMetadataToResultMetadata 83197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * 83297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * DESCRIPTION: 83397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * 83497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * PARAMETERS : 83597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * @metadata : metadata information from callback 83697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * 83797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * RETURN : camera_metadata_t* 83897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * metadata in a format specified by fwk 83997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole *==========================================================================*/ 84097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbolecamera_metadata_t* 84197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya GodboleQCamera3HardwareInterface::translateCbMetadataToResultMetadata 84297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (metadata_buffer_t *metadata) 84397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole{ 84497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole CameraMetadata camMetadata; 84597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camera_metadata_t* resultMetadata; 84697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 84733cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang#if 1 84833cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang uint32_t frame_number = *(uint32_t *) 84933cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang POINTER_OF(CAM_INTF_META_FRAME_NUMBER, metadata); 85033cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang nsecs_t captureTime = 1000000 * frame_number * 33; 85197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_SENSOR_TIMESTAMP, &captureTime, 1); 85233cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang#else 85333cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang nsecs_t *captureTime = (nsecs_t *)POINTER_OF(CAM_INTF_META_SENSOR_TIMESTAMP, metadata); 85433cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang camMetadata.update(ANDROID_SENSOR_TIMESTAMP, captureTime, 1); 85533cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang#endif 85633cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang 85797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 85897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole /*CAM_INTF_META_HISTOGRAM - TODO*/ 85997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole /*cam_hist_stats_t *histogram = 86097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (cam_hist_stats_t *)POINTER_OF(CAM_INTF_META_HISTOGRAM, 86197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole metadata);*/ 86297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 86397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole /*face detection*/ 86497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole cam_face_detection_data_t *faceDetectionInfo =(cam_face_detection_data_t *) 86597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole POINTER_OF(CAM_INTF_META_FACE_DETECTION, metadata); 86697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole uint8_t numFaces = faceDetectionInfo->num_faces_detected; 86797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t faceIds[numFaces]; 86897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole uint8_t faceScores[numFaces]; 86997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t faceRectangles[numFaces * 4]; 87097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t faceLandmarks[numFaces * 6]; 87197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int j = 0, k = 0; 87297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole for (int i = 0; i < numFaces; i++) { 87397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole faceIds[i] = faceDetectionInfo->faces[i].face_id; 87497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole faceScores[i] = faceDetectionInfo->faces[i].score; 87597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole convertRegions(faceDetectionInfo->faces[i].face_boundary, 87697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole faceRectangles+j, -1); 87797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole convertLandmarks(faceDetectionInfo->faces[i], faceLandmarks+k); 87897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole j+= 4; 87997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole k+= 6; 88097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole } 88197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_STATISTICS_FACE_IDS, faceIds, numFaces); 88297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_STATISTICS_FACE_SCORES, faceScores, numFaces); 88397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_STATISTICS_FACE_RECTANGLES, 88497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole faceRectangles, numFaces*4); 88597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_STATISTICS_FACE_LANDMARKS, 88697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole faceLandmarks, numFaces*6); 88797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 88897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 88997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole /*autofocus - TODO*/ 89097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole /*cam_auto_focus_data_t *afData =(cam_auto_focus_data_t *) 89197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole POINTER_OF(CAM_INTF_META_AUTOFOCUS_DATA,metadata);*/ 89297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 89397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *color_correct_mode = 89497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_COLOR_CORRECT_MODE, metadata); 89597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_COLOR_CORRECTION_MODE, color_correct_mode, 1); 89697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 89797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *ae_precapture_id = 89897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_AEC_PRECAPTURE_ID, metadata); 89997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_CONTROL_AE_PRECAPTURE_ID, ae_precapture_id, 1); 90097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 90197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole /*aec regions*/ 90297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole cam_area_t *hAeRegions = 90397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (cam_area_t *)POINTER_OF(CAM_INTF_META_AEC_ROI, metadata); 90497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t aeRegions[5]; 90597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole convertRegions(hAeRegions->rect, aeRegions, hAeRegions->weight); 90697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_CONTROL_AE_REGIONS, aeRegions, 5); 90797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 90897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *ae_state = 90997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_AEC_STATE, metadata); 91097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_CONTROL_AE_STATE, ae_state, 1); 91197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 91297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *focusMode = 91397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_PARM_FOCUS_MODE, metadata); 91497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_CONTROL_AF_MODE, focusMode, 1); 91597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 91697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole /*af regions*/ 91797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole cam_area_t *hAfRegions = 91897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (cam_area_t *)POINTER_OF(CAM_INTF_META_AF_ROI, metadata); 91997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t afRegions[5]; 92097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole convertRegions(hAfRegions->rect, afRegions, hAfRegions->weight); 92197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_CONTROL_AF_REGIONS, afRegions, 5); 92297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 92397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *afState = (int32_t *)POINTER_OF(CAM_INTF_META_AF_STATE, metadata); 92497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_CONTROL_AF_STATE, afState, 1); 92597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 92697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *afTriggerId = 92797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_AF_TRIGGER_ID, metadata); 92897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_CONTROL_AF_TRIGGER_ID, afTriggerId, 1); 92997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 93097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *whiteBalance = 93197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_PARM_WHITE_BALANCE, metadata); 93297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_CONTROL_AWB_MODE, whiteBalance, 1); 93397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 93497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole /*awb regions*/ 93597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole cam_area_t *hAwbRegions = 93697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (cam_area_t *)POINTER_OF(CAM_INTF_META_AWB_REGIONS, metadata); 93797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t awbRegions[5]; 93897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole convertRegions(hAwbRegions->rect, awbRegions, hAwbRegions->weight); 93997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_CONTROL_AWB_REGIONS, awbRegions, 5); 94097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 94197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *whiteBalanceState = 94297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_AWB_STATE, metadata); 94397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_CONTROL_AWB_STATE, whiteBalanceState, 1); 94497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 94597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *mode = (int32_t *)POINTER_OF(CAM_INTF_META_MODE, metadata); 94697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_CONTROL_MODE, mode, 1); 94797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 94897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *edgeMode = (int32_t *)POINTER_OF(CAM_INTF_META_EDGE, metadata); 94997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_EDGE_MODE, edgeMode, 1); 95097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 95197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *flashPower = 95297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_FLASH_POWER, metadata); 95397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_FLASH_FIRING_POWER, flashPower, 1); 95497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 95597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int64_t *flashFiringTime = 95697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int64_t *)POINTER_OF(CAM_INTF_META_FLASH_FIRING_TIME, metadata); 95797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_FLASH_FIRING_TIME, flashFiringTime, 1); 95897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 95997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole /*int32_t *ledMode = 96097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_PARM_LED_MODE, metadata); 96197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_FLASH_FIRING_TIME, ledMode, 1);*/ 96297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 96397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *flashState = 96497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_FLASH_STATE, metadata); 96597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_FLASH_STATE, flashState, 1); 96697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 96797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *hotPixelMode = 96897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_HOTPIXEL_MODE, metadata); 96997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_HOT_PIXEL_MODE, hotPixelMode, 1); 97097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 97197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole float *lensAperture = 97297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (float *)POINTER_OF(CAM_INTF_META_LENS_APERTURE, metadata); 97397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_LENS_APERTURE , lensAperture, 1); 97497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 97597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole float *filterDensity = 97697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (float *)POINTER_OF(CAM_INTF_META_LENS_FILTERDENSITY, metadata); 97797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_LENS_FILTER_DENSITY , filterDensity, 1); 97897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 97997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole float *focalLength = 98097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (float *)POINTER_OF(CAM_INTF_META_LENS_FOCAL_LENGTH, metadata); 98197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_LENS_FOCAL_LENGTH, focalLength, 1); 98297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 98397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole float *focusDistance = 98497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (float *)POINTER_OF(CAM_INTF_META_LENS_FOCUS_DISTANCE, metadata); 98597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_LENS_FOCUS_DISTANCE , focusDistance, 1); 98697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 98797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole float *focusRange = 98897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (float *)POINTER_OF(CAM_INTF_META_LENS_FOCUS_RANGE, metadata); 98997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_LENS_FOCUS_RANGE , focusRange, 1); 99097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 99197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *opticalStab = 99297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_LENS_OPT_STAB_MODE, metadata); 99397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_LENS_OPTICAL_STABILIZATION_MODE, opticalStab, 1); 99497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 99597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole /*int32_t *focusState = 99697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_LENS_FOCUS_STATE, metadata); 99797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_LENS_STATE , focusState, 1); //check */ 99897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 99997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *noiseRedMode = 100097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_NOISE_REDUCTION_MODE, metadata); 100197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_NOISE_REDUCTION_MODE , noiseRedMode, 1); 100297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 100397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole /*CAM_INTF_META_SCALER_CROP_REGION - check size*/ 100497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 100597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole cam_crop_region_t *scalerCropRegion = (cam_crop_region_t *) 100697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole POINTER_OF(CAM_INTF_META_SCALER_CROP_REGION, metadata); 100797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_SCALER_CROP_REGION, 100897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t*)scalerCropRegion, 100997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(scalerCropRegion)/sizeof(cam_crop_region_t)); 101097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 101197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int64_t *sensorExpTime = 101297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int64_t *)POINTER_OF(CAM_INTF_META_SENSOR_EXPOSURE_TIME, metadata); 101397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_SENSOR_EXPOSURE_TIME , sensorExpTime, 1); 101497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 101597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int64_t *sensorFameDuration = 101697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int64_t *)POINTER_OF(CAM_INTF_META_SENSOR_FRAME_DURATION, metadata); 101797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_SENSOR_FRAME_DURATION, sensorFameDuration, 1); 101897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 101997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *sensorSensitivity = 102097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_SENSOR_SENSITIVITY, metadata); 102197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_SENSOR_SENSITIVITY, sensorSensitivity, 1); 102297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 102397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int64_t *sensorTimestamp = 102497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int64_t *)POINTER_OF(CAM_INTF_META_SENSOR_TIMESTAMP, metadata); 102597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_SENSOR_TIMESTAMP, sensorTimestamp, 1); 102697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 102797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *shadingMode = 102897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_SHADING_MODE, metadata); 102997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_SHADING_MODE, shadingMode, 1); 103097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 103197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *faceDetectMode = 103297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_STATS_FACEDETECT_MODE, metadata); 103397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_STATISTICS_FACE_DETECT_MODE, faceDetectMode, 1); 103497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 103597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *histogramMode = 103697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_STATS_HISTOGRAM_MODE, metadata); 103797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_STATISTICS_HISTOGRAM_MODE, histogramMode, 1); 103897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 103997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t *sharpnessMapMode = 104097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t *)POINTER_OF(CAM_INTF_META_STATS_SHARPNESS_MAP_MODE, metadata); 104197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_STATISTICS_SHARPNESS_MAP_MODE, 104297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sharpnessMapMode, 1); 104397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 104497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole /*CAM_INTF_META_STATS_SHARPNESS_MAP - check size*/ 104597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole cam_sharpness_map_t *sharpnessMap = (cam_sharpness_map_t *) 104697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole POINTER_OF(CAM_INTF_META_STATS_SHARPNESS_MAP, metadata); 104797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole camMetadata.update(ANDROID_STATISTICS_SHARPNESS_MAP, 104897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole (int32_t*)sharpnessMap->sharpness, 104997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole CAM_MAX_MAP_WIDTH*CAM_MAX_MAP_HEIGHT); 105097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 105197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole resultMetadata = camMetadata.release(); 105233cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang return resultMetadata; 105397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole} 105497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 105597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole/*=========================================================================== 105697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * FUNCTION : convertRegions 105797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * 105897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * DESCRIPTION: helper method to convert from cam_rect_t into int32_t array 105997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * 106097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * PARAMETERS : 106197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * @rect : cam_rect_t struct to convert 106297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * @region : int32_t destination array 106397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * @weight : if we are converting from cam_area_t, weight is valid 106497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * else weight = -1 106597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * 106697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole *==========================================================================*/ 106797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbolevoid QCamera3HardwareInterface::convertRegions(cam_rect_t rect, int32_t* region, int weight){ 106897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole region[0] = rect.left; 106997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole region[1] = rect.top; 107097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole region[2] = rect.width; 107197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole region[3] = rect.height; 107297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole if (weight > -1) { 107397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole region[4] = weight; 107497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole } 107597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole} 107697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole/*=========================================================================== 107797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * FUNCTION : convertLandmarks 107897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * 107997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * DESCRIPTION: helper method to extract the landmarks from face detection info 108097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * 108197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * PARAMETERS : 108297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * @face : cam_rect_t struct to convert 108397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * @landmarks : int32_t destination array 108497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * 108597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole * 108697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole *==========================================================================*/ 108797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbolevoid QCamera3HardwareInterface::convertLandmarks(cam_face_detection_info_t face, int32_t* landmarks) 108897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole{ 108997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole landmarks[0] = face.left_eye_center.x; 109097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole landmarks[1] = face.left_eye_center.y; 109197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole landmarks[2] = face.right_eye_center.y; 109297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole landmarks[3] = face.right_eye_center.y; 109397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole landmarks[4] = face.mouth_center.x; 109497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole landmarks[5] = face.mouth_center.y; 109597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole} 109697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 1097625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#define DATA_PTR(MEM_OBJ,INDEX) MEM_OBJ->getPtr( INDEX ) 1098625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 1099625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : initCapabilities 1100625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 1101625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: initialize camera capabilities in static data struct 1102625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 1103625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : 1104625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * @cameraId : camera Id 1105625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 1106625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : int32_t type of status 1107625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * NO_ERROR -- success 1108625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * none-zero failure code 1109625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 1110625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangint QCamera3HardwareInterface::initCapabilities(int cameraId) 1111625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 1112625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang int rc = 0; 1113625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang mm_camera_vtbl_t *cameraHandle = NULL; 1114625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang QCamera3HeapMemory *capabilityHeap = NULL; 1115625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1116625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang cameraHandle = camera_open(cameraId); 1117625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (!cameraHandle) { 1118625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: camera_open failed", __func__); 1119625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang rc = -1; 1120625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang goto open_failed; 1121625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 1122625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1123e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang capabilityHeap = new QCamera3HeapMemory(); 1124e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang if (capabilityHeap == NULL) { 1125e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang ALOGE("%s: creation of capabilityHeap failed", __func__); 1126e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang goto heap_creation_failed; 1127e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang } 1128625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang /* Allocate memory for capability buffer */ 1129625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang rc = capabilityHeap->allocate(1, sizeof(cam_capability_t), false); 1130625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if(rc != OK) { 1131625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: No memory for cappability", __func__); 1132625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang goto allocate_failed; 1133625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 1134625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1135625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang /* Map memory for capability buffer */ 1136625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang memset(DATA_PTR(capabilityHeap,0), 0, sizeof(cam_capability_t)); 1137625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang rc = cameraHandle->ops->map_buf(cameraHandle->camera_handle, 1138625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang CAM_MAPPING_BUF_TYPE_CAPABILITY, 1139625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang capabilityHeap->getFd(0), 1140625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang sizeof(cam_capability_t)); 1141625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if(rc < 0) { 1142625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: failed to map capability buffer", __func__); 1143625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang goto map_failed; 1144625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 1145625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1146625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang /* Query Capability */ 1147625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang rc = cameraHandle->ops->query_capability(cameraHandle->camera_handle); 1148625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if(rc < 0) { 1149625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: failed to query capability",__func__); 1150625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang goto query_failed; 1151625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 1152625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang gCamCapability[cameraId] = (cam_capability_t *)malloc(sizeof(cam_capability_t)); 1153625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (!gCamCapability[cameraId]) { 1154625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: out of memory", __func__); 1155625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang goto query_failed; 1156625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 1157625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang memcpy(gCamCapability[cameraId], DATA_PTR(capabilityHeap,0), 1158625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang sizeof(cam_capability_t)); 1159625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang rc = 0; 1160625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1161625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangquery_failed: 1162625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang cameraHandle->ops->unmap_buf(cameraHandle->camera_handle, 1163625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang CAM_MAPPING_BUF_TYPE_CAPABILITY); 1164625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangmap_failed: 1165625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang capabilityHeap->deallocate(); 1166625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangallocate_failed: 1167e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang delete capabilityHeap; 1168e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wangheap_creation_failed: 1169625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang cameraHandle->ops->close_camera(cameraHandle->camera_handle); 1170625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang cameraHandle = NULL; 1171625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangopen_failed: 1172625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return rc; 1173625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 1174625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1175625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 1176662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * FUNCTION : initParameters 1177662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1178662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * DESCRIPTION: initialize camera parameters 1179662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1180662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * PARAMETERS : 1181662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1182662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * RETURN : int32_t type of status 1183662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * NO_ERROR -- success 1184662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * none-zero failure code 1185662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole *==========================================================================*/ 1186662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godboleint QCamera3HardwareInterface::initParameters() 1187662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole{ 1188662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole int rc = 0; 1189662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1190662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole //Allocate Set Param Buffer 1191662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mParamHeap = new QCamera3HeapMemory(); 1192662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole rc = mParamHeap->allocate(1, sizeof(parm_buffer_t), false); 1193662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole if(rc != OK) { 1194662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole rc = NO_MEMORY; 1195662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole ALOGE("Failed to allocate SETPARM Heap memory"); 1196662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole delete mParamHeap; 1197662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mParamHeap = NULL; 1198662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole return rc; 1199662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1200662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1201662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole //Map memory for parameters buffer 1202662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole rc = mCameraHandle->ops->map_buf(mCameraHandle->camera_handle, 1203662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole CAM_MAPPING_BUF_TYPE_PARM_BUF, 1204662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mParamHeap->getFd(0), 1205662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(parm_buffer_t)); 1206662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole if(rc < 0) { 1207662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole ALOGE("%s:failed to map SETPARM buffer",__func__); 1208662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole rc = FAILED_TRANSACTION; 1209662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mParamHeap->deallocate(); 1210662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole delete mParamHeap; 1211662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mParamHeap = NULL; 1212662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole return rc; 1213662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1214662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1215662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mParameters = (parm_buffer_t*) DATA_PTR(mParamHeap,0); 1216662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole return rc; 1217662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole} 1218662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1219662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole/*=========================================================================== 122033cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang * FUNCTION : deinitParameters 122133cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang * 122233cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang * DESCRIPTION: de-initialize camera parameters 122333cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang * 122433cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang * PARAMETERS : 122533cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang * 122633cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang * RETURN : NONE 122733cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang *==========================================================================*/ 122833cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wangvoid QCamera3HardwareInterface::deinitParameters() 122933cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang{ 123033cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang mCameraHandle->ops->unmap_buf(mCameraHandle->camera_handle, 123133cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang CAM_MAPPING_BUF_TYPE_PARM_BUF); 123233cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang 123333cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang mParamHeap->deallocate(); 123433cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang delete mParamHeap; 123533cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang mParamHeap = NULL; 123633cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang 123733cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang mParameters = NULL; 123833cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang} 123933cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang 124033cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang/*=========================================================================== 1241625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : initStaticMetadata 1242625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 1243625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: initialize the static metadata 1244625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 1245625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : 1246625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * @cameraId : camera Id 1247625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 1248625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : int32_t type of status 1249625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 0 -- success 1250625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * non-zero failure code 1251625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 1252625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangint QCamera3HardwareInterface::initStaticMetadata(int cameraId) 1253625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 1254625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang int rc = 0; 125597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole CameraMetadata staticInfo; 1256662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole int facingBack = gCamCapability[cameraId]->position == CAM_POSITION_BACK; 1257662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole /*HAL 3 only*/ 1258662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole #ifdef HAL_3_CAPABILITIES 1259625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang staticInfo.update(ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE, 1260625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang &gCamCapability[cameraId]->min_focus_distance, 1); 1261625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1262625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang staticInfo.update(ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE, 1263625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang &gCamCapability[cameraId]->hyper_focal_distance, 1); 1264625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1265625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang staticInfo.update(ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS, 1266625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang gCamCapability[cameraId]->focal_lengths, 1267625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang gCamCapability[cameraId]->focal_lengths_count); 1268625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1269625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1270625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang staticInfo.update(ANDROID_LENS_INFO_AVAILABLE_APERTURES, 1271625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang gCamCapability[cameraId]->apertures, 1272625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang gCamCapability[cameraId]->apertures_count); 1273625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1274625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang staticInfo.update(ANDROID_LENS_INFO_AVAILABLE_FILTER_DENSITIES, 1275625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang gCamCapability[cameraId]->filter_densities, 1276625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang gCamCapability[cameraId]->filter_densities_count); 1277625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1278625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1279625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang staticInfo.update(ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION, 1280625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang (int*)gCamCapability[cameraId]->optical_stab_modes, 1281625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang gCamCapability[cameraId]->optical_stab_modes_count); 1282625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 128380e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_LENS_POSITION, 128480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang gCamCapability[cameraId]->lens_position, 128580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang sizeof(gCamCapability[cameraId]->lens_position)/ sizeof(float)); 128680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 128780e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang static const int32_t lens_shading_map_size[] = {gCamCapability[cameraId]->lens_shading_map_size.width, 128880e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang gCamCapability[cameraId]->lens_shading_map_size.height}; 128980e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_LENS_INFO_SHADING_MAP_SIZE, 129080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang lens_shading_map_size, 129180e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang sizeof(lens_shading_map_size)/sizeof(int32_t)); 1292625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 129380e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_LENS_INFO_SHADING_MAP, gCamCapability[cameraId]->lens_shading_map, 129480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang sizeof(gCamCapability[cameraId]->lens_shading_map_size)/ sizeof(cam_dimension_t)); 1295625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 129680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang static const int32_t geo_correction_map_size[] = {gCamCapability[cameraId]->geo_correction_map_size.width, 129780e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang gCamCapability[cameraId]->geo_correction_map_size.height}; 129880e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_LENS_INFO_GEOMETRIC_CORRECTION_MAP_SIZE, 129980e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang geo_correction_map_size, 130080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang sizeof(geo_correction_map_size)/sizeof(int32_t)); 130180e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 130280e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_LENS_INFO_GEOMETRIC_CORRECTION_MAP, 130380e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang gCamCapability[cameraId]->geo_correction_map, 130480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang sizeof(gCamCapability[cameraId]->geo_correction_map_size)/ sizeof(cam_dimension_t)); 130580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 130680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_SENSOR_INFO_PHYSICAL_SIZE, 130780e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang gCamCapability[cameraId]->sensor_physical_size, 2); 130880e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 130980e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE, 131080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang gCamCapability[cameraId]->exposure_time_range, 2); 131180e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 131280e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_SENSOR_INFO_MAX_FRAME_DURATION, 131380e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang &gCamCapability[cameraId]->max_frame_duration, 1); 131480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 131580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 131680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT, 131780e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang (int*)&gCamCapability[cameraId]->color_arrangement, 1); 131880e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 131980e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang static const int32_t pixel_array_size[] = {gCamCapability[cameraId]->pixel_array_size.width, 132080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang gCamCapability[cameraId]->pixel_array_size.height}; 132180e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE, 132280e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang pixel_array_size, 2); 132380e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 132480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang static const int32_t active_array_size[] = {gCamCapability[cameraId]->active_array_size.width, 132580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang gCamCapability[cameraId]->active_array_size.height}; 132680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE, 132780e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang active_array_size, 2); 132880e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 132980e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_SENSOR_INFO_WHITE_LEVEL, 133080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang &gCamCapability[cameraId]->white_level, 1); 1331625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 133280e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_SENSOR_BLACK_LEVEL_PATTERN, 133380e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang gCamCapability[cameraId]->black_level_pattern, 4); 133480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 133580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_FLASH_INFO_CHARGE_DURATION, 133680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang &gCamCapability[cameraId]->flash_charge_duration, 1); 133780e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 133880e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_TONEMAP_MAX_CURVE_POINTS, 133980e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang &gCamCapability[cameraId]->max_tone_map_curve_points, 1); 134080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 134180e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_STATISTICS_INFO_MAX_FACE_COUNT, 134280e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang (int*)&gCamCapability[cameraId]->max_face_detection_count, 1); 134380e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 134480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_STATISTICS_INFO_HISTOGRAM_BUCKET_COUNT, 134580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang &gCamCapability[cameraId]->histogram_size, 1); 134680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 134780e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_STATISTICS_INFO_MAX_HISTOGRAM_COUNT, 134880e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang &gCamCapability[cameraId]->max_histogram_count, 1); 134980e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 135080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang static const int32_t sharpness_map_size[] = {gCamCapability[cameraId]->sharpness_map_size.width, 135180e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang gCamCapability[cameraId]->sharpness_map_size.height}; 135280e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 135380e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_STATISTICS_INFO_SHARPNESS_MAP_SIZE, 135480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang sharpness_map_size, sizeof(sharpness_map_size)/sizeof(int32_t)); 135580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 135680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_STATISTICS_INFO_MAX_SHARPNESS_MAP_VALUE, 135780e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang &gCamCapability[cameraId]->max_sharpness_map_value, 1); 135880e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 135980e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 136080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_SCALER_AVAILABLE_RAW_MIN_DURATIONS, 136180e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang &gCamCapability[cameraId]->raw_min_duration, 136280e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 1); 136380e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 1364662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static int32_t scalar_formats[CAM_FORMAT_MAX]; 1365662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole for (int i = 0; i < gCamCapability[cameraId]->supported_scalar_format_cnt; i++) { 1366662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole scalar_formats[i] = getScalarFormat(gCamCapability[cameraId]->supported_scalar_fmts[i]); 1367662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1368662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SCALER_AVAILABLE_FORMATS, 1369662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole scalar_formats, 1370662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(scalar_formats)/sizeof(int32_t)); 1371662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1372662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static int32_t available_processed_sizes[CAM_FORMAT_MAX]; 1373662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole makeTable(gCamCapability[cameraId]->supported_sizes_tbl, 1374662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole gCamCapability[cameraId]->supported_sizes_tbl_cnt, 1375662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole available_processed_sizes); 1376662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES, 1377662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole available_processed_sizes, 1378662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(available_processed_sizes)/sizeof(int32_t)); 1379662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole #else 1380662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole const float minFocusDistance = 0; 1381662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE, 1382662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &minFocusDistance, 1); 1383662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1384662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole const float hyperFocusDistance = 0; 1385662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE, 1386662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &hyperFocusDistance, 1); 1387662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1388662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const float focalLength = 3.30f; 1389662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS, 1390662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &focalLength, 1391662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1); 1392662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1393662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const float aperture = 2.8f; 1394662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_LENS_INFO_AVAILABLE_APERTURES, 1395662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &aperture, 1396662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1); 1397662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1398662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const float filterDensity = 0; 1399662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_LENS_INFO_AVAILABLE_FILTER_DENSITIES, 1400662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &filterDensity, 1); 1401662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1402662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const uint8_t availableOpticalStabilization = 1403662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF; 1404662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION, 1405662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &availableOpticalStabilization, 1); 1406662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1407662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole float lensPosition[3]; 1408662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole if (facingBack) { 1409662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole // Back-facing camera is center-top on device 1410662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole lensPosition[0] = 0; 1411662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole lensPosition[1] = 20; 1412662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole lensPosition[2] = -5; 1413662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } else { 1414662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole // Front-facing camera is center-right on device 1415662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole lensPosition[0] = 20; 1416662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole lensPosition[1] = 20; 1417662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole lensPosition[2] = 0; 1418662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1419662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_LENS_POSITION, 1420662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole lensPosition, 1421662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(lensPosition)/ sizeof(float)); 1422662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1423662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const int32_t lensShadingMapSize[] = {1, 1}; 1424662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_LENS_INFO_SHADING_MAP_SIZE, 1425662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole lensShadingMapSize, 1426662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(lensShadingMapSize)/sizeof(int32_t)); 1427662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1428662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const float lensShadingMap[3 * 1 * 1 ] = 1429662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole { 1.f, 1.f, 1.f }; 1430662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_LENS_INFO_SHADING_MAP, 1431662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole lensShadingMap, 1432662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(lensShadingMap)/ sizeof(float)); 1433662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1434662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const int32_t geometricCorrectionMapSize[] = {2, 2}; 1435662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_LENS_INFO_GEOMETRIC_CORRECTION_MAP_SIZE, 1436662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole geometricCorrectionMapSize, 1437662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(geometricCorrectionMapSize)/sizeof(int32_t)); 1438662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1439662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const float geometricCorrectionMap[2 * 3 * 2 * 2] = { 1440662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 1441662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1.f, 0.f, 1.f, 0.f, 1.f, 0.f, 1442662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 0.f, 1.f, 0.f, 1.f, 0.f, 1.f, 1443662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1.f, 1.f, 1.f, 1.f, 1.f, 1.f}; 1444662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_LENS_INFO_GEOMETRIC_CORRECTION_MAP, 1445662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole geometricCorrectionMap, 1446662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(geometricCorrectionMap)/ sizeof(float)); 1447662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1448662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const float sensorPhysicalSize[2] = {3.20f, 2.40f}; 1449662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SENSOR_INFO_PHYSICAL_SIZE, 1450662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sensorPhysicalSize, 2); 1451662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1452662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole const int64_t exposureTimeRange[2] = {1000L, 30000000000L} ; // 1 us - 30 sec 1453662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE, 1454662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole exposureTimeRange, 2); 1455662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1456662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole const int64_t frameDurationRange[2] = {33331760L, 30000000000L}; 1457662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SENSOR_INFO_MAX_FRAME_DURATION, 1458662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole frameDurationRange, 1); 1459662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1460662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole const uint8_t colorFilterArrangement = 1461662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB; 1462662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT, 1463662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &colorFilterArrangement, 1); 1464662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1465662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole const int resolution[2] = {640, 480}; 1466662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE, 1467662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole resolution, 2); 1468662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1469662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE, 1470662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole resolution, 2); 1471662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1472662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole const uint32_t whiteLevel = 4000; 1473662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SENSOR_INFO_WHITE_LEVEL, 1474662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole (int32_t*)&whiteLevel, 1); 1475662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1476662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const int32_t blackLevelPattern[4] = { 1477662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1000, 1000, 1478662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1000, 1000 }; 1479662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SENSOR_BLACK_LEVEL_PATTERN, 1480662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole blackLevelPattern, 4); 1481662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1482662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const int64_t flashChargeDuration = 0; 1483662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_FLASH_INFO_CHARGE_DURATION, 1484662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &flashChargeDuration, 1); 1485662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1486662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const int32_t tonemapCurvePoints = 128; 1487662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_TONEMAP_MAX_CURVE_POINTS, 1488662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &tonemapCurvePoints, 1); 1489662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1490662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const int32_t maxFaceCount = 8; 1491662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_STATISTICS_INFO_MAX_FACE_COUNT, 1492662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &maxFaceCount, 1); 1493662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1494662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const int32_t histogramSize = 64; 1495662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_STATISTICS_INFO_HISTOGRAM_BUCKET_COUNT, 1496662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &histogramSize, 1); 1497662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1498662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const int32_t maxHistogramCount = 1000; 1499662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_STATISTICS_INFO_MAX_HISTOGRAM_COUNT, 1500662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &maxHistogramCount, 1); 1501662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1502662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const int32_t sharpnessMapSize[2] = {64, 64}; 1503662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_STATISTICS_INFO_SHARPNESS_MAP_SIZE, 1504662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sharpnessMapSize, sizeof(sharpnessMapSize)/sizeof(int32_t)); 1505662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1506662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const int32_t maxSharpnessMapValue = 1000; 1507662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_STATISTICS_INFO_MAX_SHARPNESS_MAP_VALUE, 1508662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &maxSharpnessMapValue, 1); 1509662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1510662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const uint8_t availableVstabModes[] = {ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF}; 1511662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES, 1512662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole availableVstabModes, sizeof(availableVstabModes)); 1513662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1514662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole const uint64_t availableRawMinDurations[1] = {33331760L}; 1515662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SCALER_AVAILABLE_RAW_MIN_DURATIONS, 1516662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole (int64_t*)&availableRawMinDurations, 1517662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1); 1518662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1519662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole const uint32_t availableFormats[4] = { 1520662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole HAL_PIXEL_FORMAT_RAW_SENSOR, 1521662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole HAL_PIXEL_FORMAT_BLOB, 1522662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole HAL_PIXEL_FORMAT_RGBA_8888, 1523662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole HAL_PIXEL_FORMAT_YCrCb_420_SP 1524662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole }; 1525662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SCALER_AVAILABLE_FORMATS, 1526662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole (int32_t*)availableFormats, 1527662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 4); 1528662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1529662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole const uint32_t availableProcessedSizes[4] = {640, 480, 320, 240}; 1530662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES, 1531662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole (int32_t*)availableProcessedSizes, 1532662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(availableProcessedSizes)/sizeof(int32_t)); 1533662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1534662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SCALER_AVAILABLE_JPEG_SIZES, 1535662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole resolution, 1536662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(resolution)/sizeof(int)); 1537662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1538662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const uint8_t availableFaceDetectModes[] = { 1539662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole ANDROID_STATISTICS_FACE_DETECT_MODE_OFF }; 1540662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1541662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES, 1542662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole availableFaceDetectModes, 1543662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(availableFaceDetectModes)); 1544662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1545662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const uint8_t availableSceneModes[] = { 1546662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED }; 1547662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1548662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_CONTROL_AVAILABLE_SCENE_MODES, 1549662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole availableSceneModes, sizeof(availableSceneModes)); 1550662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1551662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const int32_t availableFpsRanges[] = {15, 30}; 1552662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 1553662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole availableFpsRanges, sizeof(availableFpsRanges)/sizeof(int32_t)); 1554662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1555662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const uint8_t availableEffectsModes[] = { 1556662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole ANDROID_CONTROL_EFFECT_MODE_OFF }; 1557662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_CONTROL_AVAILABLE_EFFECTS, 1558662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole availableEffectsModes, sizeof(availableEffectsModes)); 1559662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1560662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const uint8_t availableAntibandingModes[] = { 1561662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF }; 1562662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES, 1563662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole availableAntibandingModes, sizeof(availableAntibandingModes)); 1564662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1565662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const uint8_t flashAvailable = 0; 1566662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_FLASH_INFO_AVAILABLE, 1567662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &flashAvailable, sizeof(flashAvailable)); 1568662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1569662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const int32_t max3aRegions = 0; 1570662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_CONTROL_MAX_REGIONS, 1571662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &max3aRegions, 1); 1572662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1573662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const camera_metadata_rational exposureCompensationStep = { 1574662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1, 3 1575662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole }; 1576662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_CONTROL_AE_COMPENSATION_STEP, 1577662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &exposureCompensationStep, 1); 1578662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1579662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const int32_t jpegThumbnailSizes[] = { 1580662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 0, 0, 1581662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 160, 120, 1582662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 320, 240 1583662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole }; 1584662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, 1585662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole jpegThumbnailSizes, sizeof(jpegThumbnailSizes)/sizeof(int32_t)); 1586662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1587662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const int32_t maxZoom = 10; 1588662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM, 1589662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole &maxZoom, 1); 1590662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1591662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static int64_t jpegMinDuration[] = {33331760L, 30000000000L}; 1592662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SCALER_AVAILABLE_JPEG_MIN_DURATIONS, 1593662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole jpegMinDuration, 1594662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(jpegMinDuration)/sizeof(uint64_t)); 1595662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole #endif 1596662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole /*HAL 1 and HAL 3 common*/ 1597662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const int32_t raw_size[] = {gCamCapability[cameraId]->raw_dim.width, 1598662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole gCamCapability[cameraId]->raw_dim.height}; 1599662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SCALER_AVAILABLE_RAW_SIZES, 1600662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole raw_size, 1601662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(raw_size)/sizeof(uint32_t)); 1602662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 160380e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang static const int32_t exposureCompensationRange[] = {gCamCapability[cameraId]->exposure_compensation_min, 160480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang gCamCapability[cameraId]->exposure_compensation_max}; 160580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_CONTROL_AE_COMPENSATION_RANGE, 160680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang exposureCompensationRange, 160780e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang sizeof(exposureCompensationRange)/sizeof(int32_t)); 160880e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 1609662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole uint8_t lensFacing = (facingBack) ? 161080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang ANDROID_LENS_FACING_BACK : ANDROID_LENS_FACING_FRONT; 161180e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang staticInfo.update(ANDROID_LENS_FACING, &lensFacing, 1); 1612625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1613662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static int32_t available_jpeg_sizes[MAX_SIZES_CNT]; 1614662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole makeTable(gCamCapability[cameraId]->picture_sizes_tbl, 1615662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole gCamCapability[cameraId]->picture_sizes_tbl_cnt, 1616662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole available_jpeg_sizes); 1617662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_SCALER_AVAILABLE_JPEG_SIZES, 1618662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole available_jpeg_sizes, 1619662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(available_jpeg_sizes)/sizeof(int32_t)); 1620662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 162197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole static int32_t max_jpeg_size = 0; 162297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int temp_width, temp_height; 162397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole for (int i = 0; i < gCamCapability[cameraId]->picture_sizes_tbl_cnt; i++) { 162497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole temp_width = gCamCapability[cameraId]->picture_sizes_tbl[i].width; 162597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole temp_height = gCamCapability[cameraId]->picture_sizes_tbl[i].height; 162697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole if (temp_width * temp_height > max_jpeg_size ) { 162797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole max_jpeg_size = temp_width * temp_height; 162897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole } 162997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole } 163097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole max_jpeg_size = max_jpeg_size * 3/2 + sizeof(camera3_jpeg_blob_t); 163197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole staticInfo.update(ANDROID_JPEG_MAX_SIZE, 163297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole &max_jpeg_size, 1); 163397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 1634662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static int32_t avail_effects[CAM_EFFECT_MODE_MAX]; 1635662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole for (int i = 0; i < gCamCapability[cameraId]->supported_effects_cnt; i++) { 1636662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole avail_effects[i] = lookupFwkName(EFFECT_MODES_MAP, 1637662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(EFFECT_MODES_MAP)/sizeof(int), 1638662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole gCamCapability[cameraId]->supported_effects[i]); 1639662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1640662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_CONTROL_AVAILABLE_EFFECTS, 1641662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole avail_effects, 1642662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(avail_effects)/sizeof(int32_t)); 1643662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1644662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static int32_t avail_scene_modes[CAM_SCENE_MODE_MAX]; 1645662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole for (int i = 0; i < gCamCapability[cameraId]->supported_scene_modes_cnt; i++) { 1646662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole avail_scene_modes[i] = lookupFwkName(SCENE_MODES_MAP, 1647662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(SCENE_MODES_MAP)/sizeof(int), 1648662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole gCamCapability[cameraId]->supported_scene_modes[i]); 1649662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1650662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_CONTROL_AVAILABLE_SCENE_MODES, 1651662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole avail_scene_modes, 1652662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(avail_scene_modes)/sizeof(int32_t)); 1653662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1654662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static int32_t avail_antibanding_modes[CAM_ANTIBANDING_MODE_MAX]; 1655662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole for (int i = 0; i < gCamCapability[cameraId]->supported_antibandings_cnt; i++) { 1656662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole avail_antibanding_modes[i] = lookupFwkName(ANTIBANDING_MODES_MAP, 1657662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(ANTIBANDING_MODES_MAP)/sizeof(int), 1658662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole gCamCapability[cameraId]->supported_antibandings[i]); 1659662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1660662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES, 1661662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole avail_antibanding_modes, 1662662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(avail_antibanding_modes)/sizeof(int32_t)); 1663662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1664662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static uint8_t avail_af_modes[CAM_FOCUS_MODE_MAX]; 1665662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole for (int i = 0; i < gCamCapability[cameraId]->supported_focus_modes_cnt; i++) { 1666662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole avail_af_modes[i] = lookupFwkName(FOCUS_MODES_MAP, 1667662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(FOCUS_MODES_MAP)/sizeof(int), 1668662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole gCamCapability[cameraId]->supported_focus_modes[i]); 1669662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1670662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_CONTROL_AF_AVAILABLE_MODES, 1671662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole avail_af_modes, 1672662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(avail_af_modes)); 1673662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1674662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static int32_t avail_awb_modes[CAM_WB_MODE_MAX]; 1675662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole for (int i = 0; i < gCamCapability[cameraId]->supported_white_balances_cnt; i++) { 1676662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole avail_awb_modes[i] = lookupFwkName(WHITE_BALANCE_MODES_MAP, 1677662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(WHITE_BALANCE_MODES_MAP)/sizeof(int), 1678662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole gCamCapability[cameraId]->supported_white_balances[i]); 1679662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1680662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_CONTROL_AWB_AVAILABLE_MODES, 1681662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole avail_awb_modes, 1682662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(avail_awb_modes)/sizeof(int32_t)); 1683662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1684662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static int32_t avail_flash_modes[CAM_FLASH_MODE_MAX]; 1685662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole for (int i = 0; i < gCamCapability[cameraId]->supported_flash_modes_cnt; i++) { 1686662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole avail_flash_modes[i] = lookupFwkName(FLASH_MODES_MAP, 1687662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(FLASH_MODES_MAP)/sizeof(int), 1688662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole gCamCapability[cameraId]->supported_flash_modes[i]); 1689662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1690662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_FLASH_MODE, 1691662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole avail_flash_modes, 1692662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(avail_flash_modes)/sizeof(int32_t)); 1693662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1694662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole /*so far fwk seems to support only 2 aec modes on and off*/ 1695662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole static const uint8_t avail_ae_modes[] = { 1696662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole ANDROID_CONTROL_AE_MODE_OFF, 1697662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole ANDROID_CONTROL_AE_MODE_ON 1698662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole }; 1699662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole staticInfo.update(ANDROID_CONTROL_AE_AVAILABLE_MODES, 1700662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole avail_ae_modes, 1701662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(avail_ae_modes)); 1702662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1703625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang gStaticMetadata = staticInfo.release(); 1704625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return rc; 1705625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 1706625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1707625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 1708662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * FUNCTION : makeTable 1709662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1710662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * DESCRIPTION: make a table of sizes 1711662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1712662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * PARAMETERS : 1713662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1714662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1715662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1716662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * RETURN : int32_t type of status 1717662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * NO_ERROR -- success 1718662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * none-zero failure code 1719662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole *==========================================================================*/ 1720662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbolevoid QCamera3HardwareInterface::makeTable(cam_dimension_t* dimTable, uint8_t size, 1721662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole int32_t* sizeTable) 1722662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole{ 1723662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole int j = 0; 1724662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole for (int i = 0; i < size; i++) { 1725662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeTable[j] = dimTable[i].width; 1726662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeTable[j+1] = dimTable[i].height; 1727662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole j+=2; 1728662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1729662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole} 1730662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole/*=========================================================================== 1731662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * FUNCTION : getPreviewHalPixelFormat 1732662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1733662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * DESCRIPTION: convert the format to type recognized by framework 1734662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1735662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * PARAMETERS : format : the format from backend 1736662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1737662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole ** RETURN : format recognized by framework 1738662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1739662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole *==========================================================================*/ 1740662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godboleint32_t QCamera3HardwareInterface::getScalarFormat(int32_t format) 1741662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole{ 1742662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole int32_t halPixelFormat; 1743662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1744662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole switch (format) { 1745662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole case CAM_FORMAT_YUV_420_NV12: 1746662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole halPixelFormat = HAL_PIXEL_FORMAT_YCbCr_420_SP; 1747662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole break; 1748662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole case CAM_FORMAT_YUV_420_NV21: 1749662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole halPixelFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP; 1750662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole break; 1751662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole case CAM_FORMAT_YUV_420_NV21_ADRENO: 1752662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole halPixelFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO; 1753662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole break; 1754662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole case CAM_FORMAT_YUV_420_YV12: 1755662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole halPixelFormat = HAL_PIXEL_FORMAT_YV12; 1756662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole break; 1757662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole case CAM_FORMAT_YUV_422_NV16: 1758662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole case CAM_FORMAT_YUV_422_NV61: 1759662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole default: 1760662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole halPixelFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP; 1761662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole break; 1762662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1763662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole return halPixelFormat; 1764662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole} 1765662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1766662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole/*=========================================================================== 1767662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * FUNCTION : AddSetParmEntryToBatch 1768662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1769662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * DESCRIPTION: add set parameter entry into batch 1770662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1771662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * PARAMETERS : 1772662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * @p_table : ptr to parameter buffer 1773662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * @paramType : parameter type 1774662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * @paramLength : length of parameter value 1775662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * @paramValue : ptr to parameter value 1776662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1777662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * RETURN : int32_t type of status 1778662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * NO_ERROR -- success 1779662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * none-zero failure code 1780662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole *==========================================================================*/ 1781662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godboleint32_t QCamera3HardwareInterface::AddSetParmEntryToBatch(parm_buffer_t *p_table, 1782662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole cam_intf_parm_type_t paramType, 1783662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole uint32_t paramLength, 1784662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole void *paramValue) 1785662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole{ 1786662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole int position = paramType; 1787662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole int current, next; 1788662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1789662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole /************************************************************************* 1790662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * Code to take care of linking next flags * 1791662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole *************************************************************************/ 1792662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole current = GET_FIRST_PARAM_ID(p_table); 1793662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole if (position == current){ 1794662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole //DO NOTHING 1795662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } else if (position < current){ 1796662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole SET_NEXT_PARAM_ID(position, p_table, current); 1797662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole SET_FIRST_PARAM_ID(p_table, position); 1798662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } else { 1799662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole /* Search for the position in the linked list where we need to slot in*/ 1800662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole while (position > GET_NEXT_PARAM_ID(current, p_table)) 1801662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole current = GET_NEXT_PARAM_ID(current, p_table); 1802662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1803662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole /*If node already exists no need to alter linking*/ 1804662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole if (position != GET_NEXT_PARAM_ID(current, p_table)) { 1805662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole next = GET_NEXT_PARAM_ID(current, p_table); 1806662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole SET_NEXT_PARAM_ID(current, p_table, position); 1807662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole SET_NEXT_PARAM_ID(position, p_table, next); 1808662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1809662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1810662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1811662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole /************************************************************************* 1812662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * Copy contents into entry * 1813662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole *************************************************************************/ 1814662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1815662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole if (paramLength > sizeof(parm_type_t)) { 1816662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole ALOGE("%s:Size of input larger than max entry size",__func__); 1817662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole return BAD_VALUE; 1818662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1819662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole memcpy(POINTER_OF(paramType,p_table), paramValue, paramLength); 1820662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole return NO_ERROR; 1821662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole} 1822662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1823662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole/*=========================================================================== 1824662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * FUNCTION : lookupFwkName 1825662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1826662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * DESCRIPTION: In case the enum is not same in fwk and backend 1827662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * make sure the parameter is correctly propogated 1828662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1829662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * PARAMETERS : 1830662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * @arr : map between the two enums 1831662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * @len : len of the map 1832662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * @hal_name : name of the hal_parm to map 1833662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1834662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * RETURN : int type of status 1835662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * fwk_name -- success 1836662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * none-zero failure code 1837662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole *==========================================================================*/ 1838662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godboleint QCamera3HardwareInterface::lookupFwkName(const QCameraMap arr[], 1839662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole int len, int hal_name) 1840662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole{ 1841662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1842662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole for (int i = 0; i < len; i++) { 1843662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole if (arr[i].hal_name == hal_name) 1844662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole return arr[i].fwk_name; 1845662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1846662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole return NAME_NOT_FOUND; 1847662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole} 1848662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1849662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole/*=========================================================================== 1850662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * FUNCTION : lookupHalName 1851662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1852662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * DESCRIPTION: In case the enum is not same in fwk and backend 1853662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * make sure the parameter is correctly propogated 1854662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1855662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * PARAMETERS : 1856662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * @arr : map between the two enums 1857662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * @len : len of the map 1858662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * @fwk_name : name of the hal_parm to map 1859662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 1860662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * RETURN : int32_t type of status 1861662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * hal_name -- success 1862662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * none-zero failure code 1863662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole *==========================================================================*/ 1864662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godboleint QCamera3HardwareInterface::lookupHalName(const QCameraMap arr[], 1865662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole int len, int fwk_name) 1866662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole{ 1867662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole for (int i = 0; i < len; i++) { 1868662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole if (arr[i].fwk_name == fwk_name) 1869662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole return arr[i].hal_name; 1870662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 1871662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole return NAME_NOT_FOUND; 1872662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole} 1873662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 1874662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole/*=========================================================================== 1875625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : getCapabilities 1876625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 1877625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: query camera capabilities 1878625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 1879625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : 1880625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * @cameraId : camera Id 1881625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * @info : camera info struct to be filled in with camera capabilities 1882625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 1883625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : int32_t type of status 1884625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * NO_ERROR -- success 1885625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * none-zero failure code 1886625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 1887625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangint QCamera3HardwareInterface::getCamInfo(int cameraId, 1888625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang struct camera_info *info) 1889625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 1890625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang int rc = 0; 1891625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1892625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (NULL == gCamCapability[cameraId]) { 1893625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang rc = initCapabilities(cameraId); 1894625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (rc < 0) { 1895625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang //pthread_mutex_unlock(&g_camlock); 1896625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return rc; 1897625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 1898625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 1899625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1900625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (NULL == gStaticMetadata) { 1901625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang rc = initStaticMetadata(cameraId); 1902625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (rc < 0) { 1903625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return rc; 1904625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 1905625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 1906625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1907625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang switch(gCamCapability[cameraId]->position) { 1908625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang case CAM_POSITION_BACK: 1909625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang info->facing = CAMERA_FACING_BACK; 1910625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 1911625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1912625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang case CAM_POSITION_FRONT: 1913625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang info->facing = CAMERA_FACING_FRONT; 1914625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 1915625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1916625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang default: 1917625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s:Unknown position type for camera id:%d", __func__, cameraId); 1918625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang rc = -1; 1919625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 1920625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 1921625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1922625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1923625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang info->orientation = gCamCapability[cameraId]->sensor_mount_angle; 1924e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang info->device_version = HARDWARE_DEVICE_API_VERSION(3, 0); 1925625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang info->static_camera_characteristics = gStaticMetadata; 1926625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1927625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return rc; 1928625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 1929625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1930625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 1931625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : translateMetadata 1932625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 1933625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: translate the metadata into camera_metadata_t 1934625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 1935625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : type of the request 1936625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 1937625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 1938625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : success: camera_metadata_t* 1939625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * failure: NULL 1940625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 1941625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 194297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbolecamera_metadata_t* QCamera3HardwareInterface::translateCapabilityToMetadata(int type) 1943625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 1944e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_lock(&mMutex); 1945e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 1946625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (mDefaultMetadata[type] != NULL) { 1947e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 1948625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return mDefaultMetadata[type]; 1949625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 1950625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang //first time we are handling this request 1951625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang //fill up the metadata structure using the wrapper class 195297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole CameraMetadata settings; 1953625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang //translate from cam_capability_t to camera_metadata_tag_t 1954625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang static const uint8_t requestType = ANDROID_REQUEST_TYPE_CAPTURE; 1955625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang settings.update(ANDROID_REQUEST_TYPE, &requestType, 1); 1956625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1957625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang /*control*/ 1958625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1959625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang uint8_t controlIntent = 0; 1960625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang switch (type) { 1961625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang case CAMERA3_TEMPLATE_PREVIEW: 1962625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang controlIntent = ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW; 1963625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 1964625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang case CAMERA3_TEMPLATE_STILL_CAPTURE: 1965625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang controlIntent = ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE; 1966625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 1967625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang case CAMERA3_TEMPLATE_VIDEO_RECORD: 1968625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang controlIntent = ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_RECORD; 1969625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 1970625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang case CAMERA3_TEMPLATE_VIDEO_SNAPSHOT: 1971625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang controlIntent = ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT; 1972625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 1973625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang case CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG: 1974625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang controlIntent = ANDROID_CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG; 1975625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 1976625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang default: 1977625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang controlIntent = ANDROID_CONTROL_CAPTURE_INTENT_CUSTOM; 1978625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang break; 1979625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 1980625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang settings.update(ANDROID_CONTROL_CAPTURE_INTENT, &controlIntent, 1); 1981625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 19829de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang settings.update(ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION, 19839de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang &gCamCapability[mCameraId]->exposure_compensation_default, 1); 1984625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1985625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang static const uint8_t aeLock = ANDROID_CONTROL_AE_LOCK_OFF; 1986625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang settings.update(ANDROID_CONTROL_AE_LOCK, &aeLock, 1); 1987625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1988625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang static const uint8_t awbLock = ANDROID_CONTROL_AWB_LOCK_OFF; 1989625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang settings.update(ANDROID_CONTROL_AWB_LOCK, &awbLock, 1); 1990625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1991625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang static const uint8_t awbMode = ANDROID_CONTROL_AWB_MODE_AUTO; 1992625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang settings.update(ANDROID_CONTROL_AWB_MODE, &awbMode, 1); 1993625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1994625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang static const uint8_t controlMode = ANDROID_CONTROL_MODE_AUTO; 1995625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang settings.update(ANDROID_CONTROL_MODE, &controlMode, 1); 1996625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 1997625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang static const uint8_t effectMode = ANDROID_CONTROL_EFFECT_MODE_OFF; 1998625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang settings.update(ANDROID_CONTROL_EFFECT_MODE, &effectMode, 1); 1999625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2000625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang static const uint8_t sceneMode = ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY; //similar to AUTO? 2001625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang settings.update(ANDROID_CONTROL_SCENE_MODE, &sceneMode, 1); 2002625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2003625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang /*flash*/ 2004625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang static const uint8_t flashMode = ANDROID_FLASH_MODE_OFF; 2005625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang settings.update(ANDROID_FLASH_MODE, &flashMode, 1); 2006625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2007625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2008625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang /* lens */ 2009625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang static const float default_aperture = gCamCapability[mCameraId]->apertures[0]; 2010625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang settings.update(ANDROID_LENS_APERTURE, &default_aperture, 1); 2011625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2012625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang static const float default_filter_density = gCamCapability[mCameraId]->filter_densities[0]; 2013625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang settings.update(ANDROID_LENS_FILTER_DENSITY, &default_filter_density, 1); 2014625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2015625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang static const float default_focal_length = gCamCapability[mCameraId]->focal_lengths[0]; 2016625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang settings.update(ANDROID_LENS_FOCAL_LENGTH, &default_focal_length, 1); 2017625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2018625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang mDefaultMetadata[type] = settings.release(); 2019e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 2020e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang pthread_mutex_unlock(&mMutex); 2021625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return mDefaultMetadata[type]; 2022625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 2023625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2024625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 202580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * FUNCTION : setFrameParameters 202680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * 202780e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * DESCRIPTION: set parameters per frame as requested in the metadata from 202880e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * framework 202980e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * 203080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * PARAMETERS : 203180e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * @settings : frame settings information from framework 203280e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * 203380e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * 203480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * RETURN : success: NO_ERROR 203580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * failure: 203680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang *==========================================================================*/ 2037662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godboleint QCamera3HardwareInterface::setFrameParameters(int frame_id, 2038662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole const camera_metadata_t *settings) 203980e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang{ 204080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang /*translate from camera_metadata_t type to parm_type_t*/ 204180e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang int rc = 0; 204233cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang if (settings == NULL && mFirstRequest) { 204380e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang /*settings cannot be null for the first request*/ 204480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang return BAD_VALUE; 2045662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 204633cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang 204733cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang mParameters->first_flagged_entry = CAM_INTF_PARM_MAX; 204833cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang 2049662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole /*we need to update the frame number in the parameters*/ 2050662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_FRAME_NUMBER, 2051662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole sizeof(frame_id), &frame_id); 2052662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole if (rc < 0) { 2053662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole ALOGE("%s: Failed to set the frame number in the parameters", __func__); 2054662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole return BAD_VALUE; 2055662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 2056662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole if(settings != NULL){ 205733cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang //rc = translateMetadataToParameters(settings); 205880e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang } 205980e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang /*set the parameters to backend*/ 206033cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang ALOGE("%s: %d", __func__, __LINE__); 2061662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mCameraHandle->ops->set_parms(mCameraHandle->camera_handle, mParameters); 206280e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang return rc; 206380e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang} 206480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 206580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang/*=========================================================================== 206680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * FUNCTION : translateMetadataToParameters 206780e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * 206880e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * DESCRIPTION: read from the camera_metadata_t and change to parm_type_t 206980e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * 207080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * 207180e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * PARAMETERS : 207280e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * @settings : frame settings information from framework 207380e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * 207480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * 207580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * RETURN : success: NO_ERROR 207680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang * failure: 207780e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang *==========================================================================*/ 207880e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wangint QCamera3HardwareInterface::translateMetadataToParameters 207980e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang (const camera_metadata_t *settings) 208080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang{ 2081662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole int rc = 0; 208297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole CameraMetadata frame_settings; 2083662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole frame_settings = settings; 2084662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 208597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t antibandingMode = 208697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_CONTROL_AE_ANTIBANDING_MODE).data.i32[0]; 208797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_PARM_ANTIBANDING, 208897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(antibandingMode), &antibandingMode); 208997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 209097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole /*int32_t expCompensation = frame_settings.find().data.i32[0]; 209197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, 209297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole CAM_INTF_PARM_EXPOSURE_COMPENSATION, 209397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(expCompensation), &expCompensation);*/ 209497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 209597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t aeLock = frame_settings.find(ANDROID_CONTROL_AE_LOCK).data.i32[0]; 209697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_PARM_AEC_LOCK, 209797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(aeLock), &aeLock); 209897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 209997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t focusMode = 210097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_CONTROL_AF_MODE).data.i32[0]; 210197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_PARM_FOCUS_MODE, 210297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(focusMode), &focusMode); 210397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 210497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t awbLock = frame_settings.find(ANDROID_CONTROL_AWB_LOCK).data.i32[0]; 210597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_PARM_AWB_LOCK, 210697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(awbLock), &awbLock); 210797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 210897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t fwk_whiteLevel = 210997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_CONTROL_AWB_MODE).data.i32[0]; 2110662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole int whiteLevel = lookupHalName(WHITE_BALANCE_MODES_MAP, 211197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(WHITE_BALANCE_MODES_MAP)/ sizeof(int32_t), 211297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole fwk_whiteLevel); 2113662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_PARM_WHITE_BALANCE, 211497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(whiteLevel), &whiteLevel); 211597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 211697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t fwk_effectMode = 211797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_CONTROL_EFFECT_MODE).data.i32[0]; 2118662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole int effectMode = lookupHalName(EFFECT_MODES_MAP, 211997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(EFFECT_MODES_MAP)/ sizeof(int32_t), 212097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole fwk_effectMode); 2121662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_PARM_EFFECT, 212297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(effectMode), &effectMode); 212397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t fwk_aeMode = 212497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_CONTROL_AE_MODE).data.i32[0]; 2125662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole int aeMode = lookupHalName(AUTO_EXPOSURE_MAP, 212697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(AUTO_EXPOSURE_MAP)/ sizeof(int32_t), 212797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole fwk_aeMode); 2128662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_AEC_MODE, 212997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(aeMode), &aeMode); 2130662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 213197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t metaFrameNumber = 213297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_REQUEST_FRAME_COUNT).data.i32[0]; 213397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_FRAME_NUMBER, 213497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(metaFrameNumber), &metaFrameNumber); 213597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 213697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t colorCorrectMode = 213797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_COLOR_CORRECTION_MODE).data.i32[0]; 213897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_COLOR_CORRECT_MODE, 213997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(colorCorrectMode), &colorCorrectMode); 2140662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 214197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t aecTrigger = 214297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER).data.i32[0]; 214397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, 214497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole CAM_INTF_META_AEC_PRECAPTURE_TRIGGER, 214597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(aecTrigger), &aecTrigger); 214697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 214797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t afTrigger = 214897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_CONTROL_AF_TRIGGER).data.i32[0]; 214997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_AF_TRIGGER, 215097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(afTrigger), &afTrigger); 215197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 215297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 215397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t metaMode = frame_settings.find(ANDROID_CONTROL_MODE).data.i32[0]; 215497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_MODE, 215597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(metaMode), &metaMode); 215697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 215797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 215897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t demosaic = frame_settings.find(ANDROID_DEMOSAIC_MODE).data.u8[0]; 215997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_DEMOSAIC, 216097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(demosaic), &demosaic); 216197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 216297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t edgeMode = frame_settings.find(ANDROID_EDGE_MODE).data.u8[0]; 216397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_EDGE, 216497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(edgeMode), &edgeMode); 216597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 216697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 216797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t edgeStrength = 216897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_EDGE_STRENGTH).data.i32[0]; 216997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_SHARPNESS_STRENGTH, 217097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(edgeStrength), &edgeStrength); 217197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 217297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t flashPower = 217397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_FLASH_FIRING_POWER).data.u8[0]; 217497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_FLASH_POWER, 217597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(flashPower), &flashPower); 217697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 217797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int64_t flashFiringTime = 217897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_FLASH_FIRING_TIME).data.i64[0]; 217997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_FLASH_FIRING_TIME, 218097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(flashFiringTime), &flashFiringTime); 218197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 218297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t geometricMode = 218397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_GEOMETRIC_MODE).data.u8[0]; 218497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_GEOMETRIC_MODE, 218597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(geometricMode), &geometricMode); 218697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 218797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t geometricStrength = 218897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_GEOMETRIC_STRENGTH).data.u8[0]; 218997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_GEOMETRIC_STRENGTH, 219097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(geometricStrength), &geometricStrength); 219197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 219297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t hotPixelMode = 219397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_HOT_PIXEL_MODE).data.u8[0]; 219497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_HOTPIXEL_MODE, 219597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(hotPixelMode), &hotPixelMode); 219697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 219797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 219897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole float lensAperture = 219997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find( ANDROID_LENS_APERTURE).data.f[0]; 220097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_LENS_APERTURE, 220197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(lensAperture), &lensAperture); 220297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 220397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 220497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole float filterDensity = 220597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_LENS_FILTER_DENSITY).data.f[0]; 220697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_LENS_FILTERDENSITY, 220797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(filterDensity), &filterDensity); 220897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 220997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 221097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole float focalLength = 221197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_LENS_FOCAL_LENGTH).data.f[0]; 221297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_LENS_FOCAL_LENGTH, 221397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(focalLength), &focalLength); 221497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 221597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole float focalDistance = 221697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_LENS_FOCUS_DISTANCE).data.f[0]; 221797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_LENS_FOCUS_DISTANCE, 221897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(focalDistance), &focalDistance); 221997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 222097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t optStabMode = 222197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_LENS_OPTICAL_STABILIZATION_MODE).data.u8[0]; 222297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_LENS_OPT_STAB_MODE, 222397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(optStabMode), &optStabMode); 222497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 222597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t noiseRedMode = 222697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_NOISE_REDUCTION_MODE).data.u8[0]; 222797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_NOISE_REDUCTION_MODE, 222897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(noiseRedMode), &noiseRedMode); 222997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 223097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t noiseRedStrength = 223197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_NOISE_REDUCTION_STRENGTH).data.u8[0]; 223297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, 223397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole CAM_INTF_META_NOISE_REDUCTION_STRENGTH, 223497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(noiseRedStrength), &noiseRedStrength); 223597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 223697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole cam_crop_region_t scalerCropRegion; 223797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole scalerCropRegion.left = 223897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_SCALER_CROP_REGION).data.i32[0]; 223997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole scalerCropRegion.top = 224097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_SCALER_CROP_REGION).data.i32[1]; 224197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole scalerCropRegion.width = 224297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_SCALER_CROP_REGION).data.i32[2]; 224397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_SCALER_CROP_REGION, 224497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(scalerCropRegion), &scalerCropRegion); 224597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 224697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int64_t sensorExpTime = 224797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_SENSOR_EXPOSURE_TIME).data.i64[0]; 224897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_SENSOR_EXPOSURE_TIME, 224997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(sensorExpTime), &sensorExpTime); 225097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 225197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int64_t sensorFrameDuration = 225297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_SENSOR_FRAME_DURATION).data.i64[0]; 225397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, 225497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole CAM_INTF_META_SENSOR_FRAME_DURATION, 225597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(sensorFrameDuration), &sensorFrameDuration); 225697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 225797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t sensorSensitivity = 225897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_SENSOR_SENSITIVITY).data.i32[0]; 225997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_SENSOR_SENSITIVITY, 226097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(sensorSensitivity), &sensorSensitivity); 226197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 226297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t shadingMode = frame_settings.find(ANDROID_SHADING_MODE).data.u8[0]; 226397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_SHADING_MODE, 226497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(shadingMode), &shadingMode); 226597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 226697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t shadingStrength = 226797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_SHADING_STRENGTH).data.u8[0]; 226897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_SHADING_STRENGTH, 226997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(shadingStrength), &shadingStrength); 227097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 227197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t facedetectMode = 227297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_STATISTICS_FACE_DETECT_MODE).data.u8[0]; 227397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, 227497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole CAM_INTF_META_STATS_FACEDETECT_MODE, 227597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(facedetectMode), &facedetectMode); 227697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 227797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t histogramMode = 227897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_STATISTICS_HISTOGRAM_MODE).data.u8[0]; 227997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_STATS_HISTOGRAM_MODE, 228097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(histogramMode), &histogramMode); 228197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 228297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t sharpnessMapMode = 228397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_STATISTICS_SHARPNESS_MAP_MODE).data.u8[0]; 228497e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, 228597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole CAM_INTF_META_STATS_SHARPNESS_MAP_MODE, 228697e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(sharpnessMapMode), &sharpnessMapMode); 228797e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 228897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t tonemapMode = frame_settings.find(ANDROID_TONEMAP_MODE).data.u8[0]; 228997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_TONEMAP_MODE, 229097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(tonemapMode), &tonemapMode); 229197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole 229297e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole int32_t captureIntent = 229397e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole frame_settings.find(ANDROID_CONTROL_CAPTURE_INTENT).data.i32[0]; 2294662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_CAPTURE_INTENT, 229597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole sizeof(captureIntent), &captureIntent); 2296662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 2297662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole return rc; 2298662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole} 2299662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 2300662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole/*=========================================================================== 2301662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * FUNCTION : translateMetadataToParameters 2302662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 2303662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * DESCRIPTION: read from the camera_metadata_t and change to parm_type_t 2304662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 2305662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 2306662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * PARAMETERS : 2307662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * @settings : frame settings information from framework 2308662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 2309662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * 2310662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * RETURN : success: NO_ERROR 2311662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole * failure: 2312662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole *==========================================================================*/ 2313662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godboleint QCamera3HardwareInterface::getJpegSettings 2314662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole (const camera_metadata_t *settings) 2315662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole{ 2316662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole if (mJpegSettings) { 2317662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole free(mJpegSettings); 2318662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mJpegSettings = NULL; 2319662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 2320662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mJpegSettings = (jpeg_settings_t*) malloc(sizeof(jpeg_settings_t)); 232197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole CameraMetadata jpeg_settings; 2322662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole jpeg_settings = settings; 2323662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole 2324662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mJpegSettings->jpeg_orientation = 2325662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole jpeg_settings.find(ANDROID_JPEG_ORIENTATION).data.i32[0]; 2326662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mJpegSettings->jpeg_quality = 2327662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole jpeg_settings.find(ANDROID_JPEG_QUALITY).data.u8[0]; 2328662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mJpegSettings->thumbnail_size.height = 2329662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole jpeg_settings.find(ANDROID_JPEG_THUMBNAIL_SIZE).data.i32[0]; 2330662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mJpegSettings->thumbnail_size.height = 2331662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole jpeg_settings.find(ANDROID_JPEG_THUMBNAIL_SIZE).data.i32[1]; 2332662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole for (int i = 0; i < 3; i++) { 2333662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mJpegSettings->gps_coordinates[i] = 2334662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole jpeg_settings.find(ANDROID_JPEG_THUMBNAIL_SIZE).data.d[i]; 2335662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole } 2336662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mJpegSettings->gps_timestamp = 2337662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole jpeg_settings.find(ANDROID_JPEG_GPS_TIMESTAMP).data.i64[0]; 2338662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mJpegSettings->gps_processing_method = 2339662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole jpeg_settings.find(ANDROID_JPEG_GPS_PROCESSING_METHOD).data.u8[0]; 2340662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mJpegSettings->sensor_sensitivity = 2341662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole jpeg_settings.find(ANDROID_SENSOR_SENSITIVITY).data.i32[0]; 2342662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole mJpegSettings->lens_focal_length = 2343662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole jpeg_settings.find(ANDROID_LENS_FOCAL_LENGTH).data.f[0]; 234480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang return 0; 234580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang} 234680e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang 234780e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang/*=========================================================================== 2348e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * FUNCTION : captureResultCb 2349625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2350625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: Callback handler for all channels (streams, as well as metadata) 2351625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2352625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : 2353625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * @frame : frame information from mm-camera-interface 2354625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * @buffer : actual gralloc buffer to be returned to frameworks. NULL if metadata. 2355625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * @userdata: userdata 2356625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2357625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : NONE 2358625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 2359e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wangvoid QCamera3HardwareInterface::captureResultCb(metadata_buffer_t *metadata, 2360e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang camera3_stream_buffer_t *buffer, 2361e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang uint32_t frame_number, void *userdata) 2362625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 2363625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang QCamera3HardwareInterface *hw = (QCamera3HardwareInterface *)userdata; 2364625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (hw == NULL) { 2365625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: Invalid hw %p", __func__, hw); 2366625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return; 2367625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 2368625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2369e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang hw->captureResultCb(metadata, buffer, frame_number); 2370625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return; 2371625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 2372625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2373625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 2374625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : initialize 2375625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2376625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: Pass framework callback pointers to HAL 2377625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2378625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : 2379625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2380625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2381625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : Success : 0 2382625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * Failure: -ENODEV 2383625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 2384625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2385625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangint QCamera3HardwareInterface::initialize(const struct camera3_device *device, 2386625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang const camera3_callback_ops_t *callback_ops) 2387625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 2388625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang QCamera3HardwareInterface *hw = 2389625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang reinterpret_cast<QCamera3HardwareInterface *>(device->priv); 2390625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (!hw) { 2391625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: NULL camera device", __func__); 2392625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return -ENODEV; 2393625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 2394625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2395625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return hw->initialize(callback_ops); 2396625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 2397625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2398625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 2399625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : configure_streams 2400625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2401625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: 2402625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2403625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : 2404625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2405625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2406625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : Success: 0 2407625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * Failure: -EINVAL (if stream configuration is invalid) 2408625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * -ENODEV (fatal error) 2409625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 2410625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2411625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangint QCamera3HardwareInterface::configure_streams( 2412625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang const struct camera3_device *device, 2413625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang camera3_stream_configuration_t *stream_list) 2414625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 2415625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang QCamera3HardwareInterface *hw = 2416625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang reinterpret_cast<QCamera3HardwareInterface *>(device->priv); 2417625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (!hw) { 2418625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: NULL camera device", __func__); 2419625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return -ENODEV; 2420625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 2421625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return hw->configureStreams(stream_list); 2422625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 2423625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2424625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 2425625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : register_stream_buffers 2426625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2427625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: Register stream buffers with the device 2428625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2429625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : 2430625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2431625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : 2432625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 2433625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangint QCamera3HardwareInterface::register_stream_buffers( 2434625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang const struct camera3_device *device, 2435625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang const camera3_stream_buffer_set_t *buffer_set) 2436625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 2437625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang QCamera3HardwareInterface *hw = 2438625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang reinterpret_cast<QCamera3HardwareInterface *>(device->priv); 2439625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (!hw) { 2440625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: NULL camera device", __func__); 2441625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return -ENODEV; 2442625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 2443625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return hw->registerStreamBuffers(buffer_set); 2444625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 2445625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2446625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 2447625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : construct_default_request_settings 2448625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2449625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: Configure a settings buffer to meet the required use case 2450625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2451625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : 2452625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2453625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2454625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : Success: Return valid metadata 2455625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * Failure: Return NULL 2456625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 24579de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wangconst camera_metadata_t* QCamera3HardwareInterface:: 24589de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang construct_default_request_settings(const struct camera3_device *device, 24599de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang int type) 2460625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 2461625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2462625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang camera_metadata_t* fwk_metadata = NULL; 2463625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang QCamera3HardwareInterface *hw = 2464625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang reinterpret_cast<QCamera3HardwareInterface *>(device->priv); 2465625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang if (!hw) { 2466625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang ALOGE("%s: NULL camera device", __func__); 2467625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return NULL; 2468625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang } 2469625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 247097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole fwk_metadata = hw->translateCapabilityToMetadata(type); 2471625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2472625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang return fwk_metadata; 2473625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 2474625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2475625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 2476625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : process_capture_request 2477625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2478625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: 2479625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2480625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : 2481625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2482625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2483625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : 2484625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 24859de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wangint QCamera3HardwareInterface::process_capture_request( 24869de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang const struct camera3_device *device, 24879de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang camera3_capture_request_t *request) 2488625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 248980e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang QCamera3HardwareInterface *hw = 249080e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang reinterpret_cast<QCamera3HardwareInterface *>(device->priv); 249180e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang if (!hw) { 249280e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang ALOGE("%s: NULL camera device", __func__); 24939de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang return -EINVAL; 249480e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang } 24959de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang 24969de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang return hw->processCaptureRequest(request); 2497625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 2498625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2499625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 2500625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : get_metadata_vendor_tag_ops 2501625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2502625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: 2503625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2504625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : 2505625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2506625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2507625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : 2508625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 2509625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2510e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wangvoid QCamera3HardwareInterface::get_metadata_vendor_tag_ops( 2511e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang const struct camera3_device *device, 2512e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang vendor_tag_query_ops_t* ops) 2513625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 2514e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang QCamera3HardwareInterface *hw = 2515e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang reinterpret_cast<QCamera3HardwareInterface *>(device->priv); 2516e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang if (!hw) { 2517e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang ALOGE("%s: NULL camera device", __func__); 2518e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return; 2519e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang } 2520e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 2521e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang hw->getMetadataVendorTagOps(ops); 2522e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return; 2523625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 2524625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2525625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/*=========================================================================== 2526625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * FUNCTION : dump 2527625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2528625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * DESCRIPTION: 2529625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2530625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * PARAMETERS : 2531625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2532625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * 2533625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang * RETURN : 2534625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang *==========================================================================*/ 2535625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2536e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wangvoid QCamera3HardwareInterface::dump( 2537e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang const struct camera3_device *device, int fd) 2538625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang{ 2539e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang QCamera3HardwareInterface *hw = 2540e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang reinterpret_cast<QCamera3HardwareInterface *>(device->priv); 2541e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang if (!hw) { 2542e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang ALOGE("%s: NULL camera device", __func__); 2543e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return; 2544e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang } 2545e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 2546e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang hw->dump(fd); 2547e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return; 2548625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang} 2549625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang 2550e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang/*=========================================================================== 2551e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * FUNCTION : close_camera_device 2552e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 2553e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * DESCRIPTION: 2554e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 2555e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * PARAMETERS : 2556e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 2557e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * 2558e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang * RETURN : 2559e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang *==========================================================================*/ 2560e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wangint QCamera3HardwareInterface::close_camera_device(struct hw_device_t* device) 2561e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang{ 2562e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang int ret = NO_ERROR; 2563e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang QCamera3HardwareInterface *hw = 2564e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang reinterpret_cast<QCamera3HardwareInterface *>( 2565e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang reinterpret_cast<camera3_device_t *>(device)->priv); 2566e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang if (!hw) { 2567e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang ALOGE("NULL camera device"); 2568e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return BAD_VALUE; 2569e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang } 2570e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang delete hw; 2571e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang return ret; 2572e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang} 2573e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang 2574625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang}; //end namespace qcamera 2575