基于DSP流水结构的快速子像素插值计算方法技术

技术编号:3583656 阅读:253 留言:0更新日期:2012-04-11 18:40
本发明专利技术针对数字视频编码的运动估计中插值计算问题,提出了一种基于DSP流水结构的快速子像素插值计算方法,所述方法通过相关性图设计高效的软件流水,并优化内存空间的使用方法和直接内存存取(DMA)方法,将数据尽量打包处理,实现高效的软件流水。利用本发明专利技术可以加快子像素插值运算的处理速度。

【技术实现步骤摘要】

本专利技术涉及一种数字视频编码技术,尤其涉及一种基于DSP流水结构的快 速子像素插值计算方法。
技术介绍
现有数字视频编码技术通常采用运动估计来实现帧间压缩编码,在编码的 运动估计中,很多像素块其当前点偏离1/2像素点的位置得到的匹配点比整数像 素的位置得到的匹配点有更小的残差,由此可知,在一个内插到半像素精度的 区域进行搜索可以得到更好的匹配,从而减小码率。进一步地,1/4像素点的插 值可以进一步减小码率。事实上,MPEG2编解码标准就有1/2像素插值,到了 H,264和AVS,又增加了 1/4^f象素插值。图1给出了参考图像整数样本、1/2像素样本和1/4像素样本的位置关系, 其中大写字母标记的为整数样本位置,灰底色和白底色小写字母分别标记为1/2 像素样本和1/4像素样本位置。1/2像素样本位置的预测值通过4抽头滤波器 Fl[-1,5,5,-1]计算得到。以l/2像素样本b为例,其计算过程如下首先用Fl对水平方向上最近的4个整数样本C、 D、 E和F滤波,得到中 间值b'-(-C + 5D + 5E-F);经过饱和运算,最终的预测值b = Clip((b'+ 4) 3) (Clip表示计算结果饱和在(0, 255 )内,>>表示移位)。1/4像素样本位置的预测值通过4抽头滤波器F2[1,7,7, l]计算得到,以1/4 像素样本a为例,其计算过程如下首先用F2在水平方向上对四个样本ee, D, b和E滤波,得到中间值a' = (ee + 7D + 7b + E);经过饱和运算,最终的预测值a = Clip((a'+ 64) 7)。其中ee和 b是相应位置1/2像素样本中间值,D和E是相应位置整数样本i文大8倍的值。1/4像素精度估值相对于整像素估值虽然可以节省20%的码率,但是也带来 了运算复杂度增加的新问题。由于子像素插值运算量较大,现在有VLSI结构已可以解决这个问题,但是在DSP平台上,依然没有有效的方法来解决这一问题; 用于VLSI结构的方法通常并不能适应DSP的软件流水,甚至会导致DSP平台 更差的性能。
技术实现思路
本专利技术的目的是提供一种基于DSP流水结构的快速子像素插值计算方法, 通过相关性图设计高效的软件流水,并优化内存空间的使用方法和直接内存存 取(DMA)方法,将数据尽量打包处理,实现高效的软件流水。为了解决上述技术问题,本专利技术采用了一种基于DSP流水结构的快速子像 素插值计算方法,所述方法涉及一个DSP芯片的内部寄存器和一个两级存储器, 内部寄存器分为A、 B两组,存储器包括一级内存L1和二级内存L2;所述插值 计算方法包含以下步骤步骤l、首先由DMA从外存传输数据到L2中,内部寄存器使用无边界调 整双字读取指令LDNDW和边界调整双字读取指令LDDW向LI读取数据,LI 接收指令后搜索L2的原始数据,读取数据到内部寄存器;步骤2、通过低高半字打包指令PACKLH、右移拼接指令SHRMB、低位打 包指令PACK2和高低半字打包指令PACKHL调整数据在寄存器中的位置,确 保数据在合适的位置中;步骤3、使用无符号8位点积指令DOTPU4在一个时钟周期内实现或执行 两个16位点积指令DOTP2,并将结果求和,在一到两个时钟周期内完成四抽头 滤波器的滤波,产生的中间值以32位的形式存储在目的寄存器中;步骤4、使用低位打包指令PACK2将两个32位的中间值的低16位打包为 一个32位的值,并将高低16位分别存储,在打包的同时完成滤波系数的交换;步骤5、使用加法指令ADD2和移位指令SHR2对寄存器的高低16位进行 加法和移位的操作,得到插值的最终值;步骤6、使用无符号数据饱和打包指令SPACKPU4将4个16位有符号数据 饱和为4个8位无符号数据进行存储。进一步的,所述的二级内存L2使用双緩冲的兵乓结构分配空间,并配置 DMA。所述的双緩冲Buffer A和BufferB的大小为11520字节。进一步的,所述的从外存传输数据的实现过程如下首先由DMA从外存传 输数据到L2中的Buffer A中处理;处理数据的同时,启动另一个DMA,传输 数据到L2中的Buffer B;处理Buffer B的同时,再传输数据到Buffer A,循环 反复,直到指定的数据处理完成。由于采用了以上的基于DSP流水结构的快速子像素插值计算方法,与现有 技术相比可以降低运算复杂度,提高运算速度。附图说明本专利技术的基于DSP流水结构的快速子像素插值计算方法由以下的实施例及 附图详细给出。图l为本专利技术的整数样本、1/2像素样本和1/4像素样本的位置示意图;图2为本专利技术的1/2子像素插值计算方法实现过程示意图;图3为本专利技术的子像素插值计算方法与其他计算方法的实现效果比较示意图。具体实施方式以下将对本专利技术的基于DSP流水结构的快速子像素插值计算方法作进一步 的详细描述。所述方法涉及一个DSP芯片的内部寄存器和一个两级存储器,内 部寄存器分为A、 B两组,存储器包括一级内存L1和二级内存L2;以点b和点 a为例分别说明1/2像素点和1/4像素点的具体实施过程,其中1/2像素点插值 计算方法如图2所示,实现步骤如下Sal 、首先由直接内存存取(DMA)从外存传输数据d0-dl0到L2中,内部 寄存器使用无边界调整双字读取指令LDNDW或边界调整双字读取指令LDDW 向Ll读取数据,Ll接收指令后搜索L2的原始数据,读取数据到内部寄存器的 A组和B组;Sa2、在A组和B组分别使用低高半字打包指令PACKLH和右移拼接指令 SHRMB来调整数据在寄存器中的位置,确保数据在合适的位置;Sa3、使用无符号8位点积指令DOTPU4在一个时钟周期内完成四抽头滤波 器Fl[-1,5,5,-1]的滤波,该滤波系数为k3 k0, k3k2klk0的值为0x節505ff,滤波后得到的中间值m0 m7以32位的形式存储在目的寄存器中;Sa4、使用低位打包指令PACK2将两个32位的中间值打包为一个32位的 值,高低16位分别存储两个中间值,使用打包指令的同时完成数据m3和m4 在A、 B两边的交换;Sa5、使用加法指令ADD2和移位指令SHR2同时对寄存器的高低16位进 行加法和3位移位操作,得到插值的最终值m'O- m'7;Sa6、使用无符号数据饱和打包指令SPACKPU4来将4个16位有符号数据 饱和为4个8位无符号数据进行存储。其中1/4像素点插值计算方法实现步骤如下Sbl、首先由DMA从外存传输数据dO-dlO到L2中,内部寄存器使用无边 界调整双字读取指令LDNDW和边界调整双字读取指令LDDW向Ll读取数据, Ll接收指令后搜索L2的原始数据,读取数据到内部寄存器的A组和B组;Sb2、使用低高半字打包指令PACKLH、低位打包指令PACK2、高低半字 打包指令PACKHL来调整数据在寄存器中的位置,确保数据在合适的位置;Sb3、使用无符号16位点积指令DOTP2在两个时钟周期内完成四抽头滤波 器F2[l,7,7,l]的滤波,该滤波系数为k3 k0, k3k2klk0的值为0xffD505ff,滤波 后得到的中间值m0 m7以32位的形式存储在目的寄存器中;Sb4、使用〗氐位打包指令PACK2将两个32位的中间本文档来自技高网
...

【技术保护点】
一种基于DSP流水结构的快速子像素插值计算方法,其特征在于,所述方法涉及一个DSP芯片的内部寄存器和一个两级存储器,内部寄存器分为A、B两组,存储器包括一级内存L1和二级内存L2;所述插值计算方法包含以下步骤:步骤1、首先由直接内存存取DMA从一外存传输数据到L2中,内部寄存器使用无边界调整双字读取指令LDNDW和边界调整双字读取指令LDDW向L1读取数据,L1接收指令后搜索L2的原始数据,读取数据到内部寄存器;步骤2、通过低高半字打包指令PACKLH、右移拼接指令SHRMB、低位打包指令PACK2和高低半字打包指令PACKHL调整数据在寄存器中的位置,确保数据在合适的位置中;步骤3、使用无符号8位点积指令DOTPU4在一个时钟周期内实现或执行两个16位点积指令DOTP2,并将结果求和,在一到两个时钟周期内完成四抽头滤波器的滤波,产生的中间值以32位的形式存储在寄存器中;步骤4、使用低位打包指令PACK2将两个32位的中间值的低16位打包为一个32位的值,并将高低16位分别存储,在打包的同时完成滤波系数的交换;步骤5、使用加法指令ADD2和移位指令SHR2对寄存器的高低16位进行加法和移位的操作,得到插值的最终值;步骤6、使用无符号数据饱和打包指令SPACKPU4将4个16位的值饱和为4个8位的值进行存储。...

【技术特征摘要】
1、一种基于DSP流水结构的快速子像素插值计算方法,其特征在于,所述方法涉及一个DSP芯片的内部寄存器和一个两级存储器,内部寄存器分为A、B两组,存储器包括一级内存L1和二级内存L2;所述插值计算方法包含以下步骤步骤1、首先由直接内存存取DMA从一外存传输数据到L2中,内部寄存器使用无边界调整双字读取指令LDNDW和边界调整双字读取指令LDDW向L1读取数据,L1接收指令后搜索L2的原始数据,读取数据到内部寄存器;步骤2、通过低高半字打包指令PACKLH、右移拼接指令SHRMB、低位打包指令PACK2和高低半字打包指令PACKHL调整数据在寄存器中的位置,确保数据在合适的位置中;步骤3、使用无符号8位点积指令DOTPU4在一个时钟周期内实现或执行两个16位点积指令DOTP2,并将结果求和,在一到两个时钟周期内完成四抽头滤波器的滤波,产生的中间值以32位的形式存储在寄存器中;步骤4、使用低位打包指令PACK2将两个32位的中间值的低16位打包为一个32位的值,并将高低16位分别存储,...

【专利技术属性】
技术研发人员:胡书
申请(专利权)人:上海广电集团有限公司中央研究院
类型:发明
国别省市:31[中国|上海]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利