【Hi3566V100】单摄像头抓拍教程

一、前言

继上期我们调试了 AutoPhy 以后继续回应用程序这边,这次要介绍的是抓拍功能,经过测试发现,当连接双摄时能正常抓拍,但是单独连接其中一路摄像头时触发抓拍就会出现系统卡住的情况。本篇文章的目的就是给大家解决单独连接一路摄像头时抓拍失败的问题。使用的软件 SDK 版本是 Hi3562V100_MobileCam_SDK_V2.0.0.2。

 

二、抓拍功能介绍

2.1 抓拍通路

使用单个 PIPE 完成抓拍的典型数据通路如下:

图 2.1 抓拍数据通路

通过图中可以看出,抓拍是通过一个 PIPE 来完成的,在 Defensor 方案的 Reference 层中,会把这个 PIPE 绑定到一个 VPSS 中,然后这个 VPSS 后面绑定 4 个 VENC 编码通道,这四个编码通道分别用来录像、预览、拍照、截取缩略图。各个编码通道的分辨率可以自由设置,这就是单个 Sensor 的数据通路了。

 

2.2 功能描述

拍照管理模块在 Reference 层中的逻辑地位如下:

图 2.2 拍照管理模块

       由上图可以看出,抓拍是可以由事件触发的,当触发了一次抓拍事件时,系统会立即启动拍照任务,从编码 JPEG 格式的编码通道中取出一帧,

再由文件系统来创建一个文件名,把这一帧数据保存到这个文件里,最后停止拍照任务,这样就是一次完整的抓拍事件。

 

 

 

三、单摄抓拍

3.1 仅连接 DMS 抓拍

由于  Defensor 的设计拥有 DVR、DMS 前后两个摄像头,所以可能存在只接其中一个的情况,经过测试,只连接其中一个摄像头触发抓拍的话,

APP 就会立即卡住,无法再进行任何操作,紧接着会断开连接,以下是触发抓拍的 log:



图 3.1 仅连接 DVR


图 3.1 单摄触发抓拍 log

从 log 中的时间就可以看出,因为没有接 Cam0,所以系统一直在等待 Cam0 完成抓拍,足足等待了 45 秒才强制关闭 Cam0 的拍照任务,且在这期间在 APP 上不能控制任何功能,这明显是不合理的。

 

3.2 解决方法

其实解决的方法很简单,就是跟踪代码找到实现拍照事件的 API 接口,在这个接口内我们再加一个判断条件,比如在开始拍照任务前先判断每个摄像头是否在进行录像任务,因为如果摄像头是正常工作的话,是会一直进行录像任务的,如果没有进行录像任务,即认为该路摄像头存在问题,跳过该路摄像头的拍照任务即可。

具体修改的地方是 product_statemng_msgproc_rec.c 文件里的 PDT_STATEMNG_RecStateProcTakePhotoMsg 接口,修改如下:

图 3.2 修改方案

 

 四、结果验证

重新编译 reference,烧写镜像到板端,可以从 log 中看到已经跳过了 Cam0 的拍照任务,APP 也不会因此而卡死:

图 4.1 修复 log

 

参考资料:

【1】《HiMobileCam V2.0参考设计开发指南.pdf》

【2】《抓拍使用指南.pdf》

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论