STM32F76/77xxx和STM32H7x3系列微控制器中的硬件JPEG编解码外设1 ^$ [9 s6 { r- ^2 [6 s% \8 U k' F4 g3 u8 O: }: B/ [ 引言 本应用笔记描述在STM32F76/77xxx和STM32H7x3系列微控制器中如何对JPEG解码/编码应用使用硬件JPEG编解码外设。 . a* C& p+ U* D: K& t9 v7 [) J7 @ STM32F76/77xxx和STM32H7x3系列微控制器嵌入了专用的硬件JPEG编解码外设,它提供了快速又简单的硬件JPEG图像压缩程序和解压程序,具备: • JPEG文件头的全面管理能力, ! X* O$ @2 p9 v* I+ _0 ? • 完全可编程的霍夫曼表(两个AC表和两个DC表), ) z& |) M; p( A/ S6 b • 多达四个可编程量化表, + a0 G+ N7 @ f1 d6 { F1 V • 完全可编程最小编码单元(MCU)。 3 o0 B, y9 v: t) {) [ 硬件JPEG编解码器支持YCbCr或RGB(3个颜色分量)、灰度(1个颜色分量)和CMYK(4个颜色分量)模式的像素输入/输出格式,每个分量的下采样因子完全可编程。 - v- [8 y2 Y* J6 G) E( G 为了充分利用本应用笔记,用户应熟悉: ; w% Z1 e4 T; j+ @# O; @ • STM32的JPEG编解码外设,如STM32F76/77xxx参考手册(RM0410)所述,该手册可从意法半导体网站www.st.com上获得。 1 l( @/ [7 _7 I • STM32的JPEG编解码外设,如STM32H7x3参考手册(RM0433)所述,该手册可从意法半导体网站www.st.com上获得。 8 p; R% N( i6 w8 I& G, H( K • JPEG压缩标准(JPEG ISO/IEC 10918-1 ITU-T建议T.81)和JFIF文件格式标准(JPEG文件交换格式)。" ^0 k0 w9 z# J( V b) \! T 参考文档 ( b% \: W3 r* N/ B • STM32F76xxx和STM32F77xxx基于32位MCU的高级Arm®参考手册(RM0410), • STM32H7x3基于32位MCU的高级Arm®参考手册(RM0433), # W9 F: L2 l+ f5 B • STM32F7系列(STM32CubeF7)和STM32H7系列(STM32CubeH7)的嵌入式软件 1 硬件JPEG编解码器概述 硬件JPEG编解码外设符合JPEG标准(JPEG ISO/IEC 10918-1 ITU-T建议T.81)。它可以解码/编码JPEG压缩图像,每个样本8位。 硬件JPEG编解码外设为熵编解码段(ECS)编码和解码提供硬件加速。它支持JPEG文件头生成和解析。硬件JPEG编解码外设还支持JFIF(JPEG文件交换格式),使用事实标准对JPEG图像进行编码。但是,在这些数据流中找到的所有应用特定的标记段均被忽略。JPEG编解码器支持最多四个颜色分量、四个量化表和两组DC和AC霍夫曼表。 硬件JPEG编解码器可以灵活地指定要对每个分量使用的量化表和霍夫曼表。 JPEG标准定义的JPEG编码和解码操作按块执行。JPEG标准将MCU(最小编解码单元)定义为可以编码或解码的最小块数。在硬件JPEG编解码外设中,MCU的构成是可编程的。硬件JPEG编解码器可以定义每个MCU中属于特定颜色分量的块数。每个块是样本的一个8x8数组,每个样本被定义为8位(1个字节)。因此,每个块均是一个64字节数组(每个样本1个字节)。 硬件JPEG编解码器支持YCbCr或RGB(3个颜色分量)、灰度(1个颜色分量)和CMYK(4个颜色分量)模式的像素输入/输出格式,每个分量的下采样因子完全可编程。 使用STM32H7x3系列器件进行JPEG解码操作,当输出颜色格式为YCbCr时,Chrom-ArtAccelerator™外设(也称为DMA2D)能够将YCbCr块(JPEG解码器的输出)转换为可直接显示的RGB像素。 使用STM32H7x3系列器件进行编码(所有颜色格式)或非YCbCr(灰度或CMYK颜色格式时)颜色格式的解码时,从/至RGB像素的转换不进行硬件加速且必须通过软件执行。 # Q3 a9 Y5 S/ h) v* w使用STM32F76/77xxx器件进行解码或编码时,YCbCr至RGB的转换不加速且必须通过软件执行。 + Y' x# C. {7 V T, t4 _" e" p7 ISTM32CubeF7/H7固件包提供包含必要API的专用JPEG实用工具软件,能够执行JPEGMCU块至/从RGB像素的转换(位于\Firmware\Utilities\JPEG目录下)。 ( j, b+ w* A0 ]- OSTM32CubeF7/H7为JPEG编解码外设提供专用HAL(硬件抽象层)驱动程序: 4 s; s. X7 g7 e1 E. _- _• STM32CubeF7:stm32f7xx_hal_jpeg.c/ stm32f7xx_hal_jpeg.h ' a- P/ ]' D9 F• STM32CubeH7:stm32h7xx_hal_jpeg.c/ stm32h7xx_hal_jpeg.h 本文档适用于基于Arm®的器件。 . y" h4 e+ _4 W# d) g 2 不同色彩空间的硬件JPEG编解码器设置 2.1 YCbCr色彩空间 2.1.1 YCbCr与RGB之间的相互转换 ! C2 N2 `1 i/ d P+ z+ ? I7 n: hJPEG文件交换格式(JFIF)标准描述了YCbCr与RGB之间的相互转换和色度采样。JFIF合规文件通常具有如下扩展名:.jpg、.jpeg、.JPG、.JPEG。 JPEG标准(JPEG ISO/IEC 10918-1 ITU-T建议T.81)没有定义要对源行图像使用的色彩空间,而JFIF标准则定义了两个可能的色彩空间:灰度(Y亮度)或彩色(YCbCr亮度和色度)。 ) Y% c( J0 \. CJFIF标准使用YCbCr颜色而不是原始的RGB色彩空间。该色彩空间能够从给出像素颜色的2个色度分量Cb和Cr中分离出亮度分量(Y),即像素亮度(本质上是灰度信号)。RGB色彩空间与YCbCr之间相互转换的转换矩阵如下: 已知人眼对亮度变化比对颜色变化更敏感,可使用YCbCr对两个独立的量化表进行定义,分别用于亮度和色度(Cb和Cr)分量,以便进一步量化色度(至少对于低频率)。 2.1.2 YCbCr量化表 图 2和图 3所示为JPEG标准提供的样本亮度和色度量化表。按照标准中的描述,这些表在每个样本8位的亮度和色度图像上给出很好的结果(对于STM32F7/H7硬件JPEG编解码器)。 该标准还对这些表格做了如下描述:如果将这些量化值除以2,得到的重构图像与源图像的差异通常难以辨别。 . h5 d9 d' h) K2 p: H% R请注意,这些表格采用Z形排序。 |