赞
踩
Camera 需要快速启动, 以第一时间抓拍到图像,君正官方给的第一帧图像是200ms,实际应用中时间会长不少。
主程序应该放置在 rootfs 中并第一时间加载运行。 例如在 rcS 中, 在环境变量设置完成之后即可运行主程序
主程序依赖的动态库要放在 rootfs 中, 例如 libimp.so
主程序启动后首先初始化视频, 之后可以并行处理其他的业务(比如 P2P、 认证鉴权等等)
如果对某些配置文件有依赖, 例如 config 分区下的配置文件, 可以使用如下的方式探测等待
缩短加载时间的方式就是尽量优化 rootfs 的大小。 有以下几个方面:
非启动必须的资源, 尽量放置在 system 分区中, 例如配网音频, 字库文件等
主程序依赖的动态库, 如果不是启动依赖, 可以放到 system 分区中, 但是要用过dl_open 的方式加载。 例如 libcrypto, 这个库的大小比较大, 只有个别时候才用得到,可以把要的接口简单封装, 然后通过 dl_open 的方式动态调用这些接口。
由于上层与驱动层需要密切配合, 所以, 有些配置信息需要提前配置, 如 sensor
的宽高信息和所配置的 video buffer 个数。
在实际使用过程中,分辨率越高,启动的时间就会越慢
&emsp由于 T31 中有 riscv, riscv 推荐使用高帧率, 但是实际产品帧率通常为 15fps, 那实际的降帧是怎么操作的呢?
Riscv 中的帧率由 Sensor 初始化序列决定, 也就是tools/make_tag/sensor_init_setting 文件夹中对应的 Sensor 初始化序列决定。
在内核期间, ISP 驱动中, 我们提供了一些回调以及 API, 如tx_isp_frame_done_int_hander 回调函数, 该回调函数是硬件产生 frame done 中断之后, 每产生一个中断, 则会回调该函数, count 为 1 开始计数。
我们可以在该回调函数中来切换帧率, 由于 Sensor 一般配置都是隔帧生效, 所以通常在第一帧的时候设置帧率, 实际在第 3 帧的时候生效。 这样做的目的是前两帧还是高帧率出图, 第 3 帧切到 15fps, 如果存在前两帧图像效果较差的话, 我们可以将其丢弃, 从而提高第一帧图像出图速度。
内核时间打印可以通过 DEBUG_TTFF();来打印对应的时间, 该时间从上电开始计时。
部分 sensor 由于帧率达不到很高, risc-v 中统计的帧数不是很多, 在内核默认是等 6 帧, 有可能会出现等的时间较长, 这个时候, 可以将tx-isp-fast.c 文件中的frame_count 值降低
247 timeout = 1000;
248 while(timeout--) {
249 ret = tx_isp_get_riscv_framecount(&frame_count);
250 if(ret < 0) {
251 printk("Error: %s tx_isp_get_riscv_framecount failed ret:%d\n", __func__, ret);
252 return ret;
253 }
254
255 if((frame_count >= 6) && (frame_count != -1))
256 break;
257
258 mdelay(1);
259 }
260
261 DEBUG_TTFF("wait 8 frame done");
内核默认丢帧参数配置的是两帧, 要求是至少丢一帧, 所以在优化出图时间的时候, 可以将丢帧参数改为一帧, 只要图像没有明显异常即可。 这样可以优化一帧的时间。 另外, 上面提到的帧率切换, 帧率切换配合丢帧来操作, 丢弃的帧跑较高帧率,这样可以节省一定时间。
######################2022.08.28######################
该博客将停止更新
新的文章内容和附件工程文件
请到 liwen01 博客首页信息查询
liwen01 2022.08.28 日更新
######################2022.08.28######################
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。