21 #include <media/NdkImage.h>
22 #include <camera/NdkCameraManager.h>
25 #include <android/log.h>
27 #define LOG_TAG "CAMERA-SAMPLE"
28 #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
29 #define LOGW(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)
30 #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
31 #define ASSERT(cond, fmt, ...) \
34 __android_log_assert(#cond, LOG_TAG, fmt, ##__VA_ARGS__); \
37 #define UKNOWN_TAG "UNKNOW_TAG"
38 #define MAKE_PAIR(val) std::make_pair(val, #val)
40 const char*
GetPairStr(T key, std::vector<std::pair<T, const char*>>& store)
42 typedef typename std::vector<std::pair<T, const char*>>::iterator iterator;
43 for (iterator it = store.begin(); it != store.end(); ++it)
50 LOGW(
"(%#08x) : UNKNOWN_TAG for %s", key,
typeid(store[0].first).name());
57 using ERROR_PAIR = std::pair<camera_status_t, const char*>;
61 MAKE_PAIR(ACAMERA_ERROR_INVALID_PARAMETER),
62 MAKE_PAIR(ACAMERA_ERROR_CAMERA_DISCONNECTED),
63 MAKE_PAIR(ACAMERA_ERROR_NOT_ENOUGH_MEMORY),
64 MAKE_PAIR(ACAMERA_ERROR_METADATA_NOT_FOUND),
68 MAKE_PAIR(ACAMERA_ERROR_INVALID_OPERATION),
69 MAKE_PAIR(ACAMERA_ERROR_STREAM_CONFIGURE_FAIL),
71 MAKE_PAIR(ACAMERA_ERROR_MAX_CAMERA_IN_USE),
73 MAKE_PAIR(ACAMERA_ERROR_PERMISSION_DENIED),
77 return GetPairStr<camera_status_t>(err,
errorInfo);
84 using TAG_PAIR = std::pair<acamera_metadata_tag_t, const char*>;
87 MAKE_PAIR(ACAMERA_COLOR_CORRECTION_TRANSFORM),
88 MAKE_PAIR(ACAMERA_COLOR_CORRECTION_GAINS),
89 MAKE_PAIR(ACAMERA_COLOR_CORRECTION_ABERRATION_MODE),
90 MAKE_PAIR(ACAMERA_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES),
92 MAKE_PAIR(ACAMERA_CONTROL_AE_ANTIBANDING_MODE),
93 MAKE_PAIR(ACAMERA_CONTROL_AE_EXPOSURE_COMPENSATION),
97 MAKE_PAIR(ACAMERA_CONTROL_AE_TARGET_FPS_RANGE),
98 MAKE_PAIR(ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER),
105 MAKE_PAIR(ACAMERA_CONTROL_CAPTURE_INTENT),
109 MAKE_PAIR(ACAMERA_CONTROL_VIDEO_STABILIZATION_MODE),
110 MAKE_PAIR(ACAMERA_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES),
111 MAKE_PAIR(ACAMERA_CONTROL_AE_AVAILABLE_MODES),
112 MAKE_PAIR(ACAMERA_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES),
113 MAKE_PAIR(ACAMERA_CONTROL_AE_COMPENSATION_RANGE),
114 MAKE_PAIR(ACAMERA_CONTROL_AE_COMPENSATION_STEP),
115 MAKE_PAIR(ACAMERA_CONTROL_AF_AVAILABLE_MODES),
116 MAKE_PAIR(ACAMERA_CONTROL_AVAILABLE_EFFECTS),
117 MAKE_PAIR(ACAMERA_CONTROL_AVAILABLE_SCENE_MODES),
118 MAKE_PAIR(ACAMERA_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES),
119 MAKE_PAIR(ACAMERA_CONTROL_AWB_AVAILABLE_MODES),
124 MAKE_PAIR(ACAMERA_CONTROL_AE_LOCK_AVAILABLE),
125 MAKE_PAIR(ACAMERA_CONTROL_AWB_LOCK_AVAILABLE),
126 MAKE_PAIR(ACAMERA_CONTROL_AVAILABLE_MODES),
127 MAKE_PAIR(ACAMERA_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE),
128 MAKE_PAIR(ACAMERA_CONTROL_POST_RAW_SENSITIVITY_BOOST),
131 MAKE_PAIR(ACAMERA_EDGE_AVAILABLE_EDGE_MODES),
139 MAKE_PAIR(ACAMERA_HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES),
142 MAKE_PAIR(ACAMERA_JPEG_GPS_PROCESSING_METHOD),
146 MAKE_PAIR(ACAMERA_JPEG_THUMBNAIL_QUALITY),
148 MAKE_PAIR(ACAMERA_JPEG_AVAILABLE_THUMBNAIL_SIZES),
154 MAKE_PAIR(ACAMERA_LENS_OPTICAL_STABILIZATION_MODE),
157 MAKE_PAIR(ACAMERA_LENS_POSE_TRANSLATION),
160 MAKE_PAIR(ACAMERA_LENS_INTRINSIC_CALIBRATION),
161 MAKE_PAIR(ACAMERA_LENS_RADIAL_DISTORTION),
164 MAKE_PAIR(ACAMERA_LENS_INFO_AVAILABLE_APERTURES),
165 MAKE_PAIR(ACAMERA_LENS_INFO_AVAILABLE_FILTER_DENSITIES),
166 MAKE_PAIR(ACAMERA_LENS_INFO_AVAILABLE_FOCAL_LENGTHS),
167 MAKE_PAIR(ACAMERA_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION),
168 MAKE_PAIR(ACAMERA_LENS_INFO_HYPERFOCAL_DISTANCE),
169 MAKE_PAIR(ACAMERA_LENS_INFO_MINIMUM_FOCUS_DISTANCE),
170 MAKE_PAIR(ACAMERA_LENS_INFO_SHADING_MAP_SIZE),
171 MAKE_PAIR(ACAMERA_LENS_INFO_FOCUS_DISTANCE_CALIBRATION),
175 MAKE_PAIR(ACAMERA_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES),
178 MAKE_PAIR(ACAMERA_REQUEST_MAX_NUM_OUTPUT_STREAMS),
179 MAKE_PAIR(ACAMERA_REQUEST_PIPELINE_DEPTH),
180 MAKE_PAIR(ACAMERA_REQUEST_PIPELINE_MAX_DEPTH),
181 MAKE_PAIR(ACAMERA_REQUEST_PARTIAL_RESULT_COUNT),
182 MAKE_PAIR(ACAMERA_REQUEST_AVAILABLE_CAPABILITIES),
183 MAKE_PAIR(ACAMERA_REQUEST_AVAILABLE_REQUEST_KEYS),
184 MAKE_PAIR(ACAMERA_REQUEST_AVAILABLE_RESULT_KEYS),
185 MAKE_PAIR(ACAMERA_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS),
189 MAKE_PAIR(ACAMERA_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM),
190 MAKE_PAIR(ACAMERA_SCALER_AVAILABLE_STREAM_CONFIGURATIONS),
191 MAKE_PAIR(ACAMERA_SCALER_AVAILABLE_MIN_FRAME_DURATIONS),
192 MAKE_PAIR(ACAMERA_SCALER_AVAILABLE_STALL_DURATIONS),
197 MAKE_PAIR(ACAMERA_SENSOR_FRAME_DURATION),
199 MAKE_PAIR(ACAMERA_SENSOR_REFERENCE_ILLUMINANT1),
200 MAKE_PAIR(ACAMERA_SENSOR_REFERENCE_ILLUMINANT2),
201 MAKE_PAIR(ACAMERA_SENSOR_CALIBRATION_TRANSFORM1),
202 MAKE_PAIR(ACAMERA_SENSOR_CALIBRATION_TRANSFORM2),
203 MAKE_PAIR(ACAMERA_SENSOR_COLOR_TRANSFORM1),
204 MAKE_PAIR(ACAMERA_SENSOR_COLOR_TRANSFORM2),
205 MAKE_PAIR(ACAMERA_SENSOR_FORWARD_MATRIX1),
206 MAKE_PAIR(ACAMERA_SENSOR_FORWARD_MATRIX2),
207 MAKE_PAIR(ACAMERA_SENSOR_BLACK_LEVEL_PATTERN),
208 MAKE_PAIR(ACAMERA_SENSOR_MAX_ANALOG_SENSITIVITY),
211 MAKE_PAIR(ACAMERA_SENSOR_NEUTRAL_COLOR_POINT),
214 MAKE_PAIR(ACAMERA_SENSOR_TEST_PATTERN_DATA),
215 MAKE_PAIR(ACAMERA_SENSOR_TEST_PATTERN_MODE),
216 MAKE_PAIR(ACAMERA_SENSOR_AVAILABLE_TEST_PATTERN_MODES),
217 MAKE_PAIR(ACAMERA_SENSOR_ROLLING_SHUTTER_SKEW),
218 MAKE_PAIR(ACAMERA_SENSOR_OPTICAL_BLACK_REGIONS),
219 MAKE_PAIR(ACAMERA_SENSOR_DYNAMIC_BLACK_LEVEL),
220 MAKE_PAIR(ACAMERA_SENSOR_DYNAMIC_WHITE_LEVEL),
223 MAKE_PAIR(ACAMERA_SENSOR_INFO_ACTIVE_ARRAY_SIZE),
224 MAKE_PAIR(ACAMERA_SENSOR_INFO_SENSITIVITY_RANGE),
225 MAKE_PAIR(ACAMERA_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT),
226 MAKE_PAIR(ACAMERA_SENSOR_INFO_EXPOSURE_TIME_RANGE),
227 MAKE_PAIR(ACAMERA_SENSOR_INFO_MAX_FRAME_DURATION),
228 MAKE_PAIR(ACAMERA_SENSOR_INFO_PHYSICAL_SIZE),
229 MAKE_PAIR(ACAMERA_SENSOR_INFO_PIXEL_ARRAY_SIZE),
230 MAKE_PAIR(ACAMERA_SENSOR_INFO_WHITE_LEVEL),
231 MAKE_PAIR(ACAMERA_SENSOR_INFO_TIMESTAMP_SOURCE),
232 MAKE_PAIR(ACAMERA_SENSOR_INFO_LENS_SHADING_APPLIED),
233 MAKE_PAIR(ACAMERA_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE),
237 MAKE_PAIR(ACAMERA_SHADING_AVAILABLE_MODES),
240 MAKE_PAIR(ACAMERA_STATISTICS_FACE_DETECT_MODE),
241 MAKE_PAIR(ACAMERA_STATISTICS_HOT_PIXEL_MAP_MODE),
243 MAKE_PAIR(ACAMERA_STATISTICS_FACE_LANDMARKS),
244 MAKE_PAIR(ACAMERA_STATISTICS_FACE_RECTANGLES),
245 MAKE_PAIR(ACAMERA_STATISTICS_FACE_SCORES),
246 MAKE_PAIR(ACAMERA_STATISTICS_LENS_SHADING_MAP),
247 MAKE_PAIR(ACAMERA_STATISTICS_SCENE_FLICKER),
248 MAKE_PAIR(ACAMERA_STATISTICS_HOT_PIXEL_MAP),
249 MAKE_PAIR(ACAMERA_STATISTICS_LENS_SHADING_MAP_MODE),
252 MAKE_PAIR(ACAMERA_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES),
253 MAKE_PAIR(ACAMERA_STATISTICS_INFO_MAX_FACE_COUNT),
254 MAKE_PAIR(ACAMERA_STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES),
255 MAKE_PAIR(ACAMERA_STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES),
262 MAKE_PAIR(ACAMERA_TONEMAP_MAX_CURVE_POINTS),
263 MAKE_PAIR(ACAMERA_TONEMAP_AVAILABLE_TONE_MAP_MODES),
268 MAKE_PAIR(ACAMERA_INFO_SUPPORTED_HARDWARE_LEVEL),
275 MAKE_PAIR(ACAMERA_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS),
277 MAKE_PAIR(ACAMERA_DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS),
278 MAKE_PAIR(ACAMERA_DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS),
279 MAKE_PAIR(ACAMERA_DEPTH_DEPTH_IS_EXCLUSIVE),
284 return GetPairStr<acamera_metadata_tag_t>(tag,
tagInfo);
296 MAKE_PAIR(AIMAGE_FORMAT_DEPTH_POINT_CLOUD),
303 LOGI(
"MetadataTag (start):");
304 for (int32_t idx = 0; idx < entries; ++idx)
307 GetTagStr(
static_cast<acamera_metadata_tag_t
>(pTags[idx]));
308 LOGI(
"(%#08x) : %s", pTags[idx], name);
310 LOGI(
"MetadataTag (end)");
315 ASSERT(lens.tag == ACAMERA_LENS_FACING,
"Wrong tag(%#x) of %s to %s", lens.tag,
GetTagStr((acamera_metadata_tag_t)lens.tag), __FUNCTION__);
316 LOGI(
"LensFacing: tag(%#x), type(%d), count(%d), val(%#x)", lens.tag, lens.type, lens.count, lens.data.u8[0]);
326 #define MODE_LABLE "ModeInfo:"
327 const char* tagName =
GetTagStr(
static_cast<acamera_metadata_tag_t
>(val.tag));
328 ASSERT(!(val.count & 0x3),
"STREAM_CONFIGURATION (%d) should multiple of 4", val.count);
329 ASSERT(val.type == ACAMERA_TYPE_INT32,
330 "STREAM_CONFIGURATION TYPE(%d) is not ACAMERA_TYPE_INT32(1)",
333 for (uint32_t i = 0; i < val.count; i += 4)
335 LOGI(
"%s: %08d x %08d %s",
GetFormatStr(val.data.i32[i]), val.data.i32[i + 1], val.data.i32[i + 2], val.data.i32[i + 3] ?
"INPUT" :
"OUTPUT");
339 void PrintTagVal(
const char* printLabel, ACameraMetadata_const_entry& val)
341 if (val.tag == ACAMERA_SCALER_AVAILABLE_STREAM_CONFIGURATIONS)
346 const char* name =
GetTagStr(
static_cast<acamera_metadata_tag_t
>(val.tag));
347 for (
int i = 0; i < val.count; ++i)
351 case ACAMERA_TYPE_INT32:
352 LOGI(
"%s %s: %08d", printLabel, name, val.data.i32[i]);
354 case ACAMERA_TYPE_BYTE:
355 LOGI(
"%s %s: %#02x", printLabel, name, val.data.u8[i]);
357 case ACAMERA_TYPE_INT64:
358 LOGI(
"%s %s: %" PRIu64, printLabel, name, (int64_t)val.data.i64[i]);
360 case ACAMERA_TYPE_FLOAT:
361 LOGI(
"%s %s: %f", printLabel, name, val.data.f[i]);
363 case ACAMERA_TYPE_DOUBLE:
364 LOGI(
"%s %s: %" PRIx64, printLabel, name, val.data.i64[i]);
366 case ACAMERA_TYPE_RATIONAL:
367 LOGI(
"%s %s: %08x, %08x", printLabel, name, val.data.r[i].numerator, val.data.r[i].denominator);
370 ASSERT(
false,
"Unknown tag value type: %d", val.type);
383 ACameraIdList* cameraIds =
nullptr;
384 camera_status_t status = ACameraManager_getCameraIdList(cmrMgr, &cameraIds);
387 for (
int i = 0; i < cameraIds->numCameras; ++i)
389 const char*
id = cameraIds->cameraIds[i];
390 LOGI(
"=====cameraId = %d, cameraName = %s=====", i,
id);
391 ACameraMetadata* metadataObj;
392 ACameraManager_getCameraCharacteristics(cmrMgr,
id, &metadataObj);
395 const uint32_t* tags =
nullptr;
396 ACameraMetadata_getAllTags(metadataObj, &count, &tags);
398 for (
int tagIdx = 0; tagIdx < count; ++tagIdx)
400 ACameraMetadata_const_entry val = {
403 camera_status_t status =
404 ACameraMetadata_getConstEntry(metadataObj, tags[tagIdx], &val);
405 if (status != ACAMERA_OK)
407 LOGW(
"Unsupported Tag: %s",
408 GetTagStr(
static_cast<acamera_metadata_tag_t
>(tags[tagIdx])));
414 if (ACAMERA_LENS_FACING == tags[tagIdx])
419 ACameraMetadata_free(metadataObj);
422 ACameraManager_deleteCameraIdList(cameraIds);
429 const uint32_t* tags;
430 ACaptureRequest_getAllTags(req, &count, &tags);
431 for (int32_t idx = 0; idx < count; ++idx)
433 ACameraMetadata_const_entry val;
434 ACaptureRequest_getConstEntry(req, tags[idx], &val);
436 GetTagStr(
static_cast<acamera_metadata_tag_t
>(tags[idx]));
438 for (
int i = 0; i < val.count; ++i)
442 case ACAMERA_TYPE_INT32:
443 LOGI(
"Capture Tag %s: %08d", name, val.data.i32[i]);
445 case ACAMERA_TYPE_BYTE:
446 LOGI(
"Capture Tag %s: %#08x", name, val.data.u8[i]);
448 case ACAMERA_TYPE_INT64:
449 LOGI(
"Capture Tag %s: %" PRIu64, name, (int64_t)val.data.i64[i]);
451 case ACAMERA_TYPE_FLOAT:
452 LOGI(
"Capture Tag %s: %f", name, val.data.f[i]);
454 case ACAMERA_TYPE_DOUBLE:
455 LOGI(
"Capture Tag %s: %" PRIx64, name, val.data.i64[i]);
457 case ACAMERA_TYPE_RATIONAL:
458 LOGI(
"Capture Tag %s: %08x, %08x", name, val.data.r[i].numerator, val.data.r[i].denominator);
461 ASSERT(
false,
"Unknown tag value type: %d", val.type);
void PrintCameraDeviceError(int err)
void PrintCameras(ACameraManager *cmrMgr)
std::pair< int, const char * > DEV_ERROR_PAIR
static std::vector< TAG_PAIR > tagInfo
void PrintLensFacing(ACameraMetadata_const_entry &lens)
#define ASSERT(cond, fmt,...)
void PrintMetadataTags(int32_t entries, const uint32_t *pTags)
const char * GetErrorStr(camera_status_t err)
const char * GetCameraDeviceErrorStr(int err)
void PrintTagVal(const char *printLabel, ACameraMetadata_const_entry &val)
const char * GetPairStr(T key, std::vector< std::pair< T, const char * >> &store)
std::pair< acamera_metadata_tag_t, const char * > TAG_PAIR
void PrintStreamConfigurations(ACameraMetadata_const_entry &val)
const char * GetTagStr(acamera_metadata_tag_t tag)
std::pair< int, const char * > FORMAT_PAIR
static std::vector< DEV_ERROR_PAIR > devErrors
static std::vector< FORMAT_PAIR > formatInfo
std::pair< camera_status_t, const char * > ERROR_PAIR
const char * GetFormatStr(int fmt)
void PrintRequestMetadata(ACaptureRequest *req)
static std::vector< ERROR_PAIR > errorInfo