本篇博文给大家带来 Semidrive X9H 平台上设定多个开机动画的操作介绍,硬件环境用的是 X9H_ref04 开发板,软件版本是 PTG4.0。
一、开机动画属性
首先来看看 X9H 开机动画默认的配置是怎样的,开机动画 app 存放在 freertos_safety/application/early_app/BootAnimation 目录中,
其中 animation.c 是开机动画入口函数所在文件,通过创建多个线程进行视频解码、视频播放、音频播放这几个操作。
- 我们接下来要讲的是视频播放这一块,首先在 ba_config.h 中配置了结构体 frame_element 来绑定动画与屏的关系:
该结构体的定义如下:
res_id 表示指定的动画 ID,0 代表第一个动画,1 代表第二个动画,依此类推,最多写3;
dst_id 表示指定的屏幕 ID,0 代表 cluster 屏,1 代表 IVI 屏,2代表entertainment屏,3代表 contronpanel 屏;
bScale 表示进行缩放的,代码会自动判断,用户无需关心;
src_rect 表示指定动画裁剪播放的尺寸大小,dst_rect 表示指定屏幕裁剪显示的尺寸大小,这两个都是通过坐标点来进行标定,其中两者都调用了同一个结构体prect_t,定义如下:
x、y 表示动画或屏幕左上的起始坐标区域,w、h 表示动画或屏幕右下重点坐标区域,比如动画是 1920*720,同时屏幕分辨率也是 1920*720,动画在屏幕上正好全屏播放,x-w之间的宽度就是1920,y-h之间的高度就是720。
这里需要注意的是动画 ID 和屏幕 ID 不能乱序,ID 只能从小到大,不能交叉,否则动画会无法显示。
- 在 animation_config.h 文件中定义了动画的数量和动画的文件路径:
BA_NUMBER 即为要播放动画个数,上限是 4,BA_PATH 中填写对应数量的动画文件路径即可。
二、制作开机动画
- 开机动画文件格式必须为 mjpeg 格式,且必须要有时长,若该文件没有时长则无法播放,mjpeg 文件可以通过 ffmpeg 工具将 mp4 文件转换而来,可通过以下命令获取并安装软件包:
$ wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz
$ xz -d ffmpeg-git-amd64-static.tar.xz
$ tar -xvf ffmpeg-git-amd64-static.tar
$ cd ffmpeg-git-xxxxxxxx-amd64-static/
通过以下命令可将 mp4 文件转换成特定分辨率的 mp4 文件:
$ ./ffmpeg -i test.mp4 -vf scale=5760:720 test_5760_720.mp4 -hide_banner
然后再通过以下命令将 mp4 文件转成 mjpeg 文件:
./ffmpeg -i test_5760_720.mp4 test_5760_720.mjpeg
- Mjpeg 文件制作好后,把文件放到 res/early_app/BootAnimation/ 目录下,然后在 animation_config.h 中添加上去,再在 ba_config.h 中修改动画 ID 就可以了。
- 根据我上面的代码可以看出,我使用了两个开机动画分别在 IVI 和 entertainment 屏上播放,测试的效果如下:
可以看出,两个屏成功显示了两个不同的开机动画。
那么本次使用多个开机动画的介绍就到这里了,感谢大家的浏览!
参考文档
【1】《Semidrive_开机动画应用指南.docx》
评论