stm32  h743的jpeg压缩硬件压缩的测试实例及问题
代码就不上了,主要是抄袭实例代码
encode_dma.c
jpeg_utils.c
jpeg_utils.h
jpeg_utils_conf.h四个文件

问题描述:不管压缩什么图,jpg图像发绿(灰度图像无所谓),经过测试发现宽度128或64,高度任意的图像压缩后jpg是正常的,猜测是jpg压缩核的限制,所以对代码进行了修改,将bmp按顺序以128*16小块数据从左到右,从上到下读出进行压缩,压缩后的jpg数据顺序是对的,具体原因参考jpeg压缩原理中的压缩数据流存储顺序。硬件初始化时必须设置相应寄存器中的图像大小为128宽,高度为w*h/128,压缩结束后在生成的jpg文件中将图像的宽度和高度再修改为对应的w h即可。
另外rgb转YCRCB时,相关代码不要+128,溢出后会导致CR=0或者cb=0,改为127即可.

测试768*576的yuv图像需要33ms,1024*768的yuv图像需要65ms,yuv图像的话下面的代码需要重写,如果用rgb的时间更长,主要消耗在rgb转ycrcb上了

ycomp  = (int32_t)(*(RED_Y_LUT + red)) + (int32_t)(*(GREEN_Y_LUT + green)) + (int32_t)(*(BLUE_Y_LUT + blue));

cbcomp = (int32_t)(*(RED_CB_LUT + red)) + (int32_t)(*(GREEN_CB_LUT + green)) + (int32_t)(*(BLUE_CB_RED_CR_LUT + blue)) + 127;

crcomp = (int32_t)(*(BLUE_CB_RED_CR_LUT + red)) + (int32_t)(*(GREEN_CR_LUT + green)) + (int32_t)(*(BLUE_CR_LUT + blue)) + 127;

此处压缩768*576的图像,如有其它分辨率的请相应修改。

重点jpeg_utils_conf.h中添加

#define JPEG_SWAP_RG 1 //这个没有什么用处,个人认为

#define JPEG_SWAP_RB 0 //BMP中红绿蓝存储为BGR顺序

encode_dma.c中添加:

#define JPEG_CHROMA_SAMPLING  JPEG_420_SUBSAMPLING

#define JPEG_COLOR_SPACE    JPEG_YCBCR_COLORSPACE #define JPEG_IMAGE_QUALITY       75

#define MAX_INPUT_WIDTH          128 //这里必须是128,否则图片会绿

#define MAX_INPUT_LINES          16

#define BLOCKCOLUMN          128

#define MAX_INPUT_BLOCKCOLUMN     (768/BLOCKCOLUMN)

#define CHUNK_SIZE_IN   ((uint32_t)(MAX_INPUT_WIDTH * BYTES_PER_PIXEL * MAX_INPUT_LINES))

#define CHUNK_SIZE_OUT  ((uint32_t) (CHUNK_SIZE_IN/2))

BMP_GetInfo(pBmpFile, &Conf);

Conf.ImageHeight = 768*576/128;//重点,添加

Conf.ImageWidth = 128;//重点

JPEG_GetEncodeColorConvertFunc(&Conf, &pRGBToYCbCr_Convert_Function, &MCU_TotalNb);

Jpeg_OUT_BufferTab.DataBufferSize = 0;

Jpeg_OUT_BufferTab.State = JPEG_BUFFER_EMPTY;

ReadBmpRgbLines1(pBmpFile, Conf, Input_Data_Buffer ,&dataBufferSize);

//下面函数相当于从768*576的图像中,按顺序每次读取128*16大小的小块图像数据

static void ReadBmpRgbLines1(FIL *file, JPEG_ConfTypeDef Conf2, uint8_t * pDataBuffer, uint32_t *BufferSize)

{

uint32_t bytesReadfile    = 1;

uint32_t CurrentBlockLine = 1;

*BufferSize = 0;

JPEG_ConfTypeDef Conf1;

Conf1.ImageHeight = 576;

Conf1.ImageWidth = 768;

while((CurrentLine <= Conf1.ImageHeight) && (CurrentBlockLine <= MAX_INPUT_LINES))

{

f_lseek (file,BMP_HEADER_SIZE + Conf1.ImageWidth *(Conf1.ImageHeight - CurrentLine)*3 + CurrentBlockColumn*BLOCKCOLUMN*3);

f_read (file, pDataBuffer , BLOCKCOLUMN*3 , (UINT*)(&bytesReadfile));

pDataBuffer += bytesReadfile;

*BufferSize += bytesReadfile;

CurrentLine +=1 ;

CurrentBlockLine += 1;

}

CurrentBlockColumn += 1;

if(CurrentBlockColumn == MAX_INPUT_BLOCKCOLUMN)

{

CurrentLineForRead += MAX_INPUT_LINES;

}

CurrentLine = CurrentLineForRead;

CurrentBlockColumn = CurrentBlockColumn%MAX_INPUT_BLOCKCOLUMN;

}

stm32 h743的jpeg压缩硬件压缩的测试实例及问题相关推荐

  1. 【W5500】STM32 H743驱动W5500进行UDP收发

    前景提要 STM32 H743确实是个好芯片,但是这个MAC只有一个真是让我觉得不太够,想整双MAC的A核芯片玩玩,奈何实在也是没得精力弄Linux,虽然imx6ull也是一个好芯片.... 外挂MA ...

  2. C#图片截取压缩(百分比压缩/大小压缩)实现代码

    原文链接:http://www.jb51.net/article/33622.htm   脚本之家 为了娱乐写了个截取图片和压缩图片你的小工具:按照百分比压缩/制定大小压缩等等,感兴趣的朋友可以了解下 ...

  3. 三种Android图片压缩方法 压缩到指定大小

    一.图片质量压缩 /*** 质量压缩方法* @param image* @return*/ public static Bitmap compressImage(Bitmap image) {Byte ...

  4. sql server压缩_SQL Server 2016中的压缩和解压缩功能

    sql server压缩 The concept of data compression is not a new on for SQL Server Database Administrators ...

  5. LZ77算法压缩和解压缩

    LZ77简介 Ziv和Lempel于1977年发表题为"顺序数据压缩的一个通用算法(A Universal Algorithm for Sequential Data Compression ...

  6. asp在线压缩和解压缩文件(文件夹)

    asp在线压缩和解压缩文件(文件夹) <% '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ '\\ '\\ 1. c:\ ...

  7. java 解压与压缩代码_Java实现多文件压缩和解压缩代码详解

    Java实现多文件压缩和解压缩代码 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStre ...

  8. Java 的zip压缩和解压缩

    Java 的zip压缩和解压缩 好久没有来这写东西了,今天中秋节,有个东西想拿出来分享,一来是工作中遇到的问题,一来是和csdn问候一下,下面就分享一个Java中的zip压缩技术,代码实现比较简单,代 ...

  9. Linux之压缩和解压缩命令

    Linux之压缩和解压缩命令 1. 压缩格式的介绍 Linux默认支持的压缩格式: .gz .bz2 .zip 说明: .gz和.bz2的压缩包需要使用tar命令来压缩和解压缩 .zip的压缩包需要使 ...

最新文章

  1. python使用matplotlib可视化阶梯图、使用step函数可视化阶梯图、可视化时间序列数据的波动周期和规律
  2. 人工智能产业的发展是什么样的呢?
  3. python3爬虫入门教程-有什么好的python3爬虫入门教程或书籍吗?
  4. SQL Server 2005 镜像构建说明(转载)
  5. OpenCV绘图和文本输出功能的实例(附完整代码)
  6. opencv3.4.3的DNN模块调用bvlc_googlenet.caffemodel实现图像分类
  7. eclipse 如何关联git_作为一名初学Java者 如何做简单的Java项目
  8. easyUI 之datagrid 在前端自定义排序
  9. C++学习008-delete与delete[]的差别
  10. 【转】VMware网络连接模式—桥接、NAT以及仅主机模式的详细介绍和区别
  11. 今天进行的将zzb从apache迁移到nginx
  12. python aes加密每次密码不一样_记AES加密在linux系统每次都不一样的问题
  13. html 树 excel,用Excel实现简易树状关系
  14. Mac系统如何关闭指定端口号
  15. [渝粤教育] 四川轻化工大学 化工设备机械基础 参考 资料
  16. Spring Cloud的注册中心和服务者,消费者的构建
  17. 利用Matlab进行灰色预测,利用matlab进行灰色预测.pdf
  18. Java比较两个数组是否相等(equals())
  19. 字符编码的常用种类介绍
  20. 利用框架效应达成目的

热门文章

  1. 普通人也能看懂WiFi接收器怎么用的使用手册
  2. FCOS CVPR2019
  3. 完美解决Win11共享打印机连接错误0x00000709教程
  4. HTML--特殊符号
  5. 使用EasyExcel导出模板并设置级联下拉及其原理分析
  6. 网络安全——HTTP头部注入
  7. 学习HTML(十五)——结合CSS文件在页中创建按钮
  8. UAT环境正常,上线生产环境后访问不到数据的原因分析及问题解决
  9. tp6取消了模型的自动完成,可使用模型事件代替
  10. java jar包签名