X9H实现四屏开机动画客制化显示实例

一、开发环境介绍

       硬件平台使用的是 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 如何客制化开机动画》

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论