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

הפעלת יחידת הפלאש של המכשיר במהלך סשן AR יכולה לשפר את הניראות.

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

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

// Get the camera ID from the current session.
ArCameraConfig* ar_camera_config = NULL;
ArCameraConfig_create(ar_session, &ar_camera_config);
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);

הפעלת יחידת הפלאש

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

ArConfig* ar_config = NULL;
ArConfig_create(ar_session, &ar_config);
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);

השבתת יחידת הפלאש

משביתים את יחידת הפלאש על ידי הגדרת סשן ה-AR באמצעות AR_FLASH_MODE_OFF:

ArConfig* ar_config = NULL;
ArConfig_create(ar_session, &ar_config);
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);