ExynosCamera2.cpp revision e4657e32d8ce4a88f2c15de1de60e27f3d1778ab
1daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang/* 2daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang** 3daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang** Copyright 2008, The Android Open Source Project 4daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang** Copyright 2012, Samsung Electronics Co. LTD 5daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang** 6daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang** Licensed under the Apache License, Version 2.0 (the "License"); 7daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang** you may not use this file except in compliance with the License. 8daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang** You may obtain a copy of the License at 9daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang** 10daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang** http://www.apache.org/licenses/LICENSE-2.0 11daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang** 12daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang** Unless required by applicable law or agreed to in writing, software 13daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang** distributed under the License is distributed on an "AS IS" BASIS, 14daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang** See the License for the specific language governing permissions and 16daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang** limitations under the License. 17daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang*/ 18daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 19daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang/*! 20daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang * \file ExynosCamera2.cpp 21daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang * \brief source file for static information of camera2 22daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang * \author Sungjoong Kang(sj3.kang@samsung.com) 23daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang * \date 2012/08/06 24daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang * 25daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang * <b>Revision History: </b> 26daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang * - 2012/08/06 : Sungjoong Kang(sj3.kang@samsung.com) \n 27daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang * Initial Release 28daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang * 29daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang */ 30c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 31c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin//#define LOG_NDEBUG 0 32daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang#define LOG_TAG "ExynosCamera2" 33c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include <utils/Log.h> 34c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 35daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang#include "ExynosCamera2.h" 36daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 37daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang#define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0])) 38c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 39c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinnamespace android { 40c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 41c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinclass Sensor { 42c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinpublic: 43c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** 44c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * Static sensor characteristics 45c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin */ 469dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang static const unsigned int kResolution[2][2]; 47c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 48c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const nsecs_t kExposureTimeRange[2]; 49c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const nsecs_t kFrameDurationRange[2]; 50c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const nsecs_t kMinVerticalBlank; 51c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 52c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t kColorFilterArrangement; 53c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 54c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // Output image data characteristics 55c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint32_t kMaxRawValue; 56c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint32_t kBlackLevel; 57c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // Sensor sensitivity, approximate 58c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 59c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float kSaturationVoltage; 60c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint32_t kSaturationElectrons; 61c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float kVoltsPerLuxSecond; 62c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float kElectronsPerLuxSecond; 63c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 64c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float kBaseGainFactor; 65c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 66c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float kReadNoiseStddevBeforeGain; // In electrons 67c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float kReadNoiseStddevAfterGain; // In raw digital units 68c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float kReadNoiseVarBeforeGain; 69c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float kReadNoiseVarAfterGain; 70c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 71c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // While each row has to read out, reset, and then expose, the (reset + 72c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // expose) sequence can be overlapped by other row readouts, so the final 73c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // minimum frame duration is purely a function of row readout time, at least 74c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // if there's a reasonable number of rows. 75c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const nsecs_t kRowReadoutTime; 76c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 77c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint32_t kAvailableSensitivities[5]; 78c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint32_t kDefaultSensitivity; 79c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 80c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 81c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 829dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 83c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 84daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst uint32_t Sensor::kAvailableSensitivities[5] = 85daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang {100, 200, 400, 800, 1600}; 86c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinconst nsecs_t Sensor::kExposureTimeRange[2] = 87c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin {1000L, 30000000000L} ; // 1 us - 30 sec 88c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinconst nsecs_t Sensor::kFrameDurationRange[2] = 89c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin {33331760L, 30000000000L}; // ~1/30 s - 30 sec 90c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 91c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinconst uint8_t Sensor::kColorFilterArrangement = ANDROID_SENSOR_RGGB; 92c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 9313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kangconst uint32_t kAvailableFormats[5] = { 94c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin HAL_PIXEL_FORMAT_RAW_SENSOR, 9513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang HAL_PIXEL_FORMAT_BLOB, 9613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang HAL_PIXEL_FORMAT_RGBA_8888, 97c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin HAL_PIXEL_FORMAT_YV12, 98c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin HAL_PIXEL_FORMAT_YCrCb_420_SP 99c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 100c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 101daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang// Output image data characteristics 102daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst uint32_t Sensor::kMaxRawValue = 4000; 103daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst uint32_t Sensor::kBlackLevel = 1000; 10413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 105daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst uint64_t kAvailableRawMinDurations[1] = { 106daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang Sensor::kFrameDurationRange[0] 107c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 108c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 109daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst uint64_t kAvailableProcessedMinDurations[1] = { 110c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin Sensor::kFrameDurationRange[0] 111c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 112daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst uint64_t kAvailableJpegMinDurations[1] = { 113daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang Sensor::kFrameDurationRange[0] 1149dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang}; 115c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 116daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst int32_t scalerResolutionS5K4E5[] = 117daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 118daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 1920, 1080, 119ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang 1440, 1080, 120e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang 1280, 1024, 121daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 1280, 720, 12215fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 640, 480, 12315fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 320, 240, 12415fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 176, 144, 125c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 126c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 127daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst int32_t jpegResolutionS5K4E5[] = 128daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 129daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 2560, 1920, 130e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang 2560, 1440, 13115fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 2048, 1536, 13215fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1600, 1200, 13315fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1280, 1024, 13415fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1280, 960, 13515fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1152, 864, 13615fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 640, 480, 13715fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 320, 240, 138c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 139c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 140daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong KangExynosCamera2InfoS5K4E5::ExynosCamera2InfoS5K4E5() 141daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 142daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorW = 2560; 143daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorH = 1920; 144daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorRawW = (2560 + 16); 145daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorRawH = (1920 + 10); 146daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang numScalerResolution = ARRAY_SIZE(scalerResolutionS5K4E5)/2; 147daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang scalerResolutions = scalerResolutionS5K4E5; 148daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang numJpegResolution = ARRAY_SIZE(jpegResolutionS5K4E5)/2; 149daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang jpegResolutions = jpegResolutionS5K4E5; 1500f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang minFocusDistance = 0.1f; 1510f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang focalLength = 3.43f; 1520f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang aperture = 2.7f; 153daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang} 154c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 15515fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong KangExynosCamera2InfoS5K4E5::~ExynosCamera2InfoS5K4E5() 15615fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang{ 15715fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang ALOGV("%s", __FUNCTION__); 15815fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang} 159daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst int32_t scalerResolutionS5K6A3[] = 160daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 161e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang 1392, 1392, 162e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang 1280, 1024, 163ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang 1280, 960, 164daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 1280, 720, 16515fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 640, 480, 16615fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 176, 144, 167c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 168c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 169daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst int32_t jpegResolutionS5K6A3[] = 170daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 17115fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1392, 1392, 17215fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1392, 1040, 17315fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1392, 784, 17415fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1280, 1024, 175ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang 1280, 960, 176e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang 1280, 720, 17715fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1152, 864, 17815fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 640, 480, 17915fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 320, 240, 180daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang}; 181c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 182daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong KangExynosCamera2InfoS5K6A3::ExynosCamera2InfoS5K6A3() 1839dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 184daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorW = 1392; 185daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorH = 1392; 186daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorRawW = (1392 + 16); 187daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorRawH = (1392 + 10); 188daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang numScalerResolution = ARRAY_SIZE(scalerResolutionS5K6A3)/2; 189daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang scalerResolutions = scalerResolutionS5K6A3; 190daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang numJpegResolution = ARRAY_SIZE(jpegResolutionS5K6A3)/2; 191daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang jpegResolutions = jpegResolutionS5K6A3; 1920f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang minFocusDistance = 0.0f; 1930f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang focalLength = 2.73f; 1940f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang aperture = 2.8f; 1959dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} 1969dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 19715fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong KangExynosCamera2InfoS5K6A3::~ExynosCamera2InfoS5K6A3() 19815fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang{ 19915fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang ALOGV("%s", __FUNCTION__); 20015fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang} 201daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong KangExynosCamera2::ExynosCamera2(int cameraId): 202daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_cameraId(cameraId) 2039dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 204daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang if (cameraId == 0) 205daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo = new ExynosCamera2InfoS5K4E5; 2069dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang else 207daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo = new ExynosCamera2InfoS5K6A3; 2089dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} 2099dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 210daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong KangExynosCamera2::~ExynosCamera2() 2119dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 21215fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang ALOGV("%s", __FUNCTION__); 213daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang delete m_curCameraInfo; 21415fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang m_curCameraInfo = NULL; 215daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang} 2169dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 217daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangint32_t ExynosCamera2::getSensorW() 2189dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 219daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return m_curCameraInfo->sensorW; 2209dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} 2219dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 222daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangint32_t ExynosCamera2::getSensorH() 223daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 224daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return m_curCameraInfo->sensorH; 225daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang} 2269dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 227daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangint32_t ExynosCamera2::getSensorRawW() 2289dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 229daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return m_curCameraInfo->sensorRawW; 230daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang} 2319dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 232daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangint32_t ExynosCamera2::getSensorRawH() 2339dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 234daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return m_curCameraInfo->sensorRawH; 2359dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} 2369dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 237daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangbool ExynosCamera2::isSupportedResolution(int width, int height) 2389dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 239daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int i; 240daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang for (i = 0 ; i < m_curCameraInfo->numScalerResolution ; i++) { 241daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang if (m_curCameraInfo->scalerResolutions[2*i] == width 242daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang && m_curCameraInfo->scalerResolutions[2*i+1] == height) { 243daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return true; 244daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang } 2459dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang } 246daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return false; 247daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang} 2489dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 249daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangbool ExynosCamera2::isSupportedJpegResolution(int width, int height) 2509dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 251daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int i; 252daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang for (i = 0 ; i < m_curCameraInfo->numJpegResolution ; i++) { 253daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang if (m_curCameraInfo->jpegResolutions[2*i] == width 254daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang && m_curCameraInfo->jpegResolutions[2*i+1] == height) { 255daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return true; 256daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang } 2579dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang } 258daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return false; 2599dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} 2609dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 261c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinstatus_t addOrSize(camera_metadata_t *request, 262c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin bool sizeRequest, 263c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t *entryCount, 264c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t *dataCount, 265c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint32_t tag, 266c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin const void *entryData, 267c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t entryDataCount) { 268c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin status_t res; 269c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (!sizeRequest) { 270c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return add_camera_metadata_entry(request, tag, entryData, 271c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryDataCount); 272c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } else { 273c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int type = get_camera_metadata_tag_type(tag); 274c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (type < 0 ) return BAD_VALUE; 275c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin (*entryCount)++; 276c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin (*dataCount) += calculate_camera_metadata_entry_data_size(type, 277c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryDataCount); 278c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return OK; 279c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 280c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} 281daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 282daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangstatus_t ExynosCamera2::constructStaticInfo(camera_metadata_t **info, 283daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int cameraId, bool sizeRequest) { 284c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 285c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t entryCount = 0; 286c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t dataCount = 0; 287c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin status_t ret; 288c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 289c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define ADD_OR_SIZE( tag, data, count ) \ 290c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if ( ( ret = addOrSize(*info, sizeRequest, &entryCount, &dataCount, \ 291c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tag, data, count) ) != OK ) return ret 292c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 293c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.lens 294c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 295c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_MINIMUM_FOCUS_DISTANCE, 2960f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang &(m_curCameraInfo->minFocusDistance), 1); 297c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_HYPERFOCAL_DISTANCE, 2980f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang &(m_curCameraInfo->minFocusDistance), 1); 299c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 300c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_AVAILABLE_FOCAL_LENGTHS, 3010f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang &m_curCameraInfo->focalLength, 1); 302c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_AVAILABLE_APERTURES, 3030f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang &m_curCameraInfo->aperture, 1); 3040f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang 305c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float filterDensity = 0; 306c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_AVAILABLE_FILTER_DENSITY, 307c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &filterDensity, 1); 308c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableOpticalStabilization = 309c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_LENS_OPTICAL_STABILIZATION_OFF; 310c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_AVAILABLE_OPTICAL_STABILIZATION, 311c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &availableOpticalStabilization, 1); 312c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 313c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t lensShadingMapSize[] = {1, 1}; 314c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_SHADING_MAP_SIZE, lensShadingMapSize, 315c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(lensShadingMapSize)/sizeof(int32_t)); 316c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 317c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float lensShadingMap[3 * 1 * 1 ] = 318c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin { 1.f, 1.f, 1.f }; 319c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_SHADING_MAP, lensShadingMap, 320c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(lensShadingMap)/sizeof(float)); 321c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 3229dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int32_t lensFacing = cameraId ? 3239dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang ANDROID_LENS_FACING_FRONT : ANDROID_LENS_FACING_BACK; 324c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_FACING, &lensFacing, 1); 325c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 326c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.sensor 327c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_EXPOSURE_TIME_RANGE, 328c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin Sensor::kExposureTimeRange, 2); 329c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 330c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_MAX_FRAME_DURATION, 331c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &Sensor::kFrameDurationRange[1], 1); 332c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 333c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_AVAILABLE_SENSITIVITIES, 334c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin Sensor::kAvailableSensitivities, 335c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(Sensor::kAvailableSensitivities) 336c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /sizeof(uint32_t)); 337c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 338c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_COLOR_FILTER_ARRANGEMENT, 339c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &Sensor::kColorFilterArrangement, 1); 340c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 341c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float sensorPhysicalSize[2] = {3.20f, 2.40f}; // mm 342c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_PHYSICAL_SIZE, 343c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sensorPhysicalSize, 2); 344c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 345daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int32_t pixelArraySize[2] = { 346daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo->sensorW, m_curCameraInfo->sensorH 347daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang }; 348daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ADD_OR_SIZE(ANDROID_SENSOR_PIXEL_ARRAY_SIZE, pixelArraySize, 2); 349daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ADD_OR_SIZE(ANDROID_SENSOR_ACTIVE_ARRAY_SIZE, pixelArraySize,2); 350c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 351c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_WHITE_LEVEL, 352c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &Sensor::kMaxRawValue, 1); 353c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 354c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t blackLevelPattern[4] = { 355c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin Sensor::kBlackLevel, Sensor::kBlackLevel, 356c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin Sensor::kBlackLevel, Sensor::kBlackLevel 357c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 358c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_BLACK_LEVEL_PATTERN, 359c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin blackLevelPattern, sizeof(blackLevelPattern)/sizeof(int32_t)); 360c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 361c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin //TODO: sensor color calibration fields 362c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 363c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.flash 364fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang static const uint8_t flashAvailable = 1; 365c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_FLASH_AVAILABLE, &flashAvailable, 1); 366c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 367c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t flashChargeDuration = 0; 368c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_FLASH_CHARGE_DURATION, &flashChargeDuration, 1); 369c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 370c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.tonemap 371c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 372c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t tonemapCurvePoints = 128; 373c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_TONEMAP_MAX_CURVE_POINTS, &tonemapCurvePoints, 1); 374c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 375c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.scaler 376c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 377c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_FORMATS, 378c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin kAvailableFormats, 379c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(kAvailableFormats)/sizeof(uint32_t)); 380c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 381daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int32_t availableRawSizes[2] = { 382daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo->sensorRawW, m_curCameraInfo->sensorRawH 383daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang }; 384c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_RAW_SIZES, 385daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang availableRawSizes, 2); 386c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 387c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_RAW_MIN_DURATIONS, 388c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin kAvailableRawMinDurations, 389c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(kAvailableRawMinDurations)/sizeof(uint64_t)); 390c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 391c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 392daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES, 393daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo->scalerResolutions, 394daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang (m_curCameraInfo->numScalerResolution)*2); 395daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_JPEG_SIZES, 396daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo->jpegResolutions, 397daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang (m_curCameraInfo->numJpegResolution)*2); 398daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 399c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS, 400c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin kAvailableProcessedMinDurations, 401c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(kAvailableProcessedMinDurations)/sizeof(uint64_t)); 402c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 403c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_JPEG_MIN_DURATIONS, 404c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin kAvailableJpegMinDurations, 405c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(kAvailableJpegMinDurations)/sizeof(uint64_t)); 406c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 407e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang static const float maxZoom = 4; 408daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_MAX_ZOOM, &maxZoom, 1); 409c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 410c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.jpeg 411c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 412c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t jpegThumbnailSizes[] = { 413c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 160, 120, 414c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 320, 240, 415c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 640, 480 416c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 417daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 418c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, 419c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin jpegThumbnailSizes, sizeof(jpegThumbnailSizes)/sizeof(int32_t)); 420c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 42113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang static const int32_t jpegMaxSize = 5*1024*1024; 42213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ADD_OR_SIZE(ANDROID_JPEG_MAX_SIZE, &jpegMaxSize, 1); 42313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 424c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.stats 425c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 426c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableFaceDetectModes[] = { 427fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang ANDROID_STATS_FACE_DETECTION_OFF, 428fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang ANDROID_STATS_FACE_DETECTION_FULL 429c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 430c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_AVAILABLE_FACE_DETECT_MODES, 431c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableFaceDetectModes, 432c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(availableFaceDetectModes)); 433c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 434fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang m_curCameraInfo->maxFaceCount = 16; 435c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_MAX_FACE_COUNT, 436fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang &(m_curCameraInfo->maxFaceCount), 1); 437c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 438c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t histogramSize = 64; 439c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_HISTOGRAM_BUCKET_COUNT, 440c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &histogramSize, 1); 441c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 442c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t maxHistogramCount = 1000; 443c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_MAX_HISTOGRAM_COUNT, 444c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &maxHistogramCount, 1); 445c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 446c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t sharpnessMapSize[2] = {64, 64}; 447c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_SHARPNESS_MAP_SIZE, 448c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sharpnessMapSize, sizeof(sharpnessMapSize)/sizeof(int32_t)); 449c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 450c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t maxSharpnessMapValue = 1000; 451c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_MAX_SHARPNESS_MAP_VALUE, 452c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &maxSharpnessMapValue, 1); 453c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 454c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.control 455c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 456c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableSceneModes[] = { 4572bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang ANDROID_CONTROL_SCENE_MODE_ACTION, 458daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ANDROID_CONTROL_SCENE_MODE_NIGHT, 4592bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang ANDROID_CONTROL_SCENE_MODE_SUNSET, 4602bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang ANDROID_CONTROL_SCENE_MODE_PARTY 461c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 462c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AVAILABLE_SCENE_MODES, 463c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableSceneModes, sizeof(availableSceneModes)); 464c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 465c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableEffects[] = { 466c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_EFFECT_OFF 467c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 468c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AVAILABLE_EFFECTS, 469c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableEffects, sizeof(availableEffects)); 470c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 4718e2c2fdbd940265e8413d512c3a0549bbc53c8a2Sungjoong Kang int32_t max3aRegions = 1; 472c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_MAX_REGIONS, 473c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &max3aRegions, 1); 474c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 475c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableAeModes[] = { 476c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AE_OFF, 477fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang ANDROID_CONTROL_AE_ON, 478fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang ANDROID_CONTROL_AE_ON_AUTO_FLASH 479c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 480c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_AVAILABLE_MODES, 481c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableAeModes, sizeof(availableAeModes)); 482c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 483c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const camera_metadata_rational exposureCompensationStep = { 4842bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang 1, 1 485c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 486c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_EXP_COMPENSATION_STEP, 487c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &exposureCompensationStep, 1); 488c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 4892bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang int32_t exposureCompensationRange[] = {-3, 3}; 490c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_EXP_COMPENSATION_RANGE, 491c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin exposureCompensationRange, 492c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(exposureCompensationRange)/sizeof(int32_t)); 493c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 494c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t availableTargetFpsRanges[] = { 4959dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 5, 30, 30, 30 496c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 497c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 498c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableTargetFpsRanges, 499c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(availableTargetFpsRanges)/sizeof(int32_t)); 500c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 501c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableAntibandingModes[] = { 502c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AE_ANTIBANDING_OFF, 503c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AE_ANTIBANDING_AUTO 504c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 505c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES, 506c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableAntibandingModes, sizeof(availableAntibandingModes)); 507c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 508c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableAwbModes[] = { 509c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AWB_OFF, 510c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AWB_AUTO, 511c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AWB_INCANDESCENT, 512c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AWB_FLUORESCENT, 513c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AWB_DAYLIGHT, 5142bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT 515c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 516c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AWB_AVAILABLE_MODES, 517c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableAwbModes, sizeof(availableAwbModes)); 518c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 519c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableAfModes[] = { 5200f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ANDROID_CONTROL_AF_OFF, 5210f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ANDROID_CONTROL_AF_AUTO, 5220f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ANDROID_CONTROL_AF_MACRO, 5230f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ANDROID_CONTROL_AF_CONTINUOUS_PICTURE, 5240f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ANDROID_CONTROL_AF_CONTINUOUS_VIDEO 525c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 526c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AF_AVAILABLE_MODES, 527c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableAfModes, sizeof(availableAfModes)); 528c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 529c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableVstabModes[] = { 530c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_VIDEO_STABILIZATION_OFF 531c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 532c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES, 533c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableVstabModes, sizeof(availableVstabModes)); 534c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 535c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#undef ADD_OR_SIZE 536c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** Allocate metadata if sizing */ 537c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (sizeRequest) { 538c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ALOGV("Allocating %d entries, %d extra bytes for " 539c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin "static camera info", 540c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryCount, dataCount); 541c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin *info = allocate_camera_metadata(entryCount, dataCount); 542c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (*info == NULL) { 543c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ALOGE("Unable to allocate camera static info" 544c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin "(%d entries, %d bytes extra data)", 545c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryCount, dataCount); 546c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return NO_MEMORY; 547c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 548c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 549c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return OK; 550c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} 551c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 552daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangstatus_t ExynosCamera2::constructDefaultRequest( 553c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int request_template, 554c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin camera_metadata_t **request, 555c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin bool sizeRequest) { 556c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 557c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t entryCount = 0; 558c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t dataCount = 0; 559c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin status_t ret; 560c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 561c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define ADD_OR_SIZE( tag, data, count ) \ 562c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if ( ( ret = addOrSize(*request, sizeRequest, &entryCount, &dataCount, \ 563c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tag, data, count) ) != OK ) return ret 564c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 565c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t USEC = 1000LL; 566c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t MSEC = USEC * 1000LL; 567c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t SEC = MSEC * 1000LL; 568c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 569c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.request */ 570c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 571c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t metadataMode = ANDROID_REQUEST_METADATA_NONE; 572c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_REQUEST_METADATA_MODE, &metadataMode, 1); 573c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 574c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t id = 0; 575c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_REQUEST_ID, &id, 1); 576c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 577c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t frameCount = 0; 578c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_REQUEST_FRAME_COUNT, &frameCount, 1); 579c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 580c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // OUTPUT_STREAMS set by user 581c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryCount += 1; 582c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin dataCount += 5; // TODO: Should be maximum stream number 583c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 584c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.lens */ 585c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 586c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float focusDistance = 0; 587c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_FOCUS_DISTANCE, &focusDistance, 1); 588c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 5890f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ADD_OR_SIZE(ANDROID_LENS_APERTURE, &m_curCameraInfo->aperture, 1); 590c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 5910f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ADD_OR_SIZE(ANDROID_LENS_FOCAL_LENGTH, &m_curCameraInfo->focalLength, 1); 592c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 593c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float filterDensity = 0; 594c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_FILTER_DENSITY, &filterDensity, 1); 595c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 596c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t opticalStabilizationMode = 597c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_LENS_OPTICAL_STABILIZATION_OFF; 598c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_OPTICAL_STABILIZATION_MODE, 599c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &opticalStabilizationMode, 1); 600c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 601c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 602c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.sensor */ 603c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 604c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 605c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t frameDuration = 33333333L; // 1/30 s 606c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_FRAME_DURATION, &frameDuration, 1); 607c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 608c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 609c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.flash */ 610c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 611c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t flashMode = ANDROID_FLASH_OFF; 612c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_FLASH_MODE, &flashMode, 1); 613c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 614c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t flashPower = 10; 615c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_FLASH_FIRING_POWER, &flashPower, 1); 616c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 617c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t firingTime = 0; 618c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_FLASH_FIRING_TIME, &firingTime, 1); 619c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 620c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** Processing block modes */ 621c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t hotPixelMode = 0; 622c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t demosaicMode = 0; 623c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t noiseMode = 0; 624c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t shadingMode = 0; 625c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t geometricMode = 0; 626c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t colorMode = 0; 627c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t tonemapMode = 0; 628c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t edgeMode = 0; 629c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin switch (request_template) { 630c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_PREVIEW: 631c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin hotPixelMode = ANDROID_PROCESSING_FAST; 632c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin demosaicMode = ANDROID_PROCESSING_FAST; 633c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin noiseMode = ANDROID_PROCESSING_FAST; 634c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin shadingMode = ANDROID_PROCESSING_FAST; 635c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin geometricMode = ANDROID_PROCESSING_FAST; 636c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin colorMode = ANDROID_PROCESSING_FAST; 637c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tonemapMode = ANDROID_PROCESSING_FAST; 638c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin edgeMode = ANDROID_PROCESSING_FAST; 639c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 640c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_STILL_CAPTURE: 641c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin hotPixelMode = ANDROID_PROCESSING_HIGH_QUALITY; 642c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin demosaicMode = ANDROID_PROCESSING_HIGH_QUALITY; 643c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin noiseMode = ANDROID_PROCESSING_HIGH_QUALITY; 644c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin shadingMode = ANDROID_PROCESSING_HIGH_QUALITY; 645c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin geometricMode = ANDROID_PROCESSING_HIGH_QUALITY; 646c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin colorMode = ANDROID_PROCESSING_HIGH_QUALITY; 647c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tonemapMode = ANDROID_PROCESSING_HIGH_QUALITY; 648c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin edgeMode = ANDROID_PROCESSING_HIGH_QUALITY; 649c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 650c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_RECORD: 651c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin hotPixelMode = ANDROID_PROCESSING_FAST; 652c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin demosaicMode = ANDROID_PROCESSING_FAST; 653c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin noiseMode = ANDROID_PROCESSING_FAST; 654c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin shadingMode = ANDROID_PROCESSING_FAST; 655c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin geometricMode = ANDROID_PROCESSING_FAST; 656c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin colorMode = ANDROID_PROCESSING_FAST; 657c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tonemapMode = ANDROID_PROCESSING_FAST; 658c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin edgeMode = ANDROID_PROCESSING_FAST; 659c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 660c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_SNAPSHOT: 661c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin hotPixelMode = ANDROID_PROCESSING_HIGH_QUALITY; 662c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin demosaicMode = ANDROID_PROCESSING_HIGH_QUALITY; 663c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin noiseMode = ANDROID_PROCESSING_HIGH_QUALITY; 664c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin shadingMode = ANDROID_PROCESSING_HIGH_QUALITY; 665c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin geometricMode = ANDROID_PROCESSING_HIGH_QUALITY; 666c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin colorMode = ANDROID_PROCESSING_HIGH_QUALITY; 667c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tonemapMode = ANDROID_PROCESSING_HIGH_QUALITY; 668c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin edgeMode = ANDROID_PROCESSING_HIGH_QUALITY; 669c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 670c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_ZERO_SHUTTER_LAG: 671c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin hotPixelMode = ANDROID_PROCESSING_HIGH_QUALITY; 672c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin demosaicMode = ANDROID_PROCESSING_HIGH_QUALITY; 673c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin noiseMode = ANDROID_PROCESSING_HIGH_QUALITY; 674c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin shadingMode = ANDROID_PROCESSING_HIGH_QUALITY; 675c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin geometricMode = ANDROID_PROCESSING_HIGH_QUALITY; 676c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin colorMode = ANDROID_PROCESSING_HIGH_QUALITY; 677c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tonemapMode = ANDROID_PROCESSING_HIGH_QUALITY; 678c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin edgeMode = ANDROID_PROCESSING_HIGH_QUALITY; 679c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 680c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin default: 681c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin hotPixelMode = ANDROID_PROCESSING_FAST; 682c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin demosaicMode = ANDROID_PROCESSING_FAST; 683c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin noiseMode = ANDROID_PROCESSING_FAST; 684c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin shadingMode = ANDROID_PROCESSING_FAST; 685c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin geometricMode = ANDROID_PROCESSING_FAST; 686c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin colorMode = ANDROID_PROCESSING_FAST; 687c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tonemapMode = ANDROID_PROCESSING_FAST; 688c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin edgeMode = ANDROID_PROCESSING_FAST; 689c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 690c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 691c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_HOT_PIXEL_MODE, &hotPixelMode, 1); 692c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_DEMOSAIC_MODE, &demosaicMode, 1); 693c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_NOISE_MODE, &noiseMode, 1); 694c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SHADING_MODE, &shadingMode, 1); 695c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_GEOMETRIC_MODE, &geometricMode, 1); 696c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_COLOR_MODE, &colorMode, 1); 697c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_TONEMAP_MODE, &tonemapMode, 1); 698c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_EDGE_MODE, &edgeMode, 1); 699c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 700c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.noise */ 701c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t noiseStrength = 5; 702c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_NOISE_STRENGTH, &noiseStrength, 1); 703c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 704c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.color */ 705c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float colorTransform[9] = { 706c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 1.0f, 0.f, 0.f, 707c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 0.f, 1.f, 0.f, 708c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 0.f, 0.f, 1.f 709c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 710c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_COLOR_TRANSFORM, colorTransform, 9); 711c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 712c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.tonemap */ 713c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float tonemapCurve[4] = { 714c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 0.f, 0.f, 715c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 1.f, 1.f 716c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 717c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_TONEMAP_CURVE_RED, tonemapCurve, 32); // sungjoong 718c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_TONEMAP_CURVE_GREEN, tonemapCurve, 32); 719c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_TONEMAP_CURVE_BLUE, tonemapCurve, 32); 720c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 721c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.edge */ 722c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t edgeStrength = 5; 723c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_EDGE_STRENGTH, &edgeStrength, 1); 724c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 725c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.scaler */ 726daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int32_t cropRegion[3] = { 727daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 0, 0, m_curCameraInfo->sensorW 728c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 729c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_CROP_REGION, cropRegion, 3); 730c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 731c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.jpeg */ 732c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t jpegQuality = 80; 733c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_QUALITY, &jpegQuality, 1); 734c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 735c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t thumbnailSize[2] = { 736c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 640, 480 737c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 738c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_THUMBNAIL_SIZE, thumbnailSize, 2); 739c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 740c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t thumbnailQuality = 80; 741c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_THUMBNAIL_QUALITY, &thumbnailQuality, 1); 742c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 743daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang static const double gpsCoordinates[3] = { 744daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 0, 0, 0 745c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 746daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ADD_OR_SIZE(ANDROID_JPEG_GPS_COORDINATES, gpsCoordinates, 3); 747c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 748c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t gpsProcessingMethod[32] = "None"; 749c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_GPS_PROCESSING_METHOD, gpsProcessingMethod, 32); 750c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 751c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t gpsTimestamp = 0; 752c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_GPS_TIMESTAMP, &gpsTimestamp, 1); 753c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 754c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t jpegOrientation = 0; 755c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_ORIENTATION, &jpegOrientation, 1); 756c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 757c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.stats */ 758c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 759fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang static const uint8_t faceDetectMode = ANDROID_STATS_FACE_DETECTION_FULL; 760c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_FACE_DETECT_MODE, &faceDetectMode, 1); 761c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 762c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t histogramMode = ANDROID_STATS_OFF; 763c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_HISTOGRAM_MODE, &histogramMode, 1); 764c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 765c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t sharpnessMapMode = ANDROID_STATS_OFF; 766c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_SHARPNESS_MAP_MODE, &sharpnessMapMode, 1); 767c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 768c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 769c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.control */ 770c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 771c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t controlIntent = 0; 772c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin switch (request_template) { 773c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_PREVIEW: 774c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin controlIntent = ANDROID_CONTROL_INTENT_PREVIEW; 775c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 776c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_STILL_CAPTURE: 777c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin controlIntent = ANDROID_CONTROL_INTENT_STILL_CAPTURE; 778c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 779c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_RECORD: 780c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin controlIntent = ANDROID_CONTROL_INTENT_VIDEO_RECORD; 781c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 782c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_SNAPSHOT: 783c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin controlIntent = ANDROID_CONTROL_INTENT_VIDEO_SNAPSHOT; 784c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 785c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_ZERO_SHUTTER_LAG: 786c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin controlIntent = ANDROID_CONTROL_INTENT_ZERO_SHUTTER_LAG; 787c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 788c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin default: 789c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin controlIntent = ANDROID_CONTROL_INTENT_CUSTOM; 790c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 791c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 792c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_CAPTURE_INTENT, &controlIntent, 1); 793c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 794c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t controlMode = ANDROID_CONTROL_AUTO; 795c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_MODE, &controlMode, 1); 796c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 797c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t effectMode = ANDROID_CONTROL_EFFECT_OFF; 798c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_EFFECT_MODE, &effectMode, 1); 799c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 800daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang static const uint8_t sceneMode = ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED; 801c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_SCENE_MODE, &sceneMode, 1); 802c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 803daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang static const uint8_t aeMode = ANDROID_CONTROL_AE_ON; 804c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_MODE, &aeMode, 1); 805c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 806daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int32_t controlRegions[5] = { 807daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 0, 0, m_curCameraInfo->sensorW, m_curCameraInfo->sensorH, 1000 808c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 809c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_REGIONS, controlRegions, 5); 810c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 811c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t aeExpCompensation = 0; 812c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_EXP_COMPENSATION, &aeExpCompensation, 1); 813c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 814c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t aeTargetFpsRange[2] = { 815c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 10, 30 816c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 817c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_TARGET_FPS_RANGE, aeTargetFpsRange, 2); 818c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 819c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t aeAntibandingMode = 820c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AE_ANTIBANDING_AUTO; 821c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_ANTIBANDING_MODE, &aeAntibandingMode, 1); 822c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 823c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t awbMode = 824c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AWB_AUTO; 825c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AWB_MODE, &awbMode, 1); 826c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 827c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AWB_REGIONS, controlRegions, 5); 828c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 829c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t afMode = 0; 830c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin switch (request_template) { 831c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_PREVIEW: 8320f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang afMode = ANDROID_CONTROL_AF_CONTINUOUS_PICTURE; 833c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 834c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_STILL_CAPTURE: 8350f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang afMode = ANDROID_CONTROL_AF_CONTINUOUS_PICTURE; 836c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 837c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_RECORD: 838c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin afMode = ANDROID_CONTROL_AF_CONTINUOUS_VIDEO; 839c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 840c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_SNAPSHOT: 841c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin afMode = ANDROID_CONTROL_AF_CONTINUOUS_VIDEO; 842c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 843c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_ZERO_SHUTTER_LAG: 844c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin afMode = ANDROID_CONTROL_AF_CONTINUOUS_PICTURE; 845c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 846c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin default: 847c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin afMode = ANDROID_CONTROL_AF_AUTO; 848c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 849c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 850c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AF_MODE, &afMode, 1); 851c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 852c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AF_REGIONS, controlRegions, 5); 853c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 854c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t vstabMode = ANDROID_CONTROL_VIDEO_STABILIZATION_OFF; 855c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_VIDEO_STABILIZATION_MODE, &vstabMode, 1); 856c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 857c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (sizeRequest) { 858c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ALOGV("Allocating %d entries, %d extra bytes for " 859c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin "request template type %d", 860c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryCount, dataCount, request_template); 861c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin *request = allocate_camera_metadata(entryCount, dataCount); 862c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (*request == NULL) { 863c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ALOGE("Unable to allocate new request template type %d " 864c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin "(%d entries, %d bytes extra data)", request_template, 865c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryCount, dataCount); 866c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return NO_MEMORY; 867c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 868c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 869c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return OK; 870c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#undef ADD_OR_SIZE 871c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} 872c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 873c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} 874