一、概述
X9H 的开机动画(Boot Animation)功能是在系统上电后最先启动的应用,基于快速启动的要求,它是被放在 FreeRTOS 系统的 Safety 域下。Boot Animation 应用使用 Safety 域的 MJPEG 硬解码引擎,理论上最大支持可达 32768x32768 分辨率的解码,减少 CPU 的占用。
如下操作基于软件版本 SemiDrive PTG3.8 。
如下操作基于软件版本 SemiDrive PTG3.8 。
代码路径位于 freertos/FreeRTOS/SemiDrive_BSP/application/early_app/BootAnimation.
SDK 里面提供的 MJPEG 视频(splash_5760x720_high_quality_3s.mjpeg)分辨率为 5760*720,同时在三个 1920*720 屏幕显示。视频本身的制作形成从左至右贯穿动画的效果。 

该效果的实现主要是依赖于 freertos/FreeRTOS/SemiDrive_BSP/application/early_app/BootAnimation/src/ba_config.c
prect_t g_srcres[] = {
{0,0,1920,720},
{1920,0,1920,720},
{3840,0,1920,720}
};
#if defined (TARGET_X9H_ICL02)
prect_t g_dstdisp[] = {
{0,0,1920,720},
{344,0,1920,720},
{0,0,1920,720},
{0,0,1920,720}
};
#else
prect_t g_dstdisp[] = {
{0,0,1920,720},
{0,0,1920,720},
{0,0,1920,720},
{0,0,1920,720}
};
#endif
g_srcres[] 的功能是将动画划分为 M 个屏播放,每个数组分别包含了各自屏的左上点(0,0)、长(1920)、宽(720);
g_dstdisp[] 设置了每个屏幕播放的实际位置:左上点(0,0)、长(1920)、宽(720),共 N 个屏;
当 src 的某个屏与 dst 的某个屏分辨率一致时,直接播放;如果分辨率不一致,会进行缩放操作后再播放;设置的 M 个屏的动画会依次贯穿到 N 个屏上,其贯穿方式类似默认播放。
二、客制化操作
针对不同的客户,分别会有各自的开机动画需求,根据需求来对开机动画进行客制化操作。
首先,要先了解开机动画文件以及音频文件默认存放的路径为:
freertos/FreeRTOS/FreeRTOS/Demo/CORTEX_R5_SEMIDRIVE_X9/res/early_app/BootAnimation/splash_5760x720_high_quality_3s.mjpeg
freertos/FreeRTOS/FreeRTOS/Demo/CORTEX_R5_SEMIDRIVE_X9/res/early_app/BootAnimation/output_sample.pcm
其次,更换对应的音视频文件之后,需要修改对应的文件名称,目录如下:
freertos/FreeRTOS/SemiDrive_BSP/application/early_app/BootAnimation/inc/animation_config.h
#ifndef _ANIMATION_CONFIG_H_
#define _ANIMATION_CONFIG_H_
#define ANIMATION_FPS 25
#if ENABLE_SERDES
#define BA_PATH "early_app/BootAnimation/splash_5760x720_high_quality_3s.mjpeg"
// #define BA_PATH "early_app/BootAnimation/splash_5760x720_high_quality.mjpeg"
#else
//#define BA_PATH "early_app/BootAnimation/splash_2560x800.mjpeg"
#define BA_PATH "early_app/BootAnimation/splash_5760x720_high_quality_3s.mjpeg"
#endif
#define FA_PATH "early_app/BootAnimation/output_sample.pcm"
#endif
完成更改后执行 make freertos 编译 freertos 代码,编译完成后会生成 safety.bin 固件。
然后执行 make genpac 命令打包固件,会将 freertos/FreeRTOS/FreeRTOS/Demo/CORTEX_R5_SEMIDRIVE_X9/res/early_app/ 目录文件 copy 到 image_X9H_RefA04_NativeAndroid_Serdes_8G_3200/res_img 底下,并打包成 fat_res.img。

完成以上编译后,将生成的固件 safety.bin 及 fat_res.img 烧录到板子上

以上修改便完成了开机动画的客制化实现。
注:动画文件格式必须为 MJPEG ,音频文件格式需为原始数据的 pcm 等格式。
可以通过以下方式将视频文件转换为 MJPEG 格式,在 Ubuntu 下安装 ffmpeg:
执行如下命令,下载软件包
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-20220302-amd64-static/
可以看到有如下目录
pual@ubuntu16:/home/host/ffmpeg-git-20220302-amd64-static$ ll
total 153928
drwxr-xr-x 4 pual pual 4096 Mar 3 01:32 ./
drwxrwxr-x 7 pual pual 4096 Mar 25 09:07 ../
-rwxr-xr-x 1 pual pual 78486176 Mar 3 01:32 ffmpeg*
-rwxr-xr-x 1 pual pual 78384320 Mar 3 01:32 ffprobe*
-rw-r--r-- 1 pual pual 35147 Mar 3 01:32 GPLv3.txt
drwxr-xr-x 2 pual pual 4096 Mar 3 01:32 manpages/
drwxr-xr-x 7 pual pual 4096 Mar 3 00:55 model/
-rwxr-xr-x 1 pual pual 690888 Mar 3 01:32 qt-faststart*
-rw-r--r-- 1 pual pual 2276 Mar 3 01:32 readme.txt
执行 ./ffmpeg 命令可以看到如下输出,说明软件安装完成
pual@ubuntu16:/home/host/ffmpeg-git-20220302-amd64-static$ ./ffmpeg
ffmpeg version N-60837-ge81242bb13-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
libavutil 57. 22.100 / 57. 22.100
libavcodec 59. 21.103 / 59. 21.103
libavformat 59. 17.102 / 59. 17.102
libavdevice 59. 5.100 / 59. 5.100
libavfilter 8. 27.100 / 8. 27.100
libswscale 6. 5.100 / 6. 5.100
libswresample 4. 4.100 / 4. 4.100
libpostproc 56. 4.100 / 56. 4.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Use -h to get full help or, even better, run 'man ffmpeg'
执行如下命令,将 mp4 文件转换成 mjpeg 格式文件
./ffmpeg -i input.mp4 output.mjpeg
如果想要 ffmpeg 命令全局可用,可以在 bin 目录加个链接。比如,分别执行如下命令,即可在:/usr/bin 目录下创建 ffmpeg 软链接。
cd /usr/bin
ln -s /data/software/ffmpeg-git-20190424-amd64-static/ffmpeg ffmpeg
这样在其他目录也都可以直接使用 ffmpeg 和 ffprobe 而不用加目录前缀了。
三、参考文献
《SemiDrive_X9_EarlyAPP描述》
评论