OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7036|回复: 10

分享一个H7硬解码JPEG图片文件

[复制链接]

17

主题

193

帖子

0

精华

高级会员

Rank: 4

积分
708
金钱
708
注册时间
2014-7-2
在线时间
137 小时
发表于 2018-7-16 14:08:03 | 显示全部楼层 |阅读模式
Chrom-Art Accelerator(DMA2D)是一个图形加速器,提供了高级的比特显示,行数据拷贝和像素格式转换。它支持以下功能:
•长方形填充有固定的颜色
•矩形复制
•矩形拷贝和像素格式转换
•长方形合成,混合和像素格式转换
支持各种图像格式编码,从间接的4 bpp颜色模式到32 bpp直接的颜色。它嵌入了专用内存来存储颜色查找表。
DMA2D还支持基于块的YCbCr来处理JPEG解码器输出。一个中断可以在一个操作完成或在程序中产生。水印。
所有操作都是完全自动化的,并且独立于CPU或DMA执行。


void LCD_CopyBuffer_YCbCr_To_RGB(uint32_t *pSrc, uint16_t x, uint16_t y,uint16_t xsize, uint16_t ysize,uint32_t ChromaSampling)
为显示函数
pSrc:数据源
x     :起始x坐标
y     :起始y坐标
xsize:宽度
ysize:高度
ChromaSampling:色度抽样
代码内容可以对着寄存器看一下这就不多说了。(应为我还理解完)


        FATFS_LinkDriver(&SD_Driver, SDPath);
        f_mount(&SDFatFs, (TCHAR const*)SDPath, 1);
        JPEG_OUTPUT_DATA_BUFFER = mymalloc(SRAMEX,1024*600*2);
       
        JPEG_Handle.Instance = JPEG;
        HAL_JPEG_Init(&JPEG_Handle);
       


//        HAL_JPEG_DeInit(&JPEG_Handle);       
//       
//        myfree(SRAMEX,JPEG_OUTPUT_DATA_BUFFER);
        for (;;)
        {       
                TICVK = HAL_GetTick();
                JPEG_picture(path1,JPEG_OUTPUT_DATA_BUFFER);
                LCD_CopyBuffer_YCbCr_To_RGB(JPEG_OUTPUT_DATA_BUFFER,0,0,JPEG_Info.ImageWidth, JPEG_Info.ImageHeight,JPEG_Info.ChromaSubsampling);
                printf_dma("%s show ok  %dms\r\n",path1, HAL_GetTick()- TICVK);
                osDelay(100);
                LCD_Clear(BLACK);       
        }



这个是显示方法。。。。只支持RGB的屏幕

QQ短视频20180716134607.gif
QQ短视频20180716135035.gif
QQ短视频20180716135042.gif

JPEG.zip

3.7 KB, 下载次数: 136

Lcd.zip

30.47 KB, 下载次数: 111

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

193

帖子

0

精华

高级会员

Rank: 4

积分
708
金钱
708
注册时间
2014-7-2
在线时间
137 小时
 楼主| 发表于 2018-7-16 14:10:00 | 显示全部楼层
这里使用的是DMA2D的 YCbCr转换功能,如果有32位SDRAM  那就不得了了,期待原子哥 750系列可以上@正点原子
回复 支持 反对

使用道具 举报

17

主题

193

帖子

0

精华

高级会员

Rank: 4

积分
708
金钱
708
注册时间
2014-7-2
在线时间
137 小时
 楼主| 发表于 2018-7-16 14:28:36 | 显示全部楼层
        RCC->AHB1ENR   |= 1<<23;                                                                        //使能DM2D时钟
        DMA2D->CR              = 1<<16;                                                                        //Memory-to-memory with PFC ,这样就可以使用DMA2D 去转换 YCbCr
        DMA2D->OPFCCR          = DMA2D_OUTPUT_RGB565;                                                //色彩                                                使用PFC 功能 指定的显示颜色
    DMA2D->OOR                = lcdltdc.pwidth - xsize;                                        //行偏移量                                        每行显示完成后的偏移量 也就是 第一行刷完后,此时的坐标到下一行起始所需要的偏移量
        DMA2D->OPFCCR  |= (DMA2D_REGULAR_ALPHA << 20);                                //常规混合                               
        DMA2D->OPFCCR  |= (DMA2D_RB_REGULAR << 21);                                    //Regular mode (RGB or ARGB)        RGB模式,  另一种是 Swap mode (BGR or ABGR) R和B 交换的。
        DMA2D->FGPFCCR  = (regMask & regValue);                                      //前景PFC控制                                        对着寄存器看吧太多了
        DMA2D->FGOR            = inputLineOffset;                                                        //前景的线偏移                                               
        DMA2D->NLR             = (uint32_t)(xsize << 16) | (uint16_t)ysize;//行和列                 高                                也就是 显示的 宽度 和 高度
        DMA2D->OMAR            = (uint32_t)destination;                                        //显示位置               
        DMA2D->FGMAR           = (uint32_t)pSrc;                                                          //数据源 YCbCr 数据
       
回复 支持 反对

使用道具 举报

17

主题

193

帖子

0

精华

高级会员

Rank: 4

积分
708
金钱
708
注册时间
2014-7-2
在线时间
137 小时
 楼主| 发表于 2018-7-16 14:29:16 | 显示全部楼层
这里最好做一个超时处理,超时后把JPEG 重新初始化一下
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2018-7-3
在线时间
40 小时
发表于 2018-7-16 20:47:33 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-7-17 01:19:42 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

17

主题

193

帖子

0

精华

高级会员

Rank: 4

积分
708
金钱
708
注册时间
2014-7-2
在线时间
137 小时
 楼主| 发表于 2018-7-25 17:39:02 | 显示全部楼层
对代码进行了优化。重新上传一份。不能使用双缓冲机制,不知道是不是硬件BUG ,SD卡会经常超时。
建议SD 使用 25M时钟。使用poll 模式,不要使用DMA 。目前还没找到原因,如果有大神,找到原因请指点一下。

JPEG.zip

3.64 KB, 下载次数: 124

Bsp_sd.zip

2.62 KB, 下载次数: 105

回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2018-9-18
在线时间
3 小时
发表于 2018-11-15 20:24:41 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2018-11-16 08:39:30 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

2

主题

474

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6509
金钱
6509
注册时间
2018-6-27
在线时间
549 小时
发表于 2018-11-16 09:04:48 | 显示全部楼层
学习学习,学习学习。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2018-8-31
在线时间
3 小时
发表于 2019-1-5 19:50:21 | 显示全部楼层
是不是图片宽度要16的倍数?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 05:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表