שימוש ביחידת ה-Flash של המכשיר ב-Android NDK (C)

הפעלת יחידת ה-Flash של המכשיר במהלך פעילות AR יכולה לשפר את הביצועים החשיפה.

איך בודקים אם ההגדרה הנוכחית של המצלמה תומכת בפלאש

לא כל התצורות של המצלמה תומכות בהפעלה של יחידת הפלאש. לפני הפעלת ה-Flash או מתן אפשרות למשתמשים להפעיל את הפלאש, יש לוודא שיחידת הפלאש זמינה למצלמה הפעילה תצורה:

// Get the camera ID from the current session.
ArCameraConfig* ar_camera_config = NULL;
ArSession_getCameraConfig(ar_session, ar_camera_config);
char* camera_id = NULL;
ArCameraConfig_getCameraId(ar_session, ar_camera_config, &camera_id);
ArCameraConfig_destroy(ar_camera_config);

// Get the camera characteristics.
ACameraManager* camera_manager = ACameraManager_create();
CHECK(camera_manager != NULL);
ACameraMetadata* characteristics = NULL;
camera_status_t status = ACameraManager_getCameraCharacteristics(camera_manager, camera_id, &characteristics);
ArString_release(camera_id);
CHECK(status == ACAMERA_OK);
CHECK(characteristics != NULL);

// Check if flash is supported.
ACameraMetadata_const_entry entry;
status = ACameraMetadata_getConstEntry(characteristics, ACAMERA_FLASH_INFO_AVAILABLE, &entry);
CHECK(status == ACAMERA_OK);
uint32_t is_flash_supported = false;
if (entry.count == 1 && entry.data.u8[0] == ACAMERA_FLASH_INFO_AVAILABLE_TRUE) {
  is_flash_supported = true;
}

ACameraManager_delete(camera_manager);

הפעלת יחידת ה-Flash

כדי להפעיל את יחידת ה-Flash צריך להגדיר את הסשן ב-AR עם AR_FLASH_MODE_TORCH:

ArConfig* ar_config = NULL;
ArSession_getConfig(ar_session, ar_config);
if (is_flash_supported) {
  ArConfig_setFlashMode(ar_session, ar_config, AR_FLASH_MODE_TORCH);
}
CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS);
ArConfig_destroy(ar_config);

השבתה של יחידת ה-Flash

כדי להשבית את יחידת ה-Flash, מגדירים סשן AR עם AR_FLASH_MODE_OFF:

ArConfig* ar_config = NULL;
ArSession_getConfig(ar_session, ar_config);
if (is_flash_supported) {
  ArConfig_setFlashMode(ar_session, ar_config, AR_FLASH_MODE_OFF);
}
CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS);
ArConfig_destroy(ar_config);