oh切换调试多摄像头

1.背景

在开发板上适配了多个摄像头,会对适配的结果进行调试,目前oh自带的系统相机app,代码里直接固定使用 camera_host_config.hcs 里配置的第1个,无法切换到其它摄像头来调试。这篇文章针对这些情况提供一些方法思路和方法。

2.调试方法

2.1.应用中代码切相机

oh自带的系统相机在代码里固定了只能使用第1个,最直接的做法是修改系统相机app的源代码,增加选择切换相机的功能。在oh上没有提供单独的接口来切,它是以选择指定camera id的方式,来初始化PreviewOutput/PhotoOutput/VideoOutput输出流以及CameraInput输入流,达到切换的效果。不管是板载,usb还是远程分布式的相机,操作方法都是一样的。

这里将切相机代码贴上来,供大家参考:

......
let cameraArray: Array<camera.CameraDevice> = [];
// 获取所有相机ID
cameraArray = cameraManager.getSupportedCameras();
let currentCamera: camera.CameraDevice | undefined = undefined;
......

// 从多个相机中选择指定的camera ID,如有2个相机,要从第1个切到第2个,这里改为cameraArray[1]
currentCamera = cameraArray[0];

......
// 获取指定的相机支持的场景模式
let sceneModes: Array<camera.SceneMode> = cameraManager.getSupportedSceneModes(currentCamera);
......

// 获取指定相机设备支持的输出流能力
let cameraOutputCap: camera.CameraOutputCapability = cameraManager.getSupportedOutputCapability(currentCamera, camera.SceneMode.NORMAL_VIDEO);

......

let cameraInput: camera.CameraInput | undefined = undefined;
// 创建指定相机为输入流
cameraInput = cameraManager.createCameraInput(currentCamera);
......

其中最主要的就是用 cameraManager.getSupportedCameras() api获取所有 camera ,在app界面上显示出来,可以选择指定camera去初始化。

需要注意的是,这里只将跟切相机相关的摘出来了,其它的流程还是一样的。

2.2.配置camera_host_config.hcs

在适配板载自带或接入的mipi相机时,会在 camera_host_config.hcs 里配置对应的 ability ,如果在适配完底层后,相机app还没修改完或是不会开发应用,可以修改 camera_host_config.hcs 配置的方法来调试。

hcs 文件中,1个ability就是1个摄像头的规格能力,camera host在启动时会将 ability 按顺序加载进去,在需要调试哪个时,就可以将对应的 ability 调整到前面,然后重新编译镜像,这样在使用相机app时就会读到要调试的。

img

需要注意的是,修改保存hcs文件后,由于缓存的原因,需要删除缓存编译才行,可以在编译前执行下面2条命令:

# 在代码根目录下执行
find ./out -type f -name "*.hcb" -exec rm -v {} \;
find ./out -type f -name "*.cfg" -exec rm -v {} \;

像usb camera可热拔插,host会检测到插上的事件,动态添加到camera设备列表上报上去,在顺序上,hcs 中配置的在前,usb的在后,这就导致应用用第1个camera id时,选择不到usb camera。

如果只是为了调试usb camera的话,这里可以取巧,把所有 camera_host_config.hcs 中配置的板载 ability_* 节点都删除掉,然后重新编译生成镜像。

2.3.使用xts中的validator应用

validator 应用是xts认证中,专门针对无法自动化测试而增加的手动测试的工具,其中有一项是测试camera的,它会加载所有相机,包括板载,usb等,测试包括拍照,录像,旋转,帧率等。这个其实也可以给我们用来测试相机功能。

有两种途径来获取 validator 应用:
1.第一种途径是自己拉社区完成代码编译,具体方法是进入xts的代码路径,执行下面的命令。

# 进入acts目录
cd test/xts/acts

# 在acts下面执行,如果是适配的其它产品,将 `rk3568` 改为对应的产品名。
./build.sh product_name=rk3568 system_size=standard target_subsystem=validator

# 产物输出目录
out/rk3568/suites/acts-validator/testcases/validator.hap

validator.hap 用命令 hdc install 安装到设备上就可以使用了。

2.第二种途径是进入官网兼容性测试套件下载的页面,https://www.openharmony.cn/certification/document/xts/ ,里面有列出不同版本32/64位的下载链接,找到对应版本后,点 ACTS-Validator 下载到本地,用命令 hdc install 安装到设备上即可使用。

img

3.最后

3种方式里,validator在前期调试时是最方便的,能快速测试验证结果;在底层适配完之后,就需要修改或是开发能切换多个摄像头的相机app,此时就需要对camera api比较熟悉了。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐