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