CameraConfig
descreve as propriedades do
sensor da câmera subjacente, incluindo:
- O ID da câmera
- Se disponível, se um sensor de profundidade será usado
- Para onde a câmera está voltada:
- voltado para frente (selfie)
- traseira (mundo)
- Intervalo de QPS (quadros por segundo)
- Dimensões da imagem da CPU
- Dimensão de textura da GPU
- Se presente, informa se o dispositivo com várias câmeras estéreo será usado
Ao criar uma nova sessão, o ARCore usa
setCameraConfig
para definir a configuração da câmera
que melhor corresponde à lista de configurações disponíveis retornada por
getSupportedCameraConfigs(CameraConfigFilter)
.
Seu app pode usar CameraConfigFilter
para restringir as configurações de câmera disponíveis para um determinado dispositivo durante a execução,
filtrando com base nas necessidades do app.
Casos de uso comuns para filtragem incluem:
Limitando o frame rate de captura da câmera a 30 QPS. Em dispositivos com suporte a 60 QPS, o ARCore vai priorizar as configurações da câmera que oferecem suporte a esse frame rate. Para filtrar todas as configurações de câmera compatíveis com 60 QPS, aplique um filtro com
setTargetFps
usandoTargetFps.TARGET_FPS_30
.Java
// Return only camera configs that target 30 FPS camera capture frame rate. filter.setTargetFps(EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30));
Kotlin
// Return only camera configs that target 30 FPS camera capture frame rate. filter.targetFps = EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30)
Impedir que o ARCore use o sensor de profundidade. Em dispositivos que têm um sensor de profundidade com suporte, o ARCore prioriza as configurações da câmera que usam o sensor de profundidade. Para filtrar todas as configurações da câmera que usam o sensor de profundidade, aplique o filtro
setDepthSensorUsage
usandoDepthSensorUsage.DO_NOT_USE
.Java
// Return only camera configs that will not use the depth sensor. filter.setDepthSensorUsage(EnumSet.of(CameraConfig.DepthSensorUsage.DO_NOT_USE));
Kotlin
// Return only camera configs that will not use the depth sensor. filter.depthSensorUsage = EnumSet.of(CameraConfig.DepthSensorUsage.DO_NOT_USE)
Como selecionar uma resolução de textura de GPU alternativa. Em dispositivos compatíveis, o ARCore pode oferecer outras resoluções de textura de GPU. A seleção de uma textura de GPU de resolução mais baixa pode ajudar a melhorar o desempenho do app reduzindo a carga da GPU e os requisitos de largura de banda da memória. No entanto, não é garantido que melhore o desempenho em todos os casos.
Como usar filtros de configuração da câmera
Siga estas etapas para que seu app filtre as configurações da câmera.
Java
// Create a camera config filter for the session. CameraConfigFilter filter = new CameraConfigFilter(session); // Return only camera configs that target 30 fps camera capture frame rate. filter.setTargetFps(EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30)); // Return only camera configs that will not use the depth sensor. filter.setDepthSensorUsage(EnumSet.of(CameraConfig.DepthSensorUsage.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. List<CameraConfig> cameraConfigList = session.getSupportedCameraConfigs(filter); // 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. session.setCameraConfig(cameraConfigList.get(0));
Kotlin
// Create a camera config filter for the session. val filter = CameraConfigFilter(session) // Return only camera configs that target 30 fps camera capture frame rate. filter.targetFps = EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30) // Return only camera configs that will not use the depth sensor. filter.depthSensorUsage = EnumSet.of(CameraConfig.DepthSensorUsage.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. val cameraConfigList = session.getSupportedCameraConfigs(filter) // 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. session.cameraConfig = cameraConfigList[0]
Modo sem distrações
Você também pode 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 estar em foco.
Consulte Config.FocusMode
para ver mais detalhes.