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