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

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

[复制链接]
STMCU小助手 发布时间:2022-12-5 21:00
引言
" y+ S2 k6 v# V! v( W本应用笔记描述在STM32F76/77xxx和STM32H7x3系列微控制器中如何对JPEG解码/编码应用使用硬件JPEG编解码外设。
1 j$ k$ p* q& \7 `" X8 d( |* i; @STM32F76/77xxx和STM32H7x3系列微控制器嵌入了专用的硬件JPEG编解码外设,它提供了快速又简单的硬件JPEG图像压缩程序和解压程序,具备:- U, T6 H8 [" I& r# K" X  M* a8 u+ I. K
• JPEG文件头的全面管理能力," w! G  d* A: p) E
• 完全可编程的霍夫曼表(两个AC表和两个DC表),. d* k8 ^0 n) l, Y
• 多达四个可编程量化表,
* u3 J' l! s+ l& o• 完全可编程最小编码单元(MCU)。
, }) N, ~% z' d* n% u/ T硬件JPEG编解码器支持YCbCr或RGB(3个颜色分量)、灰度(1个颜色分量)和CMYK(4个颜色分量)模式的像素输入/输出格式,每个分量的下采样因子完全可编程。

8 l$ L" `: |1 q, t
: B8 ~& {$ K& \  w. y6 ?2 R
CL9E[M{]4471G9C_~5FVWZW.png
* X$ G" y" i- n  j, K
5 W+ q, N4 v/ _6 C1 硬件JPEG编解码器概述
8 E8 O9 \9 e! o4 ~) Q) Y" o* T硬件JPEG编解码外设符合JPEG标准(JPEG ISO/IEC 10918-1 ITU-T建议T.81)。它可以解码/编码JPEG压缩图像,每个样本8位。
1 f; A- F1 W9 u, a$ t& M; z3 d硬件JPEG编解码外设为熵编解码段(ECS)编码和解码提供硬件加速。它支持JPEG文件头生成和解析。硬件JPEG编解码外设还支持JFIF(JPEG文件交换格式),使用事实标准对JPEG图像进行编码。但是,在这些数据流中找到的所有应用特定的标记段均被忽略。JPEG编解码器支持最多四个颜色分量、四个量化表和两组DC和AC霍夫曼表。6 G% K* s5 f2 y! s& J1 u/ G
硬件JPEG编解码器可以灵活地指定要对每个分量使用的量化表和霍夫曼表。0 Z- s3 I' k2 N+ D  p2 M
JPEG标准定义的JPEG编码和解码操作按块执行。JPEG标准将MCU(最小编解码单元)定义为可以编码或解码的最小块数。在硬件JPEG编解码外设中,MCU的构成是可编程的。硬件JPEG编解码器可以定义每个MCU中属于特定颜色分量的块数。每个块是样本的一个8x8数组,每个样本被定义为8位(1个字节)。因此,每个块均是一个64字节数组(每个样本1个字节)。: J; X! P3 [+ p
硬件JPEG编解码器支持YCbCr或RGB(3个颜色分量)、灰度(1个颜色分量)和CMYK(4个颜色分量)模式的像素输入/输出格式,每个分量的下采样因子完全可编程。
4 A# `$ y7 H7 O; R* g使用STM32H7x3系列器件进行JPEG解码操作,当输出颜色格式为YCbCr时,Chrom-ArtAccelerator™外设(也称为DMA2D)能够将YCbCr块(JPEG解码器的输出)转换为可直接显示的RGB像素。& r0 ?. t3 H! K( E- {% H
使用STM32H7x3系列器件进行编码(所有颜色格式)或非YCbCr(灰度或CMYK颜色格式时)颜色格式的解码时,从/至RGB像素的转换不进行硬件加速且必须通过软件执行。5 k! n* m/ {# @" v9 U
使用STM32F76/77xxx器件进行解码或编码时,YCbCr至RGB的转换不加速且必须通过软件执行。  u. _1 ?1 I) S6 t) G2 D, i
STM32CubeF7/H7固件包提供包含必要API的专用JPEG实用工具软件,能够执行JPEG MCU块至/从RGB像素的转换(位于\Firmware\Utilities\JPEG目录下)。5 r8 w1 Q0 f# n( g+ P# l
STM32CubeF7/H7为JPEG编解码外设提供专用HAL(硬件抽象层)驱动程序:( p3 O: n2 C( L) j
• STM32CubeF7:stm32f7xx_hal_jpeg.c/ stm32f7xx_hal_jpeg.h
* T0 K$ x0 r) t- s/ }• STM32CubeH7:stm32h7xx_hal_jpeg.c/ stm32h7xx_hal_jpeg.h
8 B6 X* J- Q  X6 f- x8 Q) D) ]本文档适用于基于Arm®的器件。) c+ m: e% L  F7 g

/ p* L- W- O8 L2 不同色彩空间的硬件JPEG编解码器设置
% e6 }- ]; B- X' J1 U& u! H2.1 YCbCr色彩空间
5 q9 \# j& |; s5 @/ i- q' v2.1.1 YCbCr与RGB之间的相互转换
3 n. }2 {4 c' R' ~  ZJPEG文件交换格式(JFIF)标准描述了YCbCr与RGB之间的相互转换和色度采样。JFIF合规文件通常具有如下扩展名:.jpg、.jpeg、.JPG、.JPEG。& A& M) X( W. q; r# Q1 a/ q3 f  f
JPEG标准(JPEG ISO/IEC 10918-1 ITU-T建议T.81)没有定义要对源行图像使用的色彩空间,而JFIF标准则定义了两个可能的色彩空间:灰度(Y亮度)或彩色(YCbCr亮度和色度)。
! |, r* c, z' ~" I8 i" ~7 J5 n2 GJFIF标准使用YCbCr颜色而不是原始的RGB色彩空间。该色彩空间能够从给出像素颜色的2个色度分量Cb和Cr中分离出亮度分量(Y),即像素亮度(本质上是灰度信号)。RGB色彩空间与YCbCr之间相互转换的转换矩阵如下:
; l/ J! ^  |6 K6 f8 W
7 y/ _6 w6 {6 @6 n

' a. y2 R2 x5 I1 U XNK)QDM[)KV6{JJ]`$_5253.png
: O; h( U9 {/ U! i. w* I
$ ?- h: R- [1 v' A  ]2 t1 U9 @已知人眼对亮度变化比对颜色变化更敏感,可使用YCbCr对两个独立的量化表进行定义,分别用于亮度和色度(Cb和Cr)分量,以便进一步量化色度(至少对于低频率)。9 i8 h7 y& b, p6 \5 f

+ o, t, {8 b, s$ X5 y) w) M2.1.2 YCbCr量化表
. j/ \$ F# F1 W/ D6 o图 2和图 3所示为JPEG标准提供的样本亮度和色度量化表。按照标准中的描述,这些表在每个样本8位的亮度和色度图像上给出很好的结果(对于STM32F7/H7硬件JPEG编解码器)。
1 W) G1 x2 r- d8 T5 S: [  p该标准还对这些表格做了如下描述:如果将这些量化值除以2,得到的重构图像与源图像的差异通常难以辨别。
* H: t. h. @% }$ R- k% q1 X* }

+ i, a3 C6 R( G3 Y

; T9 y/ [* i4 Z6 T* d N@5J{4~(I`_H~IJ787LFX~X.png # O6 k' J) }' ^( i. H) J
8 I7 z. V' G. j& ~3 t
图 4和图 5提供了Z形排序的顺序。

' L( {5 O9 `: c) a) s- x- K' a9 I1 k0 @! a  a

8 B7 u# I3 b' i4 O# l* h  s7 ~ )(LOA3F689CFIQX{FZ5E{SG.png ( ~5 V4 |7 {1 G/ O) c( y8 e

9 n. ^7 `8 F! u4 ^' u1 N/ A+ a! B  V3 E8 l9 d* R* D% Z/ E
STM32CubeF7和STM32CubeH7使用这些默认表格,结合用户质量因子进行编码和解码。: W% u0 m. R$ w/ Z' h
• 进行编码时,STM32CubeF7/H7 JPEG HAL驱动程序允许用户定义百分比质量因子(1%至100%)。然后,按如下方式使用质量因子对以上表格进行比例计算:: L% Q& ^: S4 _1 E  b7 c& Z9 b7 R
– 当质量处于50%至100%范围内时:scaling_factor = 200 - 2 x 质量。& R  G- L1 Y" S& t8 U- C0 [
– 当质量低于50%时:scaling_factor = 5000 / 质量。1 _! D1 P: f4 G9 r/ Q: s$ S
因此,当质量设置为100%时,比例因子变为0,然后所有表格条目均变为1(因为为零的条目被系统性地替换为1)。这使得量化损失最小化。- l) m, e3 n$ {# C
然后,在硬件JPEG编解码器中将量化表编程为专用存储表:QMEM0用于亮度(Y),QMEM1用于色度(Cb和Cr)。
" ~: M: f* z( x. c• 在解码时,STM32CubeF7/H7 JPEG HAL驱动程序能够按如下方式检索质量。对于量化表的每个值:" N- E* s6 {1 q8 N( n
– 读取量化系数并计算该系数对比参考表中相应值的比例因子(百分比值)。
4 B. V3 f( t4 d" ?2 `8 f比例 = (100 x quantization_coefficient) / reference_table_value)。
4 `7 b9 q! q2 N; C, L) f* m  e+ N– 如果quantization_coefficient = 1,则质量为100%。
; k% Q' B- B' Q& d. {– 否则,如果比例低于100:质量 = (200 - 比例) /2。
# O# s# |0 h  \3 H1 s- p* Y– 否则,质量 = 5000 / 比例。/ w4 Y' E' E* c( \
按照量化表每个系数(共64个系数)的计算质量平均值计算编码质量。只使用亮度表计算平均质量。2 F" {  w7 O  Q. i
硬件JPEG编解码器的QMEMx内存表用于存储/检索比例量化表(对比参考表)。按Z形顺序访问这些表格。
: e3 U% P* O" U! P1 i; J8 z/ s( a硬件JPEG编解码器提供RAM“QMEM”区,用于存储/检索最多4个量化表(分别对应于4个颜色分量)。QMEM RAM位于偏移地址0x0050至0x014C。每个表的大小为64字节(即16个32位字)。

0 y0 |  b1 i8 X) y+ [2 u6 j- S8 U# A# H. A+ V3 B
/ q" z) [5 b6 O1 P! v, z% T6 o
7XEI@AK[AZ]T}8M[5)HZT.png : i5 S; b' J" L1 v' Y9 @- u
& X# y7 |% X; |+ V9 g7 }, M7 f% \
对于YCbCr色彩空间,STM32CubeF7/H7 JPEG HAL驱动程序默认只使用2个量化表:0 E1 z7 ~! a, P' L
• QMEM0:用于亮度(Y)分量。64字节位于偏移地址0x0050。
$ {( w$ `+ X* `5 ~• QMEM1:用于色度(Cb和Cr)分量。64字节位于偏移地址0x0090。! Y  C2 V9 Q7 t. t4 P# |
请注意,仅当硬件JPEG编解码器停止时,才能读/写QMEM RAM,即没有正在进行的编码/解码操作(JPEG_CONFR0寄存器的位0“START”设置为0)。
$ L0 z; @+ D+ o0 F3 ?& K0 kSTM32CubeF7/H7 JPEG HAL驱动程序默认对(Y)亮度分量使用图 2所示表格,并对Cb和Cr色度分量使用图 3所示表格。JPEG HAL驱动程序还为用户按颜色分量定义量化表提供了可能性(本例中为3个量化表)。如需自定义量化表,用户必须提供3个量化表(每个分量一个量化表)。这些表格分别用于(使用质量因子进行比例计算后)硬件JPEG编解码器的QMEM0至QMEM3 RAM表的编程(其中,QMEM2表位于偏移地址0x00D0)。
2 V# n. U/ T6 H# H6 g/ ?7 [HAL函数“HAL_JPEG_SetUserQuantTables”是用于自定义用户量化表的API。

$ j0 c4 A/ a: O3 U3 |/ P2 D8 z5 S- I4 b' s

  `) Y. h  [5 c3 }1 {8 F完整版请查看:附件# J+ K3 f1 g, z6 A. @
: P. ^4 f# g' j

, ^3 y. D% G4 p' Q& ]' E8 U3 M& x) h# B3 H( F
收藏 评论0 发布时间:2022-12-5 21:00

举报

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