Como configurar a câmera

ArCameraConfig descreve as propriedades do sensor de câmera subjacente, incluindo:

  • O ID da câmera
  • Se disponível, se um sensor de profundidade será usado
  • A direção para a qual a câmera está voltada:
    • frontal (selfie)
    • traseira (mundo)
  • Intervalo de QPS (quadros por segundo)
  • Dimensões da imagem da CPU
  • Dimensão de textura da GPU
  • Se estiver presente, se a multicâmera estéreo do dispositivo será usada

Ao criar uma nova sessão do ARCore, ele usa ArSession_setCameraConfig() para definir a configuração da câmera. que melhor corresponde à lista de configurações disponíveis retornada pelo ArSession_getSupportedCameraConfigsWithFilter() Seu app pode usar ArCameraConfigFilter para restringir as configurações de câmera disponíveis para um determinado dispositivo no tempo de execução, filtros de acordo com as necessidades do seu app.

Casos de uso comuns para filtragem incluem:

  • Limitação do frame rate da captura da câmera a 30 QPS. Em dispositivos compatíveis 60 qps, o ARCore priorizará as configurações da câmera com suporte a isso frame rate. Para filtrar todas as configurações de câmera com suporte a 60 QPS, faça o seguinte: aplicar um filtro com ArCameraConfigFilter_setTargetFps() usando 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);

  • Impede que o ARCore use o sensor de profundidade. Em dispositivos com com suporte ao sensor de profundidade, o ARCore prioriza as configurações da câmera que usam a profundidade sensor Para filtrar todas as configurações da câmera que usam o sensor de profundidade, aplique o 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);

  • Como selecionar uma resolução de textura de GPU alternativa. Ativado dispositivos compatíveis, o ARCore pode oferecer resoluções de textura de GPU adicionais. Como selecionar uma textura da GPU de resolução mais baixa pode ajudar a melhorar o desempenho do aplicativo reduzindo a carga da GPU e diminuindo a memória requisitos de largura de banda, embora não seja garantido que ele irá melhorar o desempenho em para todos os casos.

Como usar filtros de configuração da câmera

Siga estas etapas para permitir que seu app filtre as configurações da câmera.

// 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 sem distrações

Também é possível definir o modo de foco na configuração da sessão. O foco fixo geralmente é melhor para rastreamento (e é o padrão do ARCore na maioria dos dispositivos). O foco automático é necessário para gravação, fotografia, videografia e quando objetos próximos precisam para estarem em foco.

Consulte ArConfig_setFocusMode() para mais detalhes.