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

文档序号:7710048阅读:168来源:国知局
专利名称: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抽头滤波器计算得到,l/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像素点中间值aa, bb, gg, hh计算过程与bl类似;
(2)垂直1/2像素点h按式(3) 、 (4)计算得到' 1/2像素点中间值cc, dd, ee, ff计算过程与hl类似;
(3)对角线1/2像素点j按式(5) 、 (6)计算得到; (4) 1/4像素点a, c, d, n, f , q, i, k, e, g, p, r按式(9)至(20)计算得到'
b = CliplY((bl+16) >> 5) (1)
bl = (E-5*F+20*G+20*H_5*I+J) (2)
h = CliplY((hl+16) >> 5) (3)
hi = (A-5*C+20*G+20*M-5*R+T) (4)
j = CliplY((jl+512) >> 10)
jl = EiEi—5氺bb+20氺bl+20氺sl—5氺gg+hh
CliplY(x) = Clip3(0, (1 << 8)-l, x)
1/2像素点s计算过程与b类似, 1/2像素点m计算过程与h类似,
(5)
(6)
(7)C7^3(3c,_y,zj =
< x
、z; o^er (G+b+1) >> 1 (H+b+1) >> 1
(8)
(9)
(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) 目前已有11.264亮度插值处理设计主要以单个像素点插值过程为出发点,在插值 算法内部进行优化实现,以减小芯片面积成本,但未考虑架构上的高并行流水,以满足越来 越快的编解码处理速度需求。

发明内容
本发明旨在解决现有技术的不足,提出一种H. 264高速亮度插值装置,在合理利 用硬件资源的前提下,有效减少亮度插值处理时钟数,提高编解码速度。
同时,本发明还提供一种H. 264高速亮度插值方法。 H. 264高速亮度插值装置包括参考缓存模块,寄存器输入控制模块,寄存器组,滤 波器输入控制模块,N路6抽头滤波器,RAM缓存I/O控制模块,RAM缓存模块
所述参考缓存模块以DMA模式从外部读取并保存当前亮度块插值处理所需参考 像素矩阵; 所述当前亮度块由4X4整像素点构成,参考像素矩阵基于当前4X4亮度块在参 考图像中对应位置,上边扩展两行像素点,下边扩展三行像素点,左边扩展两列像素点,右 边扩展三列像素点得到大小为9X9的参考像素矩阵; 所述寄存器输入控制模块连接参考缓存模块、RAM缓存模块及寄存器组,所述参考 缓存模块为寄存器输入控制模块提供整像素点,所述RAM缓存模块为寄存器输入控制模块 提供水平1/2像素点、垂直1/2像素点、对角线1/2像素点以及1/2像素中间点,寄存器输 入控制模块根据当前时钟数控制寄存器组选择存储整像素点、水平1/2像素点、垂直1/2像 素点、对角线1/2像素点或者1/2像素中间点; 所述滤波器输入控制模块根据当前时钟数控制N路6抽头滤波器进行下列操作 中从所述寄存器组提供的整像素点计算并输出水平l/2像素点、垂直l/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 ; 4X4亮度块所需参考整像素点为9X9,以字访问的数据对齐后需3X9word,本发 明中参考缓存采用乒乓读写,则需3 X 9 X 2word,其中一个3 X 9word用于当前4 X 4亮度块插值处理,另一 3 X 9word则通过DMA将下一个4X4亮度块插值处理所需的9 X 9参考整 像素矩阵读入。所述参考缓存模块由3块数据位宽为32bit,深度为18的1读1写双端口 RAM组成,分别为第一 RAM0,第二 RAMI及第三RAM2, 9 X 9参考整像素矩阵中第0,3,6行整 像素存放在第一 RAM0中,第1 , 4, 7行整像素存放在第二 RAMI中,第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级计算bl = Z+(X << 2-Y) ,bl—clip0 = (bl+16) >> 5及bl—clipl = (bl+512) >> 10 ;第3级计算b_clipO = CliplY(bl_clipO)及b_ clipl = CliplY(bl_clipl);其中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缓存中。 所述当前亮度块大小为4X4,其中,所述参考像素矩阵基于当前4X4亮度块在参 考图像中对应位置,上边扩展两行像素点,下边扩展三行像素点,左边扩展两列像素点,右 边扩展三列像素点得到大小为9X9的参考像素矩阵;所述寄存器组由34个寄存器构成; 所述6抽头滤波器为4路;所述RAM缓存包括存储空间为60X9bit的第四RAM及存储空间 为32 X 5bit的第五RAM,第四RAM60 X 9及第五RAM32 X 5按时钟将1/2像素点缓存入寄存 器组。 H. 264高速亮度插值方法还包括下列步骤通过双线性插值模块从寄存器组中获 取参考整像素点及1/2像素点作为输入,求取1/4像素点。 其中,步骤(1)实现方法为将9X9参考整像素矩阵中第0,3,6行整像素存放在
RAMO中,第1,4,7行整像素存放在RAM1中,第2, 5, 8行整像素存放在RAM2中,从外部数据
接口来看,所述参考缓存模块具有1个32bit写位宽,3个32bit读位宽。 其中,步骤(2)所述求取4X4亮度块的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)得到的4X9的水平1/2像素中间值阵列进行4路对角线6抽头滤 波,各路6抽头滤波器分别从水平1/2像素中间值阵列的各列获得像素点,逐行输出并保存 对角线1/2像素值,构成4行4列的对角线1/2像素阵列。 上述方法还可以替换为先进行4路垂直6抽头滤波,再进行4路水平6抽头滤 波,最后进行4路对角线6抽头滤波,该等替换也属于发明实质精神范围内的发明创造,均 落入本发明保护范围之内。 具体的,4路6抽头滤波器求取1/2像素点过程如下 (1)从寄存器组读取9X9参考整像素矩阵第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)从寄存器组读取9X9参考整像素矩阵第l行9个数据(refl0,refll,ref12, refl3,ren4,ren5,ren6,refl7,ren8),将该行第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像素中间值bl00、bl01、bl02、bl03存入第五RAM 60X9的地址0中;
(3)从寄存器组读取9X9参考整像素矩阵第2行9个数据(refl0,refll,ref12, refl3,ren4,ren5,ren6,refl7,ren8),将该行第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)中产生的参考整像素 矩阵中第l行的1/2像素中间值bllO、blll、bll2、bll3存入RAM 60X9的地址1中;
(4)从寄存器组读取9X9参考整像素矩阵第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像素中间值bl20、bl21、bl22、bl23存入RAM 60X9的地址2中;
(5)从寄存器组读取9X9参考整像素矩阵第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 32X5的地址0中;同时将步骤(4)中 产生的参考整像素矩阵中第3行的1/2像素中间值bl30、bl31、bl32、b133存入RAM 60X9 的地址3中; (6)从寄存器组读取9X9参考整像素矩阵第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 32X5的地址1中;同时将步骤(5)中 产生的参考整像素矩阵中第4行的1/2像素中间值bl40、bl41、bl42、bl43存入RAM 60X9 的地址4中; (7)从寄存器组读取9X9参考整像素矩阵第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 32X5的地址2中;同时将步骤(6)中 产生的参考整像素矩阵中第5行的1/2像素中间值bl50、bl51、bl52、b153存入RAM 60X9 的地址5中; (8)从寄存器组读取9X9参考整像素矩阵第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 32X5的地址3中;同时将步骤(7) 产生的参考整像素矩阵中第6行的1/2像素中间值bl60、bl61、bl62、b163存入RAM 60X9 的地址6中; (9)从寄存器组读取9X9参考整像素矩阵第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 32X5的地址4中;同时将步骤(8) 产生的参考整像素矩阵中第7行的1/2像素中间值bl70、bl71、bl72、b173存入RAM 60X9 的地址7中;将RAM60X9中地址0数据读入内部寄存器缓存; (10)从寄存器组读取9X9参考整像素矩阵第2列9个数据(ref01,refll,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像素中间值bl80、bl81、bl82、bl83存入RAM 60X9的地址8中;将RAM 60X9中地址1数据读入内部寄存器缓存。 (11)从寄存器组读取9X9参考整像素矩阵第3列9个数据(ref02,refl2,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 60X9中地址2数据 读入内部寄存器缓存;将RAM 32X5中地址0数据存放到RAM 60X9地址0中。
(12)从寄存器组读取9X9参考整像素矩阵第4列9个数据(ref03,refl3,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 32X5的地址0中;将RAM 60X9中地址3数据读入内部寄存器缓存;将RAM 32X5中地址1数据存放到RAM 60X9地 址l中。 (13)从寄存器组读取9X9参考整像素矩阵第5列9个数据(ref04, refl4, ref 24, 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像素值hlO、hll、hl2、hl3存入RAM 32X5的地址1中;将RAM 60X9中 地址4数据读入内部寄存器缓存;将RAM 32X5中地址2数据存放到RAM 60X9地址2中。
(14)从寄存器组读取9X9参考整像素矩阵第6列9个数据(ref05,refl5,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 32X5的地址2中;将RAM 60X9中 地址5数据读入内部寄存器缓存;将RAM 32X5中地址3数据存放到RAM 60X9地址3中。
(15)从寄存器组读取水平1/2像素点中间值b100, b110, b120, b130, bl40, bl50 作为第一6抽头滤波器0的输入数据;bl01,blll,bl21,bl31,bl41,b151作为第二6抽头 滤波器1的输入数据;bl02, b112, b122, b132, b142, b152作为第三6抽头滤波器2的输 入数据;bl03, b113, b123, b133, b143, b153作为第四6抽头滤波器3的输入数据;将步骤 (13)产生的参考整像素矩阵中第4列的1/2像素值h30、h31、h32、h33存入RAM 32X5的 地址3中;将RAM 60X9中地址6数据读入内部寄存器缓存;将RAM 32X5中地址4数据存 放到RAM 60 X 9地址4中。
12
(16)从寄存器组读取水平1/2像素点中间值b110, b120, bl30, bl40, bl50, bl60 作为第一6抽头滤波器0的输入数据;blll,bl21,bl31,bl41,bl51,b161作为第二6抽头 滤波器1的输入数据;bl12, b122, b132, b142, b152, b162作为第三6抽头滤波器2的输 入数据;bl13, b123, b133, b143, b153, b163作为第四6抽头滤波器3的输入数据;将步骤
(14) 产生的参考整像素矩阵中第4列的1/2像素值h40、 h41、 h42、 h43存入RAM 32X5的 地址4中;将RAM 60X9中地址7数据读入内部寄存器缓存; (17)从寄存器组读取水平1/2像素点中间值b120, bl30, bl40, bl50, bl60, bl70 作为第一6抽头滤波器0的输入数据;bl21,bl31,bl41,bl51,bl61,b171作为第二 6抽头 滤波器1的输入数据;bl22, b132, b142, b152, b162, b172作为第三6抽头滤波器2的输 入数据;bl23, b133, b143, b153, b163, b173作为第四6抽头滤波器3的输入数据;将步骤
(15) 产生的参考整像素矩阵中第2行的对角线1/2像素值j00、 j01、 j02、 j03存入图7所 示RAM 60X9的地址5中;将RAM 60X9中地址8数据读入内部寄存器缓存; (18)从寄存器组读取水平1/2像素点中间值b130, bl40, bl50, bl60, bl70, bl80 作为第一6抽头滤波器0的输入数据;bl31,bl41,bl51,bl61,bl71,b181作为第二 6抽头 滤波器1的输入数据;bl32, b142, b152, b162, b172, b182作为第三6抽头滤波器2的输 入数据;bl33, b143, b153, b163, b173, b183作为第四6抽头滤波器3的输入数据;将步骤
(16) 产生的参考整像素矩阵中第3行的对角线的1/2像素值j10、 jll、 j12、 j13存入RAM 60 X 9的地址6中。 (19)将步骤(17)所述的参考整像素矩阵中第4行的对角线的1/2像素值j20、 j21、 j22、 j23存入RAM 60X9的地址7中。 (20)将步骤(18)所述的参考整像素矩阵中第5行的对角线的1/2像素值j30、 j31、 j32、 j33存入RAM 60X9的地址8中。 本发明针对H. 264标准编解码最小单元4X4块的亮度插值过程,提出一种高硬件 利用率的H. 264高速亮度插值装置与方法,整个插值过程4路并行滤波器流水线到达饱和 状态,在24个时钟内完成4X4亮度块内72次6抽头滤波,有效减少亮度插值处理时钟数; 将6抽头滤波器分解为3级流水能有效提高最大计算频率;同时,此装置与方法能方便地应 用于H. 264编解码两端。


图1为H. 264亮度插值示意图。 图2为H. 264高速亮度插值装置系统结构图。 图3为图2中参考缓存示意图。a为结构示意图,b为9 X 9参考数据在RAMO, RAMI,
RAM2内具体存放,在RAMO, RAMI, RAM2中每行存放4个参考整像素点。 图4为图2中寄存器输入控制示意图。 图5为图2中滤波器输入控制示意图。 图6为图2中插值输入控制示意图。 图7为图2中RAM缓存1/0控制示意图。 图8为图2中RAM缓存内部RAM 60X9及RAM 32X5连接示意图。
图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模式从外部读取并保存当前亮度块插值处理所需 参考像素矩阵; 所述当前亮度块由4X4整像素点构成,参考像素矩阵基于当前4X4亮度块在参 考图像中对应位置,上边扩展两行像素点,下边扩展三行像素点,左边扩展两列像素点,右 边扩展三列像素点得到大小为9X9的参考像素矩阵; 所述寄存器输入控制模块(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抽头滤波器进行下列操作 中从所述寄存器组提供的整像素点计算并输出水平l/2像素点、垂直l/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)中。 4X4亮度块所需参考整像素点为9X9,以字访问的数据对齐后需3X9word,本发 明中参考缓存模块(21)采用乒乓读写,则需3X9X2word,其中一个3X9word用于当前 4X4亮度块插值处理,另一 3X9word则通过DMA将下一个4X4亮度块插值处理所需的 9X9参考整像素矩阵读入。所述参考缓存模块(21)由3块数据位宽为32bit,深度为18 的1读1写双端口 RAM组成,如图3所示,分别为第一RAM0,第二RAM1及第三RAM2,9X9参 考整像素矩阵中第0, 3, 6行整像素存放在第一 RAMO中,第1, 4, 7行整像素存放在第二 RAMI 中,第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级计算bl = Z+ (X < < 2-Y) , bl_clipO = (bl+16) > > 5及bl_clipl = (bl+512) > > 10 ;第3级计算b_clip0 = CliplY(bl_clipO)及b_clipl = CliplY(bl_clipl);其中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缓存中。 所述当前亮度块大小为4X4,其中,所述参考像素矩阵基于当前4X4亮度块在 参考图像中对应位置,上边扩展两行像素点,下边扩展三行像素点,左边扩展两列像素点, 右边扩展三列像素点得到大小为9X9的参考像素矩阵;所述寄存器组由34个寄存器构 成;所述RAM缓存包括存储空间为60X9的第四RAM及存储空间为32 X 5的第五RAM,第四 RAM60X9及第五RAM32X5按时钟将1/2像素点缓存入寄存器组。 H. 264高速亮度插值方法还包括下列步骤通过双线性插值模块从寄存器组中获 取参考整像素点及1/2像素点作为输入,求取1/4像素点。 其中,步骤(1)实现方法为将9X9参考整像素矩阵中第0,3,6行整像素存放在 RAMO中,第1,4,7行整像素存放在RAM1中,第2, 5, 8行整像素存放在RAM2中,从外部数据 接口来看,所述参考缓存模块具有1个32bit写位宽,3个32bit读位宽。
其中,步骤(2)所述求取4X4亮度块的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)得到的4X9的水平1/2像素中间值阵列进行4路对角线6抽头滤 波,各路6抽头滤波器分别从水平1/2像素中间值阵列的各列获得像素点,逐行输出并保存 对角线1/2像素值,构成4行4列的对角线1/2像素阵列。 上述方法还可以替换为先进行4路垂直6抽头滤波,再进行4路水平6抽头滤 波,最后进行4路对角线6抽头滤波,该等替换也属于发明实质精神范围内的发明创造,均
15落入本发明保护范围之内。 具体的,4路6抽头滤波器求取1/2像素点过程如下 (1)从寄存器组读取9X9参考整像素矩阵第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)从寄存器组读取9X9参考整像素矩阵第l行9个数据(refl0,refll,ref12, refl3,ren4,ren5,ren6,refl7,ren8),将该行第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像素中间值bl00、bl01、bl02、bl03存入第五RAM 60X9的地址0中;
(3)从寄存器组读取9X9参考整像素矩阵第2行9个数据(refl0,refll,ref12, refl3,ren4,ren5,ren6,refl7,ren8),将该行第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)中产生的参考整像素 矩阵中第l行的1/2像素中间值bllO、blll、bll2、bll3存入RAM 60X9的地址1中;
(4)从寄存器组读取9X9参考整像素矩阵第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像素中间值bl20、bl21、bl22、bl23存入RAM 60X9的地址2中;
(5)从寄存器组读取9X9参考整像素矩阵第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 32X5的地址0中;同时将步骤(4)中 产生的参考整像素矩阵中第3行的1/2像素中间值bl30、bl31、bl32、bl33存入RAM 60X9 的地址3中; (6)从寄存器组读取9X9参考整像素矩阵第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 32X5的地址1中;同时将步骤(5)中产生的参考整像素矩阵中第4行的1/2像素中间值bl40、bl41、bl42、bl43存入RAM 60X9 的地址4中; (7)从寄存器组读取9X9参考整像素矩阵第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 32X5的地址2中;同时将步骤(6)中 产生的参考整像素矩阵中第5行的1/2像素中间值bl50、bl51、bl52、bl53存入RAM 60X9 的地址5中; (8)从寄存器组读取9X9参考整像素矩阵第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 32X5的地址3中;同时将步骤(7) 产生的参考整像素矩阵中第6行的1/2像素中间值bl60、bl61、bl62、b163存入RAM 60X9 的地址6中; (9)从寄存器组读取9X9参考整像素矩阵第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 32X5的地址4中;同时将步骤(8) 产生的参考整像素矩阵中第7行的1/2像素中间值bl70、bl71、bl72、b173存入RAM 60X9 的地址7中;将RAM60X9中地址0数据读入内部寄存器缓存; (10)从寄存器组读取9X9参考整像素矩阵第2列9个数据(ref01,refll,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像素中间值bl80、bl81、bl82、bl83存入RAM 60X9的地址8中;将RAM 60X9中地址1数据读入内部寄存器缓存。 (11)从寄存器组读取9X9参考整像素矩阵第3列9个数据(ref02,refl2,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 60X9中地址2数据 读入内部寄存器缓存;将RAM 32X5中地址0数据存放到RAM 60X9地址0中。
(12)从寄存器组读取9X9参考整像素矩阵第4列9个数据(ref03,refl3,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 32X5的地址0中;将RAM 60X9中地址3数据读入内部寄存器缓存;将RAM 32X5中地址1数据存放到RAM 60X9地 址l中。 (13)从寄存器组读取9X9参考整像素矩阵第5列9个数据(ref04,refl4,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像素值hlO、hll、hl2、hl3存入RAM 32X5的地址1中;将RAM 60X9中 地址4数据读入内部寄存器缓存;将RAM 32X5中地址2数据存放到RAM 60X9地址2中。
(14)从寄存器组读取9X9参考整像素矩阵第6列9个数据(ref05,refl5,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 32X5的地址2中;将RAM 60X9中 地址5数据读入内部寄存器缓存;将RAM 32X5中地址3数据存放到RAM 60X9地址3中。
(15)从寄存器组读取水平1/2像素点中间值b100, b110, b120, b130, b140, bl50 作为第一6抽头滤波器0的输入数据;bl01,blll,bl21,bl31,bl41,b151作为第二6抽头 滤波器1的输入数据;bl02, b112, b122, b132, b142, b152作为第三6抽头滤波器2的输 入数据;bl03, b113, b123, b133, b143, b153作为第四6抽头滤波器3的输入数据;将步骤
(13) 产生的参考整像素矩阵中第4列的1/2像素值h30、h31、h32、h33存入RAM 32X5的 地址3中;将RAM 60X9中地址6数据读入内部寄存器缓存;将RAM 32X5中地址4数据存 放到RAM 60 X 9地址4中。 (16)从寄存器组读取水平1/2像素点中间值b110, b120, b130, b140, b150, b160 作为第一6抽头滤波器0的输入数据;blll,bl21,bl31,bl41,bl51,b161作为第二6抽头 滤波器1的输入数据;bl12, b122, b132, b142, b152, b162作为第三6抽头滤波器2的输 入数据;bl13, b123, b133, b143, b153, b163作为第四6抽头滤波器3的输入数据;将步骤
(14) 产生的参考整像素矩阵中第4列的1/2像素值h40、h41、h42、h43存入RAM 32X5的 地址4中;将RAM 60X9中地址7数据读入内部寄存器缓存; (17)从寄存器组读取水平1/2像素点中间值b120, b130, b140, b150, b160, b170 作为第一6抽头滤波器0的输入数据;bl21,bl31,bl41,bl51,bl61,b171作为第二 6抽头 滤波器1的输入数据;bl22, b132, b142, b152, b162, b172作为第三6抽头滤波器2的输 入数据;bl23, b133, b143, b153, b163, b173作为第四6抽头滤波器3的输入数据;将步骤
18(15) 产生的参考整像素矩阵中第2行的对角线1/2像素值j00、 j01、 j02、 j03存入图7所 示RAM 60X9的地址5中;将RAM 60X9中地址8数据读入内部寄存器缓存; (18)从寄存器组读取水平1/2像素点中间值b130, bl40, bl50, bl60, bl70, bl80 作为第一6抽头滤波器0的输入数据;bl31,bl41,bl51,bl61,bl71,b181作为第二 6抽头 滤波器1的输入数据;bl32, b142, b152, b162, b172, b182作为第三6抽头滤波器2的输 入数据;bl33, b143, b153, b163, b173, b183作为第四6抽头滤波器3的输入数据;将步骤
(16) 产生的参考整像素矩阵中第3行的对角线的1/2像素值j10、 jll、 j12、 j13存入RAM 60 X 9的地址6中。 (19)将步骤(17)所述的参考整像素矩阵中第4行的对角线的1/2像素值j20、 j21、 j22、 j23存入RAM 60X9的地址7中。 (20)将步骤(18)所述的参考整像素矩阵中第5行的对角线的1/2像素值j30、 j31、 j32、 j33存入RAM 60X9的地址8中。 在图11a中RAMO, RAMI, RAM2, RAM 60X9分别表示当前时钟从RAM读入寄存器的 数据个数;6t即filter表示当前时钟由4路并行滤波器所释放的寄存器数;reg表示当前 节拍的寄存器占用数。从第4个时钟开始到第17个时钟,由于四路6抽头滤波器并行开始 流水处理9次水平滤波和5次垂直滤波,因此,每个时钟可以释放已作为滤波输入数据的9 个寄存器。第IO至12个时钟仅释放8个时钟是为了在第15个时钟能进行垂直滤波,使流 水线达到饱和状态,将参考矩阵第6,7,8行中的第4个整像素点保存在寄存器中;从第18 个时钟开始到第21个时钟,4路并行滤波器开始流水处理4次中间值滤波,因此,每个时钟 可释放作为滤波输入数据的4个寄存器;整个过程中出现的最大寄存器占用数为34。在图 lib为仅进行横向滤波时的寄存器使用情况,由图可知21个寄存器即可满足需求。但为了 填充水平滤波到垂直滤波以及垂直滤波到中间值滤波过程中的空泡,需要提前将部分垂直 滤波以及中间值滤波数据缓存在寄存器内部,因此在最终设计时,本实施例中采用34个寄 存器,但不是必需的。 应该理解到的是,上述实施例只是对本发明的说明,而不是对本发明的限制,任何 不超出本发明实质精神范围内的发明创造,均落入本发明保护范围之内。
权利要求
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高速亮度插值装置,其特征在于所述当前亮度块大小为 4X4,所述N等于4。
3. 如权利要求1或2所述H. 264高速亮度插值装置,其特征在于所述参考缓存模块由 3块数据位宽为32bit,深度为18的1读1写双端口 RAM组成,分别为第一RAMO,第二 RAMI 及第三RAM2。其中,9X9参考整像素矩阵中第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级计算bl = Z+(X << 2-Y) , bl_clipO = (bl+16) >> 5及bl_clipl = (bl+512) > > 10 ;第3级计算b_clipO = CliplY(bl_clipO)及b_clipl = CliplY(bl_ clipl);其中G点为整像素待插值点,E、F为离G点最近的左边两个整像素点,H、 I、 J为离 G点最近的右边三个整像素点。
5. 如权利要求1或2所述H. 264高速亮度插值装置,其特征在于所述RAM缓存模块包 括位宽为60bit,深度为9的1读1写第四RAM60X9和位宽32为bit深度为5的1读1写 第五RAM32 X 5,其中,第四RAM60 X 9缓存水平1/2像素点中间值,水平1/2像素点及对角线 1/2线像素点,第五RAM32X5缓存垂直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高速亮度插值方法,其特征在于所述当前亮度块大小为 4X4 ;所述寄存器组由34个寄存器构成;所述6抽头滤波器为4路;所述RAM缓存包括存 储空间为60X9的第四RAM及存储空间为32X5的第五RAM,第四RAM及第五RAM按时钟将 1/2像素点缓存入寄存器组。
9. 如权利要求7或8所述H. 264高速亮度插值方法,其特征在于还包括下列步骤通 过双向线性插值模块从寄存器组中获取参考整像素点及1/2像素点作为输入,求取1/4像 素点。
10. 如权利要求7或8所述11.264高速亮度插值方法,其特征在于所述步骤(1)实现 的方法为将参考整像素矩阵中第0, 3, 6行整像素存放在RAM0中,第1 , 4, 7行整像素存放在 RAMI中,第2,5,8行整像素存放在RAM2中,从外部数据接口来看,所述参考缓存模块具有1 个32bit写位宽,3个32bit读位宽。
11. 如权利要求8所述11.264高速亮度插值方法,其特征在于所述步骤(2)所述求取 4X4亮度块的1/2像素点的方法为(1) 参考像素矩阵的第0行至第8行逐行进行4路水平6抽头滤波,各路6抽头滤波器 从当前行分别获得参考像素点,逐行输出并保存第l行至第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)得到的4X9的水平1/2像素中间值阵列进行4路对角线6抽头滤波, 各路6抽头滤波器分别从水平1/2像素中间值阵列的各列获得像素点,逐行输出并保存对 角线1/2像素值,构成4行4列的对角线1/2像素阵列。
12. 如权利要求11所述H. 264高速亮度插值方法,其特征在于其中4路6抽头滤波器 求取1/2像素点过程如下(1) 从寄存器组读取9X9参考整像素矩阵第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) 从寄存器组读取9X9参考整像素矩阵第1行9个数据(refl0, refll, refl2, refl3,ren4,ren5,ren6,refl7,ren8),将该行第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像素中间值bl00、bl01、bl02、bl03存入第五RAM 60X9的地址0中;(3) 从寄存器组读取9X9参考整像素矩阵第2行9个数据(refl0, refll, refl2, refl3,ren4,ren5,ren6,refl7,ren8),将该行第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)中产生的参考整 像素矩阵中第l行的1/2像素中间值bllO、blll、bll2、bll3存入RAM60X9的地址1中;(4) 从寄存器组读取9X9参考整像素矩阵第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像素中间值bl20、bl21、bl22、bl23存入RAM 60X9的地址2中;(5) 从寄存器组读取9X9参考整像素矩阵第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 32X5的地址0中;同时将步骤(4)中 产生的参考整像素矩阵中第3行的1/2像素中间值bl30、bl31、bl32、bl33存入RAM 60X9 的地址3中;(6) 从寄存器组读取9X9参考整像素矩阵第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 32X5的地址1中;同时将步骤(5)中 产生的参考整像素矩阵中第4行的1/2像素中间值bl40、bl41、bl42、bl43存入RAM 60X9 的地址4中;(7) 从寄存器组读取9X9参考整像素矩阵第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 32X5的地址2中;同时将步骤(6)中 产生的参考整像素矩阵中第5行的1/2像素中间值bl50、bl51、bl52、b153存入RAM 60X9 的地址5中;(8) 从寄存器组读取9X9参考整像素矩阵第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 32X5的地址3中;同时将步骤(7) 产生的参考整像素矩阵中第6行的1/2像素中间值bl60、bl61、bl62、bl63存入RAM 60X9 的地址6中;(9) 从寄存器组读取9X9参考整像素矩阵第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 32X5的地址4中;同时将步骤(8) 产生的参考整像素矩阵中第7行的1/2像素中间值bl70、bl71、bl72、bl73存入RAM 60X9 的地址7中;将RAM60X9中地址0数据读入内部寄存器缓存;(10) 从寄存器组读取9X9参考整像素矩阵第2列9个数据(ref01, refll, 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像素中间值bl80、bl81、bl82、bl83存入RAM 60X9的地址8中;将RAM 60X9中地址1数据读入内部寄存器缓存。(11) 从寄存器组读取9X9参考整像素矩阵第3列9个数据(ref02, refl2, 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 60X9中地址2数据 读入内部寄存器缓存;将RAM 32X5中地址0数据存放到RAM 60X9地址0中。(12) 从寄存器组读取9X9参考整像素矩阵第4列9个数据(ref03, refl3, 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 32X5的地址0中;将RAM 60X9中地址3数据读入内部寄存器缓存;将RAM32X5中地址1数据存放到RAM 60X9地 址1中。(13) 从寄存器组读取9X9参考整像素矩阵第5列9个数据(ref04, refl4, 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像素值hl0、hll、hl2、h13存入RAM 32X5的地址1中;将RAM 60X9中 地址4数据读入内部寄存器缓存;将RAM 32X5中地址2数据存放到RAM 60X9地址2中。(14) 从寄存器组读取9X9参考整像素矩阵第6列9个数据(ref05, refl5, 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 32X5的地址2中;将RAM 60X9中 地址5数据读入内部寄存器缓存;将RAM 32X5中地址3数据存放到RAM 60X9地址3中。(15) 从寄存器组读取水平1/2像素点中间值b100, b110, b120, b130, b140, b150作为 第一 6抽头滤波器0的输入数据;bl01,blll,bl21,bl31,bl41,b151作为第二6抽头滤波 器1的输入数据;bl02, b112, b122, b132, b142, b152作为第三6抽头滤波器2的输入数 据;bl03, b113, b123, b133, b143, b153作为第四6抽头滤波器3的输入数据;将步骤(13) 产生的参考整像素矩阵中第4列的1/2像素值h30、 h31、 h32、 h33存入RAM 32X5的地址 3中;将RAM 60 X 9中地址6数据读入内部寄存器缓存;将RAM 32 X 5中地址4数据存放到 RAM 60 X 9地址4中。(16) 从寄存器组读取水平1/2像素点中间值b110, b120, b130, b140, b150, b160作为 第一6抽头滤波器0的输入数据;blll,bl21,bl31,bl41,bl51,b161作为第二6抽头滤波 器1的输入数据;bl12, b122, b132, b142, b152, b162作为第三6抽头滤波器2的输入数 据;bl13, b123, b133, b143, b153, b163作为第四6抽头滤波器3的输入数据;将步骤(14) 产生的参考整像素矩阵中第4列的1/2像素值h40、h41、h42、h43存入RAM 32X5的地址4 中;将RAM 60X9中地址7数据读入内部寄存器缓存;(17) 从寄存器组读取水平1/2像素点中间值b120, b130, b140, b150, b160, b170作为 第一6抽头滤波器0的输入数据;bl21,bl31,bl41,bl51,bl61,b171作为第二 6抽头滤波 器1的输入数据;bl22, b132, b142, b152, b162, b172作为第三6抽头滤波器2的输入数 据;bl23, b133, b143, b153, b163, b173作为第四6抽头滤波器3的输入数据;将步骤(15) 产生的参考整像素矩阵中第2行的对角线1/2像素值j00、 j01、 j02、 j03存入图7所示RAM 60X9的地址5中;将RAM 60X9中地址8数据读入内部寄存器缓存;(18) 从寄存器组读取水平1/2像素点中间值b130, b140, b150, b160, b170, b180作为 第一6抽头滤波器0的输入数据;bl31,bl41,bl51,bl61,bl71,b181作为第二 6抽头滤波 器1的输入数据;bl32, b142, b152, b162, b172, b182作为第三6抽头滤波器2的输入数 据;bl33, b143, b153, b163, b173, b183作为第四6抽头滤波器3的输入数据;将步骤(16) 产生的参考整像素矩阵中第3行的对角线的1/2像素值j10、 jll、 j12、 j13存入RAM 60X9 的地址6中。(19) 将步骤(17)所述的参考整像素矩阵中第4行的对角线的1/2像素值j20、 j21、 j22、 j23存入RAM 60X9的地址7中。(20) 将步骤(18)所述的参考整像素矩阵中第5行的对角线的1/2像素值j30、 j31、 j32、 j33存入RAM 60X9的地址8中。
全文摘要
本发明提供的H.264高速亮度插值装置包括参考缓存模块,寄存器输入控制模块,寄存器组,滤波器输入控制模块,N路6抽头滤波器,RAM缓存I/O控制模块,RAM缓存模块,参考缓存模块从外部读取当前亮度块插值处理所需参考像素矩阵,参考像素矩阵全部读入参考缓存模块后,将参考像素矩阵放入寄存器组中,N路6抽头滤波器通过滤波器输入控制模块从寄存器组中同时且分别获得6个参考像素作为输入,求取1/2像素点,并将1/2像素点缓存到RAM缓存模块中。本发明的整个插值过程由多路并行滤波器流水运行达到饱和状态,有效减少亮度插值处理时钟数,提高最大计算频率,满足多路高清数字视频信号实时编解码需求。
文档编号H04N7/50GK101795405SQ200910154148
公开日2010年8月4日 申请日期2009年11月6日 优先权日2009年11月6日
发明者徐向阳, 汤博 申请人:杭州士兰微电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1