• 【AREngine BUG & 解决方法】无法获取有效的相机图像尺寸


    近期拿了一台 华为mate20 Pro的手机,在运行AR示例的过程中出现了黑屏。

    问题排查

    SDK版本:com.huawei.hms:arenginesdk:3.7.0.3

    定位

    经排查,发现(ARCamera对象的相机内参) getImageDimensions()返回的图像尺寸的width和height都为0。

    这里的期望结果是 1440 x 1080。

    在这里插入图片描述

    API参考

    查阅API参考,发现文档中关于getImageDimensions的描述中,新增以下注意事项:
    在这里插入图片描述
    转至setPreviewSize()方法描述。

    在这里插入图片描述

    解决方法

    修改

    根据API文档的描述,在ARConfigBase创建的地方,调用了config.setPreviewSize(1440,1080);

    但是在后续的步骤中,仍然无法通过getImageDimensions()方法获取到width、height的有效值。

    思考

    此前开发用的Huawei Mate 20,AR示例运行正常。

    这款设备既支持ARCore,又支持AREngine。2018年->2020年期间,华为发布的手机大都支持ARCore。

    现使用Mate 20 Pro,出现黑屏问题。

    猜想
    这可能跟设备有关,支持的设备列表中的设备都是经过验证的。其它机型或许会有问题。

    并未在AREngine的支持设备列表中,找到’Mate 20 Pro’这型号。

    在这里插入图片描述
    AR Engine支持的设备列表

    最终办法

    设置输入预览流分辨率,默认分辨率为(1440x1080),若某些机型在后续的步骤中,无法通过ARCameraIntrinsics对象获取相机尺寸,那就赋默认值。

    ARConfig创建

                config = new ARWorldTrackingConfig(session);
                //设置输入预览流分辨率,默认分辨率为(1440x1080)
                //此外还支持宽高比为4:3的物理相机预览分辨率。
                config.setPreviewSize(1440,1080);
    

    Texture初始化时

            ARCamera arCamera = frame.getCamera();
            ARCameraIntrinsics intrinsics = arCamera.getCameraImageIntrinsics();
            int[] dimensions = intrinsics.getImageDimensions();
            int width ,height ;
            if (ARPlatForm.isArCore()){
                width = dimensions[0];//1440;
                height = dimensions[1];//1080;
            }else{
                if (dimensions[0] == 0 && dimensions[1] == 0){
                    width = 1440;
                    height = 1080;
                }else {
                    width = Math.max(dimensions[1],dimensions[0]);
                    height = Math.min(dimensions[1],dimensions[0]);
                }
            }
    
            cameraTexture = new ExternalTexture(cameraTextureId, width, height);
    
  • 相关阅读:
    香港裸机云多IP服务器都有哪些配置?
    十年沉浮,Web2 到 Web3 的转变之路
    计算机网络基础知识(非常详细)
    深度学习 | CNN卷积核与通道
    九、蜂鸣器
    Vuex笔记
    std::make_shared和new初始化智能指针的区别
    【Linux初阶】Linux环境下的 git 使用 | git的add/commit/push/log/pull/mv/rm/status
    线性代数学习笔记8-1:复数矩阵与Hermite矩阵、酉矩阵、傅里叶矩阵和快速傅里叶变换FFT
    redis常用命令
  • 原文地址:https://blog.csdn.net/qq_41140324/article/details/139300824