emWin - Movie篇

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 };

DSP和标准外设库: 资源编号 : STSW-STM32065 资源名称 : STM32F4 DSP and standard peripherals library 文件名 : stm32_f105-07_f2_f4_usb-host-device_lib.zip 下载地址 : http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257901# USB库: 资源编号 : STSW-STM32046 资源名称 : STM32F105/7, STM32F2 and STM32F4 USB on-the-go Host and device library (UM1021) 文件名 : stm32_f105-07_f2_f4_usb-host-device_lib.zip 下载地址 : http://www.st.com/web/en/catalog/tools/PF257882 ETH以太网库: 资源编号 : STSW-STM32046 资源名称 : LwIP TCP/IP stack demonstration for STM32F4x7 microcontrollers (AN3966) 文件名 : stsw-stm32070.zip 下载地址 : http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257906 【CMSIS】 Cortex微控制器软件接口程序(Cortex Microcontroller Software Interface Standard (CMSIS). ) 版本: V4.2 发布日期: 31. July 2014 【STM32F4xx_StdPeriph_Driver】 STM32F40x系列CPU标准外设驱动程序 版本: V1.5.0 发布日期: 06-March-2015 【STM32_USB_OTG_Driver】 STM32F105/7xx, STM32F2xx and STM32F4xx USB Device Library 版本: V2.1.0 发布日期: 2012-03-19 【STM32_USB_Device_Library】 STM32F105/7xx, STM32F2xx and STM32F4xx USB Device Library 版本: V1.1.0 发布日期: 2012-03-05 【STM32_USB_HOST_Library】 STM32F105/7xx, STM32F2xx and STM32F4xx USB Host Library 版本: V2.1.0 发布日期: 2012-03-19 【STM32F4x7_ETH_Driver】 STM32F4x7 Eth Library 版本: V1.1.0 发布日期: 31-July-2013 ********************************************************************************************************* * * 版 本 : V1.0 * 说 明 : 本实验主要实现FreeRTOS+STemWin+FatFS+USB Host综合 * 实验目的: * 1. 学习FreeRTOS+STemWin+FatFS+USB Host综合 * 2. 这里的USB Host主要实现U盘相关处理,支持U盘热插拔。 * 用户可以根据需要在usb_usr.c文件中的插入检测函数: * USBH_USR_Configuration_DescAvailable或者函数USBH_USR_Init函数加入插入标志 * 拔出检测函数: * USBH_USR_DeviceDisconnected * 实验内容: * 1. 按下按键K1可以通过串口打印任务执行情况(波特率115200,数据位8,奇偶校验位无,停止位1) * ================================================= * 任务名 任务状态 优先级 剩余栈 任务序号 * vTaskUserIF R 2 272 2 * vTaskGUI R 1 657 1 * IDLE R 0 113 6 * vTaskMsgPro B 4 1957 4 * vTaskLED B 3 483 3 * vTaskStart B 5 489 5 * * * 任务名 运行计数 使用率 * vTaskUserIF 5583 1% * vTaskGUI 10782 2% * IDLE 355589 91% * vTaskLED 0 <1% * vTaskMsgPro 16770 4% * vTaskStart 17 <1% * 串口软件建议使用SecureCRT(V6光盘里面有此软件)查看打印信息。 * 各个任务实现的功能如下: * vTaskGUI 任务: emWin任务 * vTaskTaskUserIF 任务: 接口消息处理 * vTaskLED 任务: LED闪烁 * vTaskMsgPro 任务: U盘中文件处理和浏览 * vTaskStart 任务: 启动任务,也就是最高优先级任务,这里实现按键扫描和触摸检测 * 2. 任务运行状态的定义如下,跟上面串口打印字母B, R, D, S对应: * #define tskBLOCKED_CHAR ( 'B' ) 阻塞 * #define tskREADY_CHAR ( 'R' ) 就绪 * #define tskDELETED_CHAR ( 'D' ) 删除 * #define tskSUSPENDED_CHAR ( 'S' ) 挂起 * 3. 本实验的USB Host主要是对U盘的操作,通过电脑端的串口软件SecureCRT软件, * 给板子发送相关命令实现操作,具体实现在demo_fatfs文件里面。 * printf("请选择操作命令:\r\n"); * printf("1 - 显示根目录下的文件列表\r\n"); * printf("2 - 创建一个新文件armfly.txt\r\n"); * printf("3 - 读armfly.txt文件的内容\r\n"); * printf("4 - 创建目录\r\n"); * printf("5 - 删除文件和目录\r\n"); * printf("6 - 读写文件速度测试\r\n"); * printf("7 - 挂载U盘\r\n"); * printf("8 - 卸载U盘\r\n"); * 注意事项: * 1. 本实验推荐使用串口软件SecureCRT,要不串口打印效果不整齐。此软件在 * V5开发板光盘里面有。 * 2. 务必将编辑器的缩进参数和TAB设置为4来阅读本文件,要不代码显示不整齐。 * * 修改记录 : * 版本号 日期 作者 说明 * V1.0 2016-03-15 Eric2013 1. ST固件库到V1.5.0版本 * 2. BSP驱动包V1.2 * 3. FreeRTOS版本V8.2.3 * 4. STemWin版本V5.28 * 5. FatFS版本V0.11a * * Copyright (C), 2016-2020, 安富莱电子 www.armfly.com * *********************************************************************************************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值