Configurer la caméra

ArCameraConfig décrit les propriétés du capteur vidéo sous-jacent, y compris:

  • ID de l'appareil photo
  • Indique si un capteur de profondeur sera utilisé ou non, le cas échéant
  • Direction vers laquelle la caméra est dirigée :
    • frontale (selfie)
    • arrière (monde)
  • Plage de FPS (images par seconde)
  • Dimensions de l'image du processeur
  • Dimension de texture GPU
  • Le cas échéant, indique si la multicaméra stéréo de l'appareil sera utilisée.

Lorsque vous créez une session ARCore, ARCore utilise ArSession_setCameraConfig() pour définir la configuration de la caméra qui correspond le mieux à la liste des configurations disponibles renvoyée par ArSession_getSupportedCameraConfigsWithFilter(). Votre application peut utiliser ArCameraConfigFilter pour affiner les configurations de caméra disponibles pour un appareil donné au moment de l'exécution en les filtrant en fonction des besoins de votre application.

Voici quelques cas d'utilisation courants du filtrage:

  • Fréquence d'images de capture limitée à 30 FPS. Sur les appareils compatibles avec 60 FPS, ARCore donnera la priorité aux configurations de caméra compatibles avec cette fréquence d'images. Pour filtrer toutes les configurations de caméra compatibles avec 60 FPS, appliquez un filtre avec ArCameraConfigFilter_setTargetFps() à l'aide de 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);

  • Empêchez ARCore d'utiliser le capteur de profondeur. Sur les appareils équipés d'un capteur de profondeur compatible, ARCore donne la priorité aux configurations de caméra qui utilisent ce capteur. Pour filtrer toutes les configurations d'appareil photo qui utilisent le capteur de profondeur, appliquez le filtre ArCameraConfigFilter_setDepthSensorUsage() avec AR_CAMERA_CONFIG_DEPTH_SENSOR_USAGE_DO_NOT_USE.

    ArCameraConfigFilter_setDepthSensorUsage(
        session, filter, AR_CAMERA_CONFIG_DEPTH_SENSOR_USAGE_DO_NOT_USE);

  • Sélectionner une autre résolution de texture GPU. Sur les appareils compatibles, ARCore peut fournir des résolutions de texture GPU supplémentaires. Sélectionner une texture GPU de résolution inférieure peut contribuer à améliorer les performances de l'application en réduisant la charge du GPU et les besoins en bande passante de la mémoire, mais cela n'améliorera pas forcément les performances dans tous les cas.

Utiliser les filtres de configuration de l'appareil photo

Suivez ces étapes pour autoriser votre application à filtrer les configurations de caméra.

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

Mode Sans distractions

Vous pouvez également définir le mode formulaire dans la configuration de la session. La mise au point fixe est généralement préférable pour le suivi (et est l'option par défaut d'ARCore sur la plupart des appareils). La mise au point automatique est requise pour les enregistrements, la photographie et la vidéo, et pour faire la mise au point sur des objets à proximité.

Pour en savoir plus, consultez ArConfig_setFocusMode().