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 774eb2f24ae7aab13ad9fbcd3117a42430e0c3c41fZhijun He static const int32_t kSensitivityRange[2]; 78c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint32_t kDefaultSensitivity; 79c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 80c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 81c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 829dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 83c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 844eb2f24ae7aab13ad9fbcd3117a42430e0c3c41fZhijun Heconst int32_t Sensor::kSensitivityRange[2] = {100, 1600}; 85c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinconst nsecs_t Sensor::kExposureTimeRange[2] = 86c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin {1000L, 30000000000L} ; // 1 us - 30 sec 87c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinconst nsecs_t Sensor::kFrameDurationRange[2] = 88c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin {33331760L, 30000000000L}; // ~1/30 s - 30 sec 89c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 90fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkinconst uint8_t Sensor::kColorFilterArrangement = ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB; 91c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 9213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kangconst uint32_t kAvailableFormats[5] = { 93c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin HAL_PIXEL_FORMAT_RAW_SENSOR, 9413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang HAL_PIXEL_FORMAT_BLOB, 9513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang HAL_PIXEL_FORMAT_RGBA_8888, 96c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin HAL_PIXEL_FORMAT_YV12, 97c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin HAL_PIXEL_FORMAT_YCrCb_420_SP 98c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 99c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 100daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang// Output image data characteristics 101daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst uint32_t Sensor::kMaxRawValue = 4000; 102daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst uint32_t Sensor::kBlackLevel = 1000; 10313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 104daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst uint64_t kAvailableRawMinDurations[1] = { 105daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang Sensor::kFrameDurationRange[0] 106c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 107c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 108daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst uint64_t kAvailableProcessedMinDurations[1] = { 109c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin Sensor::kFrameDurationRange[0] 110c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 111daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst uint64_t kAvailableJpegMinDurations[1] = { 112daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang Sensor::kFrameDurationRange[0] 1139dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang}; 114c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 115daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst int32_t scalerResolutionS5K4E5[] = 116daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 1170b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1920, 1080, // 16:9 1180b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1440, 1080, // 4:3 1190b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1440, 960, // 3:2 1200b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1280, 1024, // 5:4 1210b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1280, 720, // 16:9 1220b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 960, 720, // 4:3 1230b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 800, 480, // 5:3 1240b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 768, 576, // 4:3 1250b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 720, 576, // 5:4 1260b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 720, 480, // 3:2 1270b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 640, 480, // 4:3 1280b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 352, 288, // 11:9 1290b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 320, 240, // 4:3 1300b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 240, 160, // 3:2 1310b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 176, 144, // 6:5 1320b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 128, 96, // 4:3 133c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 134c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 135daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst int32_t jpegResolutionS5K4E5[] = 136daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 137daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 2560, 1920, 138e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang 2560, 1440, 139a44c3365bfc7ca02a8462264e3af05604eb1ebf5hyeonmyeong Choi 2160, 1440, 14015fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 2048, 1536, 14115fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1600, 1200, 14215fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1280, 1024, 14315fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1280, 960, 14415fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1152, 864, 14515fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 640, 480, 14615fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 320, 240, 147c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 148c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 14973c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kangconst uint8_t availableAfModesS5K4E5[] = 15073c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang{ 151fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AF_MODE_OFF, 152fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AF_MODE_AUTO, 153fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AF_MODE_MACRO, 154fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AF_MODE_CONTINUOUS_PICTURE, 155fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AF_MODE_CONTINUOUS_VIDEO 15673c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang}; 15773c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang 15873c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kangconst uint8_t sceneModeOverridesS5K4E5[] = 15973c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang{ 16073c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang // ANDROID_CONTROL_SCENE_MODE_ACTION 161fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_MODE_ON, 162fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AWB_MODE_AUTO, 163fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AF_MODE_CONTINUOUS_PICTURE, 16473c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang // ANDROID_CONTROL_SCENE_MODE_NIGHT 165fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_MODE_ON, 166fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AWB_MODE_AUTO, 167fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AF_MODE_CONTINUOUS_PICTURE, 16873c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang // ANDROID_CONTROL_SCENE_MODE_SUNSET 169fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_MODE_ON, 170fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AWB_MODE_DAYLIGHT, 171fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AF_MODE_CONTINUOUS_PICTURE, 17273c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang // ANDROID_CONTROL_SCENE_MODE_PARTY 173fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_MODE_ON_AUTO_FLASH, 174fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AWB_MODE_AUTO, 175fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AF_MODE_CONTINUOUS_PICTURE 17673c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang}; 17773c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang 17873c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kangconst uint8_t availableAeModesS5K4E5[] = 17973c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang{ 180fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_MODE_OFF, 181fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_MODE_ON, 182fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_MODE_ON_AUTO_FLASH 18373c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang}; 18473c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang 185daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong KangExynosCamera2InfoS5K4E5::ExynosCamera2InfoS5K4E5() 186daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 187daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorW = 2560; 188daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorH = 1920; 189daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorRawW = (2560 + 16); 190daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorRawH = (1920 + 10); 191daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang numScalerResolution = ARRAY_SIZE(scalerResolutionS5K4E5)/2; 192daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang scalerResolutions = scalerResolutionS5K4E5; 193daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang numJpegResolution = ARRAY_SIZE(jpegResolutionS5K4E5)/2; 194daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang jpegResolutions = jpegResolutionS5K4E5; 1950f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang minFocusDistance = 0.1f; 1960f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang focalLength = 3.43f; 1970f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang aperture = 2.7f; 198e00f6591f64959131a8ddfbbcec7ff36c7eee94eSungjoong Kang fnumber = 2.7f; 19973c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang availableAfModes = availableAfModesS5K4E5; 20073c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang numAvailableAfModes = ARRAY_SIZE(availableAfModesS5K4E5); 20173c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang sceneModeOverrides = sceneModeOverridesS5K4E5; 20273c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang numSceneModeOverrides = ARRAY_SIZE(sceneModeOverridesS5K4E5); 20373c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang availableAeModes = availableAeModesS5K4E5; 20473c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang numAvailableAeModes = ARRAY_SIZE(availableAeModesS5K4E5); 205daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang} 206c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 20715fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong KangExynosCamera2InfoS5K4E5::~ExynosCamera2InfoS5K4E5() 20815fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang{ 20915fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang ALOGV("%s", __FUNCTION__); 21015fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang} 211daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst int32_t scalerResolutionS5K6A3[] = 212daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 2130b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1344, 896, // 3:2 2140b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1280, 1024, // 5:4 2159c046e3a60c50acce5e390c1caf1864cacc3b584Sungjoong Kang 1024, 1024, // 1:1 2160b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1280, 960, // 4:3 2170b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1280, 720, // 16:9 2180b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 960, 720, // 4:3 2190b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 800, 480, // 5:3 2200b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 768, 576, // 4:3 2210b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 720, 576, // 5:4 2220b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 720, 480, // 3:2 2230b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 640, 480, // 4:3 2240b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 352, 288, // 11:9 2250b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 320, 240, // 4:3 2260b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 240, 160, // 3:2 2270b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 176, 144, // 6:5 2280b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 128, 96, // 4:3 229c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 230c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 231daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst int32_t jpegResolutionS5K6A3[] = 232daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 23315fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1392, 1392, 23415fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1392, 1040, 235a44c3365bfc7ca02a8462264e3af05604eb1ebf5hyeonmyeong Choi 1392, 928, 23615fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1392, 784, 23715fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1280, 1024, 238ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang 1280, 960, 239e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang 1280, 720, 24015fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1152, 864, 24115fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 640, 480, 24215fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 320, 240, 243daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang}; 244c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 24573c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kangconst uint8_t availableAfModesS5K6A3[] = 24673c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang{ 247fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AF_MODE_OFF 24873c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang}; 24973c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang 25073c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kangconst uint8_t sceneModeOverridesS5K6A3[] = 25173c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang{ 25273c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang // ANDROID_CONTROL_SCENE_MODE_ACTION 253fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_MODE_ON, 254fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AWB_MODE_AUTO, 255fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AF_MODE_OFF, 25673c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang // ANDROID_CONTROL_SCENE_MODE_NIGHT 257fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_MODE_ON, 258fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AWB_MODE_AUTO, 259fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AF_MODE_OFF, 26073c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang // ANDROID_CONTROL_SCENE_MODE_SUNSET 261fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_MODE_ON, 262fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AWB_MODE_DAYLIGHT, 263fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AF_MODE_OFF, 26473c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang // ANDROID_CONTROL_SCENE_MODE_PARTY 265fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_MODE_ON, 266fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AWB_MODE_AUTO, 267fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AF_MODE_OFF 26873c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang}; 26973c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang 27073c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kangconst uint8_t availableAeModesS5K6A3[] = 27173c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang{ 272fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_MODE_OFF, 273fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_MODE_ON 27473c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang}; 27573c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang 276daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong KangExynosCamera2InfoS5K6A3::ExynosCamera2InfoS5K6A3() 2779dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 278daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorW = 1392; 279daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorH = 1392; 280daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorRawW = (1392 + 16); 281daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorRawH = (1392 + 10); 282daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang numScalerResolution = ARRAY_SIZE(scalerResolutionS5K6A3)/2; 283daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang scalerResolutions = scalerResolutionS5K6A3; 284daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang numJpegResolution = ARRAY_SIZE(jpegResolutionS5K6A3)/2; 285daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang jpegResolutions = jpegResolutionS5K6A3; 2860f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang minFocusDistance = 0.0f; 2870f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang focalLength = 2.73f; 2880f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang aperture = 2.8f; 289e00f6591f64959131a8ddfbbcec7ff36c7eee94eSungjoong Kang fnumber = 2.8f; 29073c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang availableAfModes = availableAfModesS5K6A3; 29173c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang numAvailableAfModes = ARRAY_SIZE(availableAfModesS5K6A3); 29273c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang sceneModeOverrides = sceneModeOverridesS5K6A3; 29373c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang numSceneModeOverrides = ARRAY_SIZE(sceneModeOverridesS5K6A3); 29473c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang availableAeModes = availableAeModesS5K6A3; 29573c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang numAvailableAeModes = ARRAY_SIZE(availableAeModesS5K6A3); 2969dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} 2979dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 29815fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong KangExynosCamera2InfoS5K6A3::~ExynosCamera2InfoS5K6A3() 29915fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang{ 30015fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang ALOGV("%s", __FUNCTION__); 30115fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang} 302daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong KangExynosCamera2::ExynosCamera2(int cameraId): 303daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_cameraId(cameraId) 3049dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 305daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang if (cameraId == 0) 306daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo = new ExynosCamera2InfoS5K4E5; 3079dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang else 308daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo = new ExynosCamera2InfoS5K6A3; 3099dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} 3109dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 311daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong KangExynosCamera2::~ExynosCamera2() 3129dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 31315fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang ALOGV("%s", __FUNCTION__); 314daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang delete m_curCameraInfo; 31515fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang m_curCameraInfo = NULL; 316daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang} 3179dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 318daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangint32_t ExynosCamera2::getSensorW() 3199dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 320daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return m_curCameraInfo->sensorW; 3219dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} 3229dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 323daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangint32_t ExynosCamera2::getSensorH() 324daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 325daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return m_curCameraInfo->sensorH; 326daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang} 3279dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 328daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangint32_t ExynosCamera2::getSensorRawW() 3299dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 330daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return m_curCameraInfo->sensorRawW; 331daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang} 3329dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 333daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangint32_t ExynosCamera2::getSensorRawH() 3349dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 335daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return m_curCameraInfo->sensorRawH; 3369dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} 3379dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 338daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangbool ExynosCamera2::isSupportedResolution(int width, int height) 3399dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 340daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int i; 341daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang for (i = 0 ; i < m_curCameraInfo->numScalerResolution ; i++) { 342daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang if (m_curCameraInfo->scalerResolutions[2*i] == width 343daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang && m_curCameraInfo->scalerResolutions[2*i+1] == height) { 344daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return true; 345daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang } 3469dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang } 347daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return false; 348daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang} 3499dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 350daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangbool ExynosCamera2::isSupportedJpegResolution(int width, int height) 3519dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 352daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int i; 353daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang for (i = 0 ; i < m_curCameraInfo->numJpegResolution ; i++) { 354daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang if (m_curCameraInfo->jpegResolutions[2*i] == width 355daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang && m_curCameraInfo->jpegResolutions[2*i+1] == height) { 356daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return true; 357daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang } 3589dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang } 359daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return false; 3609dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} 3619dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 362c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinstatus_t addOrSize(camera_metadata_t *request, 363c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin bool sizeRequest, 364c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t *entryCount, 365c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t *dataCount, 366c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint32_t tag, 367c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin const void *entryData, 368c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t entryDataCount) { 369c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin status_t res; 370c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (!sizeRequest) { 371c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return add_camera_metadata_entry(request, tag, entryData, 372c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryDataCount); 373c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } else { 374c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int type = get_camera_metadata_tag_type(tag); 375c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (type < 0 ) return BAD_VALUE; 376c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin (*entryCount)++; 377c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin (*dataCount) += calculate_camera_metadata_entry_data_size(type, 378c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryDataCount); 379c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return OK; 380c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 381c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} 382daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 383daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangstatus_t ExynosCamera2::constructStaticInfo(camera_metadata_t **info, 384daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int cameraId, bool sizeRequest) { 385c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 386c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t entryCount = 0; 387c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t dataCount = 0; 388c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin status_t ret; 389c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 390c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define ADD_OR_SIZE( tag, data, count ) \ 391c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if ( ( ret = addOrSize(*info, sizeRequest, &entryCount, &dataCount, \ 392c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tag, data, count) ) != OK ) return ret 393c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 39405c0c1a4b70392cf7a8a3fd7d12f99e597a3e996Alex Ray // android.info 39505c0c1a4b70392cf7a8a3fd7d12f99e597a3e996Alex Ray 396a4863a2a81c6c3bbb3600e41c9847a10f4e6e96dZhijun He int32_t hardwareLevel = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED; 39705c0c1a4b70392cf7a8a3fd7d12f99e597a3e996Alex Ray ADD_OR_SIZE(ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL, 39805c0c1a4b70392cf7a8a3fd7d12f99e597a3e996Alex Ray &hardwareLevel, 1); 39905c0c1a4b70392cf7a8a3fd7d12f99e597a3e996Alex Ray 400c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.lens 401c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 402fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE, 4030f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang &(m_curCameraInfo->minFocusDistance), 1); 404fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE, 4050f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang &(m_curCameraInfo->minFocusDistance), 1); 406c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 407fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS, 4080f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang &m_curCameraInfo->focalLength, 1); 409fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_LENS_INFO_AVAILABLE_APERTURES, 4100f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang &m_curCameraInfo->aperture, 1); 4110f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang 412c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float filterDensity = 0; 413fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_LENS_INFO_AVAILABLE_FILTER_DENSITIES, 414c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &filterDensity, 1); 415c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableOpticalStabilization = 416fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF; 417fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION, 418c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &availableOpticalStabilization, 1); 419c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 420c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t lensShadingMapSize[] = {1, 1}; 421fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_LENS_INFO_SHADING_MAP_SIZE, lensShadingMapSize, 422c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(lensShadingMapSize)/sizeof(int32_t)); 423c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 4249dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int32_t lensFacing = cameraId ? 4259dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang ANDROID_LENS_FACING_FRONT : ANDROID_LENS_FACING_BACK; 426c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_FACING, &lensFacing, 1); 427c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 4281b2236edfaed20ebf8087a3017042989dfa7b1feAlex Ray // android.request 4291b2236edfaed20ebf8087a3017042989dfa7b1feAlex Ray static const int32_t maxNumOutputStreams[] = {1, 3, 1}; 4301b2236edfaed20ebf8087a3017042989dfa7b1feAlex Ray ADD_OR_SIZE(ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS, maxNumOutputStreams, 4311b2236edfaed20ebf8087a3017042989dfa7b1feAlex Ray sizeof(maxNumOutputStreams)/sizeof(int32_t)); 4321b2236edfaed20ebf8087a3017042989dfa7b1feAlex Ray 433c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.sensor 434fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE, 435c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin Sensor::kExposureTimeRange, 2); 436c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 437fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_SENSOR_INFO_MAX_FRAME_DURATION, 438c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &Sensor::kFrameDurationRange[1], 1); 439c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 4404eb2f24ae7aab13ad9fbcd3117a42430e0c3c41fZhijun He ADD_OR_SIZE(ANDROID_SENSOR_INFO_SENSITIVITY_RANGE, 4414eb2f24ae7aab13ad9fbcd3117a42430e0c3c41fZhijun He Sensor::kSensitivityRange, 4424eb2f24ae7aab13ad9fbcd3117a42430e0c3c41fZhijun He sizeof(Sensor::kSensitivityRange) 4434eb2f24ae7aab13ad9fbcd3117a42430e0c3c41fZhijun He /sizeof(int32_t)); 444c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 445fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT, 446c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &Sensor::kColorFilterArrangement, 1); 447c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 448a7fe04979e0131722eb38bf47a42328b2ce976bbEino-Ville Talvala // Empirically derived to get correct FOV measurements 449a7fe04979e0131722eb38bf47a42328b2ce976bbEino-Ville Talvala static const float sensorPhysicalSize[2] = {3.50f, 2.625f}; // mm 450fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_SENSOR_INFO_PHYSICAL_SIZE, 451c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sensorPhysicalSize, 2); 452c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 453daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int32_t pixelArraySize[2] = { 454daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo->sensorW, m_curCameraInfo->sensorH 455daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang }; 456fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE, pixelArraySize, 2); 4571b2236edfaed20ebf8087a3017042989dfa7b1feAlex Ray 4581b2236edfaed20ebf8087a3017042989dfa7b1feAlex Ray int32_t activeArraySize[4] = { 0, 0, pixelArraySize[0], pixelArraySize[1]}; 4591b2236edfaed20ebf8087a3017042989dfa7b1feAlex Ray ADD_OR_SIZE(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE, activeArraySize,4); 460c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 461fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_SENSOR_INFO_WHITE_LEVEL, 462c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &Sensor::kMaxRawValue, 1); 463c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 464c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t blackLevelPattern[4] = { 465c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin Sensor::kBlackLevel, Sensor::kBlackLevel, 466c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin Sensor::kBlackLevel, Sensor::kBlackLevel 467c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 468c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_BLACK_LEVEL_PATTERN, 469c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin blackLevelPattern, sizeof(blackLevelPattern)/sizeof(int32_t)); 470c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 4711b2236edfaed20ebf8087a3017042989dfa7b1feAlex Ray static const int32_t orientation[1] = {0}; 4721b2236edfaed20ebf8087a3017042989dfa7b1feAlex Ray ADD_OR_SIZE(ANDROID_SENSOR_ORIENTATION, 4731b2236edfaed20ebf8087a3017042989dfa7b1feAlex Ray orientation, 1); 4741b2236edfaed20ebf8087a3017042989dfa7b1feAlex Ray 475c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin //TODO: sensor color calibration fields 476c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 477c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.flash 4789a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo uint8_t flashAvailable; 4799a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo if (cameraId == 0) 4809a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo flashAvailable = 1; 4819a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo else 4829a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo flashAvailable = 0; 483fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_FLASH_INFO_AVAILABLE, &flashAvailable, 1); 484c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 485c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t flashChargeDuration = 0; 486fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_FLASH_INFO_CHARGE_DURATION, &flashChargeDuration, 1); 487c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 488c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.tonemap 489c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 490c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t tonemapCurvePoints = 128; 491c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_TONEMAP_MAX_CURVE_POINTS, &tonemapCurvePoints, 1); 492c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 493c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.scaler 494c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 495c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_FORMATS, 496c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin kAvailableFormats, 497c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(kAvailableFormats)/sizeof(uint32_t)); 498c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 499daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int32_t availableRawSizes[2] = { 500daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo->sensorRawW, m_curCameraInfo->sensorRawH 501daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang }; 502c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_RAW_SIZES, 503daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang availableRawSizes, 2); 504c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 505c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_RAW_MIN_DURATIONS, 506c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin kAvailableRawMinDurations, 507c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(kAvailableRawMinDurations)/sizeof(uint64_t)); 508c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 509c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 510daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES, 511daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo->scalerResolutions, 512daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang (m_curCameraInfo->numScalerResolution)*2); 513daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_JPEG_SIZES, 514daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo->jpegResolutions, 515daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang (m_curCameraInfo->numJpegResolution)*2); 516daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 517c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS, 518c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin kAvailableProcessedMinDurations, 519c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(kAvailableProcessedMinDurations)/sizeof(uint64_t)); 520c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 521c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_JPEG_MIN_DURATIONS, 522c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin kAvailableJpegMinDurations, 523c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(kAvailableJpegMinDurations)/sizeof(uint64_t)); 524c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 525e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang static const float maxZoom = 4; 526fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM, &maxZoom, 1); 527c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 528c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.jpeg 529c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 530c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t jpegThumbnailSizes[] = { 531c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 160, 120, 5322d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang 160, 160, 5332d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang 160, 90, 5344017b08c048a827a1299fb60859a72bfcda473f4Sungjoong Kang 144, 96, 5354017b08c048a827a1299fb60859a72bfcda473f4Sungjoong Kang 0, 0 536c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 537daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 538c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, 539c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin jpegThumbnailSizes, sizeof(jpegThumbnailSizes)/sizeof(int32_t)); 540c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 5413c006f81491a876ab9ea48a6479592ea85c5059eSungjoong Kang static const int32_t jpegMaxSize = 10 * 1024 * 1024; 54213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ADD_OR_SIZE(ANDROID_JPEG_MAX_SIZE, &jpegMaxSize, 1); 54313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 544c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.stats 545c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 546c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableFaceDetectModes[] = { 547fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_STATISTICS_FACE_DETECT_MODE_OFF, 548fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_STATISTICS_FACE_DETECT_MODE_FULL 549c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 550fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES, 551c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableFaceDetectModes, 552c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(availableFaceDetectModes)); 553c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 554f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo m_curCameraInfo->maxFaceCount = CAMERA2_MAX_FACES; 555fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_STATISTICS_INFO_MAX_FACE_COUNT, 556fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang &(m_curCameraInfo->maxFaceCount), 1); 557c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 558c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t histogramSize = 64; 559fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_STATISTICS_INFO_HISTOGRAM_BUCKET_COUNT, 560c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &histogramSize, 1); 561c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 562c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t maxHistogramCount = 1000; 563fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_STATISTICS_INFO_MAX_HISTOGRAM_COUNT, 564c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &maxHistogramCount, 1); 565c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 566c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t sharpnessMapSize[2] = {64, 64}; 567fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_STATISTICS_INFO_SHARPNESS_MAP_SIZE, 568c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sharpnessMapSize, sizeof(sharpnessMapSize)/sizeof(int32_t)); 569c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 570c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t maxSharpnessMapValue = 1000; 571fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_STATISTICS_INFO_MAX_SHARPNESS_MAP_VALUE, 572c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &maxSharpnessMapValue, 1); 573c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 574c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.control 575c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 576c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableSceneModes[] = { 5772bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang ANDROID_CONTROL_SCENE_MODE_ACTION, 578daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ANDROID_CONTROL_SCENE_MODE_NIGHT, 5792bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang ANDROID_CONTROL_SCENE_MODE_SUNSET, 5802bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang ANDROID_CONTROL_SCENE_MODE_PARTY 581c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 582c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AVAILABLE_SCENE_MODES, 583c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableSceneModes, sizeof(availableSceneModes)); 584c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 585c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableEffects[] = { 586fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_EFFECT_MODE_OFF 587c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 588c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AVAILABLE_EFFECTS, 589c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableEffects, sizeof(availableEffects)); 590c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 5918e2c2fdbd940265e8413d512c3a0549bbc53c8a2Sungjoong Kang int32_t max3aRegions = 1; 592c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_MAX_REGIONS, 593c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &max3aRegions, 1); 594c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 595c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_AVAILABLE_MODES, 59673c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang m_curCameraInfo->availableAeModes, m_curCameraInfo->numAvailableAeModes); 597c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 598c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const camera_metadata_rational exposureCompensationStep = { 5992bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang 1, 1 600c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 601fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_CONTROL_AE_COMPENSATION_STEP, 602c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &exposureCompensationStep, 1); 603c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 6042bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang int32_t exposureCompensationRange[] = {-3, 3}; 605fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_CONTROL_AE_COMPENSATION_RANGE, 606c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin exposureCompensationRange, 607c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(exposureCompensationRange)/sizeof(int32_t)); 608c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 609c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t availableTargetFpsRanges[] = { 6103c17a3f79068fef751c777a7c13830d23e5f51cfSungjoong Kang 15, 15, 24, 24, 25, 25, 15, 30, 30, 30 611c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 612c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 613c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableTargetFpsRanges, 614c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(availableTargetFpsRanges)/sizeof(int32_t)); 615c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 616c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableAntibandingModes[] = { 617fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF, 618fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO 619c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 620c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES, 621c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableAntibandingModes, sizeof(availableAntibandingModes)); 622c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 623c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableAwbModes[] = { 624fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AWB_MODE_OFF, 625fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AWB_MODE_AUTO, 626fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AWB_MODE_INCANDESCENT, 627fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AWB_MODE_FLUORESCENT, 628fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AWB_MODE_DAYLIGHT, 629fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AWB_MODE_CLOUDY_DAYLIGHT 630c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 631c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AWB_AVAILABLE_MODES, 632c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableAwbModes, sizeof(availableAwbModes)); 633c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 634c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AF_AVAILABLE_MODES, 63573c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang m_curCameraInfo->availableAfModes, m_curCameraInfo->numAvailableAfModes); 636c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 637c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableVstabModes[] = { 638fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF, 639fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_ON 640c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 641c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES, 642c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableVstabModes, sizeof(availableVstabModes)); 643c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 644c68cd007d7c9fa9d06e440e2a644a5b31a5c52f2Sungjoong Kang ADD_OR_SIZE(ANDROID_CONTROL_SCENE_MODE_OVERRIDES, 64573c6337d144f6228136d1a56dcb3635f6cb544d2Sungjoong Kang m_curCameraInfo->sceneModeOverrides, m_curCameraInfo->numSceneModeOverrides); 646c68cd007d7c9fa9d06e440e2a644a5b31a5c52f2Sungjoong Kang 647c68cd007d7c9fa9d06e440e2a644a5b31a5c52f2Sungjoong Kang static const uint8_t quirkTriggerAuto = 1; 648c68cd007d7c9fa9d06e440e2a644a5b31a5c52f2Sungjoong Kang ADD_OR_SIZE(ANDROID_QUIRKS_TRIGGER_AF_WITH_AUTO, 649c68cd007d7c9fa9d06e440e2a644a5b31a5c52f2Sungjoong Kang &quirkTriggerAuto, 1); 650c68cd007d7c9fa9d06e440e2a644a5b31a5c52f2Sungjoong Kang 651c68cd007d7c9fa9d06e440e2a644a5b31a5c52f2Sungjoong Kang static const uint8_t quirkUseZslFormat = 1; 652c68cd007d7c9fa9d06e440e2a644a5b31a5c52f2Sungjoong Kang ADD_OR_SIZE(ANDROID_QUIRKS_USE_ZSL_FORMAT, 653c68cd007d7c9fa9d06e440e2a644a5b31a5c52f2Sungjoong Kang &quirkUseZslFormat, 1); 654c68cd007d7c9fa9d06e440e2a644a5b31a5c52f2Sungjoong Kang 655c6053426696191056192ff8ed0218b81fb246a00Sungjoong Kang static const uint8_t quirkMeteringCropRegion = 1; 656c6053426696191056192ff8ed0218b81fb246a00Sungjoong Kang ADD_OR_SIZE(ANDROID_QUIRKS_METERING_CROP_REGION, 657c6053426696191056192ff8ed0218b81fb246a00Sungjoong Kang &quirkMeteringCropRegion, 1); 658c6053426696191056192ff8ed0218b81fb246a00Sungjoong Kang 659c6053426696191056192ff8ed0218b81fb246a00Sungjoong Kang 660c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#undef ADD_OR_SIZE 661c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** Allocate metadata if sizing */ 662c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (sizeRequest) { 663c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ALOGV("Allocating %d entries, %d extra bytes for " 664c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin "static camera info", 665c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryCount, dataCount); 666c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin *info = allocate_camera_metadata(entryCount, dataCount); 667c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (*info == NULL) { 668c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ALOGE("Unable to allocate camera static info" 669c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin "(%d entries, %d bytes extra data)", 670c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryCount, dataCount); 671c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return NO_MEMORY; 672c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 673c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 674c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return OK; 675c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} 676c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 677daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangstatus_t ExynosCamera2::constructDefaultRequest( 678c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int request_template, 679c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin camera_metadata_t **request, 680c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin bool sizeRequest) { 681c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 682c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t entryCount = 0; 683c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t dataCount = 0; 684c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin status_t ret; 685c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 686c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define ADD_OR_SIZE( tag, data, count ) \ 687c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if ( ( ret = addOrSize(*request, sizeRequest, &entryCount, &dataCount, \ 688c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tag, data, count) ) != OK ) return ret 689c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 690c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t USEC = 1000LL; 691c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t MSEC = USEC * 1000LL; 692c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t SEC = MSEC * 1000LL; 693c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 694c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.request */ 695c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 696fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin static const uint8_t metadataMode = ANDROID_REQUEST_METADATA_MODE_NONE; 697c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_REQUEST_METADATA_MODE, &metadataMode, 1); 698c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 699c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t id = 0; 700c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_REQUEST_ID, &id, 1); 701c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 702c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t frameCount = 0; 703c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_REQUEST_FRAME_COUNT, &frameCount, 1); 704c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 705c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // OUTPUT_STREAMS set by user 706c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryCount += 1; 707c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin dataCount += 5; // TODO: Should be maximum stream number 708c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 709c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.lens */ 710c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 711c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float focusDistance = 0; 712c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_FOCUS_DISTANCE, &focusDistance, 1); 713c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 7140f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ADD_OR_SIZE(ANDROID_LENS_APERTURE, &m_curCameraInfo->aperture, 1); 715c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 7160f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ADD_OR_SIZE(ANDROID_LENS_FOCAL_LENGTH, &m_curCameraInfo->focalLength, 1); 717c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 718c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float filterDensity = 0; 719c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_FILTER_DENSITY, &filterDensity, 1); 720c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 721c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t opticalStabilizationMode = 722fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF; 723c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_OPTICAL_STABILIZATION_MODE, 724c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &opticalStabilizationMode, 1); 725c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 726c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 727c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.sensor */ 728c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 72930f3ec95f62e0a6998d87f909844eb332c7b66e7Alex Ray static const int64_t defaultExposureTime = 8000000LL; // 1/125 s 73030f3ec95f62e0a6998d87f909844eb332c7b66e7Alex Ray ADD_OR_SIZE(ANDROID_SENSOR_EXPOSURE_TIME, &defaultExposureTime, 1); 731c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 732c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t frameDuration = 33333333L; // 1/30 s 733c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_FRAME_DURATION, &frameDuration, 1); 734c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 735c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 736c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.flash */ 737c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 738fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin static const uint8_t flashMode = ANDROID_FLASH_MODE_OFF; 739c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_FLASH_MODE, &flashMode, 1); 740c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 741c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t flashPower = 10; 742c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_FLASH_FIRING_POWER, &flashPower, 1); 743c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 744c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t firingTime = 0; 745c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_FLASH_FIRING_TIME, &firingTime, 1); 746c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 747c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** Processing block modes */ 748c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t hotPixelMode = 0; 749c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t demosaicMode = 0; 750c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t noiseMode = 0; 751c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t shadingMode = 0; 752c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t geometricMode = 0; 753c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t colorMode = 0; 754c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t tonemapMode = 0; 755c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t edgeMode = 0; 756fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin uint8_t vstabMode = ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF; 757fac627c49392731fe561f548e5c87be3510364d6Sungjoong Kang 758c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin switch (request_template) { 759c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_SNAPSHOT: 760fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin vstabMode = ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_ON; 761fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin // fall-through 762fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin case CAMERA2_TEMPLATE_STILL_CAPTURE: 763fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin // fall-through 764c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_ZERO_SHUTTER_LAG: 765fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin hotPixelMode = ANDROID_HOT_PIXEL_MODE_HIGH_QUALITY; 766fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin demosaicMode = ANDROID_DEMOSAIC_MODE_HIGH_QUALITY; 767fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin noiseMode = ANDROID_NOISE_REDUCTION_MODE_HIGH_QUALITY; 768fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin shadingMode = ANDROID_SHADING_MODE_HIGH_QUALITY; 769fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin geometricMode = ANDROID_GEOMETRIC_MODE_HIGH_QUALITY; 770fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin colorMode = ANDROID_COLOR_CORRECTION_MODE_HIGH_QUALITY; 771fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin tonemapMode = ANDROID_TONEMAP_MODE_HIGH_QUALITY; 772fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin edgeMode = ANDROID_EDGE_MODE_HIGH_QUALITY; 773c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 774fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin case CAMERA2_TEMPLATE_VIDEO_RECORD: 775fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin vstabMode = ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_ON; 776fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin // fall-through 777fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin case CAMERA2_TEMPLATE_PREVIEW: 778fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin // fall-through 779c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin default: 780fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin hotPixelMode = ANDROID_HOT_PIXEL_MODE_FAST; 781fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin demosaicMode = ANDROID_DEMOSAIC_MODE_FAST; 782fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin noiseMode = ANDROID_NOISE_REDUCTION_MODE_FAST; 783fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin shadingMode = ANDROID_SHADING_MODE_FAST; 784fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin geometricMode = ANDROID_GEOMETRIC_MODE_FAST; 785fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin colorMode = ANDROID_COLOR_CORRECTION_MODE_FAST; 786fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin tonemapMode = ANDROID_TONEMAP_MODE_FAST; 787fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin edgeMode = ANDROID_EDGE_MODE_FAST; 788c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 789c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 790c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_HOT_PIXEL_MODE, &hotPixelMode, 1); 791c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_DEMOSAIC_MODE, &demosaicMode, 1); 792fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_NOISE_REDUCTION_MODE, &noiseMode, 1); 793c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SHADING_MODE, &shadingMode, 1); 794c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_GEOMETRIC_MODE, &geometricMode, 1); 795fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_COLOR_CORRECTION_MODE, &colorMode, 1); 796c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_TONEMAP_MODE, &tonemapMode, 1); 797c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_EDGE_MODE, &edgeMode, 1); 798fac627c49392731fe561f548e5c87be3510364d6Sungjoong Kang ADD_OR_SIZE(ANDROID_CONTROL_VIDEO_STABILIZATION_MODE, &vstabMode, 1); 799c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 800c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.noise */ 801c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t noiseStrength = 5; 802fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_NOISE_REDUCTION_STRENGTH, &noiseStrength, 1); 803c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 804c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.color */ 805c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float colorTransform[9] = { 806c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 1.0f, 0.f, 0.f, 807c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 0.f, 1.f, 0.f, 808c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 0.f, 0.f, 1.f 809c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 810fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_COLOR_CORRECTION_TRANSFORM, colorTransform, 9); 811c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 812c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.tonemap */ 813c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float tonemapCurve[4] = { 814c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 0.f, 0.f, 815c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 1.f, 1.f 816c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 817c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_TONEMAP_CURVE_RED, tonemapCurve, 32); // sungjoong 818c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_TONEMAP_CURVE_GREEN, tonemapCurve, 32); 819c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_TONEMAP_CURVE_BLUE, tonemapCurve, 32); 820c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 821c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.edge */ 822c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t edgeStrength = 5; 823c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_EDGE_STRENGTH, &edgeStrength, 1); 824c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 825c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.scaler */ 826daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int32_t cropRegion[3] = { 827daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 0, 0, m_curCameraInfo->sensorW 828c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 829c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_CROP_REGION, cropRegion, 3); 830c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 831c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.jpeg */ 83287423e5686296b1938959ff8bf9817490ddee2f1Hyeonmyeong Choi static const int32_t jpegQuality = 100; 833c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_QUALITY, &jpegQuality, 1); 834c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 835c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t thumbnailSize[2] = { 8362d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang 160, 120 837c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 838c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_THUMBNAIL_SIZE, thumbnailSize, 2); 839c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 84087423e5686296b1938959ff8bf9817490ddee2f1Hyeonmyeong Choi static const int32_t thumbnailQuality = 100; 841c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_THUMBNAIL_QUALITY, &thumbnailQuality, 1); 842c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 843daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang static const double gpsCoordinates[3] = { 844daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 0, 0, 0 845c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 846daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ADD_OR_SIZE(ANDROID_JPEG_GPS_COORDINATES, gpsCoordinates, 3); 847c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 848c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t gpsProcessingMethod[32] = "None"; 849c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_GPS_PROCESSING_METHOD, gpsProcessingMethod, 32); 850c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 851c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t gpsTimestamp = 0; 852c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_GPS_TIMESTAMP, &gpsTimestamp, 1); 853c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 854c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t jpegOrientation = 0; 855c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_ORIENTATION, &jpegOrientation, 1); 856c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 857c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.stats */ 858c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 859fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin static const uint8_t faceDetectMode = ANDROID_STATISTICS_FACE_DETECT_MODE_FULL; 860fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_STATISTICS_FACE_DETECT_MODE, &faceDetectMode, 1); 861c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 862fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin static const uint8_t histogramMode = ANDROID_STATISTICS_HISTOGRAM_MODE_OFF; 863fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_STATISTICS_HISTOGRAM_MODE, &histogramMode, 1); 864c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 865fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin static const uint8_t sharpnessMapMode = ANDROID_STATISTICS_HISTOGRAM_MODE_OFF; 866fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_STATISTICS_SHARPNESS_MAP_MODE, &sharpnessMapMode, 1); 867c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 868c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 869c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.control */ 870c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 871c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t controlIntent = 0; 872c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin switch (request_template) { 873c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_PREVIEW: 874fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin controlIntent = ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW; 875c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 876c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_STILL_CAPTURE: 877fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin controlIntent = ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE; 878c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 879c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_RECORD: 880fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin controlIntent = ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_RECORD; 881c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 882c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_SNAPSHOT: 883fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin controlIntent = ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT; 884c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 885c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_ZERO_SHUTTER_LAG: 886fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin controlIntent = ANDROID_CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG; 887c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 888c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin default: 889fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin controlIntent = ANDROID_CONTROL_CAPTURE_INTENT_CUSTOM; 890c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 891c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 892c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_CAPTURE_INTENT, &controlIntent, 1); 893c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 894fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin static const uint8_t controlMode = ANDROID_CONTROL_MODE_AUTO; 895c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_MODE, &controlMode, 1); 896c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 897fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin static const uint8_t effectMode = ANDROID_CONTROL_EFFECT_MODE_OFF; 898c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_EFFECT_MODE, &effectMode, 1); 899c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 900daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang static const uint8_t sceneMode = ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED; 901c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_SCENE_MODE, &sceneMode, 1); 902c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 903fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin static const uint8_t aeMode = ANDROID_CONTROL_AE_MODE_ON; 904c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_MODE, &aeMode, 1); 905c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 906daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int32_t controlRegions[5] = { 907daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 0, 0, m_curCameraInfo->sensorW, m_curCameraInfo->sensorH, 1000 908c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 909c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_REGIONS, controlRegions, 5); 910c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 911c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t aeExpCompensation = 0; 912fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ADD_OR_SIZE(ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION, &aeExpCompensation, 1); 913c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 914c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t aeTargetFpsRange[2] = { 915b8146879a137e53742fb20c2ac3cbb6bd8d3feb3Sungjoong Kang 15, 30 916c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 917c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_TARGET_FPS_RANGE, aeTargetFpsRange, 2); 918c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 919c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t aeAntibandingMode = 920fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO; 921c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_ANTIBANDING_MODE, &aeAntibandingMode, 1); 922c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 923c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t awbMode = 924fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin ANDROID_CONTROL_AWB_MODE_AUTO; 925c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AWB_MODE, &awbMode, 1); 926c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 927c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AWB_REGIONS, controlRegions, 5); 928c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 929c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t afMode = 0; 930c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin switch (request_template) { 931c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_PREVIEW: 932fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin afMode = ANDROID_CONTROL_AF_MODE_CONTINUOUS_PICTURE; 933c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 934c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_STILL_CAPTURE: 935fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin afMode = ANDROID_CONTROL_AF_MODE_CONTINUOUS_PICTURE; 936c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 937c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_RECORD: 938fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin afMode = ANDROID_CONTROL_AF_MODE_CONTINUOUS_VIDEO; 939c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 940c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_SNAPSHOT: 941fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin afMode = ANDROID_CONTROL_AF_MODE_CONTINUOUS_VIDEO; 942c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 943c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_ZERO_SHUTTER_LAG: 944fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin afMode = ANDROID_CONTROL_AF_MODE_CONTINUOUS_PICTURE; 945c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 946c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin default: 947fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin afMode = ANDROID_CONTROL_AF_MODE_AUTO; 948c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 949c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 950c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AF_MODE, &afMode, 1); 951c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 952c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AF_REGIONS, controlRegions, 5); 953c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 954c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (sizeRequest) { 955c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ALOGV("Allocating %d entries, %d extra bytes for " 956c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin "request template type %d", 957c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryCount, dataCount, request_template); 958c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin *request = allocate_camera_metadata(entryCount, dataCount); 959c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (*request == NULL) { 960c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ALOGE("Unable to allocate new request template type %d " 961c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin "(%d entries, %d bytes extra data)", request_template, 962c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryCount, dataCount); 963c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return NO_MEMORY; 964c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 965c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 966c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return OK; 967c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#undef ADD_OR_SIZE 968c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} 969c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 970c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} 971