Configuración de la cámara

ArCameraConfig describe las propiedades del sensor de la cámara subyacente, incluidas las siguientes:

  • El ID de la cámara
  • Si está disponible, se usará un sensor de profundidad
  • La dirección hacia la que apunta la cámara:
    • frontal (selfie)
    • mirando hacia atrás (mundial)
  • Rango de FPS (fotogramas por segundo)
  • Dimensiones de la imagen de la CPU
  • Dimensión de textura de GPU
  • Si está presente, si se usará la multicámara estéreo del dispositivo

Cuando se crea una nueva sesión de ARCore, ARCore usa ArSession_setCameraConfig() para establecer la configuración de la cámara que mejor coincida con la lista de parámetros de configuración disponibles que muestra ArSession_getSupportedCameraConfigsWithFilter(). Tu app puede usar ArCameraConfigFilter para limitar las configuraciones de cámara disponibles para un dispositivo determinado durante el tiempo de ejecución mediante el filtrado según las necesidades de tu app.

Estos son algunos casos de uso comunes para el filtrado:

  • Limitar la velocidad de fotogramas de captura de la cámara a 30 FPS En dispositivos que admiten 60 FPS, ARCore priorizará los parámetros de configuración de la cámara que admitan esa velocidad de fotogramas. Para filtrar todas las configuraciones de la cámara que admiten 60 FPS, aplica un filtro con ArCameraConfigFilter_setTargetFps() mediante 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);

  • Evitar que ARCore use el sensor de profundidad En los dispositivos que tienen un sensor de profundidad compatible, ARCore prioriza la configuración de la cámara que usa ese sensor. Para filtrar todas las configuraciones de la cámara que usan el sensor de profundidad, aplica el filtro ArCameraConfigFilter_setDepthSensorUsage() con AR_CAMERA_CONFIG_DEPTH_SENSOR_USAGE_DO_NOT_USE.

    ArCameraConfigFilter_setDepthSensorUsage(
        session, filter, AR_CAMERA_CONFIG_DEPTH_SENSOR_USAGE_DO_NOT_USE);

  • Selecciona una resolución de textura alternativa de GPU. En los dispositivos compatibles, ARCore puede proporcionar resoluciones de textura de GPU adicionales. Seleccionar una textura de GPU de menor resolución puede ayudar a mejorar el rendimiento de la app, ya que se reduce la carga de la GPU y los requisitos de ancho de banda de la memoria, aunque no se garantiza que el rendimiento en todos los casos.

Cómo usar los filtros de configuración de la cámara

Sigue estos pasos para permitir que tu app filtre los parámetros de configuración de la cámara.

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

Modo Sin distracciones

También puedes establecer el modo de enfoque en la configuración de la sesión. Por lo general, el enfoque fijo es mejor para el seguimiento (y es la configuración predeterminada de ARCore en la mayoría de los dispositivos). Se requiere el enfoque automático para las grabaciones, la fotografía y la videografía, y cuando los objetos cercanos deben estar enfocados.

Para obtener más información, consulta ArConfig_setFocusMode().