Настройка камеры

ArCameraConfig описывает свойства базового датчика камеры, в том числе:

  • Идентификатор камеры
  • Если доступен, будет ли использоваться датчик глубины.
  • Направление камеры:
    • фронтальная (селфи)
    • лицом назад (мир)
  • Диапазон FPS (кадров в секунду)
  • Размеры образа процессора
  • Размер текстуры графического процессора
  • Если присутствует, будет ли использоваться стереомногокамера устройства.

При создании нового сеанса ARCore ARCore использует ArSession_setCameraConfig() для установки конфигурации камеры, которая лучше всего соответствует списку доступных конфигураций, возвращаемых ArSession_getSupportedCameraConfigsWithFilter() . Ваше приложение может использовать ArCameraConfigFilter чтобы сузить доступные конфигурации камеры для данного устройства во время выполнения путем фильтрации на основе потребностей вашего приложения.

Общие случаи использования фильтрации включают в себя:

  • Ограничение частоты кадров при захвате камеры до 30 кадров в секунду . На устройствах, поддерживающих частоту кадров 60 кадров в секунду, ARCore будет отдавать приоритет конфигурациям камер, поддерживающим эту частоту кадров. Чтобы отфильтровать все конфигурации камеры, поддерживающие 60 кадров в секунду, примените фильтр с помощью ArCameraConfigFilter_setTargetFps() используя AR_CAMERA_CONFIG_TARGET_FPS_30 .

    // Return only camera configs that target 30 FPS camera capture frame
    // rate.
    ArCameraConfigFilter_setTargetFps(session, filter,
                                      AR_CAMERA_CONFIG_TARGET_FPS_30);

  • Запретите ARCore использовать датчик глубины . На устройствах с поддерживаемым датчиком глубины ARCore отдает приоритет конфигурациям камеры, использующим датчик глубины. Чтобы отфильтровать все конфигурации камеры, использующие датчик глубины, примените фильтр ArCameraConfigFilter_setDepthSensorUsage() с помощью AR_CAMERA_CONFIG_DEPTH_SENSOR_USAGE_DO_NOT_USE .

    ArCameraConfigFilter_setDepthSensorUsage(
        session, filter, AR_CAMERA_CONFIG_DEPTH_SENSOR_USAGE_DO_NOT_USE);

  • Выбор альтернативного разрешения текстуры графического процессора . На поддерживаемых устройствах ARCore может обеспечивать дополнительное разрешение текстур графического процессора. Выбор текстуры графического процессора с более низким разрешением может помочь повысить производительность приложения за счет снижения нагрузки на графический процессор и снижения требований к пропускной способности памяти, хотя это не гарантирует повышения производительности во всех случаях.

Использование фильтров конфигурации камеры

Выполните следующие действия, чтобы ваше приложение могло фильтровать конфигурации камеры.

// Create an ARCore session.
ArSession* session;
ArSession_create(env, context, &session);

// Create a camera config list and filter for the session.
ArCameraConfig* selected_config;
ArCameraConfigList* configs;
ArCameraConfigFilter* filter;
ArCameraConfig_create(session, &selected_config);
ArCameraConfigList_create(session, &configs);
ArCameraConfigFilter_create(session, &filter);

// Return only camera configs that target 30 fps camera capture frame rate.
ArCameraConfigFilter_setTargetFps(session, filter,
                                  AR_CAMERA_CONFIG_TARGET_FPS_30);

// Return only camera configs that will not use the depth sensor.
ArCameraConfigFilter_setDepthSensorUsage(
    session, filter, AR_CAMERA_CONFIG_DEPTH_SENSOR_USAGE_DO_NOT_USE);

// Get list of configs that match filter settings.
// In this case, this list is guaranteed to contain at least one element,
// because both TargetFps.TARGET_FPS_30 and DepthSensorUsage.DO_NOT_USE
// are supported on all ARCore supported devices.
ArSession_getSupportedCameraConfigsWithFilter(session, filter, configs);

// Use element 0 from the list of returned camera configs. This is because
// it contains the camera config that best matches the specified filter
// settings.
ArCameraConfigList_getItem(session, configs, 0, selected_config);

// Set the camera config to use selected_config.
ArSession_setCameraConfig(session, selected_config);

// Free memory.
ArCameraConfigFilter_destroy(filter);
ArCameraConfigList_destroy(configs);

Режим фокусировки

Вы также можете установить режим фокусировки в конфигурации сеанса. Фиксированный фокус обычно лучше подходит для отслеживания (и это значение ARCore по умолчанию на большинстве устройств). Автоматическая фокусировка необходима для записи, фото- и видеосъемки, а также когда близлежащие объекты должны быть в фокусе.

Подробности смотрите ArConfig_setFocusMode() .