ExynosCamera2.cpp revision b8146879a137e53742fb20c2ac3cbb6bd8d3feb3
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{ 1180b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1920, 1080, // 16:9 1190b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1440, 1080, // 4:3 1200b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1440, 960, // 3:2 1210b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1280, 1024, // 5:4 1220b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1280, 720, // 16:9 1230b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 960, 720, // 4:3 1240b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 800, 480, // 5:3 1250b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 768, 576, // 4:3 1260b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 720, 576, // 5:4 1270b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 720, 480, // 3:2 1280b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 640, 480, // 4:3 1290b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 352, 288, // 11:9 1300b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 320, 240, // 4:3 1310b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 240, 160, // 3:2 1320b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 176, 144, // 6:5 1330b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 128, 96, // 4:3 134c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 135c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 136daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst int32_t jpegResolutionS5K4E5[] = 137daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 138daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 2560, 1920, 139e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang 2560, 1440, 140a44c3365bfc7ca02a8462264e3af05604eb1ebf5hyeonmyeong Choi 2160, 1440, 14115fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 2048, 1536, 14215fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1600, 1200, 14315fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1280, 1024, 14415fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1280, 960, 14515fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1152, 864, 14615fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 640, 480, 14715fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 320, 240, 148c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 149c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 150daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong KangExynosCamera2InfoS5K4E5::ExynosCamera2InfoS5K4E5() 151daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 152daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorW = 2560; 153daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorH = 1920; 154daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorRawW = (2560 + 16); 155daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorRawH = (1920 + 10); 156daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang numScalerResolution = ARRAY_SIZE(scalerResolutionS5K4E5)/2; 157daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang scalerResolutions = scalerResolutionS5K4E5; 158daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang numJpegResolution = ARRAY_SIZE(jpegResolutionS5K4E5)/2; 159daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang jpegResolutions = jpegResolutionS5K4E5; 1600f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang minFocusDistance = 0.1f; 1610f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang focalLength = 3.43f; 1620f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang aperture = 2.7f; 163e00f6591f64959131a8ddfbbcec7ff36c7eee94eSungjoong Kang fnumber = 2.7f; 164daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang} 165c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 16615fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong KangExynosCamera2InfoS5K4E5::~ExynosCamera2InfoS5K4E5() 16715fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang{ 16815fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang ALOGV("%s", __FUNCTION__); 16915fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang} 170daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst int32_t scalerResolutionS5K6A3[] = 171daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 1720b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1392, 1392, // 1:1 1730b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1344, 896, // 3:2 1740b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1280, 1024, // 5:4 1750b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1280, 960, // 4:3 1760b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 1280, 720, // 16:9 1770b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 960, 720, // 4:3 1780b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 800, 480, // 5:3 1790b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 768, 576, // 4:3 1800b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 720, 576, // 5:4 1810b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 720, 480, // 3:2 1820b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 640, 480, // 4:3 1830b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 352, 288, // 11:9 1840b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 320, 240, // 4:3 1850b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 240, 160, // 3:2 1860b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 176, 144, // 6:5 1870b7b757d7ef65c064a1cf3bcd3738b7a242811eehyeonmyeong Choi 128, 96, // 4:3 188c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 189c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 190daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangconst int32_t jpegResolutionS5K6A3[] = 191daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 19215fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1392, 1392, 19315fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1392, 1040, 194a44c3365bfc7ca02a8462264e3af05604eb1ebf5hyeonmyeong Choi 1392, 928, 19515fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1392, 784, 19615fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1280, 1024, 197ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang 1280, 960, 198e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang 1280, 720, 19915fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 1152, 864, 20015fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 640, 480, 20115fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang 320, 240, 202daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang}; 203c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 204daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong KangExynosCamera2InfoS5K6A3::ExynosCamera2InfoS5K6A3() 2059dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 206daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorW = 1392; 207daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorH = 1392; 208daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorRawW = (1392 + 16); 209daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang sensorRawH = (1392 + 10); 210daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang numScalerResolution = ARRAY_SIZE(scalerResolutionS5K6A3)/2; 211daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang scalerResolutions = scalerResolutionS5K6A3; 212daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang numJpegResolution = ARRAY_SIZE(jpegResolutionS5K6A3)/2; 213daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang jpegResolutions = jpegResolutionS5K6A3; 2140f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang minFocusDistance = 0.0f; 2150f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang focalLength = 2.73f; 2160f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang aperture = 2.8f; 217e00f6591f64959131a8ddfbbcec7ff36c7eee94eSungjoong Kang fnumber = 2.8f; 2189dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} 2199dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 22015fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong KangExynosCamera2InfoS5K6A3::~ExynosCamera2InfoS5K6A3() 22115fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang{ 22215fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang ALOGV("%s", __FUNCTION__); 22315fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang} 224daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong KangExynosCamera2::ExynosCamera2(int cameraId): 225daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_cameraId(cameraId) 2269dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 227daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang if (cameraId == 0) 228daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo = new ExynosCamera2InfoS5K4E5; 2299dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang else 230daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo = new ExynosCamera2InfoS5K6A3; 2319dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} 2329dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 233daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong KangExynosCamera2::~ExynosCamera2() 2349dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 23515fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang ALOGV("%s", __FUNCTION__); 236daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang delete m_curCameraInfo; 23715fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang m_curCameraInfo = NULL; 238daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang} 2399dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 240daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangint32_t ExynosCamera2::getSensorW() 2419dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 242daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return m_curCameraInfo->sensorW; 2439dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} 2449dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 245daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangint32_t ExynosCamera2::getSensorH() 246daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang{ 247daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return m_curCameraInfo->sensorH; 248daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang} 2499dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 250daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangint32_t ExynosCamera2::getSensorRawW() 2519dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 252daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return m_curCameraInfo->sensorRawW; 253daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang} 2549dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 255daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangint32_t ExynosCamera2::getSensorRawH() 2569dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 257daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return m_curCameraInfo->sensorRawH; 2589dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} 2599dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 260daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangbool ExynosCamera2::isSupportedResolution(int width, int height) 2619dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 262daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int i; 263daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang for (i = 0 ; i < m_curCameraInfo->numScalerResolution ; i++) { 264daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang if (m_curCameraInfo->scalerResolutions[2*i] == width 265daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang && m_curCameraInfo->scalerResolutions[2*i+1] == height) { 266daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return true; 267daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang } 2689dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang } 269daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return false; 270daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang} 2719dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 272daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangbool ExynosCamera2::isSupportedJpegResolution(int width, int height) 2739dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang{ 274daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int i; 275daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang for (i = 0 ; i < m_curCameraInfo->numJpegResolution ; i++) { 276daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang if (m_curCameraInfo->jpegResolutions[2*i] == width 277daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang && m_curCameraInfo->jpegResolutions[2*i+1] == height) { 278daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return true; 279daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang } 2809dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang } 281daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang return false; 2829dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} 2839dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 284c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinstatus_t addOrSize(camera_metadata_t *request, 285c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin bool sizeRequest, 286c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t *entryCount, 287c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t *dataCount, 288c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint32_t tag, 289c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin const void *entryData, 290c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t entryDataCount) { 291c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin status_t res; 292c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (!sizeRequest) { 293c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return add_camera_metadata_entry(request, tag, entryData, 294c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryDataCount); 295c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } else { 296c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int type = get_camera_metadata_tag_type(tag); 297c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (type < 0 ) return BAD_VALUE; 298c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin (*entryCount)++; 299c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin (*dataCount) += calculate_camera_metadata_entry_data_size(type, 300c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryDataCount); 301c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return OK; 302c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 303c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} 304daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 305daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangstatus_t ExynosCamera2::constructStaticInfo(camera_metadata_t **info, 306daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int cameraId, bool sizeRequest) { 307c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 308c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t entryCount = 0; 309c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t dataCount = 0; 310c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin status_t ret; 311c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 312c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define ADD_OR_SIZE( tag, data, count ) \ 313c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if ( ( ret = addOrSize(*info, sizeRequest, &entryCount, &dataCount, \ 314c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tag, data, count) ) != OK ) return ret 315c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 316c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.lens 317c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 318c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_MINIMUM_FOCUS_DISTANCE, 3190f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang &(m_curCameraInfo->minFocusDistance), 1); 320c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_HYPERFOCAL_DISTANCE, 3210f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang &(m_curCameraInfo->minFocusDistance), 1); 322c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 323c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_AVAILABLE_FOCAL_LENGTHS, 3240f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang &m_curCameraInfo->focalLength, 1); 325c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_AVAILABLE_APERTURES, 3260f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang &m_curCameraInfo->aperture, 1); 3270f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang 328c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float filterDensity = 0; 329c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_AVAILABLE_FILTER_DENSITY, 330c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &filterDensity, 1); 331c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableOpticalStabilization = 332c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_LENS_OPTICAL_STABILIZATION_OFF; 333c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_AVAILABLE_OPTICAL_STABILIZATION, 334c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &availableOpticalStabilization, 1); 335c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 336c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t lensShadingMapSize[] = {1, 1}; 337c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_SHADING_MAP_SIZE, lensShadingMapSize, 338c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(lensShadingMapSize)/sizeof(int32_t)); 339c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 340c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float lensShadingMap[3 * 1 * 1 ] = 341c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin { 1.f, 1.f, 1.f }; 342c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_SHADING_MAP, lensShadingMap, 343c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(lensShadingMap)/sizeof(float)); 344c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 3459dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int32_t lensFacing = cameraId ? 3469dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang ANDROID_LENS_FACING_FRONT : ANDROID_LENS_FACING_BACK; 347c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_FACING, &lensFacing, 1); 348c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 349c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.sensor 350c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_EXPOSURE_TIME_RANGE, 351c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin Sensor::kExposureTimeRange, 2); 352c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 353c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_MAX_FRAME_DURATION, 354c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &Sensor::kFrameDurationRange[1], 1); 355c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 356c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_AVAILABLE_SENSITIVITIES, 357c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin Sensor::kAvailableSensitivities, 358c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(Sensor::kAvailableSensitivities) 359c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /sizeof(uint32_t)); 360c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 361c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_COLOR_FILTER_ARRANGEMENT, 362c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &Sensor::kColorFilterArrangement, 1); 363c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 364c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float sensorPhysicalSize[2] = {3.20f, 2.40f}; // mm 365c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_PHYSICAL_SIZE, 366c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sensorPhysicalSize, 2); 367c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 368daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int32_t pixelArraySize[2] = { 369daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo->sensorW, m_curCameraInfo->sensorH 370daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang }; 371daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ADD_OR_SIZE(ANDROID_SENSOR_PIXEL_ARRAY_SIZE, pixelArraySize, 2); 372daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ADD_OR_SIZE(ANDROID_SENSOR_ACTIVE_ARRAY_SIZE, pixelArraySize,2); 373c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 374c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_WHITE_LEVEL, 375c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &Sensor::kMaxRawValue, 1); 376c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 377c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t blackLevelPattern[4] = { 378c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin Sensor::kBlackLevel, Sensor::kBlackLevel, 379c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin Sensor::kBlackLevel, Sensor::kBlackLevel 380c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 381c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_BLACK_LEVEL_PATTERN, 382c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin blackLevelPattern, sizeof(blackLevelPattern)/sizeof(int32_t)); 383c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 384c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin //TODO: sensor color calibration fields 385c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 386c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.flash 3879a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo uint8_t flashAvailable; 3889a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo if (cameraId == 0) 3899a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo flashAvailable = 1; 3909a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo else 3919a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo flashAvailable = 0; 392c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_FLASH_AVAILABLE, &flashAvailable, 1); 393c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 394c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t flashChargeDuration = 0; 395c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_FLASH_CHARGE_DURATION, &flashChargeDuration, 1); 396c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 397c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.tonemap 398c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 399c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t tonemapCurvePoints = 128; 400c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_TONEMAP_MAX_CURVE_POINTS, &tonemapCurvePoints, 1); 401c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 402c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.scaler 403c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 404c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_FORMATS, 405c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin kAvailableFormats, 406c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(kAvailableFormats)/sizeof(uint32_t)); 407c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 408daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int32_t availableRawSizes[2] = { 409daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo->sensorRawW, m_curCameraInfo->sensorRawH 410daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang }; 411c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_RAW_SIZES, 412daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang availableRawSizes, 2); 413c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 414c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_RAW_MIN_DURATIONS, 415c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin kAvailableRawMinDurations, 416c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(kAvailableRawMinDurations)/sizeof(uint64_t)); 417c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 418c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 419daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES, 420daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo->scalerResolutions, 421daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang (m_curCameraInfo->numScalerResolution)*2); 422daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_JPEG_SIZES, 423daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang m_curCameraInfo->jpegResolutions, 424daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang (m_curCameraInfo->numJpegResolution)*2); 425daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 426c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS, 427c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin kAvailableProcessedMinDurations, 428c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(kAvailableProcessedMinDurations)/sizeof(uint64_t)); 429c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 430c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_JPEG_MIN_DURATIONS, 431c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin kAvailableJpegMinDurations, 432c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(kAvailableJpegMinDurations)/sizeof(uint64_t)); 433c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 434e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang static const float maxZoom = 4; 435daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ADD_OR_SIZE(ANDROID_SCALER_AVAILABLE_MAX_ZOOM, &maxZoom, 1); 436c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 437c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.jpeg 438c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 439c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t jpegThumbnailSizes[] = { 440c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 160, 120, 4412d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang 160, 160, 4422d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang 160, 90, 4434017b08c048a827a1299fb60859a72bfcda473f4Sungjoong Kang 144, 96, 4444017b08c048a827a1299fb60859a72bfcda473f4Sungjoong Kang 0, 0 445c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 446daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 447c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, 448c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin jpegThumbnailSizes, sizeof(jpegThumbnailSizes)/sizeof(int32_t)); 449c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 4503c006f81491a876ab9ea48a6479592ea85c5059eSungjoong Kang static const int32_t jpegMaxSize = 10 * 1024 * 1024; 45113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ADD_OR_SIZE(ANDROID_JPEG_MAX_SIZE, &jpegMaxSize, 1); 45213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 453c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.stats 454c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 455c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableFaceDetectModes[] = { 456fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang ANDROID_STATS_FACE_DETECTION_OFF, 457fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang ANDROID_STATS_FACE_DETECTION_FULL 458c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 459c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_AVAILABLE_FACE_DETECT_MODES, 460c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableFaceDetectModes, 461c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(availableFaceDetectModes)); 462c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 463f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo m_curCameraInfo->maxFaceCount = CAMERA2_MAX_FACES; 464c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_MAX_FACE_COUNT, 465fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang &(m_curCameraInfo->maxFaceCount), 1); 466c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 467c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t histogramSize = 64; 468c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_HISTOGRAM_BUCKET_COUNT, 469c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &histogramSize, 1); 470c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 471c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t maxHistogramCount = 1000; 472c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_MAX_HISTOGRAM_COUNT, 473c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &maxHistogramCount, 1); 474c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 475c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t sharpnessMapSize[2] = {64, 64}; 476c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_SHARPNESS_MAP_SIZE, 477c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sharpnessMapSize, sizeof(sharpnessMapSize)/sizeof(int32_t)); 478c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 479c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t maxSharpnessMapValue = 1000; 480c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_MAX_SHARPNESS_MAP_VALUE, 481c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &maxSharpnessMapValue, 1); 482c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 483c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // android.control 484c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 485c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableSceneModes[] = { 4862bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang ANDROID_CONTROL_SCENE_MODE_ACTION, 487daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ANDROID_CONTROL_SCENE_MODE_NIGHT, 4882bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang ANDROID_CONTROL_SCENE_MODE_SUNSET, 4892bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang ANDROID_CONTROL_SCENE_MODE_PARTY 490c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 491c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AVAILABLE_SCENE_MODES, 492c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableSceneModes, sizeof(availableSceneModes)); 493c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 494c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableEffects[] = { 495c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_EFFECT_OFF 496c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 497c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AVAILABLE_EFFECTS, 498c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableEffects, sizeof(availableEffects)); 499c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 5008e2c2fdbd940265e8413d512c3a0549bbc53c8a2Sungjoong Kang int32_t max3aRegions = 1; 501c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_MAX_REGIONS, 502c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &max3aRegions, 1); 503c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 504c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableAeModes[] = { 505c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AE_OFF, 506fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang ANDROID_CONTROL_AE_ON, 507fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang ANDROID_CONTROL_AE_ON_AUTO_FLASH 508c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 509c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_AVAILABLE_MODES, 510c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableAeModes, sizeof(availableAeModes)); 511c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 512c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const camera_metadata_rational exposureCompensationStep = { 5132bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang 1, 1 514c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 515c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_EXP_COMPENSATION_STEP, 516c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &exposureCompensationStep, 1); 517c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 5182bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang int32_t exposureCompensationRange[] = {-3, 3}; 519c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_EXP_COMPENSATION_RANGE, 520c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin exposureCompensationRange, 521c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(exposureCompensationRange)/sizeof(int32_t)); 522c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 523c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t availableTargetFpsRanges[] = { 524b8146879a137e53742fb20c2ac3cbb6bd8d3feb3Sungjoong Kang 15, 30, 30, 30 525c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 526c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 527c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableTargetFpsRanges, 528c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sizeof(availableTargetFpsRanges)/sizeof(int32_t)); 529c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 530c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableAntibandingModes[] = { 531c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AE_ANTIBANDING_OFF, 532c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AE_ANTIBANDING_AUTO 533c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 534c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES, 535c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableAntibandingModes, sizeof(availableAntibandingModes)); 536c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 537c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableAwbModes[] = { 538c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AWB_OFF, 539c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AWB_AUTO, 540c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AWB_INCANDESCENT, 541c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AWB_FLUORESCENT, 542c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AWB_DAYLIGHT, 5432bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT 544c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 545c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AWB_AVAILABLE_MODES, 546c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableAwbModes, sizeof(availableAwbModes)); 547c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 548c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableAfModes[] = { 5490f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ANDROID_CONTROL_AF_OFF, 5500f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ANDROID_CONTROL_AF_AUTO, 5510f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ANDROID_CONTROL_AF_MACRO, 5520f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ANDROID_CONTROL_AF_CONTINUOUS_PICTURE, 5530f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ANDROID_CONTROL_AF_CONTINUOUS_VIDEO 554c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 555c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AF_AVAILABLE_MODES, 556c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableAfModes, sizeof(availableAfModes)); 557c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 558c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t availableVstabModes[] = { 559a86f87c74965e066748af3632000737fb115b56fAlex Ray ANDROID_CONTROL_VIDEO_STABILIZATION_OFF, 560a86f87c74965e066748af3632000737fb115b56fAlex Ray ANDROID_CONTROL_VIDEO_STABILIZATION_ON 561c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 562c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES, 563c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin availableVstabModes, sizeof(availableVstabModes)); 564c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 565c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#undef ADD_OR_SIZE 566c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** Allocate metadata if sizing */ 567c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (sizeRequest) { 568c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ALOGV("Allocating %d entries, %d extra bytes for " 569c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin "static camera info", 570c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryCount, dataCount); 571c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin *info = allocate_camera_metadata(entryCount, dataCount); 572c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (*info == NULL) { 573c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ALOGE("Unable to allocate camera static info" 574c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin "(%d entries, %d bytes extra data)", 575c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryCount, dataCount); 576c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return NO_MEMORY; 577c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 578c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 579c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return OK; 580c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} 581c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 582daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kangstatus_t ExynosCamera2::constructDefaultRequest( 583c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int request_template, 584c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin camera_metadata_t **request, 585c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin bool sizeRequest) { 586c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 587c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t entryCount = 0; 588c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin size_t dataCount = 0; 589c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin status_t ret; 590c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 591c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define ADD_OR_SIZE( tag, data, count ) \ 592c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if ( ( ret = addOrSize(*request, sizeRequest, &entryCount, &dataCount, \ 593c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tag, data, count) ) != OK ) return ret 594c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 595c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t USEC = 1000LL; 596c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t MSEC = USEC * 1000LL; 597c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t SEC = MSEC * 1000LL; 598c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 599c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.request */ 600c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 601c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t metadataMode = ANDROID_REQUEST_METADATA_NONE; 602c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_REQUEST_METADATA_MODE, &metadataMode, 1); 603c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 604c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t id = 0; 605c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_REQUEST_ID, &id, 1); 606c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 607c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t frameCount = 0; 608c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_REQUEST_FRAME_COUNT, &frameCount, 1); 609c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 610c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin // OUTPUT_STREAMS set by user 611c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryCount += 1; 612c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin dataCount += 5; // TODO: Should be maximum stream number 613c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 614c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.lens */ 615c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 616c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float focusDistance = 0; 617c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_FOCUS_DISTANCE, &focusDistance, 1); 618c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 6190f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ADD_OR_SIZE(ANDROID_LENS_APERTURE, &m_curCameraInfo->aperture, 1); 620c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 6210f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang ADD_OR_SIZE(ANDROID_LENS_FOCAL_LENGTH, &m_curCameraInfo->focalLength, 1); 622c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 623c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float filterDensity = 0; 624c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_FILTER_DENSITY, &filterDensity, 1); 625c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 626c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t opticalStabilizationMode = 627c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_LENS_OPTICAL_STABILIZATION_OFF; 628c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_LENS_OPTICAL_STABILIZATION_MODE, 629c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin &opticalStabilizationMode, 1); 630c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 631c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 632c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.sensor */ 633c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 634c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 635c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t frameDuration = 33333333L; // 1/30 s 636c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SENSOR_FRAME_DURATION, &frameDuration, 1); 637c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 638c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 639c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.flash */ 640c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 641c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t flashMode = ANDROID_FLASH_OFF; 642c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_FLASH_MODE, &flashMode, 1); 643c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 644c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t flashPower = 10; 645c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_FLASH_FIRING_POWER, &flashPower, 1); 646c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 647c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t firingTime = 0; 648c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_FLASH_FIRING_TIME, &firingTime, 1); 649c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 650c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** Processing block modes */ 651c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t hotPixelMode = 0; 652c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t demosaicMode = 0; 653c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t noiseMode = 0; 654c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t shadingMode = 0; 655c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t geometricMode = 0; 656c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t colorMode = 0; 657c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t tonemapMode = 0; 658c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t edgeMode = 0; 659fac627c49392731fe561f548e5c87be3510364d6Sungjoong Kang uint8_t vstabMode = 0; 660fac627c49392731fe561f548e5c87be3510364d6Sungjoong Kang 661c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin switch (request_template) { 662c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_PREVIEW: 663c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin hotPixelMode = ANDROID_PROCESSING_FAST; 664c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin demosaicMode = ANDROID_PROCESSING_FAST; 665c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin noiseMode = ANDROID_PROCESSING_FAST; 666c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin shadingMode = ANDROID_PROCESSING_FAST; 667c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin geometricMode = ANDROID_PROCESSING_FAST; 668c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin colorMode = ANDROID_PROCESSING_FAST; 669c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tonemapMode = ANDROID_PROCESSING_FAST; 670c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin edgeMode = ANDROID_PROCESSING_FAST; 671fac627c49392731fe561f548e5c87be3510364d6Sungjoong Kang vstabMode = ANDROID_CONTROL_VIDEO_STABILIZATION_OFF; 672c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 673c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_STILL_CAPTURE: 674c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin hotPixelMode = ANDROID_PROCESSING_HIGH_QUALITY; 675c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin demosaicMode = ANDROID_PROCESSING_HIGH_QUALITY; 676c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin noiseMode = ANDROID_PROCESSING_HIGH_QUALITY; 677c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin shadingMode = ANDROID_PROCESSING_HIGH_QUALITY; 678c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin geometricMode = ANDROID_PROCESSING_HIGH_QUALITY; 679c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin colorMode = ANDROID_PROCESSING_HIGH_QUALITY; 680c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tonemapMode = ANDROID_PROCESSING_HIGH_QUALITY; 681c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin edgeMode = ANDROID_PROCESSING_HIGH_QUALITY; 682fac627c49392731fe561f548e5c87be3510364d6Sungjoong Kang vstabMode = ANDROID_CONTROL_VIDEO_STABILIZATION_OFF; 683c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 684c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_RECORD: 685c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin hotPixelMode = ANDROID_PROCESSING_FAST; 686c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin demosaicMode = ANDROID_PROCESSING_FAST; 687c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin noiseMode = ANDROID_PROCESSING_FAST; 688c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin shadingMode = ANDROID_PROCESSING_FAST; 689c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin geometricMode = ANDROID_PROCESSING_FAST; 690c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin colorMode = ANDROID_PROCESSING_FAST; 691c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tonemapMode = ANDROID_PROCESSING_FAST; 692c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin edgeMode = ANDROID_PROCESSING_FAST; 693fac627c49392731fe561f548e5c87be3510364d6Sungjoong Kang vstabMode = ANDROID_CONTROL_VIDEO_STABILIZATION_ON; 694c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 695c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_SNAPSHOT: 696c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin hotPixelMode = ANDROID_PROCESSING_HIGH_QUALITY; 697c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin demosaicMode = ANDROID_PROCESSING_HIGH_QUALITY; 698c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin noiseMode = ANDROID_PROCESSING_HIGH_QUALITY; 699c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin shadingMode = ANDROID_PROCESSING_HIGH_QUALITY; 700c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin geometricMode = ANDROID_PROCESSING_HIGH_QUALITY; 701c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin colorMode = ANDROID_PROCESSING_HIGH_QUALITY; 702c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tonemapMode = ANDROID_PROCESSING_HIGH_QUALITY; 703c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin edgeMode = ANDROID_PROCESSING_HIGH_QUALITY; 704fac627c49392731fe561f548e5c87be3510364d6Sungjoong Kang vstabMode = ANDROID_CONTROL_VIDEO_STABILIZATION_ON; 705c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 706c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_ZERO_SHUTTER_LAG: 707c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin hotPixelMode = ANDROID_PROCESSING_HIGH_QUALITY; 708c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin demosaicMode = ANDROID_PROCESSING_HIGH_QUALITY; 709c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin noiseMode = ANDROID_PROCESSING_HIGH_QUALITY; 710c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin shadingMode = ANDROID_PROCESSING_HIGH_QUALITY; 711c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin geometricMode = ANDROID_PROCESSING_HIGH_QUALITY; 712c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin colorMode = ANDROID_PROCESSING_HIGH_QUALITY; 713c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tonemapMode = ANDROID_PROCESSING_HIGH_QUALITY; 714c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin edgeMode = ANDROID_PROCESSING_HIGH_QUALITY; 715fac627c49392731fe561f548e5c87be3510364d6Sungjoong Kang vstabMode = ANDROID_CONTROL_VIDEO_STABILIZATION_OFF; 716c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 717c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin default: 718c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin hotPixelMode = ANDROID_PROCESSING_FAST; 719c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin demosaicMode = ANDROID_PROCESSING_FAST; 720c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin noiseMode = ANDROID_PROCESSING_FAST; 721c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin shadingMode = ANDROID_PROCESSING_FAST; 722c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin geometricMode = ANDROID_PROCESSING_FAST; 723c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin colorMode = ANDROID_PROCESSING_FAST; 724c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin tonemapMode = ANDROID_PROCESSING_FAST; 725c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin edgeMode = ANDROID_PROCESSING_FAST; 726fac627c49392731fe561f548e5c87be3510364d6Sungjoong Kang vstabMode = ANDROID_CONTROL_VIDEO_STABILIZATION_OFF; 727c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 728c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 729c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_HOT_PIXEL_MODE, &hotPixelMode, 1); 730c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_DEMOSAIC_MODE, &demosaicMode, 1); 731c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_NOISE_MODE, &noiseMode, 1); 732c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SHADING_MODE, &shadingMode, 1); 733c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_GEOMETRIC_MODE, &geometricMode, 1); 734c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_COLOR_MODE, &colorMode, 1); 735c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_TONEMAP_MODE, &tonemapMode, 1); 736c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_EDGE_MODE, &edgeMode, 1); 737fac627c49392731fe561f548e5c87be3510364d6Sungjoong Kang ADD_OR_SIZE(ANDROID_CONTROL_VIDEO_STABILIZATION_MODE, &vstabMode, 1); 738c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 739c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.noise */ 740c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t noiseStrength = 5; 741c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_NOISE_STRENGTH, &noiseStrength, 1); 742c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 743c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.color */ 744c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float colorTransform[9] = { 745c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 1.0f, 0.f, 0.f, 746c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 0.f, 1.f, 0.f, 747c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 0.f, 0.f, 1.f 748c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 749c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_COLOR_TRANSFORM, colorTransform, 9); 750c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 751c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.tonemap */ 752c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const float tonemapCurve[4] = { 753c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 0.f, 0.f, 754c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 1.f, 1.f 755c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 756c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_TONEMAP_CURVE_RED, tonemapCurve, 32); // sungjoong 757c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_TONEMAP_CURVE_GREEN, tonemapCurve, 32); 758c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_TONEMAP_CURVE_BLUE, tonemapCurve, 32); 759c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 760c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.edge */ 761c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t edgeStrength = 5; 762c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_EDGE_STRENGTH, &edgeStrength, 1); 763c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 764c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.scaler */ 765daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int32_t cropRegion[3] = { 766daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 0, 0, m_curCameraInfo->sensorW 767c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 768c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_SCALER_CROP_REGION, cropRegion, 3); 769c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 770c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.jpeg */ 771c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t jpegQuality = 80; 772c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_QUALITY, &jpegQuality, 1); 773c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 774c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t thumbnailSize[2] = { 7752d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang 160, 120 776c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 777c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_THUMBNAIL_SIZE, thumbnailSize, 2); 778c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 779c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t thumbnailQuality = 80; 780c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_THUMBNAIL_QUALITY, &thumbnailQuality, 1); 781c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 782daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang static const double gpsCoordinates[3] = { 783daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 0, 0, 0 784c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 785daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ADD_OR_SIZE(ANDROID_JPEG_GPS_COORDINATES, gpsCoordinates, 3); 786c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 787c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t gpsProcessingMethod[32] = "None"; 788c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_GPS_PROCESSING_METHOD, gpsProcessingMethod, 32); 789c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 790c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int64_t gpsTimestamp = 0; 791c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_GPS_TIMESTAMP, &gpsTimestamp, 1); 792c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 793c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t jpegOrientation = 0; 794c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_JPEG_ORIENTATION, &jpegOrientation, 1); 795c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 796c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.stats */ 797c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 798fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang static const uint8_t faceDetectMode = ANDROID_STATS_FACE_DETECTION_FULL; 799c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_FACE_DETECT_MODE, &faceDetectMode, 1); 800c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 801c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t histogramMode = ANDROID_STATS_OFF; 802c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_HISTOGRAM_MODE, &histogramMode, 1); 803c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 804c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t sharpnessMapMode = ANDROID_STATS_OFF; 805c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_STATS_SHARPNESS_MAP_MODE, &sharpnessMapMode, 1); 806c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 807c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 808c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin /** android.control */ 809c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 810c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t controlIntent = 0; 811c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin switch (request_template) { 812c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_PREVIEW: 813c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin controlIntent = ANDROID_CONTROL_INTENT_PREVIEW; 814c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 815c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_STILL_CAPTURE: 816c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin controlIntent = ANDROID_CONTROL_INTENT_STILL_CAPTURE; 817c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 818c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_RECORD: 819c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin controlIntent = ANDROID_CONTROL_INTENT_VIDEO_RECORD; 820c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 821c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_SNAPSHOT: 822c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin controlIntent = ANDROID_CONTROL_INTENT_VIDEO_SNAPSHOT; 823c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 824c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_ZERO_SHUTTER_LAG: 825c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin controlIntent = ANDROID_CONTROL_INTENT_ZERO_SHUTTER_LAG; 826c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 827c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin default: 828c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin controlIntent = ANDROID_CONTROL_INTENT_CUSTOM; 829c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 830c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 831c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_CAPTURE_INTENT, &controlIntent, 1); 832c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 833c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t controlMode = ANDROID_CONTROL_AUTO; 834c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_MODE, &controlMode, 1); 835c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 836c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t effectMode = ANDROID_CONTROL_EFFECT_OFF; 837c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_EFFECT_MODE, &effectMode, 1); 838c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 839daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang static const uint8_t sceneMode = ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED; 840c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_SCENE_MODE, &sceneMode, 1); 841c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 842daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang static const uint8_t aeMode = ANDROID_CONTROL_AE_ON; 843c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_MODE, &aeMode, 1); 844c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 845daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang int32_t controlRegions[5] = { 846daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang 0, 0, m_curCameraInfo->sensorW, m_curCameraInfo->sensorH, 1000 847c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 848c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_REGIONS, controlRegions, 5); 849c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 850c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t aeExpCompensation = 0; 851c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_EXP_COMPENSATION, &aeExpCompensation, 1); 852c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 853c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const int32_t aeTargetFpsRange[2] = { 854b8146879a137e53742fb20c2ac3cbb6bd8d3feb3Sungjoong Kang 15, 30 855c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 856c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_TARGET_FPS_RANGE, aeTargetFpsRange, 2); 857c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 858c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t aeAntibandingMode = 859c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AE_ANTIBANDING_AUTO; 860c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AE_ANTIBANDING_MODE, &aeAntibandingMode, 1); 861c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 862c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin static const uint8_t awbMode = 863c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ANDROID_CONTROL_AWB_AUTO; 864c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AWB_MODE, &awbMode, 1); 865c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 866c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AWB_REGIONS, controlRegions, 5); 867c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 868c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint8_t afMode = 0; 869c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin switch (request_template) { 870c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_PREVIEW: 8710f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang afMode = ANDROID_CONTROL_AF_CONTINUOUS_PICTURE; 872c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 873c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_STILL_CAPTURE: 8740f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang afMode = ANDROID_CONTROL_AF_CONTINUOUS_PICTURE; 875c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 876c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_RECORD: 877c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin afMode = ANDROID_CONTROL_AF_CONTINUOUS_VIDEO; 878c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 879c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_VIDEO_SNAPSHOT: 880c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin afMode = ANDROID_CONTROL_AF_CONTINUOUS_VIDEO; 881c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 882c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin case CAMERA2_TEMPLATE_ZERO_SHUTTER_LAG: 883c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin afMode = ANDROID_CONTROL_AF_CONTINUOUS_PICTURE; 884c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 885c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin default: 886c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin afMode = ANDROID_CONTROL_AF_AUTO; 887c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin break; 888c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 889c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AF_MODE, &afMode, 1); 890c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 891c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ADD_OR_SIZE(ANDROID_CONTROL_AF_REGIONS, controlRegions, 5); 892c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 893c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (sizeRequest) { 894c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ALOGV("Allocating %d entries, %d extra bytes for " 895c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin "request template type %d", 896c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryCount, dataCount, request_template); 897c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin *request = allocate_camera_metadata(entryCount, dataCount); 898c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin if (*request == NULL) { 899c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ALOGE("Unable to allocate new request template type %d " 900c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin "(%d entries, %d bytes extra data)", request_template, 901c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin entryCount, dataCount); 902c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return NO_MEMORY; 903c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 904c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 905c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return OK; 906c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#undef ADD_OR_SIZE 907c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} 908c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 909c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} 910