H264高速亮度插值装置与方法.pdf

上传人:r5 文档编号:1102105 上传时间:2018-03-31 格式:PDF 页数:25 大小:1.71MB
返回 下载 相关 举报
摘要
申请专利号:

CN200910154148.X

申请日:

2009.11.06

公开号:

CN101795405A

公开日:

2010.08.04

当前法律状态:

驳回

有效性:

无权

法律详情:

发明专利申请公布后的驳回IPC(主分类):H04N 7/26申请公布日:20100804|||实质审查的生效IPC(主分类):H04N 7/26申请日:20091106|||公开

IPC分类号:

H04N7/26; H04N7/50

主分类号:

H04N7/26

申请人:

杭州士兰微电子股份有限公司

发明人:

徐向阳; 汤博

地址:

310012 浙江省杭州市黄姑山路4号(高新区)

优先权:

专利代理机构:

代理人:

PDF下载: PDF下载
内容摘要

本发明提供的H.264高速亮度插值装置包括参考缓存模块,寄存器输入控制模块,寄存器组,滤波器输入控制模块,N路6抽头滤波器,RAM缓存I/O控制模块,RAM缓存模块,参考缓存模块从外部读取当前亮度块插值处理所需参考像素矩阵,参考像素矩阵全部读入参考缓存模块后,将参考像素矩阵放入寄存器组中,N路6抽头滤波器通过滤波器输入控制模块从寄存器组中同时且分别获得6个参考像素作为输入,求取1/2像素点,并将1/2像素点缓存到RAM缓存模块中。本发明的整个插值过程由多路并行滤波器流水运行达到饱和状态,有效减少亮度插值处理时钟数,提高最大计算频率,满足多路高清数字视频信号实时编解码需求。

权利要求书

1: H.264高速亮度插值装置,其特征在于包括参考缓存模块,寄存器输入控制模块,寄存器组,滤波器输入控制模块,N路6抽头滤波器,RAM缓存I/O控制模块,RAM缓存模块:所述参考缓存模块以DMA模式从外部读取并保存当前亮度块插值处理所需参考像素矩阵; 所述寄存器输入控制模块连接参考缓存模块,RAM缓存模块及寄存器组,所述参考缓存模块为寄存器输入控制模块提供整像素点,所述RAM缓存模块为寄存器输入控制模块提供水平1/2像素点、垂直1/2像素点、对角线1/2像素点以及1/2像素中间点,寄存器输入控制模块根据当前时钟数控制寄存器组选择存储整像素点、水平1/2像素点、垂直1/2像素点、对角线1/2像素点或者1/2像素中间点; 所述寄存器组存储整像素点、1/2像素值及1/2像素中间值,为滤波器输入控制模块提供输入数据; 所述滤波器输入控制模块根据当前时钟数控制N路6抽头滤波器进行下列操作中:从所述寄存器组提供的整像素点计算并输出水平1/2像素点、垂直1/2像素点以及水平1/2像素中间点或垂直1/2像素中间点两种中的一种;从所述寄存器组提供的水平1/2像素点中间值或垂直1/2像素中间点计算并输出对角线1/2像素点; 所述N路6抽头滤波器在RAM缓存I/O控制模块下将水平1/2像素点、垂直1/2像素点、对角线1/2像素点或者1/2像素中间点保存在RAM缓存模块中。
2: 如权利要求1所述H.264高速亮度插值装置,其特征在于所述当前亮度块大小为4×4,所述N等于4。
3: 如权利要求1或2所述H.264高速亮度插值装置,其特征在于所述参考缓存模块由3块数据位宽为32bit,深度为18的1读1写双端口RAM组成,分别为第一RAM0,第二RAM1及第三RAM2。其中,9×9参考整像素矩阵中第0,3,6行整像素存放在RAM0中,第1,4,7行整像素存放在RAM1中,第2,5,8行整像素存放在RAM2中。从外部数据接口来看,所述参考缓存模块具有1个32bit宽度的写端口,3个32bit宽度的读端口。
4: 如权利要求1或2所述H.264高速亮度插值装置,其特征在于所述6抽头滤波器分解为以下3级流水:第1级计算X=(G+H)<<2+(G+H),Y=(F+I)<<2+(F+I)及Z=(E+J);第2级计算b1=Z+(X<<2-Y),b1_clip0=(b1+16)>>5及b1_clip1=(b1+512)>>10;第3级计算b_clip0=Clip1Y(b1_clip0)及b_clip1=Clip1Y(b1_clip1);其中G点为整像素待插值点,E、F为离G点最近的左边两个整像素点,H、I、J为离G点最近的右边三个整像素点。
5: 如权利要求1或2所述H.264高速亮度插值装置,其特征在于所述RAM缓存模块包括位宽为60bit,深度为9的1读1写第四RAM60×9和位宽32为bit深度为5的1读1写第五RAM32×5,其中,第四RAM60×9缓存水平1/2像素点中间值,水平1/2像素点及对角线1/2线像素点,第五RAM32×5缓存垂直1/2像素点
6: 如权利要求1或2所述H.264高速亮度插值装置,其特征在于还包括插值输入控制模块和双向线性插值模块,所述插值输入控制模块根据当前时钟数从寄存器组中选取水平1/2像素点、垂直1/2像素点、对角线1/2像素点,并提供给双向线性插值模块,所述双向线性插值模块对进行双线性插值,计算得到1/4像素点。
7: H.264高速亮度插值方法,其特征在于包括如下步骤: (1)参考缓存模块以DMA模式从外部读取当前亮度块插值处理所需参考像素矩阵; (2)参考像素矩阵全部读入参考缓存模块后,将参考像素矩阵放入寄存器组中,N路6抽头滤波器通过滤波器输入控制模块从寄存器组中同时且分别获得6个参考像素作为输入,求取1/2像素点,并将1/2像素点缓存到RAM缓存中。
8: 如权利要求7所述H.264高速亮度插值方法,其特征在于所述当前亮度块大小为4×4;所述寄存器组由34个寄存器构成;所述6抽头滤波器为4路;所述RAM缓存包括存储空间为60×9的第四RAM及存储空间为32×5的第五RAM,第四RAM及第五RAM按时钟将1/2像素点缓存入寄存器组。
9: 如权利要求7或8所述H.264高速亮度插值方法,其特征在于还包括下列步骤:通过双向线性插值模块从寄存器组中获取参考整像素点及1/2像素点作为输入,求取1/4像素点。
10: 如权利要求7或8所述H.264高速亮度插值方法,其特征在于所述步骤(1)实现的方法为将参考整像素矩阵中第0,3,6行整像素存放在RAM0中,第1,4,7行整像素存放在RAM1中,第2,5,8行整像素存放在RAM2中,从外部数据接口来看,所述参考缓存模块具有1个32bit写位宽,3个32bit读位宽。
11: 如权利要求8所述H.264高速亮度插值方法,其特征在于所述步骤(2)所述求取4×4亮度块的1/2像素点的方法为: (1)参考像素矩阵的第0行至第8行逐行进行4路水平6抽头滤波,各路6抽头滤波器从当前行分别获得参考像素点,逐行输出并保存第1行至第8行水平1/2像素中间值,构成9行4列的水平1/2像素中间值阵列;在输出第2行至第6行水平1/2像素中间值时,同时输出并保存第2行至第6行水平1/2像素值,构成5行4列的水平1/2像素阵列; (2)参考像素矩阵的第2列至第6列逐列进行4路垂直6抽头滤波,各路6抽头滤波器从当前列分别获得参考像素点,逐行输出第2列至第6列的垂直1/2像素值,构成5行4列的垂直1/2像素阵列; (3)将步骤(1)得到的4×9的水平1/2像素中间值阵列进行4路对角线6抽头滤波,各路6抽头滤波器分别从水平1/2像素中间值阵列的各列获得像素点,逐行输出并保存对角线1/2像素值,构成4行4列的对角线1/2像素阵列。
12: 如权利要求11所述H.264高速亮度插值方法,其特征在于其中4路6抽头滤波器求取1/2像素点过程如下: (1)从寄存器组读取9×9参考整像素矩阵第0行9个数据(ref00,ref01,ref02,ref03,ref04,ref05,ref06,ref07,ref08),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据; (2)从寄存器组读取9×9参考整像素矩阵第1行9个数据(ref10,ref11,ref12,ref13,ref14,ref15,ref16,ref17,ref18),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6头滤波器3的输入数据,同时将步骤(1)中产生的参考整像素矩阵中第0行的1/2像素中间值b100、b101、b102、b103存入第五RAM 60×9的地址0中; (3)从寄存器组读取9×9参考整像素矩阵第2行9个数据(ref10,ref11,ref12,ref13,ref14,ref15,ref16,ref17,ref18),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;同时将步骤(2)中产生的参考整像素矩阵中第1行的1/2像素中间值b110、b111、b112、b113存入RAM60×9的地址1中; (4)从寄存器组读取9×9参考整像素矩阵第3行9个数据(ref20,ref21,ref22,ref23,ref24,ref25,ref26,ref27,ref28),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;同时将步骤(3)中产生的参考整像素矩阵中第2行的1/2像素中间值b120、b121、b122、b123存入RAM 60×9的地址2中; (5)从寄存器组读取9×9参考整像素矩阵第4行9个数据(ref30,ref31,ref32,ref33,ref34,ref35,ref36,ref37,ref38),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;将步骤(3)产生的参考整像素矩阵中第2行的1/2像素值b20、b21、b22、b23存入RAM 32×5的地址0中;同时将步骤(4)中产生的参考整像素矩阵中第3行的1/2像素中间值b130、b131、b132、b133存入RAM 60×9的地址3中; (6)从寄存器组读取9×9参考整像素矩阵第5行9个数据(ref40,ref41,ref42,ref43,ref44,ref45,ref46,ref47,ref48),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据,将步骤(4)产生的参考整像素矩阵中第3行的1/2像素值b30、b31、b32、b33存入RAM 32×5的地址1中;同时将步骤(5)中产生的参考整像素矩阵中第4行的1/2像素中间值b140、b141、b142、b143存入RAM 60×9的地址4中; (7)从寄存器组读取9×9参考整像素矩阵第6行9个数据(ref50,ref51,ref52,ref53,ref54,ref55,ref56,ref57,ref58),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;将步骤(5)产生的参考整像素矩阵中第4行的1/2像素值b40、b41、b42、b43存入RAM 32×5的地址2中;同时将步骤(6)中产生的参考整像素矩阵中第5行的1/2像素中间值b150、b151、b152、b153存入RAM 60×9的地址5中; (8)从寄存器组读取9×9参考整像素矩阵第7行9个数据(ref60,ref61,ref62,ref63,ref64,ref65,ref66,ref67,ref68),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输 入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;将步骤(6)产生的参考整像素矩阵中第5行的1/2像素值b50、b51、b52、b53存入RAM 32×5的地址3中;同时将步骤(7)产生的参考整像素矩阵中第6行的1/2像素中间值b160、b161、b162、b163存入RAM 60×9的地址6中; (9)从寄存器组读取9×9参考整像素矩阵第8行9个数据(ref70,ref71,ref72,ref73,ref74,ref75,ref76,ref77,ref78),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据,将步骤(7)产生的参考整像素矩阵中第6行的1/2像素值b60、b61、b62、b63存入RAM 32×5的地址4中;同时将步骤(8)产生的参考整像素矩阵中第7行的1/2像素中间值b170、b171、b172、b173存入RAM 60×9的地址7中;将RAM60×9中地址0数据读入内部寄存器缓存; (10)从寄存器组读取9×9参考整像素矩阵第2列9个数据(ref01,ref11,ref21,ref31,ref41,ref51,ref61,ref71,ref81),将该列第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;同时将步骤(9)产生的参考整像素矩阵中第5行的1/2像素中间值b180、b181、b182、b183存入RAM 60×9的地址8中;将RAM 60×9中地址1数据读入内部寄存器缓存。 (11)从寄存器组读取9×9参考整像素矩阵第3列9个数据(ref02,ref12,ref22,ref32,ref42,ref52,ref62,ref72,ref82),将该列第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;同时将RAM 60×9中地址2数据读入内部寄存器缓存;将RAM 32×5中地址0数据存放到RAM 60×9地址0中。 (12)从寄存器组读取9×9参考整像素矩阵第4列9个数据(ref03,ref13,ref23,ref33,ref43,ref53,ref63,ref73,ref83),将该列第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;同时将步骤(10)产生的参考整像素矩阵中第2列的1/2像素值h00、h01、h02、h03存入第二RAM 32×5的地址0中;将RAM 60×9中地址3数据读入内部寄存器缓存;将RAM32×5中地址1数据存放到RAM 60×9地址1中。 (13)从寄存器组读取9×9参考整像素矩阵第5列9个数据(ref04,ref14,ref24,ref34,ref44,ref54,ref64,ref74,ref84),将该列第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;将步骤(11)产生的参考整像素矩 阵中第3列的1/2像素值h10、h11、h12、h13存入RAM 32×5的地址1中;将RAM 60×9中地址4数据读入内部寄存器缓存;将RAM 32×5中地址2数据存放到RAM 60×9地址2中。 (14)从寄存器组读取9×9参考整像素矩阵第6列9个数据(ref05,ref15,ref25,ref35,ref45,ref55,ref65,ref75,ref85),将该列第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;将步骤(12)产生的参考整像素矩阵中第4列的1/2像素值h20、h21、h22、h23存入RAM 32×5的地址2中;将RAM 60×9中地址5数据读入内部寄存器缓存;将RAM 32×5中地址3数据存放到RAM 60×9地址3中。 (15)从寄存器组读取水平1/2像素点中间值b100,b110,b120,b130,b140,b150作为第一6抽头滤波器0的输入数据;b101,b111,b121,b131,b141,b151作为第二6抽头滤波器1的输入数据;b102,b112,b122,b132,b142,b152作为第三6抽头滤波器2的输入数据;b103,b113,b123,b133,b143,b153作为第四6抽头滤波器3的输入数据;将步骤(13)产生的参考整像素矩阵中第4列的1/2像素值h30、h31、h32、h33存入RAM 32×5的地址3中;将RAM 60×9中地址6数据读入内部寄存器缓存;将RAM 32×5中地址4数据存放到RAM 60×9地址4中。 (16)从寄存器组读取水平1/2像素点中间值b110,b120,b130,b140,b150,b160作为第一6抽头滤波器0的输入数据;b111,b121,b131,b141,b151,b161作为第二6抽头滤波器1的输入数据;b112,b122,b132,b142,b152,b162作为第三6抽头滤波器2的输入数据;b113,b123,b133,b143,b153,b163作为第四6抽头滤波器3的输入数据;将步骤(14)产生的参考整像素矩阵中第4列的1/2像素值h40、h41、h42、h43存入RAM 32×5的地址4中;将RAM 60×9中地址7数据读入内部寄存器缓存; (17)从寄存器组读取水平1/2像素点中间值b120,b130,b140,b150,b160,b170作为第一6抽头滤波器0的输入数据;b121,b131,b141,b151,b161,b171作为第二6抽头滤波器1的输入数据;b122,b132,b142,b152,b162,b172作为第三6抽头滤波器2的输入数据;b123,b133,b143,b153,b163,b173作为第四6抽头滤波器3的输入数据;将步骤(15)产生的参考整像素矩阵中第2行的对角线1/2像素值j00、j01、j02、j03存入图7所示RAM 60×9的地址5中;将RAM 60×9中地址8数据读入内部寄存器缓存; (18)从寄存器组读取水平1/2像素点中间值b130,b140,b150,b160,b170,b180作为第一6抽头滤波器0的输入数据;b131,b141,b151,b161,b171,b181作为第二6抽头滤波器1的输入数据;b132,b142,b152,b162,b172,b182作为第三6抽头滤波器2的输入数据;b133,b143,b153,b163,b173,b183作为第四6抽头滤波器3的输入数据;将步骤(16)产生的参考整像素矩阵中第3行的对角线的1/2像素值j10、j11、j12、j13存入RAM 60×9的地址6中。 (19)将步骤(17)所述的参考整像素矩阵中第4行的对角线的1/2像素值j20、j21、j22、j23存入RAM 60×9的地址7中。 (20)将步骤(18)所述的参考整像素矩阵中第5行的对角线的1/2像素值j30、j31、j32、j33存入RAM 60×9的地址8中。

说明书


H.264高速亮度插值装置与方法

    【技术领域】

    本发明涉及H.264数字视频编解码标准中的亮度插值技术,尤其是通过并行流水方式实现的H.264高速亮度插值的装置和方法,其可应用于H.264编码和解码。

    背景技术

    由国际电信联盟和国际标准化组织运动图像专家组组成的联合视频组制订的H.264/AVC标准是一种高效的第二代视频编码标准,已被广泛应用于安全监控、可视电话、视频会议、DVD、字地面电视、卫星电视、终端数字视、数码摄像机、移动多媒体等领域。物体运动具有连续性,而数字视频序列是离散采样信号,为了获取更优异的编码性能,H.264标准在运动估计中采用最高精度为1/4像素的亮度插值技术,其中1/2像素点通过系数为(1,-5,20,20,5,1)的6抽头滤波器计算得到,1/4像素点通过双线性插值计算得到。高精度子像素插值算法能大幅提高编码性能,但同时也使得数字视频编解码技术的应用实现复杂度增大。

    如图1所示为H.264标准中亮度插值示意图。其中A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,Q,R,S,T,U为整像素点,b,s,h,m,j为1/2像素点,aa,bb,cc,dd,ee,ff,gg,hh为1/2像素点中间值,a,c,d,n,f,q,i,k,e,g,p,r为1/4像素点。对整像素点G插值,按如下方法处理后即得到G,a,b,c,d,e,f,g,h,i,j,k,n,p,q,r16个像素点,完成插值过程如下:

    (1)水平1/2像素点b按式(1)、(2)计算得到。1/2像素点s计算过程与b类似,1/2像素点中间值aa,bb,gg,hh计算过程与b1类似;

    (2)垂直1/2像素点h按式(3)、(4)计算得到。1/2像素点m计算过程与h类似,1/2像素点中间值cc,dd,ee,ff计算过程与h1类似;

    (3)对角线1/2像素点j按式(5)、(6)计算得到;

    (4)1/4像素点a,c,d,n,f,q,i,k,e,g,p,r按式(9)至(20)计算得到。

    b=Clip1Y((b1+16)>>5)        (1)

    b1=(E-5*F+20*G+20*H-5*I+J)    (2)

    h=Clip1Y((h1+16)>>5)        (3)

    h1=(A-5*C+20*G+20*M-5*R+T)    (4)

    j=Clip1Y((j1+512)>>10)              (5)

    j1=aa-5*bb+20*b1+20*s1-5*gg+hh        (6)

    Clip1Y(x)=Clip3(0,(1<<8)-1,x)     (7)

    Clip3(x,y,z)=x;zyz;other---(8)]]>

    a=(G+b+1)>>1                        (9)

    c=(H+b+1)>>1                        (10)

    d=(G+h+1)>>1                        (11)

    n=(M+h+1)>>1                        (12)

    f=(b+j+1)>>1                        (13)

    i=(h+j+1)>>1                        (14)

    k=(j+m+1)>>1                        (15)

    q=(j+s+1)>>1                        (16)

    e=(b+h+1)>>1                        (17)

    g=(b+m+1)>>1                        (18)

    p=(h+s+1)>>1                        (19)

    r=(m+s+1)>>1                        (20)

    目前已有H.264亮度插值处理设计主要以单个像素点插值过程为出发点,在插值算法内部进行优化实现,以减小芯片面积成本,但未考虑架构上的高并行流水,以满足越来越快的编解码处理速度需求。

    【发明内容】

    本发明旨在解决现有技术的不足,提出一种H.264高速亮度插值装置,在合理利用硬件资源的前提下,有效减少亮度插值处理时钟数,提高编解码速度。

    同时,本发明还提供一种H.264高速亮度插值方法。

    H.264高速亮度插值装置包括参考缓存模块,寄存器输入控制模块,寄存器组,滤波器输入控制模块,N路6抽头滤波器,RAM缓存I/O控制模块,RAM缓存模块:

    所述参考缓存模块以DMA模式从外部读取并保存当前亮度块插值处理所需参考像素矩阵;

    所述当前亮度块由4×4整像素点构成,参考像素矩阵基于当前4×4亮度块在参考图像中对应位置,上边扩展两行像素点,下边扩展三行像素点,左边扩展两列像素点,右边扩展三列像素点得到大小为9×9的参考像素矩阵;

    所述寄存器输入控制模块连接参考缓存模块、RAM缓存模块及寄存器组,所述参考缓存模块为寄存器输入控制模块提供整像素点,所述RAM缓存模块为寄存器输入控制模块提供水平1/2像素点、垂直1/2像素点、对角线1/2像素点以及1/2像素中间点,寄存器输入控制模块根据当前时钟数控制寄存器组选择存储整像素点、水平1/2像素点、垂直1/2像素点、对角线1/2像素点或者1/2像素中间点;

    所述滤波器输入控制模块根据当前时钟数控制N路6抽头滤波器进行下列操作中:从所述寄存器组提供的整像素点计算并输出水平1/2像素点、垂直1/2像素点以及水平1/2像素中间点或垂直1/2像素中间点两种中的一种;从所述寄存器组提供的水平1/2像素点中间值或垂直1/2像素中间点计算并输出对角线1/2像素点;

    所述N路6抽头滤波器在RAM缓存I/O控制模块下将水平1/2像素点、垂直1/2像素点、对角线1/2像素点或者1/2像素中间点保存在RAM缓存模块中。

    进一步所述N等于4;

    4×4亮度块所需参考整像素点为9×9,以字访问的数据对齐后需3×9word,本发明中参考缓存采用乒乓读写,则需3×9×2word,其中一个3×9word用于当前4×4亮度块插值处理,另一3×9word则通过DMA将下一个4×4亮度块插值处理所需的9×9参考整像素矩阵读入。所述参考缓存模块由3块数据位宽为32bit,深度为18的1读1写双端口RAM组成,分别为第一RAM0,第二RAM1及第三RAM2,9×9参考整像素矩阵中第0,3,6行整像素存放在第一RAM0中,第1,4,7行整像素存放在第二RAM1中,第2,5,8行整像素存放在第三RAM2中。从外部数据接口来看,所述参考缓存模块具有1个32bit宽度的写端口,3个32bit宽度的读端口。

    所述6抽头滤波器分解为以下3级流水:第1级计算X=(G+H)<<2+(G+H),Y=(F+I)<<2+(F+I)及Z=(E+J);第2级计算b1=Z+(X<<2-Y),b1_clip0=(b1+16)>>5及b1_clip1=(b1+512)>>10;第3级计算b_clip0=Clip1Y(b1_clip0)及b_clip1=Clip1Y(b1_clip1);其中G点为整像素待插值点,E、F为离G点最近的左边两个整像素点,H、I、J为离G点最近的右边三个整像素点,将6抽头滤波器分解为3级流水能有效提高最大计算频率,满足高速编解码处理需求。

    所述RAM缓存模块包括位宽为60bit,深度为9的1读1写第四RAM和位宽为32bit深度为5的1读1写第五RAM,其中,第四RAM缓存水平1/2像素点中间值,水平1/2像素点及对角线1/2线像素点,第五RAM缓存垂直1/2像素点。

    H.264高速亮度插值装置还包括插值输入控制模块和双线性插值模块,所述插值输入控制模块根据当前时钟数从寄存器组中选取水平1/2像素点、垂直1/2像素点、对角线1/2像素点,并提供给双线性插值模块,所述双线性插值模块对进行双线性插值,计算得到1/4像素点。

    H.264高速亮度插值方法包括如下步骤:

    (1)参考缓存模块以DMA模式从外部读取当前亮度块插值处理所需参考像素矩阵;

    (2)参考像素矩阵全部读入参考缓存模块后,将参考像素矩阵放入寄存器组中,N路6抽头滤波器通过滤波器输入控制模块从寄存器组中同时且分别获得6个参考像素作为输入,求取1/2像素点,并将1/2像素点缓存到RAM缓存中。

    所述当前亮度块大小为4×4,其中,所述参考像素矩阵基于当前4×4亮度块在参考图像中对应位置,上边扩展两行像素点,下边扩展三行像素点,左边扩展两列像素点,右边扩展三列像素点得到大小为9×9的参考像素矩阵;所述寄存器组由34个寄存器构成;所述6抽头滤波器为4路;所述RAM缓存包括存储空间为60×9bit的第四RAM及存储空间为32×5bit的第五RAM,第四RAM60×9及第五RAM32×5按时钟将1/2像素点缓存入寄存器组。

    H.264高速亮度插值方法还包括下列步骤:通过双线性插值模块从寄存器组中获取参考整像素点及1/2像素点作为输入,求取1/4像素点。

    其中,步骤(1)实现方法为将9×9参考整像素矩阵中第0,3,6行整像素存放在RAM0中,第1,4,7行整像素存放在RAM1中,第2,5,8行整像素存放在RAM2中,从外部数据接口来看,所述参考缓存模块具有1个32bit写位宽,3个32bit读位宽。

    其中,步骤(2)所述求取4×4亮度块的1/2像素点的方法为:

    (1)参考像素矩阵的第0行至第8行逐行进行4路水平6抽头滤波,各路6抽头滤波器从当前行分别获得参考像素点,逐行输出并保存第1行至第8行水平1/2像素中间值,构成9行4列的水平1/2像素中间值阵列;在输出第2行至第6行水平1/2像素中间值时,同时输出并保存第2行至第6行水平1/2像素值,构成5行4列的水平1/2像素阵列;

    (2)参考像素矩阵的第2列至第6列逐列进行4路垂直6抽头滤波,各路6抽头滤波器从当前列分别获得参考像素点,逐行输出第2列至第6列的垂直1/2像素值,构成5行4列的垂直1/2像素阵列;

    (3)将步骤(1)得到的4×9的水平1/2像素中间值阵列进行4路对角线6抽头滤波,各路6抽头滤波器分别从水平1/2像素中间值阵列的各列获得像素点,逐行输出并保存对角线1/2像素值,构成4行4列的对角线1/2像素阵列。

    上述方法还可以替换为:先进行4路垂直6抽头滤波,再进行4路水平6抽头滤波,最后进行4路对角线6抽头滤波,该等替换也属于发明实质精神范围内的发明创造,均落入本发明保护范围之内。

    具体的,4路6抽头滤波器求取1/2像素点过程如下:

    (1)从寄存器组读取9×9参考整像素矩阵第0行9个数据(ref00,ref01,ref02,ref03,ref04,ref05,ref06,ref07,ref08),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;

    (2)从寄存器组读取9×9参考整像素矩阵第1行9个数据(ref10,ref11,ref12,ref13,ref14,ref15,ref16,ref17,ref18),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6头滤波器3的输入数据,同时将步骤(1)中产生的参考整像素矩阵中第0行的1/2像素中间值b100、b101、b102、b103存入第五RAM 60×9的地址0中;

    (3)从寄存器组读取9×9参考整像素矩阵第2行9个数据(ref10,ref11,ref12,ref13,ref14,ref15,ref16,ref17,ref18),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;同时将步骤(2)中产生的参考整像素矩阵中第1行的1/2像素中间值b110、b111、b112、b113存入RAM 60×9的地址1中;

    (4)从寄存器组读取9×9参考整像素矩阵第3行9个数据(ref20,ref21,ref22,ref23,ref24,ref25,ref26,ref27,ref28),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;同时将步骤(3)中产生的参考整像素矩阵中第2行的1/2像素中间值b120、b121、b122、b123存入RAM 60×9地地址2中;

    (5)从寄存器组读取9×9参考整像素矩阵第4行9个数据(ref30,ref31,ref32,ref33,ref34,ref35,ref36,ref37,ref38),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;将步骤(3)产生的参考整像素矩阵中第2行的1/2像素值b20、b21、b22、b23存入RAM 32×5的地址0中;同时将步骤(4)中产生的参考整像素矩阵中第3行的1/2像素中间值b130、b131、b132、b133存入RAM 60×9的地址3中;

    (6)从寄存器组读取9×9参考整像素矩阵第5行9个数据(ref40,ref41,ref42,ref43,ref44,ref45,ref46,ref47,ref48),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据,将步骤(4)产生的参考整像素矩阵中第3行的1/2像素值b30、b31、b32、b33存入RAM 32×5的地址1中;同时将步骤(5)中产生的参考整像素矩阵中第4行的1/2像素中间值b140、b141、b142、b143存入RAM 60×9的地址4中;

    (7)从寄存器组读取9×9参考整像素矩阵第6行9个数据(ref50,ref51,ref52,ref53,ref54,ref55,ref56,ref57,ref58),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;将步骤(5)产生的参考整像素矩阵中第4行的1/2像素值b40、b41、b42、b43存入RAM 32×5的地址2中;同时将步骤(6)中产生的参考整像素矩阵中第5行的1/2像素中间值b150、b151、b152、b153存入RAM 60×9的地址5中;

    (8)从寄存器组读取9×9参考整像素矩阵第7行9个数据(ref60,ref61,ref62,ref63,ref64,ref65,ref66,ref67,ref68),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;将步骤(6)产生的参考整像素矩阵中第5行的1/2像素值b50、b51、b52、b53存入RAM 32×5的地址3中;同时将步骤(7)产生的参考整像素矩阵中第6行的1/2像素中间值b160、b161、b162、b163存入RAM 60×9的地址6中;

    (9)从寄存器组读取9×9参考整像素矩阵第8行9个数据(ref70,ref71,ref72,ref73,ref74,ref75,ref76,ref77,ref78),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据,将步骤(7)产生的参考整像素矩阵中第6行的1/2像素值b60、b61、b62、b63存入RAM 32×5的地址4中;同时将步骤(8)产生的参考整像素矩阵中第7行的1/2像素中间值b170、b171、b172、b173存入RAM 60×9的地址7中;将RAM60×9中地址0数据读入内部寄存器缓存;

    (10)从寄存器组读取9×9参考整像素矩阵第2列9个数据(ref01,ref11,ref21,ref31,ref41,ref51,ref61,ref71,ref81),将该列第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;同时将步骤(9)产生的参考整像素矩阵中第5行的1/2像素中间值b180、b181、b182、b183存入RAM 60×9的地址8中;将RAM 60×9中地址1数据读入内部寄存器缓存。

    (11)从寄存器组读取9×9参考整像素矩阵第3列9个数据(ref02,ref12,ref22,ref32,ref42,ref52,ref62,ref72,ref82),将该列第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;同时将RAM 60×9中地址2数据读入内部寄存器缓存;将RAM 32×5中地址0数据存放到RAM 60×9地址0中。

    (12)从寄存器组读取9×9参考整像素矩阵第4列9个数据(ref03,ref13,ref23,ref33,ref43,ref53,ref63,ref73,ref83),将该列第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;同时将步骤(10)产生的参考整像素矩阵中第2列的1/2像素值h00、h01、h02、h03存入第二RAM 32×5的地址0中;将RAM 60×9中地址3数据读入内部寄存器缓存;将RAM 32×5中地址1数据存放到RAM 60×9地址1中。

    (13)从寄存器组读取9×9参考整像素矩阵第5列9个数据(ref04,ref14,ref24,ref34,ref44,ref54,ref64,ref74,ref84),将该列第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;将步骤(11)产生的参考整像素矩阵中第3列的1/2像素值h10、h11、h12、h13存入RAM 32×5的地址1中;将RAM 60×9中地址4数据读入内部寄存器缓存;将RAM 32×5中地址2数据存放到RAM 60×9地址2中。

    (14)从寄存器组读取9×9参考整像素矩阵第6列9个数据(ref05,ref15,ref25,ref35,ref45,ref55,ref65,ref75,ref85),将该列第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;将步骤(12)产生的参考整像素矩阵中第4列的1/2像素值h20、h21、h22、h23存入RAM 32×5的地址2中;将RAM 60×9中地址5数据读入内部寄存器缓存;将RAM 32×5中地址3数据存放到RAM 60×9地址3中。

    (15)从寄存器组读取水平1/2像素点中间值b100,b110,b120,b130,b140,b150作为第一6抽头滤波器0的输入数据;b101,b111,b121,b131,b141,b151作为第二6抽头滤波器1的输入数据;b102,b112,b122,b132,b142,b152作为第三6抽头滤波器2的输入数据;b103,b113,b123,b133,b143,b153作为第四6抽头滤波器3的输入数据;将步骤(13)产生的参考整像素矩阵中第4列的1/2像素值h30、h31、h32、h33存入RAM 32×5的地址3中;将RAM 60×9中地址6数据读入内部寄存器缓存;将RAM 32×5中地址4数据存放到RAM 60×9地址4中。

    (16)从寄存器组读取水平1/2像素点中间值b110,b120,b130,b140,b150,b160作为第一6抽头滤波器0的输入数据;b111,b121,b131,b141,b151,b161作为第二6抽头滤波器1的输入数据;b112,b122,b132,b142,b152,b162作为第三6抽头滤波器2的输入数据;b113,b123,b133,b143,b153,b163作为第四6抽头滤波器3的输入数据;将步骤(14)产生的参考整像素矩阵中第4列的1/2像素值h40、h41、h42、h43存入RAM 32×5的地址4中;将RAM 60×9中地址7数据读入内部寄存器缓存;

    (17)从寄存器组读取水平1/2像素点中间值b120,b130,b140,b150,b160,b170作为第一6抽头滤波器0的输入数据;b121,b131,b141,b151,b161,b171作为第二6抽头滤波器1的输入数据;b122,b132,b142,b152,b162,b172作为第三6抽头滤波器2的输入数据;b123,b133,b143,b153,b163,b173作为第四6抽头滤波器3的输入数据;将步骤(15)产生的参考整像素矩阵中第2行的对角线1/2像素值j00、j01、j02、j03存入图7所示RAM 60×9的地址5中;将RAM 60×9中地址8数据读入内部寄存器缓存;

    (18)从寄存器组读取水平1/2像素点中间值b130,b140,b150,b160,b170,b180作为第一6抽头滤波器0的输入数据;b131,b141,b151,b161,b171,b181作为第二6抽头滤波器1的输入数据;b132,b142,b152,b162,b172,b182作为第三6抽头滤波器2的输入数据;b133,b143,b153,b163,b173,b183作为第四6抽头滤波器3的输入数据;将步骤(16)产生的参考整像素矩阵中第3行的对角线的1/2像素值j10、j11、j12、j13存入RAM 60×9的地址6中。

    (19)将步骤(17)所述的参考整像素矩阵中第4行的对角线的1/2像素值j20、j21、j22、j23存入RAM 60×9的地址7中。

    (20)将步骤(18)所述的参考整像素矩阵中第5行的对角线的1/2像素值j30、j31、j32、j33存入RAM 60×9的地址8中。

    本发明针对H.264标准编解码最小单元4×4块的亮度插值过程,提出一种高硬件利用率的H.264高速亮度插值装置与方法,整个插值过程4路并行滤波器流水线到达饱和状态,在24个时钟内完成4×4亮度块内72次6抽头滤波,有效减少亮度插值处理时钟数;将6抽头滤波器分解为3级流水能有效提高最大计算频率;同时,此装置与方法能方便地应用于H.264编解码两端。

    【附图说明】

    图1为H.264亮度插值示意图。

    图2为H.264高速亮度插值装置系统结构图。

    图3为图2中参考缓存示意图。a为结构示意图,b为9×9参考数据在RAM0,RAM1,RAM2内具体存放,在RAM0,RAM1,RAM2中每行存放4个参考整像素点。

    图4为图2中寄存器输入控制示意图。

    图5为图2中滤波器输入控制示意图。

    图6为图2中插值输入控制示意图。

    图7为图2中RAM缓存I/O控制示意图。

    图8为图2中RAM缓存内部RAM 60×9及RAM 32×5连接示意图。

    图9为图2中6抽头滤波器示意图。

    图10为图2中寄存器输入控制模块在1/2像素点求取过程中对参考缓存内RAM0,RAM1,RAM2的读操作时序图。

    图11为图2中寄存器组使用示意图。

    【具体实施方式】

    以下结合附图对本发明进一步说明,在本实施例中H.264高速亮度插值装置与方法中以采用4路6抽头滤波器为例进行说明。

    H.264高速亮度插值装置,如图2所示,包括参考缓存模块(21),寄存器输入控制模块(22),寄存器组(23),滤波器输入控制模块(24),4路6抽头滤波器(25、26、27、28),RAM缓存I/O控制模块(30),RAM缓存模块(29):

    所述参考缓存模块(21)以DMA模式从外部读取并保存当前亮度块插值处理所需参考像素矩阵;

    所述当前亮度块由4×4整像素点构成,参考像素矩阵基于当前4×4亮度块在参考图像中对应位置,上边扩展两行像素点,下边扩展三行像素点,左边扩展两列像素点,右边扩展三列像素点得到大小为9×9的参考像素矩阵;

    所述寄存器输入控制模块(22)连接参考缓存模块(21)、RAM缓存模块及寄存器组(30),所述参考缓存模块(21)为寄存器输入控制模块(22)提供整像素点,所述RAM缓存模块(30)为寄存器输入控制模块(22)提供水平1/2像素点、垂直1/2像素点、对角线1/2像素点以及1/2像素中间点,寄存器输入控制模块(22)根据当前时钟数控制寄存器组(23)选择存储整像素点、水平1/2像素点、垂直1/2像素点、对角线1/2像素点或者1/2像素中间点;

    所述滤波器输入控制模块根据当前时钟数控制N路6抽头滤波器进行下列操作中:从所述寄存器组提供的整像素点计算并输出水平1/2像素点、垂直1/2像素点以及水平1/2像素中间点或垂直1/2像素中间点两种中的一种;从所述寄存器组提供的水平1/2像素点中间值或垂直1/2像素中间点计算并输出对角线1/2像素点;

    所述4路6抽头滤波器(25、26、27、28)在RAM缓存I/O控制模块(30)下将水平1/2像素点、垂直1/2像素点、对角线1/2像素点或者1/2像素中间点保存在RAM缓存模块(29)中。

    4×4亮度块所需参考整像素点为9×9,以字访问的数据对齐后需3×9word,本发明中参考缓存模块(21)采用乒乓读写,则需3×9×2word,其中一个3×9word用于当前4×4亮度块插值处理,另一3×9word则通过DMA将下一个4×4亮度块插值处理所需的9×9参考整像素矩阵读入。所述参考缓存模块(21)由3块数据位宽为32bit,深度为18的1读1写双端口RAM组成,如图3所示,分别为第一RAM0,第二RAM1及第三RAM2,9×9参考整像素矩阵中第0,3,6行整像素存放在第一RAM0中,第1,4,7行整像素存放在第二RAM1中,第2,5,8行整像素存放在第三RAM2中。从外部数据接口来看,所述参考缓存模块具有1个32bit宽度的写端口,3个32bit宽度的读端口。

    所述6抽头滤波器(25、26、27、28),如图9所示,分解为以下3级流水:第1级计算X=(G+H)<<2+(G+H),Y=(F+I)<<2+(F+I)及Z=(E+J);第2级计算b1=Z+(X<<2-Y),b1_clip0=(b1+16)>>5及b1_clip1=(b1+512)>>10;第3级计算b_clip0=Clip1Y(b1_clip0)及b_clip1=Clip1Y(b1_clip1);其中G点为整像素待插值点,E、F为离G点最近的左边两个整像素点,H、I、J为离G点最近的右边三个整像素点,将6抽头滤波器分解为3级流水能有效提高最大计算频率,满足高速编解码处理需求。

    所述RAM缓存模块(29)包括位宽为60bit,深度为9的1读1写第四RAM和位宽32为bit深度为5的1读1写第五RAM,其中,第四RAM缓存水平1/2像素点中间值,水平1/2像素点及对角线1/2线像素点,第五RAM缓存垂直1/2像素点,如图7所示。

    H.264高速亮度插值装置,如图1所示,还包括插值输入控制模块(31)和双线性插值模块(32),所述插值输入控制模块(31)根据当前时钟数从寄存器组(23)中选取水平1/2像素点、垂直1/2像素点、对角线1/2像素点,并提供给双线性插值模块(32),所述双线性插值模块(32)对进行双线性插值,计算得到1/4像素点。

    H.264高速亮度插值方法包括如下步骤:

    (1)参考缓存模块以DMA模式从外部读取当前亮度块插值处理所需参考像素矩阵;

    (2)参考像素矩阵全部读入参考缓存模块后,将参考像素矩阵放入寄存器组中,4路6抽头滤波器通过滤波器输入控制模块从寄存器组中同时且分别获得6个参考像素作为输入,求取1/2像素点,并将1/2像素点缓存到RAM缓存中。

    所述当前亮度块大小为4×4,其中,所述参考像素矩阵基于当前4×4亮度块在参考图像中对应位置,上边扩展两行像素点,下边扩展三行像素点,左边扩展两列像素点,右边扩展三列像素点得到大小为9×9的参考像素矩阵;所述寄存器组由34个寄存器构成;所述RAM缓存包括存储空间为60×9的第四RAM及存储空间为32×5的第五RAM,第四RAM60×9及第五RAM32×5按时钟将1/2像素点缓存入寄存器组。

    H.264高速亮度插值方法还包括下列步骤:通过双线性插值模块从寄存器组中获取参考整像素点及1/2像素点作为输入,求取1/4像素点。

    其中,步骤(1)实现方法为将9×9参考整像素矩阵中第0,3,6行整像素存放在RAM0中,第1,4,7行整像素存放在RAM1中,第2,5,8行整像素存放在RAM2中,从外部数据接口来看,所述参考缓存模块具有1个32bit写位宽,3个32bit读位宽。

    其中,步骤(2)所述求取4×4亮度块的1/2像素点的方法为:

    (1)参考像素矩阵的第0行至第8行逐行进行4路水平6抽头滤波,各路6抽头滤波器从当前行分别获得参考像素点,逐行输出并保存第1行至第8行水平1/2像素中间值,构成9行4列的水平1/2像素中间值阵列;在输出第2行至第6行水平1/2像素中间值时,同时输出并保存第2行至第6行水平1/2像素值,构成5行4列的水平1/2像素阵列;

    (2)参考像素矩阵的第2列至第6列逐列进行4路垂直6抽头滤波,各路6抽头滤波器从当前列分别获得参考像素点,逐行输出第2列至第6列的垂直1/2像素值,构成5行4列的垂直1/2像素阵列;

    (3)将步骤(1)得到的4×9的水平1/2像素中间值阵列进行4路对角线6抽头滤波,各路6抽头滤波器分别从水平1/2像素中间值阵列的各列获得像素点,逐行输出并保存对角线1/2像素值,构成4行4列的对角线1/2像素阵列。

    上述方法还可以替换为:先进行4路垂直6抽头滤波,再进行4路水平6抽头滤波,最后进行4路对角线6抽头滤波,该等替换也属于发明实质精神范围内的发明创造,均落入本发明保护范围之内。

    具体的,4路6抽头滤波器求取1/2像素点过程如下:

    (1)从寄存器组读取9×9参考整像素矩阵第0行9个数据(ref00,ref01,ref02,ref03,ref04,ref05,ref06,ref07,ref08),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;

    (2)从寄存器组读取9×9参考整像素矩阵第1行9个数据(ref10,ref11,ref12,ref13,ref14,ref15,ref16,ref17,ref18),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6头滤波器3的输入数据,同时将步骤(1)中产生的参考整像素矩阵中第0行的1/2像素中间值b100、b101、b102、b103存入第五RAM 60×9的地址0中;

    (3)从寄存器组读取9×9参考整像素矩阵第2行9个数据(ref10,ref11,ref12,ref13,ref14,ref15,ref16,ref17,ref18),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;同时将步骤(2)中产生的参考整像素矩阵中第1行的1/2像素中间值b110、b111、b112、b113存入RAM 60×9的地址1中;

    (4)从寄存器组读取9×9参考整像素矩阵第3行9个数据(ref20,ref21,ref22,ref23,ref24,ref25,ref26,ref27,ref28),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;同时将步骤(3)中产生的参考整像素矩阵中第2行的1/2像素中间值b120、b121、b122、b123存入RAM 60×9的地址2中;

    (5)从寄存器组读取9×9参考整像素矩阵第4行9个数据(ref30,ref31,ref32,ref33,ref34,ref35,ref36,ref37,ref38),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;将步骤(3)产生的参考整像素矩阵中第2行的1/2像素值b20、b21、b22、b23存入RAM 32×5的地址0中;同时将步骤(4)中产生的参考整像素矩阵中第3行的1/2像素中间值b130、b131、b132、b133存入RAM 60×9的地址3中;

    (6)从寄存器组读取9×9参考整像素矩阵第5行9个数据(ref40,ref41,ref42,ref43,ref44,ref45,ref46,ref47,ref48),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据,将步骤(4)产生的参考整像素矩阵中第3行的1/2像素值b30、b31、b32、b33存入RAM 32×5的地址1中;同时将步骤(5)中产生的参考整像素矩阵中第4行的1/2像素中间值b140、b141、b142、b143存入RAM 60×9的地址4中;

    (7)从寄存器组读取9×9参考整像素矩阵第6行9个数据(ref50,ref51,ref52,ref53,ref54,ref55,ref56,ref57,ref58),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;将步骤(5)产生的参考整像素矩阵中第4行的1/2像素值b40、b41、b42、b43存入RAM 32×5的地址2中;同时将步骤(6)中产生的参考整像素矩阵中第5行的1/2像素中间值b150、b151、b152、b153存入RAM 60×9的地址5中;

    (8)从寄存器组读取9×9参考整像素矩阵第7行9个数据(ref60,ref61,ref62,ref63,ref64,ref65,ref66,ref67,ref68),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;将步骤(6)产生的参考整像素矩阵中第5行的1/2像素值b50、b51、b52、b53存入RAM 32×5的地址3中;同时将步骤(7)产生的参考整像素矩阵中第6行的1/2像素中间值b160、b161、b162、b163存入RAM 60×9的地址6中;

    (9)从寄存器组读取9×9参考整像素矩阵第8行9个数据(ref70,ref71,ref72,ref73,ref74,ref75,ref76,ref77,ref78),将该行第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据,将步骤(7)产生的参考整像素矩阵中第6行的1/2像素值b60、b61、b62、b63存入RAM 32×5的地址4中;同时将步骤(8)产生的参考整像素矩阵中第7行的1/2像素中间值b170、b171、b172、b173存入RAM 60×9的地址7中;将RAM60×9中地址0数据读入内部寄存器缓存;

    (10)从寄存器组读取9×9参考整像素矩阵第2列9个数据(ref01,ref11,ref21,ref31,ref41,ref51,ref61,ref71,ref81),将该列第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;同时将步骤(9)产生的参考整像素矩阵中第5行的1/2像素中间值b180、b181、b182、b183存入RAM 60×9的地址8中;将RAM 60×9中地址1数据读入内部寄存器缓存。

    (11)从寄存器组读取9×9参考整像素矩阵第3列9个数据(ref02,ref12,ref22,ref32,ref42,ref52,ref62,ref72,ref82),将该列第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;同时将RAM 60×9中地址2数据读入内部寄存器缓存;将RAM 32×5中地址0数据存放到RAM 60×9地址0中。

    (12)从寄存器组读取9×9参考整像素矩阵第4列9个数据(ref03,ref13,ref23,ref33,ref43,ref53,ref63,ref73,ref83),将该列第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;同时将步骤(10)产生的参考整像素矩阵中第2列的1/2像素值h00、h01、h02、h03存入第二RAM 32×5的地址0中;将RAM 60×9中地址3数据读入内部寄存器缓存;将RAM 32×5中地址1数据存放到RAM 60×9地址1中。

    (13)从寄存器组读取9×9参考整像素矩阵第5列9个数据(ref04,ref14,ref24,ref34,ref44,ref54,ref64,ref74,ref84),将该列第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;将步骤(11)产生的参考整像素矩阵中第3列的1/2像素值h10、h11、h12、h13存入RAM 32×5的地址1中;将RAM 60×9中地址4数据读入内部寄存器缓存;将RAM 32×5中地址2数据存放到RAM 60×9地址2中。

    (14)从寄存器组读取9×9参考整像素矩阵第6列9个数据(ref05,ref15,ref25,ref35,ref45,ref55,ref65,ref75,ref85),将该列第0,1,2,3,4,5个参考整像素作为第一6抽头滤波器0的输入数据;第1,2,3,4,5,6个参考整像素作为第二6抽头滤波器1的输入数据;第2,3,4,5,6,7个参考整像素作为第三6抽头滤波器2的输入数据;第3,4,5,6,7,8个参考整像素作为第四6抽头滤波器3的输入数据;将步骤(12)产生的参考整像素矩阵中第4列的1/2像素值h20、h21、h22、h23存入RAM 32×5的地址2中;将RAM 60×9中地址5数据读入内部寄存器缓存;将RAM 32×5中地址3数据存放到RAM 60×9地址3中。

    (15)从寄存器组读取水平1/2像素点中间值b100,b110,b120,b130,b140,b150作为第一6抽头滤波器0的输入数据;b101,b111,b121,b131,b141,b151作为第二6抽头滤波器1的输入数据;b102,b112,b122,b132,b142,b152作为第三6抽头滤波器2的输入数据;b103,b113,b123,b133,b143,b153作为第四6抽头滤波器3的输入数据;将步骤(13)产生的参考整像素矩阵中第4列的1/2像素值h30、h31、h32、h33存入RAM 32×5的地址3中;将RAM 60×9中地址6数据读入内部寄存器缓存;将RAM 32×5中地址4数据存放到RAM 60×9地址4中。

    (16)从寄存器组读取水平1/2像素点中间值b110,b120,b130,b140,b150,b160作为第一6抽头滤波器0的输入数据;b111,b121,b131,b141,b151,b161作为第二6抽头滤波器1的输入数据;b112,b122,b132,b142,b152,b162作为第三6抽头滤波器2的输入数据;b113,b123,b133,b143,b153,b163作为第四6抽头滤波器3的输入数据;将步骤(14)产生的参考整像素矩阵中第4列的1/2像素值h40、h41、h42、h43存入RAM 32×5的地址4中;将RAM 60×9中地址7数据读入内部寄存器缓存;

    (17)从寄存器组读取水平1/2像素点中间值b120,b130,b140,b150,b160,b170作为第一6抽头滤波器0的输入数据;b121,b131,b141,b151,b161,b171作为第二6抽头滤波器1的输入数据;b122,b132,b142,b152,b162,b172作为第三6抽头滤波器2的输入数据;b123,b133,b143,b153,b163,b173作为第四6抽头滤波器3的输入数据;将步骤(15)产生的参考整像素矩阵中第2行的对角线1/2像素值j00、j01、j02、j03存入图7所示RAM 60×9的地址5中;将RAM 60×9中地址8数据读入内部寄存器缓存;

    (18)从寄存器组读取水平1/2像素点中间值b130,b140,b150,b160,b170,b180作为第一6抽头滤波器0的输入数据;b131,b141,b151,b161,b171,b181作为第二6抽头滤波器1的输入数据;b132,b142,b152,b162,b172,b182作为第三6抽头滤波器2的输入数据;b133,b143,b153,b163,b173,b183作为第四6抽头滤波器3的输入数据;将步骤(16)产生的参考整像素矩阵中第3行的对角线的1/2像素值j10、j11、j12、j13存入RAM 60×9的地址6中。

    (19)将步骤(17)所述的参考整像素矩阵中第4行的对角线的1/2像素值j20、j21、j22、j23存入RAM 60×9的地址7中。

    (20)将步骤(18)所述的参考整像素矩阵中第5行的对角线的1/2像素值j30、j31、j32、j33存入RAM 60×9的地址8中。

    在图11a中RAM0,RAM1,RAM2,RAM 60×9分别表示当前时钟从RAM读入寄存器的数据个数;6tap filter表示当前时钟由4路并行滤波器所释放的寄存器数;reg表示当前节拍的寄存器占用数。从第4个时钟开始到第17个时钟,由于四路6抽头滤波器并行开始流水处理9次水平滤波和5次垂直滤波,因此,每个时钟可以释放已作为滤波输入数据的9个寄存器。第10至12个时钟仅释放8个时钟是为了在第15个时钟能进行垂直滤波,使流水线达到饱和状态,将参考矩阵第6,7,8行中的第4个整像素点保存在寄存器中;从第18个时钟开始到第21个时钟,4路并行滤波器开始流水处理4次中间值滤波,因此,每个时钟可释放作为滤波输入数据的4个寄存器;整个过程中出现的最大寄存器占用数为34。在图11b为仅进行横向滤波时的寄存器使用情况,由图可知21个寄存器即可满足需求。但为了填充水平滤波到垂直滤波以及垂直滤波到中间值滤波过程中的空泡,需要提前将部分垂直滤波以及中间值滤波数据缓存在寄存器内部,因此在最终设计时,本实施例中采用34个寄存器,但不是必需的。

    应该理解到的是,上述实施例只是对本发明的说明,而不是对本发明的限制,任何不超出本发明实质精神范围内的发明创造,均落入本发明保护范围之内。

H264高速亮度插值装置与方法.pdf_第1页
第1页 / 共25页
H264高速亮度插值装置与方法.pdf_第2页
第2页 / 共25页
H264高速亮度插值装置与方法.pdf_第3页
第3页 / 共25页
点击查看更多>>
资源描述

《H264高速亮度插值装置与方法.pdf》由会员分享,可在线阅读,更多相关《H264高速亮度插值装置与方法.pdf(25页珍藏版)》请在专利查询网上搜索。

本发明提供的H.264高速亮度插值装置包括参考缓存模块,寄存器输入控制模块,寄存器组,滤波器输入控制模块,N路6抽头滤波器,RAM缓存I/O控制模块,RAM缓存模块,参考缓存模块从外部读取当前亮度块插值处理所需参考像素矩阵,参考像素矩阵全部读入参考缓存模块后,将参考像素矩阵放入寄存器组中,N路6抽头滤波器通过滤波器输入控制模块从寄存器组中同时且分别获得6个参考像素作为输入,求取1/2像素点,并将1。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 电学 > 电通信技术


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1