一、开发环境介绍
硬件平台使用的是 Semidrive SD003_X9H REF_A04 DEMO Board。
软件环境使用的是 X9 PTG 3.9。
二、四屏开机动画拼接的实现
1. 动画资源制作
由于 Simidrive X9 平台内部默认使用的是 MJPEG 硬解码引擎,所以我们需要将动画资源转换为 MJPEG 格式的视频。并且使用的四个屏幕的分辨率都为 1920 * 720,那么四个屏拼接的的动画分辨率应为 7680 * 720。
视频格式的转换可以在 Linux 环境下使用 FFmpeg 工具,可以将常用的视频格式转换为 mjpeg 格式,我这里是将 mp4 格式转换为 mjpeg 格式,方法如下:
① 执行如下命令,下载软件包
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
以上便完成了将 input.mp4 视频转换为 output.mjpeg,output.mjpeg 就是我们所需要的开机动画资源。
2. 软件代码修改
① 首先明确 SDK 中开机动画资源存放路径:rtos/freertos_safetyos/res/early_app/BootAnimation/
如上所示,splash_5760x720_high_quality_3s.mjpeg 和 fast_audio_pcm.bin 为系统默认开机动画及开机音频。这里需要手动将前面生成的 output.mjpeg 替换掉 splash_5760x720_high_quality_3s.mjpeg。
② 其次,还需要修改代码,将默认的名称修改为 output.mjpeg,路径如下:rtos/freertos_safetyos/application/early_app/BootAnimation/inc/animation_config.h
#ifndef _ANIMATION_CONFIG_H_
#define _ANIMATION_CONFIG_H_
#define ANIMATION_FPS 25
#define BA_NUMBER 1
static const char *BA_PATH[BA_NUMBER] = {"early_app/BootAnimation/output.mjpeg"};
#define FA_PATH "early_app/BootAnimation/fast_audio_pcm.bin"
#define TU_PATH "early_app/BootAnimation/turn_pcm.bin"
#define WA_PATH "early_app/BootAnimation/warning_pcm.bin"
#endif
③ 接下来还需要修改以下代码,实现四个 1920 * 720 屏幕显示, rtos/freertos_safetyos/application/early_app/BootAnimation/src/ba_config.c
#if defined (TARGET_X9H_ICL02)
static frame_element_t frame_element[] = {
{0, {0, 0, 1920, 720}, 0, {0, 0, 1920, 720}},
{0, {1920, 0, 1920, 720}, 1, {344, 0, 1920, 720}},
{0, {3840, 0, 1920, 720}, 2, {0, 0, 1920, 720}},
{0, {0, 0, 0, 0}, 3, {0, 0, 1920, 720}},
};
#elif defined(TARGET_X9U_B)
static frame_element_t frame_element[] = {
{0, {0, 0, 1920, 720}, 0, {0, 0, 1920, 720}},
{0, {1920, 0, 1920, 720}, 1, {0, 0, 1920, 720}},
{0, {3840, 0, 1920, 720}, 2, {0, 0, 1920, 720}},
};
#else
static frame_element_t frame_element[] = {
{0, {0, 0, 1920, 720}, 0, {0, 0, 1920, 720}},
{0, {1920, 0, 1920, 720}, 1, {0, 0, 1920, 720}},
{0, {3840, 0, 1920, 720}, 2, {0, 0, 1920, 720}},
//{0, {0, 0, 0, 0}, 3, {0, 0, 1920, 720}},
{0, {5760, 0, 1920, 720}, 3, {0, 0, 1920, 720}},
};
#endif
通过以上步骤,便实现了四屏开机动画的客制化显示。
原图 ( 7680*720 ):
显示效果:
三、参考文献
《CentOS 、Ubuntu安装ffmpeg(超简单,只需两步)》
《SemiDrive_X9_EarlyAPP描述》
《【Semidrive】X9H 如何客制化开机动画》
评论