你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 5289|回复: 24

[STM32F769-DISC] 【F769IDISCOVERY评测】STM32F769评测系列:JPEG解码测试

[复制链接]

107

主题

812

回帖

5

蝴蝶豆

论坛元老

最后登录
2019-8-28
发表于 2016-12-3 18:08:46 | 显示全部楼层 |阅读模式
STM32F7(STM32官网)内置JPEG硬件解码,可以极大增强STM32的图像处理能力,毕竟软解需要消耗的CPU时间会更多。

JPEG 百度百科定义(节选)

JPEG是常见的一种图像格式,它由联合照片专家组(Joint Photographic Experts Group)开发并命名为"ISO 10918-1",JPEG仅仅是一种俗称而已。


由于JPEG优异的品质和杰出的表现,它的应用也非常广泛,特别是在网络和光盘读物上,肯定都能找到它的影子。目前各类浏览器均支持JPEG这种图像格式,因为JPEG格式的文件尺寸较小,下载速度快,使得Web页有可能以较短的下载时间提供大量美观的图像,JPEG同时也就顺理成章地成为网络上最受欢迎的图像格式。



JPEG图像的编、解码算法已非常成熟,STM32 HAL库里已内置了该算法的支持,方便用户直接调用。


JPEG测试需要使用到的功能比较多,主要包括:MICRO uSD支持、LCD显示支持、FatFS支持、SDRAM读写支持及JPEG库等。其中任何一个主题都需要花费大量的时间和精力去研究,为了更专注于JPEG解码性能本身,本次测试直接使用HAL库中的BSP例程进行改写。


测试方法介绍,在uSD卡中存储需要测试解码的图像,代码运行时从SD卡中读取图像文件,然后使用JPEG算法进行解码,最后将解码后的图像显示在LCD上,并在LCD上输出相关的信息。


由于SD卡中图像读取需要一定的时间,该时间与SD卡的存储性能相关,所以本贴测试结果仅供参考,毕竟不同的存储卡性能会有所差异。本次测试用到的SD卡如下,CLASS4级别,名为SANDISK,实际可能是山上来的产品。


IMG_20161203_174537(1).jpg

测试中使用的关键代码如下,可以参考BSP中的JPEG解码例程

  1. timeElapsed = HAL_GetTick();
  2.                         
  3.                                 if(f_open(&JPEG_File, file, FA_READ) == FR_OK)
  4.                                 {
  5.                                         /*##-6- JPEG decoding with DMA (Not Blocking ) Method ################*/
  6.                                         JPEG_Decode_DMA(&JPEG_Handle, &JPEG_File, JPEG_OUTPUT_DATA_BUFFER);
  7.                                        
  8.                                         /*##-7- Wait till end of JPEG decoding and perfom Input/Output Processing in BackGround  #*/
  9.                                         do
  10.                                         {
  11.                                                 JPEG_InputHandler(&JPEG_Handle);
  12.                                                 JpegProcessing_End = JPEG_OutputHandler(&JPEG_Handle);
  13.                                                 
  14.                                         }while(JpegProcessing_End == 0);
  15.                                        
  16.                                         /*##-8- Get JPEG Info  ###############################################*/
  17.                                         HAL_JPEG_GetInfo(&JPEG_Handle, &JPEG_Info);      
  18.                                        
  19.                                         /*##-9- Copy RGB decoded Data to the display FrameBuffer  ############*/
  20.                                         //xPos = (BSP_LCD_GetXSize() - JPEG_Info.ImageWidth)/2;
  21.                                         //yPos = (BSP_LCD_GetYSize() - JPEG_Info.ImageHeight)/2;   

  22.                                         volatile int width, height;
  23.                                         width = BSP_LCD_GetXSize() > JPEG_Info.ImageWidth? JPEG_Info.ImageWidth: BSP_LCD_GetXSize();
  24.                                         height = BSP_LCD_GetYSize() > JPEG_Info.ImageHeight? JPEG_Info.ImageHeight: BSP_LCD_GetYSize();        
  25.                                          DMA2D_CopyBuffer((uint32_t *)JPEG_OUTPUT_DATA_BUFFER, (uint32_t *)LCD_FRAME_BUFFER, 0 , 0, width, height);
  26.                                        
  27.                                         /*##-10- Close the JPG file ##########################################*/
  28.                                         f_close(&JPEG_File);  
  29.                                        
  30.                                         timeElapsed = HAL_GetTick() - timeElapsed;
  31.                                 }
复制代码


解码时间精确到MS级别,一般来讲该精度应该足够。

测试使用图片涵盖不同分辨率图片,以进行对比。不过分辨率只是其中一个要素,毕竟JPEG图像压缩时还可以指定不同的质量标准,这里特别指出来。

下面为实际测试时输出结果,看图说话。

IMG_20161203_172713.jpg

IMG_20161203_172627.jpg

IMG_20161203_172551.jpg

IMG_20161203_172510.jpg

IMG_20161203_172348.jpg

IMG_20161203_172311.jpg


LCD显示输出解码后的图像。同时还在LCD上输出图像名,图像大小及解码时间。
注意到其中有两幅相同图片的解码,其中一次使用的时间为104MS,而另一次使用的时间为101MS,有些微的差别。另外工具链使用的是MDK,优化级别为-O3。

最后附上本次测试用的图片压缩包,欢迎对比,大家一起讨论。另外代码直接基于BSP包,做了很小的修改,就不上代码了。

test_images.zip (522.46 KB, 下载次数: 64)

评分

参与人数 1ST金币 +20 收起 理由
zero99 + 20

查看全部评分

回复

使用道具 举报

11

主题

1139

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-7-10
发表于 2016-12-3 18:16:56 | 显示全部楼层
很强,学习一下
回复 支持 反对

使用道具 举报

107

主题

812

回帖

5

蝴蝶豆

论坛元老

最后登录
2019-8-28
 楼主| 发表于 2016-12-3 18:24:53 | 显示全部楼层

一起学习
回复 支持 反对

使用道具 举报

6

主题

462

回帖

0

蝴蝶豆

金牌会员

最后登录
2019-12-28
发表于 2016-12-3 19:43:12 | 显示全部楼层
学习学习,不知道libjpeg和硬解码有没有啥关系;是不是libjpeg库就是用来软解码的,而F7是用硬解码,所以在F769i代码里没看到libjpeg的目录?

mulu

mulu

回复 支持 反对

使用道具 举报

64

主题

744

回帖

23

蝴蝶豆

实习版主

最后登录
2020-12-8
发表于 2016-12-3 20:37:15 | 显示全部楼层
厉害

点评

谢谢  发表于 2016-12-5 10:57
回复 支持 反对

使用道具 举报

47

主题

3404

回帖

30

蝴蝶豆

版主

最后登录
2020-12-7
发表于 2016-12-3 20:49:31 | 显示全部楼层
学习了。。。

点评

一起学习,哈哈  发表于 2016-12-5 10:57
回复 支持 反对

使用道具 举报

22

主题

1005

回帖

12

蝴蝶豆

金牌会员

最后登录
2020-11-17
发表于 2016-12-4 08:20:15 | 显示全部楼层
不错,谢谢分享

点评

3Q  发表于 2016-12-5 10:57
回复 支持 反对

使用道具 举报

74

主题

1368

回帖

194

蝴蝶豆

版主

最后登录
2020-5-12
发表于 2016-12-4 08:34:20 | 显示全部楼层
不错,谢谢分享

点评

大神评点,感谢  发表于 2016-12-5 10:58
回复 支持 反对

使用道具 举报

29

主题

1256

回帖

59

蝴蝶豆

论坛元老

最后登录
2020-11-16
发表于 2016-12-4 09:41:26 | 显示全部楼层
前排占多

点评

占座必胜  发表于 2016-12-5 10:58
回复 支持 反对

使用道具 举报

4

主题

484

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-8-12
发表于 2016-12-5 07:12:06 来自手机 | 显示全部楼层
谢楼主分享

点评

谢谢  发表于 2016-12-5 10:58
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版