summaryrefslogtreecommitdiff
path: root/v3/EmulatedFakeCamera3Info.cpp (plain)
blob: 47d7f1c503b87407156e0dca6497af327d1dcdf7
1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/*
18 * Contains implementation of a class EmulatedFakeCamera3 that encapsulates
19 * functionality of an advanced fake camera.
20 */
21
22#define LOG_TAG "EmulatedCamera_FakeCamera3Info"
23#include <camera/CameraMetadata.h>
24#include "EmulatedFakeCamera3.h"
25#include "inc/DebugUtils.h"
26
27namespace android {
28
29//level: legacy:0-4, limited:1-5, full:2-6
30const struct EmulatedFakeCamera3::KeyInfo_s EmulatedFakeCamera3::sKeyInfo[] = {
31 {ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES , LEGACY , BC },
32 {ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES , LEGACY , BC },
33 {ANDROID_CONTROL_AE_AVAILABLE_MODES , LEGACY , BC },
34 {ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES , LEGACY , BC },
35 {ANDROID_CONTROL_AE_COMPENSATION_RANGE , LEGACY , BC },
36 {ANDROID_CONTROL_AE_COMPENSATION_STEP , LEGACY , BC },
37#if 1
38 {ANDROID_CONTROL_AF_AVAILABLE_MODES , LEGACY , BC },
39#endif
40 {ANDROID_CONTROL_AVAILABLE_EFFECTS , LEGACY , BC },
41 {ANDROID_CONTROL_AVAILABLE_SCENE_MODES , LEGACY , BC },
42 {ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES , LEGACY , BC },
43 {ANDROID_CONTROL_AWB_AVAILABLE_MODES , LEGACY , BC },
44// {ANDROID_CONTROL_MAX_REGIONS_AE , LEGACY , BC },
45// {ANDROID_CONTROL_MAX_REGIONS_AF , LEGACY , BC },
46// {ANDROID_CONTROL_MAX_REGIONS_AWB , LEGACY , BC },
47 {ANDROID_EDGE_AVAILABLE_EDGE_MODES , FULL , NONE },
48 {ANDROID_FLASH_INFO_AVAILABLE , LEGACY , BC },
49 {ANDROID_HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES , OPT , RAW },
50 {ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL , LEGACY , BC },
51 {ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES , LEGACY , BC },
52 {ANDROID_LENS_FACING , LEGACY , BC },
53 {ANDROID_LENS_INFO_AVAILABLE_APERTURES , FULL , MANUAL_SENSOR },
54 {ANDROID_LENS_INFO_AVAILABLE_FILTER_DENSITIES , FULL , MANUAL_SENSOR },
55 {ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS , LEGACY , BC },
56 {ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION , LIMITED , MANUAL_SENSOR },
57 {ANDROID_LENS_INFO_FOCUS_DISTANCE_CALIBRATION , LIMITED , MANUAL_SENSOR },
58 {ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE , LIMITED , MANUAL_SENSOR },
59 {ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE , LIMITED , NONE },
60 {ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES , LEGACY , BC },
61 {ANDROID_REQUEST_AVAILABLE_CAPABILITIES , LEGACY , BC },
62// {ANDROID_REQUEST_MAX_NUM_OUTPUT_PROC , LEGACY , BC },
63// {ANDROID_REQUEST_MAX_NUM_OUTPUT_PROC_STALLING , LEGACY , BC },
64// {ANDROID_REQUEST_MAX_NUM_OUTPUT_RAW , LEGACY , BC },
65 {ANDROID_REQUEST_PARTIAL_RESULT_COUNT , LEGACY , BC },
66 {ANDROID_REQUEST_PIPELINE_MAX_DEPTH , LEGACY , BC },
67 {ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM , LEGACY , BC },
68// {ANDROID_SCALER_STREAM_CONFIGURATION_MAP , LEGACY , BC },
69 {ANDROID_SCALER_CROPPING_TYPE , LEGACY , BC },
70 {ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES , LEGACY , NONE },
71 {ANDROID_SENSOR_BLACK_LEVEL_PATTERN , FULL , MANUAL_SENSOR | RAW },
72 {ANDROID_SENSOR_CALIBRATION_TRANSFORM1 , OPT , RAW },
73 {ANDROID_SENSOR_CALIBRATION_TRANSFORM2 , OPT , RAW },
74 {ANDROID_SENSOR_COLOR_TRANSFORM1 , OPT , RAW },
75 {ANDROID_SENSOR_COLOR_TRANSFORM2 , OPT , RAW },
76 {ANDROID_SENSOR_FORWARD_MATRIX1 , OPT , RAW },
77 {ANDROID_SENSOR_FORWARD_MATRIX2 , OPT , RAW },
78 {ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE , LEGACY , BC | RAW },
79 {ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT , FULL , RAW },
80 {ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE , FULL , MANUAL_SENSOR },
81 {ANDROID_SENSOR_INFO_MAX_FRAME_DURATION , FULL , MANUAL_SENSOR },
82 {ANDROID_SENSOR_INFO_PHYSICAL_SIZE , LEGACY , BC },
83 {ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE , LEGACY , BC },
84 {ANDROID_SENSOR_INFO_SENSITIVITY_RANGE , FULL , MANUAL_SENSOR },
85 {ANDROID_SENSOR_INFO_WHITE_LEVEL , OPT , RAW },
86 {ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE , LEGACY , BC },
87 {ANDROID_SENSOR_MAX_ANALOG_SENSITIVITY , FULL , MANUAL_SENSOR },
88 {ANDROID_SENSOR_ORIENTATION , LEGACY , BC },
89 {ANDROID_SENSOR_REFERENCE_ILLUMINANT1 , OPT , RAW },
90 {ANDROID_SENSOR_REFERENCE_ILLUMINANT2 , OPT , RAW },
91 {ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES , LEGACY , BC },
92 {ANDROID_STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES , OPT , RAW },
93 {ANDROID_STATISTICS_INFO_MAX_FACE_COUNT , LEGACY , BC },
94 {ANDROID_SYNC_MAX_LATENCY , LEGACY , BC },
95 {ANDROID_TONEMAP_AVAILABLE_TONE_MAP_MODES , FULL , MANUAL_SENSOR },
96 {ANDROID_TONEMAP_MAX_CURVE_POINTS , FULL , MANUAL_SENSOR },
97 /////////////////////split/////////////////////////
98};
99
100const struct EmulatedFakeCamera3::KeyInfo_s EmulatedFakeCamera3::sKeyInfoReq[] = {
101// {ANDROID_CONTROL_AE_ANTIBANDING_MODE, LIMITED , BC },
102// {ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION, LIMITED , BC },
103// {ANDROID_CONTROL_AE_LOCK, LIMITED , BC },
104 {ANDROID_CONTROL_AE_MODE, LIMITED , BC },
105// {ANDROID_CONTROL_AE_TARGET_FPS_RANGE, LIMITED , BC },
106 {ANDROID_CONTROL_AF_MODE, LIMITED , BC },
107// {ANDROID_CONTROL_AF_TRIGGER, LIMITED , BC },
108// {ANDROID_CONTROL_AWB_LOCK, LIMITED , BC },
109 {ANDROID_CONTROL_AWB_MODE, LIMITED , BC },
110// {ANDROID_CONTROL_CAPTURE_INTENT, LIMITED , BC },
111// {ANDROID_CONTROL_EFFECT_MODE, LIMITED , BC },
112 {ANDROID_CONTROL_MODE, LIMITED , BC },
113// {ANDROID_CONTROL_SCENE_MODE, LIMITED , BC },
114 {ANDROID_CONTROL_VIDEO_STABILIZATION_MODE, LIMITED , BC },
115// {ANDROID_FLASH_MODE, LIMITED , BC },
116// {ANDROID_JPEG_GPS_LOCATION, LIMITED , BC },
117// {ANDROID_JPEG_ORIENTATION, LIMITED , BC },
118// {ANDROID_JPEG_QUALITY, LIMITED , BC },
119// {ANDROID_JPEG_THUMBNAIL_QUALITY, LIMITED , BC },
120// {ANDROID_JPEG_THUMBNAIL_SIZE, LIMITED , BC },
121// {ANDROID_SCALER_CROP_REGION, LIMITED , BC },
122 {ANDROID_STATISTICS_FACE_DETECT_MODE, LIMITED , BC },
123
124// {ANDROID_TONEMAP_MODE, LIMITED , MANUAL_POST_PROCESSING },
125// {ANDROID_COLOR_CORRECTION_GAINS, LIMITED , MANUAL_POST_PROCESSING },
126// {ANDROID_COLOR_CORRECTION_TRANSFORM, LIMITED , MANUAL_POST_PROCESSING },
127// {ANDROID_SHADING_MODE, LIMITED , MANUAL_POST_PROCESSING },
128// {ANDROID_STATISTICS_LENS_SHADING_MAP_MODE, LIMITED , MANUAL_POST_PROCESSING },
129// {ANDROID_TONEMAP_CURVE, FULL , MANUAL_POST_PROCESSING },
130// {ANDROID_COLOR_CORRECTION_ABERRATION_MODE, FULL , MANUAL_POST_PROCESSING },
131
132// {ANDROID_SENSOR_FRAME_DURATION, LIMITED , MANUAL_SENSOR },
133// {ANDROID_SENSOR_EXPOSURE_TIME, LIMITED , MANUAL_SENSOR },
134// {ANDROID_SENSOR_SENSITIVITY, LIMITED , MANUAL_SENSOR },
135// {ANDROID_LENS_APERTURE, LIMITED , MANUAL_SENSOR },
136// {ANDROID_LENS_FILTER_DENSITY, LIMITED , MANUAL_SENSOR },
137 {ANDROID_LENS_OPTICAL_STABILIZATION_MODE, LIMITED , MANUAL_SENSOR },
138// {ANDROID_BLACK_LEVEL_LOCK, LIMITED , MANUAL_SENSOR },
139 {ANDROID_NOISE_REDUCTION_MODE, LEGACY , BC },
140};
141const struct EmulatedFakeCamera3::KeyInfo_s EmulatedFakeCamera3::sKeyInfoResult[] = {
142};
143
144const struct EmulatedFakeCamera3::KeyInfo_s EmulatedFakeCamera3::sKeyBackwardCompat[] = {
145 {ANDROID_CONTROL_AE_ANTIBANDING_MODE, 0,},
146 {ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION, 0,},
147 {ANDROID_CONTROL_AE_LOCK, 0,},
148 {ANDROID_CONTROL_AE_MODE, 0,},
149 {ANDROID_CONTROL_AE_TARGET_FPS_RANGE, 0,},
150 {ANDROID_CONTROL_AF_MODE, 0,},
151 {ANDROID_CONTROL_AF_TRIGGER, 0,},
152 {ANDROID_CONTROL_AWB_LOCK, 0,},
153 {ANDROID_CONTROL_AWB_MODE, 0,},
154 {ANDROID_CONTROL_CAPTURE_INTENT, 0,},
155 {ANDROID_CONTROL_EFFECT_MODE, 0,},
156 {ANDROID_CONTROL_MODE, 0,},
157 {ANDROID_CONTROL_SCENE_MODE, 0,},
158 {ANDROID_CONTROL_VIDEO_STABILIZATION_MODE, 0,},
159 {ANDROID_FLASH_MODE, 0,},
160 //{ANDROID_JPEG_GPS_LOCATION, 0},
161 {ANDROID_JPEG_ORIENTATION, 0,},
162 {ANDROID_JPEG_QUALITY, 0,},
163 {ANDROID_JPEG_THUMBNAIL_QUALITY, 0,},
164 {ANDROID_JPEG_THUMBNAIL_SIZE, 0,},
165 {ANDROID_SCALER_CROP_REGION, 0,},
166 {ANDROID_STATISTICS_FACE_DETECT_MODE, 0,},
167};
168
169int EmulatedFakeCamera3::getAvailableChKeys(CameraMetadata *info, uint8_t level){
170//actualHwLevel: legacy:0, limited:1, full:2
171 enum hardware_level_e actualHwLevel;
172 uint8_t availCapMask = NONE;
173 int size, sizeReq ,sizeofbckComp;
174 int availCount = 0;
175 camera_metadata_entry e;
176 const struct KeyInfo_s *keyInfo = &EmulatedFakeCamera3::sKeyInfo[0];
177
178 size = sizeof(sKeyInfo)/sizeof(struct KeyInfo_s);
179 sizeReq = sizeof(sKeyInfoReq)/sizeof(sKeyInfoReq[0]);
180 sizeofbckComp = sizeof(sKeyBackwardCompat)/sizeof(sKeyBackwardCompat[0]);
181 int32_t available_keys[size+sizeReq+sizeofbckComp];
182
183 e = info->find(ANDROID_REQUEST_AVAILABLE_CAPABILITIES);
184 if (e.count <= 0) {
185 CAMHAL_LOGDA("uncertained capabilities!!!\n");
186 availCapMask = BC;
187 }
188 for (size_t i=0; i < e.count; i++) {
189 availCapMask |= (1 << e.data.u8[i]);
190 }
191 CAMHAL_LOGDB("availCapMask=%x\n", availCapMask);
192
193 switch (level) {
194 case ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED:
195 actualHwLevel = LIMITED;
196 break;
197
198 case ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_FULL:
199 actualHwLevel = FULL;
200 break;
201
202 default:
203 CAMHAL_LOGDA("!!!!uncertain hardware level\n");
204 case ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY:
205 actualHwLevel = LEGACY;
206 break;
207 }
208
209 for(int i = 0; i < size ; i++){
210
211 if (actualHwLevel >= keyInfo->level) {
212 available_keys[availCount] = keyInfo->key;
213 availCount ++;
214 } else if ( availCapMask & keyInfo->capmask) {
215 available_keys[availCount] = keyInfo->key;
216 availCount ++;
217#if 0
218 } else if ((actualHwLevel != LEGACY) || (keyInfo->level == OPT)) {
219 available_keys[availCount] = keyInfo->key;
220 availCount ++;
221#endif
222 }
223
224 keyInfo ++;
225 }
226
227 info->update(ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS,
228 (int32_t *)available_keys, availCount);
229
230 CAMHAL_LOGVB("availableKeySize=%d\n", availCount);
231
232 keyInfo = &EmulatedFakeCamera3::sKeyInfoReq[0];
233 for (int i = 0; i < sizeReq; i ++) {
234 if (actualHwLevel >= keyInfo->level) {
235 available_keys[availCount] = keyInfo->key;
236 availCount ++;
237 } else if ( availCapMask & keyInfo->capmask) {
238 available_keys[availCount] = keyInfo->key;
239 availCount ++;
240#if 0
241 } else if ((actualHwLevel != LEGACY) || (keyInfo->level == OPT)) {
242 available_keys[availCount] = keyInfo->key;
243 availCount ++;
244#endif
245 }
246 keyInfo ++;
247 }
248 keyInfo = &EmulatedFakeCamera3::sKeyBackwardCompat[0];
249 for (int i = 0; i < sizeofbckComp; i ++){
250
251 if (actualHwLevel >= keyInfo->level) {
252 available_keys[availCount] = keyInfo->key;
253 availCount ++;
254 } else if ( availCapMask & keyInfo->capmask) {
255 available_keys[availCount] = keyInfo->key;
256 availCount ++;
257#if 0
258 } else if ((actualHwLevel != LEGACY) || (keyInfo->level == OPT)) {
259 available_keys[availCount] = keyInfo->key;
260 availCount ++;
261#endif
262 }
263
264 keyInfo ++;
265
266 ////////////////
267
268 }
269
270 info->update(ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS,
271 (int32_t *)available_keys, availCount);
272
273 info->update(ANDROID_REQUEST_AVAILABLE_RESULT_KEYS,
274 (int32_t *)available_keys, availCount);
275 CAMHAL_LOGVB("availableKeySize=%d\n", availCount);
276 return 0;
277}
278
279} //namespace android
280