一、前言
本篇博文为大家带来 Hi3566V100 SDK的业务状态介绍,并且可以在回放状态中实现录像功能的步骤,使用的 SDK 版本是 Hi3562V100_MobileCam_SDK_V2.0.0.2。
二、业务状态
2.1 业务状态简介
行车的典型业务状态有以下四种:
图 2.1 典型业务状态
循环录像模式(NORM_REC)
− 循环录像模式进行普通的循环录像,是行车中最常用的模式。
− 正常开机即会进入循环录像模式,此模式下可以进行VO 预览、启动紧急录像、打开setting。
拍照模式(PHOTO)
正常开机根据保存的参数可以进入拍照模式,此模式下可以进行VO 预览、拍照、打开setting。
回放模式(PLAYBACK)
通过按键或者触摸操作,可以进入回放模式,退出回放,则进入循环录像模式。
停车监控模式(PARKING_REC)
− 打开停车监控功能且设备掉电后,如果发生碰撞,设备开机进入停车监控模式,启动紧急录像;
− 停车监控期间,若没有发生车子点火,则设备重新关机,若发生了车子点火,则切换到循环录像模式。
所以说,按照 SDK 的业务状态,循环录像模式和回放模式是分开的,在进行回放的时候我们是不能进行录像的。
2.2 切换模式
业务状态的基本实现主要包含实现以下五个函数,如果我们发送一个切换模式的消息给系统处理,那么系统就会调用原状态的 exit() 函数,然后调用目标状态的 enter() 函数。
图 2.2 基本状态的实现
三、回放模式实现录像
3.1 回放通路与录像通路
回放的一般通路是:File-VDEC-VPSS-VO
MIPI 摄像头录像的一般通路是:MIPI-VCAP-VPSS-VENC
只要确保这两条通路是通的,就能实现一回放一边录像。但是,如果使用了双摄的话,问题就来了,在 reference 中,VPSS 限制了只能创建 2 个,
但是看上面的通路,回放和录像都使用到了 VPSS,所以此时我们就至少需要创建 3 个 VPSS 来工作。所以首先就要修改 reference 中 VPSS 创建数量的上限,
在 reference/common/media/include/hi_media_comm_define.h 做如下修改:
图3.1 修改 VPSS 上限
然后在配置文件 config_product_mediamode_cam0_comm_record.ini 中增加 VPSS.1 的配置:
图 3.2 增加一个 VPSS
在 config_product_mediamode_cam0_record_1080p30.ini 文件中配置 VPSS.1 各通道的分辨率和帧率,我们这里使用的是第一个通道,所以配 VPSS.1.VPORT.1 就好了:
图 3.3 配置 VPSS 分辨率和帧率
最后在 config_product_workmode_playback.ini 文件中配置 VO 要绑定的 VPSS 通道号:
图 3.4 配置 VO 绑定通道
这样子我们就成功创建了一个在回放模式时绑定到 VO 的 VPSS,VDEC 也会在播放器中自动绑定到这个通道,不需要我们手动去绑定。
3.2 切换模式的修改
我们需要修改的是 playback 模式的 enter 和 record 模式 的 exit 函数。对于 playback 模式的 enter 函数,它会重新把 MediaMode 设置为 playback 的MediaMode,
这样会导致录像中断掉,所以在这里不能修改 MediaMode,但是可以修改 VO,因为录像的通路跟 VO 是无关的,可以在这里调用 PDT_STATEMNG_StartVo 函数将 VO 绑定到刚才设置好的 VPSS2.PORT1 通道。
图 3.5 修改 playback enter 函数
对于 record 模式的 exit 函数,它会停止录像任务,我们只需要不停止录像任务即可:
图 3.6 修改 record exit 函数
四、结果验证
由于我们这边的开发板没有带屏,所以不能回放视频,但是可以在进入回放模式后依然进行录像:
图 4.1 LOG 显示
可以看出进入回放模式后录像任务并没有停止。
参考资料:
【1】《HiMobileCam V2.0 参考设计开发指南.pdf》
【2】《Camera 中间件开发参考.pdf》
评论