Configuración de la cámara

ArCameraConfig describe las propiedades del elemento sensor de la cámara subyacente, que incluye lo siguiente:

  • El ID de la cámara
  • Si está disponible, indica si se usará un sensor de profundidad
  • La dirección a la que apunta la cámara:
    • frontal (selfie)
    • orientado hacia atrás (en todo el mundo)
  • Rango de FPS (fotogramas por segundo)
  • Dimensiones de la imagen de la CPU
  • Dimensión de la textura de la GPU
  • Si está presente, indica 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 devuelve ArSession_getSupportedCameraConfigsWithFilter() Tu app puede usar ArCameraConfigFilter para reducir los parámetros de configuración disponibles de la cámara para un dispositivo determinado en el tiempo de ejecución filtrado según las necesidades de tu app.

Entre los casos de uso comunes para el filtrado, se incluyen los siguientes:

  • Limitar la velocidad de fotogramas de captura de la cámara a 30 FPS. En dispositivos compatibles 60 FPS, ARCore priorizará las configuraciones de cámara que admitan eso velocidad de fotogramas. Para filtrar todas las configuraciones de cámara que admiten 60 FPS, haz lo siguiente: aplicar un filtro con ArCameraConfigFilter_setTargetFps() con 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);

  • Evita que ARCore use el sensor de profundidad. En los dispositivos que tienen con un sensor de profundidad compatible, ARCore prioriza las configuraciones de la cámara que usan la profundidad sensor. Para filtrar todos los parámetros de configuración de la cámara que usan el sensor de profundidad, aplica el filtro ArCameraConfigFilter_setDepthSensorUsage() filtro usando 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 alternativa de textura de GPU. Activada dispositivos compatibles, ARCore puede proporcionar resoluciones adicionales de textura de GPU. Selección de una textura de GPU de menor resolución puede ayudar a mejorar el rendimiento de la app reduciendo la carga de la GPU y la memoria de ancho de banda, aunque no se garantiza que mejore el rendimiento en 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 de enfoque

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 el valor predeterminado de ARCore en la mayoría de los dispositivos). Se requiere el enfoque automático para grabar, tomar fotografías y videografías, y cuando los objetos cercanos necesiten tengan el foco puesto.

Consulta ArConfig_setFocusMode() para conocer los detalles.