استفاده از واحد فلش دستگاه در Android NDK (C)

فعال کردن واحد فلاش دستگاه در طول جلسه AR می تواند به بهبود دید کمک کند.

بررسی کنید که پیکربندی فعلی دوربین از فلاش پشتیبانی کند

همه پیکربندی‌های دوربین از فعال کردن واحد فلاش پشتیبانی نمی‌کنند. قبل از فعال کردن فلاش یا ارائه گزینه فعال کردن فلاش به کاربران، مطمئن شوید که واحد فلاش برای پیکربندی دوربین فعال موجود است:

// 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);

واحد فلش را فعال کنید

واحد فلش را با پیکربندی جلسه 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);

فلاش یونیت را غیرفعال کنید

با پیکربندی جلسه 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);
،

فعال کردن واحد فلاش دستگاه در طول جلسه AR می تواند به بهبود دید کمک کند.

بررسی کنید که پیکربندی فعلی دوربین از فلاش پشتیبانی کند

همه پیکربندی‌های دوربین از فعال کردن واحد فلاش پشتیبانی نمی‌کنند. قبل از فعال کردن فلاش یا ارائه گزینه فعال کردن فلاش به کاربران، مطمئن شوید که واحد فلاش برای پیکربندی دوربین فعال موجود است:

// 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);

واحد فلش را فعال کنید

واحد فلش را با پیکربندی جلسه 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);

فلاش یونیت را غیرفعال کنید

با پیکربندی جلسه 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);