基于SOPC的MPEG4视频播放器
与编码精度有关,表1 显示的即为两者对应关系。
AC 系数的反量化要用到两个加权矩阵,分别用于内部子块和非内部子块。用户也可以使用自定义的量化矩阵。
如果用QDCT 表示输入已量化的AC 系数,用DCT 表示反量化后的AC 系数,那么AC 系数的IQ 变换公式如下:
式中,quantiser_scale 为0~112 之间的两组数值,分别对应不同的比特流控制状态。但是在本系统采用的XviDCodec 版本中,比特流控制功能并没有得到实现,所以这里quantiser_scale 的取值固定。
反量化得到的结果通过饱和化,使其限制在[ - 2048 ,+ 2047 ]之间。
IQ 在FPGA 上按照图3 的框图进行硬件实现。
反离散余弦变换
IDCT 是DCT 的逆过程,用于还原DCT 系数矩阵。
IDCT 过程可由下面的公式描述:
上式可视为一个2 个8 元向量的点积:
图4 反离散余弦变换的硬件实现结构
将8 元的输入向量[ X0 , X1 , X2 , X3 , X4 , X5 , X6 ,X7 ]分成奇元素[ X1 , X3 , X5 , X7 ]和偶元素[ X0 , X2 , X4 ,X6 ] ,8 ×8 矩阵则用2 个4 ×4 矩阵来代替,奇元素和偶元素分别与这2 个矩阵v 和u 相乘,生成2 个4 ×4 向量p 和q,通过加减向量p 和q ,可得到输出向量x。
算法可以表示成下面的公式:
基于8 ×8 矩阵的IDCT 算法,在FPGA 上按照图4所示的结构加以硬件实现。
运动补偿
运动补偿是一种大量、单调的运算。为了能实现运动补偿,采用了多级、多个运算单元并行流水运算的方式,如图5 所示。
运动补偿模块的控制很复杂。实际设计时将它分成几个子模块:补偿控制、补偿地址产生、差分数据提供以及补偿运算。这几个子模块直接采用硬件逻辑设计,运行时无需NiosII 处理器干预。其中补偿控制是完成整个运动补偿的控制,提供输入控制信号、输出控制信号、缓存控制信号、预测数据和差分数据等;补偿地址产生用于生成预测数据在帧缓存中的地址及补偿结果的写地址;差分数据负责接收IDCT 的结果,通过缓存在适当时机提供补偿使
用;补偿运算则完成最终预测数据的计算。
YUV-RGB 转换
根据YUV 到RGB 色彩空间的转换关系,对每个乘积项都预先做出结果, 存放在ROM 当中。对每一个YUV 分量的输入,由硬件逻辑产生存取地址,并进行加法运算,从而得到对应的结果。其实现结构如图6 所示。
系统软件工作流程
本系统的软件工作流程如图7 所示。
结 语
该系统采用基于Altera FPGA 嵌入式软核的SOPC平台实现,具有较低的硬件成本, IP 核的大量使用,良好的系统扩展性的特点。
- 基于嵌入式Linux的PMP系统设计与实现(08-20)
- 基于Android系统的影音播放器开发(03-25)
- 在UP-TECH S3C2410 DVK1.1开发平台上的嵌入式掌上娱乐系统设计 (03-13)
- 基于DirectFB的嵌入式播放器的设计与实现(04-23)
- 基于DirectFB的嵌入式播放器设计(01-28)
- DIY小发明:打造你自己的流媒体播放器,解决方案、硬件框图(06-04)