本文分享自中移OneOS微信公众号《万耦中的二次元世界!》,作者:小M哥。
BAD APPLE原本是东方游戏里的一首歌曲,后来被加了一个MAD,由于MAD非常惊艳华丽,使得BAD APPLE被大家喜爱。
在程序员圈子里,有一个传言:“有屏幕的地方,就应该有bad apple”。于是乎,不管是示波器、点阵屏,还是液晶显示器,都表演起了刷bad apple的视频。
![](https://img-blog.csdnimg.cn/19b5b2c66c1a405da683cfa04e9a8978.png)
![](https://img-blog.csdnimg.cn/3048078d120148c986e6a85dcf9fd937.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lit56e7T25lT1M=,size_18,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/edbe28a4f102477ea8490762c51704ed.png)
![](https://img-blog.csdnimg.cn/13d4b1caec334e189dac3ad21c8bc89c.png)
既然万耦开发板上也有屏幕,那么就应该满足“有屏幕的地方就应该有bad apple”的魔咒。
// 基础知识
什么是视频?
视频(Video)泛指将一系列静态影像以电信号的方式加以捕捉、记录、处理、储存、传送与重现的各种技术。
连续的图像变化每秒超过24帧(frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面;
看上去是平滑连续的视觉效果,这样连续的画面叫做视频。
什么是视觉暂留原理?
视觉暂留(Persistence of vision)现象是光对视网膜所产生的视觉在光停止作用后,大脑神经网络中仍保留其影像0.1-0.4秒左右的图像,电影电视的拍摄和放映就是根据这个原理。
原因是视神经的反应速度造成的。
划重点:快速连续地播放图片,由于视觉暂留的原理,给人的感觉就是在播放视频。
![](https://img-blog.csdnimg.cn/bbbbb17a66814c60a42fce1d3fa33dd4.png)
实现方案
根据上面的基础知识,首先需要在万耦开发板上实现图片的显示。
要刷bad apple的视频,肯定需要很多张图片,那么就要解决图片从哪儿来、图片存在哪儿的问题。
先来计算一下一张图片的数据大小,万耦开发板上屏幕是1.3寸240x240像素的TFT屏幕,每一个像素点是16位的,即2个字节。那么一张图片的数据大小就是:240*240*2= 115200,即112.5kB。
按照1秒钟5张图片的速度来播放,这种情况下是能感觉到卡顿的,最好是1秒钟10张图片,能取得较流畅的效果。我们就按照1秒钟5张图片来计算,那么播放1秒钟的视频需要的存储空间为:112.5*5 = 562.5kB。
万耦开发板上的微处理器芯片是STM32L475VGT6,128kB RAM/1024kB Flash,除开系统本身占用的Flash空间之外,应该也就还剩余六七百kB的Flash空间,按照上面计算的存储空间要求,也就能存下不到2秒的视频图片。把图片存在芯片内部的Flash上,这个方案可能就行不通了。
内部的Flash存不下,万耦开发板上还有8MB的外部SPI Flash,计算一下能存多长时间的视频:8*1024/562.5=14.56秒。这才十几秒的视频,满足不了我们的远大理想。
OneOS有非常高效的驱动框架,带来了稳定易用的好处,但是丝毫没有影响性能。
![](https://img-blog.csdnimg.cn/9f4ae0e4f7574d1ea25eaf75d3486069.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lit56e7T25lT1M=,size_15,color_FFFFFF,t_70,g_se,x_16)
这就带来了另外一个实现思路,图片数据放在电脑上面,通过串口以921600的高速波特率将图片数据实时发送到万耦开发板,万耦开发板收到数据后再实时显示出来,只要接收处理数据的速度够快、显示图片的速度够快,就能播放出视频来。由于是在线实时显示,不管多长时间的视频都可以播放出来,即便是个美国队长的电影,也没问题。
![](https://img-blog.csdnimg.cn/dd9b9e3513774e93a62f9cca130e7809.png)
视频文件的转换
上面已经将实现方案大致定下来了,现在来按照既定思路实现以下。
首先去网上找到bad apple的视频,最好是高清的视频,下载到本地,因为我们需要先把视频转换成图