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

STM32F76/77xxx和STM32H7x3系列微控制器中的硬件JPEG编解码外设

[复制链接]
STMCU小助手 发布时间:2022-12-5 21:00
引言
# N$ w6 P$ n! n8 g# q% W本应用笔记描述在STM32F76/77xxx和STM32H7x3系列微控制器中如何对JPEG解码/编码应用使用硬件JPEG编解码外设。
, l/ f$ \( M; V$ ?3 ?# {) {+ YSTM32F76/77xxx和STM32H7x3系列微控制器嵌入了专用的硬件JPEG编解码外设,它提供了快速又简单的硬件JPEG图像压缩程序和解压程序,具备:
1 ?# o' E6 f4 v6 m2 s+ j- Q• JPEG文件头的全面管理能力,
) D6 N1 E8 m7 I/ L• 完全可编程的霍夫曼表(两个AC表和两个DC表),7 Q6 C9 Y. _9 M
• 多达四个可编程量化表,
. e. c' b1 g. }• 完全可编程最小编码单元(MCU)。+ u& a, u3 L" b* f
硬件JPEG编解码器支持YCbCr或RGB(3个颜色分量)、灰度(1个颜色分量)和CMYK(4个颜色分量)模式的像素输入/输出格式,每个分量的下采样因子完全可编程。
$ v3 i0 A  B: O2 ~- |9 E% {

* z4 B; l4 \- M! ~ CL9E[M{]4471G9C_~5FVWZW.png 6 U3 v* u' z: V- _, y6 W

- \. ^8 v  M! U+ Z6 C. T1 硬件JPEG编解码器概述
1 {- b; @& f' d. t( B% I' s硬件JPEG编解码外设符合JPEG标准(JPEG ISO/IEC 10918-1 ITU-T建议T.81)。它可以解码/编码JPEG压缩图像,每个样本8位。0 x6 N  u+ q, n/ K* L1 Z
硬件JPEG编解码外设为熵编解码段(ECS)编码和解码提供硬件加速。它支持JPEG文件头生成和解析。硬件JPEG编解码外设还支持JFIF(JPEG文件交换格式),使用事实标准对JPEG图像进行编码。但是,在这些数据流中找到的所有应用特定的标记段均被忽略。JPEG编解码器支持最多四个颜色分量、四个量化表和两组DC和AC霍夫曼表。5 ^/ }6 m9 ~  S/ q
硬件JPEG编解码器可以灵活地指定要对每个分量使用的量化表和霍夫曼表。
9 N1 J2 R" c7 R1 _8 oJPEG标准定义的JPEG编码和解码操作按块执行。JPEG标准将MCU(最小编解码单元)定义为可以编码或解码的最小块数。在硬件JPEG编解码外设中,MCU的构成是可编程的。硬件JPEG编解码器可以定义每个MCU中属于特定颜色分量的块数。每个块是样本的一个8x8数组,每个样本被定义为8位(1个字节)。因此,每个块均是一个64字节数组(每个样本1个字节)。
% ^* W& ~2 \. o- G: l硬件JPEG编解码器支持YCbCr或RGB(3个颜色分量)、灰度(1个颜色分量)和CMYK(4个颜色分量)模式的像素输入/输出格式,每个分量的下采样因子完全可编程。
# T0 A- b! r1 v使用STM32H7x3系列器件进行JPEG解码操作,当输出颜色格式为YCbCr时,Chrom-ArtAccelerator™外设(也称为DMA2D)能够将YCbCr块(JPEG解码器的输出)转换为可直接显示的RGB像素。
" _5 M( Z) o% C% Q0 |) F4 v, t' E使用STM32H7x3系列器件进行编码(所有颜色格式)或非YCbCr(灰度或CMYK颜色格式时)颜色格式的解码时,从/至RGB像素的转换不进行硬件加速且必须通过软件执行。
9 s( v, J! ?- f$ a. R" P1 `: H使用STM32F76/77xxx器件进行解码或编码时,YCbCr至RGB的转换不加速且必须通过软件执行。2 B  b5 W3 Y1 p7 ^) ^
STM32CubeF7/H7固件包提供包含必要API的专用JPEG实用工具软件,能够执行JPEG MCU块至/从RGB像素的转换(位于\Firmware\Utilities\JPEG目录下)。
! O# U/ w! h$ K; }  KSTM32CubeF7/H7为JPEG编解码外设提供专用HAL(硬件抽象层)驱动程序:# H* O: M- l- Z
• STM32CubeF7:stm32f7xx_hal_jpeg.c/ stm32f7xx_hal_jpeg.h' r# c8 v9 g/ [1 T- |$ A) j7 D3 B
• STM32CubeH7:stm32h7xx_hal_jpeg.c/ stm32h7xx_hal_jpeg.h. @; a9 S5 W1 f$ X' K. v
本文档适用于基于Arm®的器件。
9 y$ ^  K; E/ y+ m+ ~) N$ e0 p" X/ s) B
2 不同色彩空间的硬件JPEG编解码器设置8 t* R; u- ~, X- R& V( j
2.1 YCbCr色彩空间
' [1 K, w  d& W: w  A2.1.1 YCbCr与RGB之间的相互转换
, n' I. T9 r. O0 o# jJPEG文件交换格式(JFIF)标准描述了YCbCr与RGB之间的相互转换和色度采样。JFIF合规文件通常具有如下扩展名:.jpg、.jpeg、.JPG、.JPEG。  b& i& I$ @" N* m. b! ~1 k# Q/ B
JPEG标准(JPEG ISO/IEC 10918-1 ITU-T建议T.81)没有定义要对源行图像使用的色彩空间,而JFIF标准则定义了两个可能的色彩空间:灰度(Y亮度)或彩色(YCbCr亮度和色度)。" r) l1 ^8 e4 z" y1 n7 F, B$ ~
JFIF标准使用YCbCr颜色而不是原始的RGB色彩空间。该色彩空间能够从给出像素颜色的2个色度分量Cb和Cr中分离出亮度分量(Y),即像素亮度(本质上是灰度信号)。RGB色彩空间与YCbCr之间相互转换的转换矩阵如下:

9 {/ Z. {( A% F$ G5 @9 x3 R) t( g" U' O) G, b' C

  I' s. t2 k) D. W/ t6 f7 Y3 { XNK)QDM[)KV6{JJ]`$_5253.png
% ~5 B7 K! c, Q  W
: h* ~9 i& Q3 p. a* F& V已知人眼对亮度变化比对颜色变化更敏感,可使用YCbCr对两个独立的量化表进行定义,分别用于亮度和色度(Cb和Cr)分量,以便进一步量化色度(至少对于低频率)。
) V# c9 {/ I) @, w  I2 M: u7 M
4 c( W& J, t  l2.1.2 YCbCr量化表
- F/ [/ n, t( c  \2 N图 2和图 3所示为JPEG标准提供的样本亮度和色度量化表。按照标准中的描述,这些表在每个样本8位的亮度和色度图像上给出很好的结果(对于STM32F7/H7硬件JPEG编解码器)。
3 c8 g3 }0 ^' \5 p) V该标准还对这些表格做了如下描述:如果将这些量化值除以2,得到的重构图像与源图像的差异通常难以辨别。
% ~/ c- T, c6 X. b. m% W0 u
1 M/ T. a& Q' Y! D& b

. ~* j) q4 Q' X% B N@5J{4~(I`_H~IJ787LFX~X.png + \# T' Q/ B1 A+ W& T
/ ]3 @& K+ ]# n) G% U1 ~# e3 F
图 4和图 5提供了Z形排序的顺序。

, p- O' o  N1 t  L+ X2 l+ N/ r
4 m( ^. I- x) m5 s( z6 m8 F

. o5 y3 ~+ g9 N9 k8 t6 E )(LOA3F689CFIQX{FZ5E{SG.png ) f1 ?  y8 B+ w: `% r

8 K8 b# O. L4 Y5 s7 t3 H' G- c
# t' i# [3 G4 ^& N$ kSTM32CubeF7和STM32CubeH7使用这些默认表格,结合用户质量因子进行编码和解码。
, l) A$ a/ r5 o) y  ?# c• 进行编码时,STM32CubeF7/H7 JPEG HAL驱动程序允许用户定义百分比质量因子(1%至100%)。然后,按如下方式使用质量因子对以上表格进行比例计算:
  W* x" ]. D/ `! e, K" K– 当质量处于50%至100%范围内时:scaling_factor = 200 - 2 x 质量。) ^! P) F3 h, r# T
– 当质量低于50%时:scaling_factor = 5000 / 质量。. ?4 O) ~8 p1 F1 J9 V
因此,当质量设置为100%时,比例因子变为0,然后所有表格条目均变为1(因为为零的条目被系统性地替换为1)。这使得量化损失最小化。3 r7 t1 g6 }% s. [
然后,在硬件JPEG编解码器中将量化表编程为专用存储表:QMEM0用于亮度(Y),QMEM1用于色度(Cb和Cr)。
& s* J( u" l4 U8 M+ P3 y0 u, @$ @• 在解码时,STM32CubeF7/H7 JPEG HAL驱动程序能够按如下方式检索质量。对于量化表的每个值:' N! P7 G, u- q3 p" V
– 读取量化系数并计算该系数对比参考表中相应值的比例因子(百分比值)。. ~0 }3 c) A# f. e
比例 = (100 x quantization_coefficient) / reference_table_value)。- u* v3 c$ J# h0 n9 W4 c9 E6 g
– 如果quantization_coefficient = 1,则质量为100%。1 H! b; o/ J9 p8 s
– 否则,如果比例低于100:质量 = (200 - 比例) /2。
# Z# _/ d; |. x– 否则,质量 = 5000 / 比例。! T0 t) L! g4 F, Q
按照量化表每个系数(共64个系数)的计算质量平均值计算编码质量。只使用亮度表计算平均质量。/ `2 @: }0 y4 Q
硬件JPEG编解码器的QMEMx内存表用于存储/检索比例量化表(对比参考表)。按Z形顺序访问这些表格。
& G6 S# ~0 o3 V$ I硬件JPEG编解码器提供RAM“QMEM”区,用于存储/检索最多4个量化表(分别对应于4个颜色分量)。QMEM RAM位于偏移地址0x0050至0x014C。每个表的大小为64字节(即16个32位字)。
: i7 K) {6 i( v4 m/ Z. f" \
+ m. Q6 H7 O/ I& R
, R( K: J0 V- F6 R0 ^
7XEI@AK[AZ]T}8M[5)HZT.png * ]" p, p; [. ?+ g' W' M" a
3 z* m" D5 e! Z! _+ i
对于YCbCr色彩空间,STM32CubeF7/H7 JPEG HAL驱动程序默认只使用2个量化表:
6 Z% Y) I2 m' {2 l4 L• QMEM0:用于亮度(Y)分量。64字节位于偏移地址0x0050。1 W9 e, c% T8 F  c
• QMEM1:用于色度(Cb和Cr)分量。64字节位于偏移地址0x0090。
2 G, k; m  z0 \) G请注意,仅当硬件JPEG编解码器停止时,才能读/写QMEM RAM,即没有正在进行的编码/解码操作(JPEG_CONFR0寄存器的位0“START”设置为0)。
) B5 ^/ }7 f+ b" MSTM32CubeF7/H7 JPEG HAL驱动程序默认对(Y)亮度分量使用图 2所示表格,并对Cb和Cr色度分量使用图 3所示表格。JPEG HAL驱动程序还为用户按颜色分量定义量化表提供了可能性(本例中为3个量化表)。如需自定义量化表,用户必须提供3个量化表(每个分量一个量化表)。这些表格分别用于(使用质量因子进行比例计算后)硬件JPEG编解码器的QMEM0至QMEM3 RAM表的编程(其中,QMEM2表位于偏移地址0x00D0)。' w$ U: U: _% W% K9 f
HAL函数“HAL_JPEG_SetUserQuantTables”是用于自定义用户量化表的API。
! i  Z$ C9 q9 E

) R) f& l- C$ H  g0 d& U# }1 q

: B+ Z8 r3 X& M完整版请查看:附件$ T7 ^& y; ~+ B  k0 f; O3 e

' R" H2 j+ _6 k+ n! d& H" M
6 V: P+ o( @1 g

( k4 k2 ?6 f5 J& T
赞 收藏 评论0 发布时间:2022-12-5 21:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版