Android CameraX - 获取相机信息(视角,预览图像大小)

4

我正在尝试从旧的Android相机API转换到新的CameraX API。 我正在为增强现实应用程序使用预览模式,并且需要获取一些信息,例如在预览中使用的相机的视角和大小。

这是我的代码:

PreviewConfig config = new PreviewConfig.Builder()
                .setLensFacing(CameraX.LensFacing.BACK)
                .setTargetResolution(new Size(dsiWidth, dsiHeight))
                .build();
Preview preview = new Preview(config);
preview.setOnPreviewOutputUpdateListener(new Preview.OnPreviewOutputUpdateListener() {
            @Override
            public void onUpdated(Preview.PreviewOutput output) {
                tvCameraView.setSurfaceTexture(output.getSurfaceTexture());
            }
        });
CameraX.bindToLifecycle(this, preview);

目前为止,这个可以工作。但是我如何获取Preview使用的相机信息呢?非常感谢您提前的帮助!

1个回答

0

当您使用"androidx.camera:camera-camera2:1.0.0-alpha02" 依赖项时,您可以查看Camera2CameraFactory 类。在那里,您可以了解如何确定前后置摄像头。

    @Override
    public Set<String> getAvailableCameraIds() throws CameraInfoUnavailableException {
        List<String> camerasList = null;
        try {
            camerasList = Arrays.asList(mCameraManager.getCameraIdList());
        } catch (CameraAccessException e) {
            throw new CameraInfoUnavailableException(
                    "Unable to retrieve list of cameras on device.", e);
        }
        // Use a LinkedHashSet to preserve order
        return new LinkedHashSet<>(camerasList);
    }

    @Nullable
    @Override
    public String cameraIdForLensFacing(LensFacing lensFacing)
            throws CameraInfoUnavailableException {
        Set<String> cameraIds = getAvailableCameraIds();

        // Convert to from CameraX enum to Camera2 CameraMetadata
        Integer lensFacingInteger = -1;
        switch (lensFacing) {
            case BACK:
                lensFacingInteger = CameraMetadata.LENS_FACING_BACK;
                break;
            case FRONT:
                lensFacingInteger = CameraMetadata.LENS_FACING_FRONT;
                break;
        }

        for (String cameraId : cameraIds) {
            CameraCharacteristics characteristics = null;
            try {
                characteristics = mCameraManager.getCameraCharacteristics(cameraId);
            } catch (CameraAccessException e) {
                throw new CameraInfoUnavailableException(
                        "Unable to retrieve info for camera with id " + cameraId + ".", e);
            }
            Integer cameraLensFacing = characteristics.get(CameraCharacteristics.LENS_FACING);
            if (cameraLensFacing == null) {
                continue;
            }
            if (cameraLensFacing.equals(lensFacingInteger)) {
                return cameraId;
            }
        }

        return null;
    }

这归结于从相机服务中选择与方向匹配的第一个相机。我认为他们将在未来的CameraX版本中扩展这些API。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接