emWin - Movie篇

2023-05-16

STemWin版本:544 (ST购买了emWin的license,可以在ST芯片中使用emWin工具包,就叫STemWin)

emWin开发工具包可以转换JPG、BMP、GIF等各种图像为数据文件,格式是以C语言的形式定义的数据结构。

在目标程序中再调用emWin的库函数,以转换后得到的图像数据为参数,将图像或动画显示到屏幕上。

不止于此,emWin还支持视频文件,支持两种格式,一种是专有格式EMF,另一种是AVI文件。

EMF缩写:(E)mWin (M)ovie (F)ile。

EMF文件实际上是单个JPEG文件的组合,开发包里有个JPEG2Movie的工具,可以把很多个JPEG文件组合成一个Movie文件。把这些JPEG图像文件放在一个文件夹里,每个图像就是movie的一帧。

AVI文件,Audio Video Interleave文件,这是微软发明的。

EMF要求:

EMF文件的显示是一帧帧来,所以内存里存放一帧的数据即可,再加上描画过程需要占用些内存。这个和一般的movie文件的描画方法是不同的。

为了支持EMF文件描画,相应功能的程序库功能大概占用22KB flash。 

为了保证显示流畅,要保证每秒至少25帧。

AVI要求:

AVI文件的编码格式要是MJPEG,并且需要包含名为idx1的索引列表。

AVI里面可以包含音频,但这部分不会被emWin处理。

通过FFmpeg.exe创建JPEG文件:这是一个开源软件,使用LGPL或GPL协议,基本上能将各种movie文件转换为所需要的格式,包括单个的JPEG文件。

去官网www.ffmpeg.org下载。

然后在开发工具包里找到JPEG2MovieScripts文件夹,里面有个Prep.bat, MakeMovie.bat和<X_SIZE>x<Y_SIZE>.bat。

Prep.bat由MakeMovie.bat调用,里面设置一些变量,比如:

%OUTPUT%     输出文件夹

%FFMPEG%     ffmpeg程序路径

%JPEG2MOVIE%     JPEG2MOVIE程序的路径。

 %DEFAULT_SIZE%     默认的影音文件分辨率,如果由某个<X_SIZE>x<Y_SIZE>.bat被指定则可以忽略。

%DEFAULT_QUALITY%     默认的影音质量,数字越小质量越高。1表示最好的JPEG图片转换质量。31是最差的。

%DEFAULT_FRAMERATE%     默认转换的每秒帧数。

MakeMovie.bat

这个是控制转换的主bat文件,一般情况下不用更改。需要更改Prep.bat即可。

调用这个bat文件需要一下几个参数:

%1        需要被转换的影音文件

%2 (optional)         转换的JPEG的图片分辨率,如果没指定就是用Prep.bat文件里面默认值。

%3 (optional)         指定图片转换质量,不指定就是用Prep.bat文件里面的默认值。

%4 (optional)         转换帧率。没指定就用默认。

执行MakeMovie.bat得到JPEG文件,然后使用JPEG2Movie创建一个EMF文件。

这个文件能被emWin直接使用。

AVI文件的制作和EMF文件类似。

JPEG转换后,得到一个文件夹,里面都是JPEG文件,运行JPEG2Movie.exe:

选择JPEG所在文件夹,帧率默认40ms每帧,然后转换。

转换后的结果,使用emWin Movie Player进行预览。

下面是播放EMF文件的样例代码:

#if defined(__ICCARM__)
#pragma location="ExtFlashSection"
#else
__attribute__((section(".ExtFlashSection")))
#endif

const unsigned char _acJPEG[1387422UL + 1] = {
....................................
};

void MainTask(void)
{
    int errorcode = 0;
    GUI_MOVIE_HANDLE handle=0;
    GUI_MOVIE_INFO  info;

    /* Initialize the GUI */
    GUI_Init();
    errorcode = GUI_MOVIE_GetInfo(_acJPEG, 1387422UL,  &info);
    if(errorcode) return;
    handle = GUI_MOVIE_Create(_acJPEG, 1387422UL, _cbNotify);
    if(handle==0) return;
    GUI_MOVIE_SetPeriod(handle, info.msPerFrame);
    GUI_MOVIE_Show(handle,  (LCD_GetXSize() - (info.xSize))/2 , (LCD_GetYSize() - (info.ySize) - 30)/2, 1);

    while (1)
    {
        LCD_WaitForDisplayCompletion();
        GUI_Exec1();
        LCD_RefreshRequestedByApplicatyion();
        LCD_WaitForDisplayCompletion();
        GUI_Delay(50);
    }
}

上面的代码请注意:

  1. 变量_acJPEG就是EMF文件的数据,使用生成的EMF文件通过工具包里的Bin2C.exe转换而成。

    这个变量比较大,此处使用的是外部OctoSPI flash存储。也可以使用SD卡来存储这个文件,然后使用GUI_MOVIE_CreateEx来创建Movie handle。

  2. 使用OctoSPI flash可以直接访问外部flash数据,和使用内部flash一样,在线性地址空间中直接地址访问。

    因为是外部flash,所以需要分配一个单独section,在文件头的pragma命令。

    然后在(链接器)linker configuration里配置这个section,使链接后的hex或image文件能正确生成。

  3. while(1)里面的代码,是负责GUI刷新,因为要显示动画,所以要不停刷新。

关于linker配置section的例子:

在IAR工程里使用的stm32l4r9xx_flash.icf文件的相关修改:

/*-Octo-SPI Memory Regions-*/
define symbol __ICFEDIT_region_OSPI_ML1_start__   = 0x90000000;
define symbol __ICFEDIT_region_OSPI_ML1_end__     = 0x9CFFFFFF; /*  2,24 Mbytes for the MB1314 MenuLauncher assets */
define region OSPI_ML1_region   = mem:[from __ICFEDIT_region_OSPI_ML1_start__   to __ICFEDIT_region_OSPI_ML1_end__];
place in OSPI_ML1_region  { section ExtFlashSection };

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

emWin - Movie篇 的相关文章

  • emWin 卡顿 触屏失效 黑屏 解决方法

    emWin初体验 刚学了uC OS体验到了操作系统的方便 xff0c 于是想体验下图形处理第三方的强大 xff0c emWin便是首选 我移植emWin一共遇到了两个问题 1 一直黑屏 最后实在整不出来 xff0c 有点郁闷 把例程和自己的
  • emwin自定义颜色

    颜色管理中已经帮助我们定义了这些颜色 xff0c 但是我们通常会使用自定义的颜色 xff0c 怎么怎么设置值呢 xff1f 通常情况下使用的是BGR颜色 就是蓝色和红色是相反的 GUI SetBkColor 0x00FFaa80 自定义调色
  • emWin - Movie篇

    STemWin版本 xff1a 544 xff08 ST购买了emWin的license xff0c 可以在ST芯片中使用emWin工具包 xff0c 就叫STemWin xff09 emWin开发工具包可以转换JPG BMP GIF等各种
  • ST7701芯片820*320屏幕移植stemwin

    简要说明 如题 公司最近更换820 320屏幕 移植stemwin 使用3线spi通讯 16RGB 这屏幕工作流程为 首先通过3线spi发送初始化指令 之后通过16bitRGB发送像素点 移植过程参考了安富莱 野火 https www nx
  • emWin界面刷新

    1 在对话框回调函数中定时重绘按键 cbDialogHome WM MESSAGE pMsg Switch pMsg gt MsgId Case WM INIT DIALOG WM CreateTimer pMsg gt hWin 0 10
  • 在 iOS4 中 UIWebView 播放视频损坏?

    我有一个从 SDK 2 0 版开始运行的应用程序 我在其中创建并添加 UIWebView 然后加载 mov 的 URL 来播放电影 从 4 0 beta 的早期版本到 4 0 GM 此功能已停止工作 当我现在加载电影时 出现以下错误 插件处
  • MPMoviePlayerController 切换电影导致白闪

    我有一个小的 UIView 显示重复的电影 当用户点击按钮时 另一部电影将被加载并显示在同一个 UIView 中 问题在于 在删除第一部电影和显示第二部电影之间有半秒的 闪现 有没有办法去掉这个 void setUpMovie NSStri
  • 在 Java 中将一系列图像转换为视频?

    目前 功能原型拥有工作所需的一切 一个半透明窗口 可以轻松调整您想要记录的位置的大小 多个线程来管理屏幕截图等 但我需要它完成的最后一项任务却没有完成我几个月了 我需要转换所有转储到我创建的文件夹中的图像temp 一切完成后我将其删除 放入
  • 无法在 Android 2.3.x 或更低版本上使用 Movie 解码某些动画 GIF 文件

    我尝试使用以下代码片段来解码带有 Movie 类的动画 gif 文件 URL url InputStream is null BufferedInputStream bis null url new URL http emos plurk
  • Java:如何从图像数组创建电影?

    我基本上有一个字节矩阵 每行 即 byte 代表一个图像 如何创建一个电影 任何格式 avi mpeg 等等 并将其保存为文件 每个图像可以是以下之一 int JPEG Encoded formats int NV16 YCbCr form
  • R 函数不返回值

    我正在编写我的第一个 R 函数 IMDBmovierating lt function movie link lt paste http www omdbapi com t movie y plot short r json sep jso
  • 使用python进行视频编辑:向有声视频添加背景音乐

    我想在 python 中将背景音乐添加到视频文件 mp4 中 我查看了网络并使用 python 的 moviepy 做了一些技巧 但我没有找到一种将背景音乐添加到已包含音乐的视频文件中的方法 有什么想法如何做到这一点吗 编辑以下 Anil
  • 通过使用 com.googlecode.mp4parser 添加曲目并有内存限制来从文件创建电影?

    我有多个文件中的录音 我正在使用以下命令创建一个连续音频文件com googlecode mp4parser isoparser 1 0 2图书馆 下面是我的代码 String mediaKey isAudio soun vide List
  • Pygame.movi​​e 丢失[重复]

    这个问题在这里已经有答案了 我目前正在使用 RPi 3B 最新的 Raspbian Jessie 进行一个小项目 其中涉及播放短的 mp4 文件 由于 Pygame 似乎支持播放 mpg 文件 因此我将视频转换为该格式 然而 当我尝试导入电
  • 是否可以调整嵌入的 .mov 的大小?

    我嵌入的 mov 剪辑有时比显示它的位置大 所以我想调整剪辑的大小 曾尝试过width and height但这只会改变显示它的区域 它不会调整实际电影的大小 可以调整影片大小吗 如果是 怎么办 是的 您需要scale属性 有 QuickT
  • 从 QuickTime(电影)文件中获取缩略图

    有人知道是否有可能 在 PHP 中 从服务器上的 Quicktime 电影中获取帧 缩略图 类似于通常的 GD 缩略图生成 但适用于 mov 文件 注意 我使用的是 dreamhost 因此我只能通过 Web 面板访问服务器 这看起来很有希
  • 用于创建电影屏幕截图的 PHP 函数/库 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个用户上传电影 MP4 FLV
  • 如何在 Swift 3 中将 UIImage 数组导出为电影?

    我需要导出一组UIImage并制作一部在图像前面放置一些文本的电影 如果可能的话还可以添加音乐 你能帮我提供代码吗 我只找到了一些东西Objective c和旧版本的Swift 这是我对这个问题发布的第一个答案 从 UIImage 创建电影
  • 将视频嵌入到从应用程序的 Documents 文件夹加载到 UIWebView 中的 html 文件中

    我有一个名为的 html 文件videoplay html包含以下内容 p This is demo html file for playing movie file embedded p p p
  • MPMoviePlayerController 的工具栏上有一个自定义按钮

    您可能在 iPhone 中通过 YouTube 观看过视频 普通 MPMoviePlayerController 有上一个 下一个和播放 暂停按钮 Youtube 播放器上有两个额外的按钮 gt 添加到左侧的收藏夹 gt 通过电子邮件发送右

随机推荐

  • Protel99seMEX3

    Protel99se的鼠标增强软件 xff0c 可以实现用鼠标放大与缩小电路图 xff0c 十分方便 xff01 文件 xff1a n459 com file 25127180 478161061 以下内容无关 xff1a 分割线 说起Al
  • 基于C++的http服务端开发

    1 同时支持get post接口请求 2 支持文件流下载接口 完整源代码下载地址 xff1a https download csdn net download GUMU12345 81103130 sample cc Copyright c
  • Psychtoolbox SYNCHRONIZATION FAILURE问题

    参考 xff1a http psychtoolbox org docs SyncTrouble 写这篇文章的原因是自己遇见了这个问题 xff0c 并且换了两台电脑都不行 xff0c 有点烦了 xff0c 决心把它弄清楚是怎么回事 因为我的主
  • vscode写python切换虚拟环境,解释器没有不变的问题

    在用vscode写python代码 xff0c 可以使用anaconda进行虚拟环境的管理 而在vscode中使用Ctrl 43 Shift 43 P的方式调出终端 搜索即可搜索到相关设置 xff0c vscode中的python插件会自动
  • MVVM WPF 绑定颜色

    lt Button Margin 61 34 2 34 Width 61 34 10 34 gt lt Button Background gt lt SolidColorBrush Color 61 34 Binding Path 61
  • Android Handler

    Handler 和 Looper关系 Handler是对我们需要线程执行的一类任务的处理管理类 xff0c 而Looper是android线程所拥有的循环心跳行为的管理类 xff0c 例如主线程就是在一开始就执行了Looper loop x
  • linux 编程 ———网络编程(Socket 编程)客户端与服务端实现源码

    文档声明 xff1a 以下资料均属于本人在学习过程中产出的学习笔记 xff0c 如果错误或者遗漏之处 xff0c 请多多指正 并且该文档在后期会随着学习的深入不断补充完善 感谢各位的参考查看 笔记资料仅供学习交流使用 xff0c 转载请标明
  • 使用vs生成C++动态链接库dll文件----使用C++和C#混合编程

    https blog csdn net qq 30139555 article details 103621955
  • 视觉SLAM作业(四) 相机模型与非线性优化

    视觉SLAM作业 xff08 四 xff09 相机模型与非线性优化 一 图像去畸变 现实生活中的图像总存在畸变 原则上来说 xff0c 针孔透视相机应该将三维世界中的直线投影成直线 xff0c 但是当我们使用广角和鱼眼镜头时 xff0c 由
  • 在TUMVI数据集上测试VINS-Fusion算法

    VINS Fusion算法是一个非常优秀的视觉惯性里程计 但原版VINS Fusion并没有提供与TUM数据集相应的配置文件 因此需要自己进行写yaml文件 修改配置文件 tum mono yaml span class token dir
  • SLAM中的三角测量

    来源 视觉SLAM十四讲 xff0c 作者 高翔 三角测量是SLAM中 xff0c 利用相机运动估计特征点空间位置的过程 本节旨在解决以下问题 xff1a 三角测量的概念三角测量的过程及代码实现 xff1b 三角测量有哪些不确定性如何提高三
  • SLAM 岗位求职与简历书写

    本文学习自B站计算机视觉Life的如何写简历 当前求职背景怎么样 2019计算机直觉算法岗的求职情况为 xff1a 候选人数很多 xff0c 优秀者极少找工作不仅需要实力 xff0c 也需要运气 原因 贸易战影响 xff1a 华为 海康 大
  • SLAM中的后端优化

    本节介绍SLAM中的后端优化过程 一 问题阐述 同时对三维点位置和相机参数进行非线性优化 二 LM法的原理与优势 原理 xff1a 是一种 信赖域 的方法 xff0c 当收敛速度较快时 xff0c 增大信赖域使算法趋向于高斯牛顿法 xff1
  • 运动一致性判断

    直至以来 xff0c SLAM的研究共朝着三个方向努力 xff1a 精度 速度 鲁棒性 尤以鲁棒性居多 通常动态场景中 xff0c 根据IMU测量值与视觉测量值分别进行计算得到的结果会有所不同 因此需要进行一致性的检测 xff0c 以得到真
  • 使用evo工具评测SLAM

    evo是一款用于视觉里程计和slam问题的轨迹评估工具 核心功能是能够绘制相机的轨迹 xff0c 或评估估计轨迹与真值的误差 支持多种数据集的轨迹格式 xff08 TUM KITTI EuRoC MAV ROS的bag xff09 xff0
  • 用VS Code写C语言无法使用`__attribute__(packed)`

    今天 xff0c 在Windows上写C语言程序 xff0c 结果编写的结构体总是无法使用 attribute packed xff0c 导致读取的二进制文件字节对不上 检查CMakeLists txt和代码均没有发现明显错误 typede
  • CURL 基于命令行的浏览器

    CURL 嗯 xff0c 说来话长了 这东西现在已经是苹果机上内置的命令行工具之一了 xff0c 可见其魅力之一斑 1 二话不说 xff0c 先从这里开始吧 xff01 curl http www yahoo com 回车之后 xff0c
  • STM32F429入门(二)

    开始学习嵌入式的第二天 xff0c 发现昨天学习的东西有些遗漏 xff0c 今天要做个补充 x1f60e 那么就从寄存器那一块开始补学吧 xff0c 昨天没有那么仔细地去学习这个知识 xff08 一 xff09 学会看丝印 xff1a 如果
  • VSCode中如何让终端默认在当前文件的路径启动

    VSCode中如何让终端默认在当前文件的路径启动 1 只改变当前工作区的设置2 改变所有打开工程的设置 经常使用VSCode运行调试文件 xff0c 又不想每次都手动cd目录的话 xff0c 可以通过修改设置让终端默认在当前文件的路径启动
  • emWin - Movie篇

    STemWin版本 xff1a 544 xff08 ST购买了emWin的license xff0c 可以在ST芯片中使用emWin工具包 xff0c 就叫STemWin xff09 emWin开发工具包可以转换JPG BMP GIF等各种