视频解码方法和系统转让专利

申请号 : CN201010146527.7

文献号 : CN102223525B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 谭志明白向晖洲镰康

申请人 : 富士通株式会社

摘要 :

本发明公开了一种视频解码方法和系统。该方法包括:通过利用中央处理单元对一个画面的编码后的视频数据进行变长解码和反扫描,获取所述一个画面的变长解码和反扫描后的视频数据;以及通过利用可编程图形处理单元对所述一个画面的变长解码和反扫描后的视频数据进行反量化、反离散余弦变换、运动补偿以及色彩空间转换,获取所述一个画面的完成解码后的视频数据。所述一个画面的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据包含有所述一个画面中的每个像素的亮度残差值和色度残差值,通过根据等式(1)对所述一个画面中的任意一个像素的亮度/色度残差值进行运动补偿来获取所述一个像素的亮度/色度值:sum=residual+(1.0-MC_flag)*128.0+MC_flag*prediction(1)。

权利要求 :

1.一种视频解码方法,包括:

通过利用中央处理单元对一个画面的编码后的视频数据进行变长解码和反扫描,获取所述一个画面的变长解码和反扫描后的视频数据;以及

通过利用可编程图形处理单元对所述一个画面的变长解码和反扫描后的视频数据进行反量化、反离散余弦变换、运动补偿以及色彩空间转换,获取所述一个画面的完成解码后的视频数据,其中所述一个画面的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据包含有所述一个画面中的每个像素的亮度残差值和色度残差值,通过根据等式(1)对所述一个画面中的任意一个像素的亮度/色度残差值进行运动补偿来获取所述一个像素的亮度/色度值:sum=residual+(1.0-MC_flag)*128.0+MC_flag*prediction(1)

其中,sum表示所述一个像素的亮度/色度值,residual表示所述一个像素的亮度/色度残差值,prediction表示所述一个像素的亮度/色度预测值,MC_flag是所述一个像素所在宏块的运动补偿标记,当所述一个像素所在宏块为帧内编码宏块时MC_flag=0,当所述一个像素所在宏块不是帧内编码宏块时MC_flag=1。

2.根据权利要求1所述的视频解码方法,其特征在于,获取所述一个像素的亮度/色度残差值的处理包括:

根据所述一个画面的画面类型标记判断所述一个画面是帧画面还是场画面;

当所述一个画面是场画面时,根据所述一个像素的纹理坐标从所述一个画面的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据中获取所述一个像素的亮度/色度残差值。

3.根据权利要求1所述的视频解码方法,其特征在于,获取所述一个像素的亮度/色度残差值的处理包括:

根据所述一个画面的画面类型标记判断所述一个画面是帧画面还是场画面; 当所述一个画面是帧画面时,根据所述一个像素所在宏块的离散余弦变换编码类型标记判断所述一个像素所在宏块的离散余弦变换编码类型是场离散余弦变换编码还是帧离散余弦变换编码;

如果所述一个像素所在宏块的离散余弦变换编码类型为帧离散余弦变换编码,则根据所述一个像素的纹理坐标从所述一个画面的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据中获取所述一个像素的亮度/色度残差值,否则根据等式(2)至(4)计算所述一个像素的偏移后的纹理坐标:

texRef.s=v_texCoord.s (2)texRef.t=startTexCoord.t+(dety+2.0*fraction*8.0)*texDet.t (3)fraction=fract((gl_FragCoord-0.5)/2.0).y (4)其中,v_texCoord.s表示所述一个像素的纹理坐标的s分量,texRef.s表示所述一个像素的偏移后的纹理坐标的s分量,texRef.t表示所述一个像素的偏移后的纹理坐标的t分量,startTexCoord.t表示所述一个像素所在宏块的最左下侧像素的纹理坐标的t分量,dety表示所述一个像素与所述一个像素所在宏块的最下侧像素行之间的距离,texDet.t表示所述一个像素与所述一个像素所在宏块的最左下侧像素之间的纹理坐标距离的t分量,gl_FragCoord表示所述一个像素的位置坐标,fract()表示求余函数,fraction表示fract((gl_FragCoord-0.5)/2.0)的y分量;并且根据所述一个像素的偏移后的纹理坐标从所述一个画面的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据中获取所述一个像素的亮度/色度残差值。

4.根据权利要求1所述的视频解码方法,其特征在于,所述一个画面的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据中还包含有所述一个画面中的每个宏块的运动向量,其中在所述一个画面是帧画面的情况下,

当所述一个画面的预测模式是帧预测模式时,所述一个画面中的每个宏块相对于前向参考帧的运动向量组成第一向量组,且所述一个画面中的 每个宏块相对于后向参考帧的运动向量组成第二向量组,当所述一个画面的预测模式是场预测模式时,所述一个画面的顶场中的每个宏块相对于前向参考帧和后向参考帧的顶场的运动向量分别组成所述第一向量组和所述第二向量组,并且所述一个画面的底场中的每个宏块相对于前向参考帧和后向参考帧的底场的运动向量分别组成第三向量组和第四向量组,当所述一个画面的预测模式是双基预测模式时,所述一个画面的顶场中的每个宏块相对于前向参考帧的顶场和底场的运动向量分别组成所述第一向量组和所述第三向量组,并且所述一个画面的底场中的每个宏块相对于前向参考帧的顶场和底场的运动向量分别组成所述第二向量组和所述第四向量组,在所述一个画面是场画面的情况下,

当所述一个画面的预测模式是场预测模式时,所述一个画面中的每个宏块相对于前向参考帧和后向参考帧的运动向量分别组成所述第一向量组和所述第二向量组,当所述一个画面的预测模式是双基预测模式时,所述一个画面中的每个宏块相对于前向参考帧的顶场和底场的运动向量分别组成所述第一向量组和所述第二向量组,当所述一个画面的预测模式是16×8预测模式时,所述一个画面中的每个宏块的上半部分相对于前向参考帧和后向参考帧的运动向量分别组成所述第一向量组和所述第二向量组,且所述一个画面中的每个宏块的下半部分相对于前向参考帧和后向参考帧的运动向量分别组成所述第三向量组和所述第四向量组。

5.根据权利要求4所述的视频解码方法,其特征在于,在获取所述一个像素的亮度/色度预测值之前,根据所述一个画面的画面类型标记判断所述一个画面是帧画面还是场画面,根据所述一个画面的预测模式标记判断所述一个画面的预测模式是帧预测、场预测、双基预测、还是16×8预测,并根据所述一个像素所在宏块的预测方向标记判断所述一个像素所在宏块的预测方向是前向、后向还是双向。

6.根据权利要求5所述的视频解码方法,其特征在于,当所述一个画面的画面类型是帧画面、所述一个画面的预测模式是帧预测模式、且所述一个画面的预测方向是前向/后向时,获取所述一个像素的亮度/色度预测值的处理包括:根据所述一个像素的纹理坐标从所述第一向量组/所述第二向量组中获取所述一个像素相对于前向参考帧/后向参考帧的运动向量;

根据等式(5)和(6)计算所述一个像素相对于前向参考帧/后向参考帧的运动向量的整数部分ixy和半整数部分hxy,其中mv1.x和mv1.y分别表示所述一个像素相对于前向参考帧/后向参考帧的运动向量的x分量和y分量的绝对值,ixy.x和ixy.y分别表示所述一个像素相对于前向参考帧/后向参考帧的运动向量的整数部分的x分量和y分量,floor()表示向下取整函数:ixy=vec2(floor(mv1.x/2.0),floor(mv1.y/2.0)) (5)hxy=vec2(mv1.x/2.0-ixy.x,mv1.y/2.0-ixy.y) (6)根据等式(7)至(11)计算所述一个像素的亮度/色度预测值,其中,tex0至tex3是用纹理坐标表示的所述一个像素周围的四个像素相对于前向参考帧/后向参考帧的运动向 量,texture2D(s_reference,tex0)、texture2D(s_reference,tex1)、texture2D(s_reference,tex2)、texture2D(s_reference,tex3)分别是根据tex0至tex3获取的位于前向参考帧/后向参考帧上的参考像素的亮度/色度值,vp_width是所述一个画面的视窗宽度,vp_height是所述一个画面的视窗高度,texShift.x和texShift.y均为0:prediction=((texture2D(s_reference,tex0)+

hxy.x*texture2D(s_reference,tex1)+hxy.y*

(s_reference,tex2)+hxy.x*hxy.y* (7)texture2D(s_reference,tex3))+hxy.x+hxy.y)/(1.0+hxy.x+hxy.y+hxy.x*hxy.y)

tex1=tex0+vec2(1.0/vp_width,0.0) (9)tex2=tex0+vec2(0.0,-1.0/vp_height) (10)tex3=tex0+vec2(1.0/vp_width,-1.0/vp_height) (11)。

7.根据权利要求5所述的视频解码方法,其特征在于,当所述一个画面的画面类型是帧画面、所述一个画面的预测模式是场预测模式、且所述一个画面的预测方向是前向/后向时以及当所述一个画面的画面类型是场画面、所述一个画面的预测模式为场预测模式或者16×8预测模式、且所述一个画面的预测方向是前向/后向时,获取所述一个像素的亮度/色度预测值的处理包括:根据所述一个像素的纹理坐标从相应的向量组中获取所述一个像素相对于前向参考帧/后向参考帧的运动向量;

根据所述一个像素所在宏块的参考场选择标记判断是否需要对所述一个像素相对于前向参考帧/后向参考帧的运动向量进行偏移,如果需要,则在所述一个像素处于所述一个画面的顶场中的情况下根据等式(12)计算偏移量texShift,在所述一个像素处于所述一个画面的底场中的情况下根据等式(13)计算偏移量texShift,其中v_texCoord.s和v_texCoord.t分别表示所述一个像素的纹理坐标的s分量和t分量,vp_height是所述一个画面的视窗高度:texShift=vec2(v_texCoord.s,v_texCoord.t-1/vp_height) (12)texShift=vec2(v_texCoord.s,v_texCoord.t+1/vp_height) (13)根据等式(14)和(15)计算所述一个像素相对于前向参考帧/后向参考帧的运动向量的整数部分ixy和半整数部分hxy,其中mv1.x和mv1.y分别表示所述一个像素相对于前向参考帧/后向参考帧的运动向量的x分量和y分量的绝对值,ixy.x和ixy.y分别表示所述一个像素相对于前向参考帧/后向参考帧的运动向量的整数部分的x分量和y分量,floor()表示向下取整函数:ixy=vec2(floor(mv1.x/2.0),floor(mv1.y/4.0)) (14)hxy=vec2(mv1.x/2.0-ixy.x,mv1.y/4.0-ixy.y) (15)根据等式(16)至(20)计算所述一个像素的亮度/色度预测值,其中,tex0至tex3是用纹理坐标表示的所述一个像素周围的四个像素相对于前向参考帧/后向参考帧的运动向量,texture2D(s_reference,tex0)、texture2D(s_reference,tex1)、texture2D(s_reference,tex2)、texture2D(s_reference,tex3) 分别是根据tex0至tex3获取的位于前向参考帧/后向参考帧上的参考像素的亮度/色度值,vp_width是所述一个画面的视窗宽度,texShift.x和texShift.y表示所述偏移量的x和y分量prediction=((texture2D(s_reference,tex0)+

hxy.x*texture2D(s_reference,tex1)+hxy.y*

(s_reference,tex2)+hxy.x*hxy.y* (16)texture2D(s_reference,tex3))+hxy.x+hxy.y)/(1.0+hxy.x+hxy.y+hxy.x*hxy.y)

tex1=tex0+vec2(1.0/vp_width,0.0) (18)tex2=tex0+vec2(0.0,-2.0/vp_height) (19)tex3=tex0+vec2(1.0/vp_width,-2.0/vp_height) (20)。

8.根据权利要求6或7所述的视频解码方法,其特征在于,当所述一个画面的预测方向为双向预测时,将根据所述一个像素相对于前向参考帧的运动向量获取的所述一个像素的亮度/色度预测值和根据所述一个像素相对于后向参考帧的运动向量获取的所述一个像素的亮度/色度预测值的平均值作为所述一个像素的最终亮度/色度预测值。

9.根据权利要求5所述的视频解码方法,其特征在于,当所述一个画面的画面类型是帧画面、所述一个画面的预测模式是双基预测模式时以及当所述一个画面的画面类型是场画面、所述一个画面的预测模式为双基预测模式时,获取所述一个像素的亮度/色度预测值的处理包括:根据所述一个像素的纹理坐标从相应的向量组中获取所述一个像素相对于前向参考帧的运动向量;

根据所述一个像素所在宏块的参考场选择标记判断是否需要对所述一个像素相对于前向参考帧的运动向量进行偏移,如果需要,则在所述一个像素处于所述一个画面的顶场中的情况下根据等式(12)计算偏移量texShift,在所述一个像素处于所述一个画面的底场中的情况下根据等式(13)计算偏移量texShift,其中v_texCoord.s和v_texCoord.t分别表示所述一个像素的纹理坐标的s分量和t分量,vp_height是所述一个画面的视窗高度: texShift=vec2(v_texCoord.s,v_texCoord.t-1/vp_height) (12)texShift=vec2(v_texCoord.s,v_texCoord.t+1/vp_height) (13)根据等式(14)和(15)计算所述一个像素相对于前向参考帧的运动向量的整数部分ixy和半整数部分hxy,其中mv1.x和mv1.y分别表示所述一个像素相对于前向参考帧的运动向量的x分量和y分量的绝对值,ixy.x和ixy.y分别表示所述一个像素相对于前向参考帧的运动向量的整数部分的x分量和y分量,floor()表示向下取整函数:ixy=vec2(floor(mv1.x/2.0),floor(mv1.y/4.0)) (14)hxy=vec2(mv1.x/2.0-ixy.x,mv1.y/4.0-ixy.y) (15)根据等式(16)至(20)计算所述一个像素的亮度/色度预测值,其中,tex0至tex3是用纹理坐标表示的所述一个像素周围的四个像素相对于前向参考帧的运动向量,texture2D(s_reference,tex0)、texture2D(s_reference,tex1)、texture2D(s_reference,tex2)、texture2D(s_reference,tex3)分别是根据tex0至tex3获取的位于前向参考帧上的参考像素的亮度/色度值,vp_width是所述一个画面的视窗宽度,texShift.x和texShift.y表示所述偏移量的x和y分量prediction=((texture2D(s_reference,tex0)+

hxy.x*texture2D(s_reference,tex1)+hxy.y*

(s_reference,tex2)+hxy.x*hxy.y* (16)texture2D(s_reference,tex3))+hxy.x+hxy.y)/(1.0+hxy.x+hxy.y+hxy.x*hxy.y)

tex1=tex0+vec2(1.0/vp_width,0.0) (18)tex2=tex0+vec2(0.0,-2.0/vp_height) (19)tex3=tex0+vec2(1.0/vp_width,-2.0/vp_height) (20)。

10.一种视频解码系统,包括:

中央处理单元,被配置为通过对一个画面的编码后的视频数据进行变长解码和反扫描,获取所述一个画面的变长解码和反扫描后的视频数据;

可编程图形处理单元,被配置为通过对所述一个画面的变长解码和反扫描后的视频数据进行反量化、反离散余弦变换、运动补偿以及色彩空间 转换,获取所述一个画面的完成解码后的视频数据,其中所述一个画面的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据包含有所述一个画面中的每个像素的亮度残差值和色度残差值,所述可编程图形处理单元通过根据等式(1)对所述一个画面中的任意一个像素的亮度/色度残差值进行运动补偿来获取所述一个像素的亮度/色度值:sum=residual+(1.0-MC_flag)*128.0+MC_flag*prediction(1)

其中,sum表示所述一个像素的亮度/色度值,residual表示所述一个像素的亮度/色度残差值,prediction表示所述一个像素的亮度/色度预测值,MC_flag是所述一个像素所在宏块的运动补偿标记,当所述一个像素所在宏块为帧内编码宏块时MC_flag=0,当所述一个像素所在宏块不是帧内编码宏块时MC_flag=1。

11.根据权利要求10所述的视频解码系统,其特征在于,所述可编程图形处理单元包括:

画面类型判断单元,被配置为根据所述一个画面的画面类型标记判断所述一个画面是帧画面还是场画面;

残差值获取单元,被配置为当所述一个画面是场画面时,根据所述一个像素的纹理坐标从所述一个画面的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据中获取所述一个像素的亮度/色度残差值。

12.根据权利要求10所述的视频解码系统,其特征在于,所述可编程图形处理单元包括:

画面类型判断单元,被配置为根据所述一个画面的画面类型标记判断所述一个画面是帧画面还是场画面的装置;

编码类型判断单元,被配置为当所述一个画面是帧画面时,根据所述一个像素所在宏块的离散余弦变换编码类型标记判断所述一个像素所在宏块的离散余弦变换编码类型是场离散余弦变换编码还是帧离散余弦变换编码;

残差值获取单元,被配置为如果所述一个像素所在宏块的离散余弦变换编码类型为帧离散余弦变换编码,则根据所述一个像素的纹理坐标从所 述一个画面的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据中获取所述一个像素的亮度/色度残差值,否则根据等式(2)至(4)计算所述一个像素的偏移后的纹理坐标:

texRef.s=v_texCoord.s (2)texRef.t=startTexCoord.t+(dety+2.0*fraction*8.0)*texDet.t (3)fraction=fract((gl_FragCoord-0.5)/2.0).y (4)其中,v_texCoord.s表示所述一个像素的纹理坐标的s分量,texRef.s表示所述一个像素的偏移后的纹理坐标的s分量,texRef.t表示所述一个像素的偏移后的纹理坐标的t分量,startTexCoord.t表示所述一个像素所在宏块的最左下侧像素的纹理坐标的t分量,dety表示所述一个像素与所述一个像素所在宏块的最下侧像素行之间的距离,texDet.t表示所述一个像素与所述一个像素所在宏块的最左下侧像素之间的纹理坐标距离的t分量,gl_FragCoord表示所述一个像素的位置坐标,fract()表示求余函数,fraction表示fract((gl_FragCoord-0.5)/2.0)的y分量;并且根据所述一个像素的偏移后的纹理坐标从所述一个画面的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据中获取所述一个像素的亮度/色度残差值。

13.根据权利要求10所述的视频解码系统,其特征在于,所述一个画面的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据中还包含有所述一个画面中的每个宏块的运动向量,其中在所述一个画面是帧画面的情况下,

当所述一个画面的预测模式是帧预测模式时,所述一个画面中的每个宏块相对于前向参考帧的运动向量组成第一向量组,且所述一个画面中的每个宏块相对于后向参考帧的运动向量组成第二向量组,当所述一个画面的预测模式是场预测模式时,所述一个画面的顶场中的每个宏块相对于前向参考帧和后向参考帧的顶场的运动向量分别组成所述第一向量组和所述第二向量组,并且所述一个画面的底场中的每个宏块相对于前向参考帧和后向参考帧的底场的运动向量分别组成第三向量组和 第四向量组,当所述一个画面的预测模式是双基预测模式时,所述一个画面的顶场中的每个宏块相对于前向参考帧的顶场和底场的运动向量分别组成所述第一向量组和所述第三向量组,并且所述一个画面的底场中的每个宏块相对于前向参考帧的顶场和底场的运动向量分别组成所述第二向量组和所述第四向量组,在所述一个画面是场画面的情况下,

当所述一个画面的预测模式是场预测模式时,所述一个画面中的每个宏块相对于前向参考帧和后向参考帧的运动向量分别组成所述第一向量组和所述第二向量组,当所述一个画面的预测模式是双基预测模式时,所述一个画面中的每个宏块相对于前向参考帧的顶场和底场的运动向量分别组成所述第一向量组和所述第二向量组,当所述一个画面的预测模式是16×8预测模式时,所述一个画面中的每个宏块的上半部分相对于前向参考帧和后向参考帧的运动向量分别组成所述第一向量组和所述第二向量组,且所述一个画面中的每个宏块的下半部分相对于前向参考帧和后向参考帧的运动向量分别组成所述第三向量组和所述第四向量组。

14.根据权利要求13所述的视频解码系统,其特征在于,所述可编程图形处理单元还包括:

预测模式判断单元,被配置为根据所述一个画面的预测模式标记判断所述一个画面的预测模式是帧预测、场预测、双基预测还是16×8预测;

预测方向判断单元,被配置为根据所述一个画面的预测方向标记判断所述一个画面的预测方向是前向、后向还是双向。

15.根据权利要求14所述的视频解码系统,其特征在于,所述可编程图形处理单元还包括:

运动向量获取单元,被配置为当所述一个画面的画面类型是帧画面、所述一个画面的预测模式是帧预测模式、且所述一个画面的预测方向为前向/后向时,根据所述一个像素的纹理坐标从所述第一向量组/所述第二向 量组中获取所述一个像素相对于前向参考帧/后向参考帧的运动向量;

运动向量计算单元,被配置为根据等式(5)和(6)计算所述一个像素相对于前向参考帧/后向参考帧的运动向量的整数部分ixy和半整数部分hxy,其中mv1.x和mv1.y分别表示所述一个像素相对于前向参考帧/后向参考帧的运动向量的x分量和y分量的绝对值,ixy.x和ixy.y分别表示所述一个像素相对于前向参考帧/后向参考帧的运动向量的整数部分的x分量和y分量,floor()表示向下取整函数:ixy=vec2(floor(mv1.x/2.0),floor(mv1.y/2.0)) (5)hxy=vec2(mv1.x/2.0-ixy.x,mv1.y/2.0-ixy.y) (6)预测值计算单元,被配置为根据等式(7)至(11)计算所述一个像素的亮度/色度预测值,tex0至tex3是用纹理坐标表示的所述一个像素周围的四个像素相对于前向参考帧/后向参考帧的运动向量,texture2D(s_reference,tex0)、texture2D(s_reference,tex1)、texture2D(s_reference,tex2)、texture2D(s_reference,tex3)分别是根据tex0至tex3获取的位于前向参考帧/后向参考帧上的参考像素的亮度/色度值,vp_width是所述一个画面的视窗宽度,vp_height是所述一个画面的视窗高度,texShift.x和texShift.y均为

0:

prediction=((texture2D(s_reference,tex0)+

hxy.x*texture2D(s_reference,tex1)+hxy.y*

(s_reference,tex2)+hxy.x*hxy.y* (7)texture2D(s_reference,tex3))+hxy.x+hxy.y)/(1.0+hxy.x+hxy.y+hxy.x*hxy.y)

tex1=tex0+vec2(1.0/vp_width,0.0) (9)tex2=tex0+vec2(0.0,-1.0/vp_height) (10)tex3=tex0+vec2(1.0/vp_width,-1.0/vp_height) (11)。

16.根据权利要求14所述的视频解码系统,其特征在于,所述可编程图形处理单元还包括:

运动向量获取单元,被配置为当所述一个画面的画面类型是帧画面、所述一个画面的预测模式是场预测模式、且所述一个画面的预测方向为前 向/后向时以及当所述一个画面的画面类型是场画面、所述一个画面的预测模式为场预测模式或者16×8预测模式、且所述一个画面的预测方向为前向/后向时,根据所述一个像素的纹理坐标从相应的向量组中获取所述一个像素相对于前向参考帧/后向参考帧的运动向量;

偏移量计算单元,被配置为根据所述一个像素所在宏块的参考场选择标记判断是否需要对所述一个像素相对于前向参考帧/后向参考帧的运动向量进行偏移,如果需要,在所述一个像素处于所述一个画面的顶场中的情况下根据等式(12)计算偏移量texShift,在所述一个像素处于所述一个画面的底场中的情况下根据等式(13)计算偏移量texShift,其中v_texCoord.s和v_texCoord.t分别表示所述一个像素的纹理坐标的s分量和t分量,vp_height是所述一个画面的视窗高度:texShift=vec2(v_texCoord.s,v_texCoord.t-1/vp_height) (12)texShift=vec2(v_texCoord.s,v_texCoord.t+1/vp_height) (13)运动向量计算单元,被配置为根据等式(5)和(6)计算所述一个像素相对于前向参考帧/后向参考帧的运动向量的整数部分ixy和半整数部分hxy,其中mv1.x和mv1.y分别表示所述一个像素相对于前向参考帧/后向参考帧的运动向量的x分量和y分量的绝对值,ixy.x和ixy.y分别表示所述一个像素相对于前向参考帧/后向参考帧的运动向量的整数部分的x分量和y分量,floor()表示向下取整函数:ixy=vec2(floor(mv1.x/2.0),floor(mv1.y/4.0)) (5)hxy=vec2(mv1.x/2.0-ixy.x,mv1.y/4.0-ixy.y) (6)预测值计算单元,被配置为根据等式(7)至(11)计算所述一个像素的亮度/色度预测值,其中,tex0至tex3是用纹理坐标表示的所述一个像素周围的四个像素相对于前向参考帧/后向参考帧的运动向量,texture2D(s_reference,tex0)、texture2D(s_reference,tex1)、texture2D(s_reference,tex2)、texture2D(s_reference,tex3)分别是根据tex0至tex3获取的位于前向参考帧/后向参考帧上的参考像素的亮度/色度值,vp_width是所述一个画面的视窗宽度,texShift.x和texShift.y表示所述偏移量的x和y分量 prediction=((texture2D(s_reference,tex0)+hxy.x*texture2D(s_reference,tex1)+hxy.y*

(s_reference,tex2)+hxy.x*hxy.y* (7)texture2D(s_reference,tex3))+hxy.x+hxy.y)/(1.0+hxy.x+hxy.y+hxy.x*hxy.y)

tex1=tex0+vec2(1.0/vp_width,0.0) (9)tex2=tex0+vec2(0.0,-2.0/vp_height) (10)tex3=tex0+vec2(1.0/vp_width,-2.0/vp_height) (11)。

17.根据权利要求15或16所述的视频解码系统,其特征在于,当所述一个画面的预测方向为双向预测时,所述可编程图形处理单元将根据所述一个像素相对于前向参考帧的运动向量获取的所述一个像素的亮度/色度预测值和根据所述一个像素相对于后向参考帧的运动向量获取的所述一个像素的亮度/色度预测值的平均值作为所述一个像素的最终亮度/色度预测值。

18.根据权利要求14所述的视频解码系统,其特征在于,所述可编程图形处理单元还包括:

运动向量获取单元,被配置当所述一个画面的画面类型是帧画面、所述一个画面的预测模式是双基预测模式时以及当所述一个画面的画面类型是场画面、所述一个画面的预测模式为双基预测模式时,根据所述一个像素的纹理坐标从相应的向量组中获取所述一个像素相对于前向参考帧的运动向量;

偏移量计算单元,被配置为根据所述一个像素所在宏块的参考场选择标记判断是否需要对所述一个像素相对于前向参考帧的运动向量进行偏移,如果需要,则在所述一个像素处于所述一个画面的顶场中的情况下根据等式(12)计算偏移量texShift,在所述一个像素处于所述一个画面的底场中的情况下根据等式(13)计算偏移量texShift,其中v_texCoord.s和v_texCoord.t分别表示所述一个像素的纹理坐标的s分量和t分量,vp_height是所述一个画面的视窗高度:texShift=vec2(v_texCoord.s,v_texCoord.t-1/vp_height) (12) texShift=vec2(v_texCoord.s,v_texCoord.t+1/vp_height) (13)运动向量计算单元,被配置为根据等式(14)和(15)计算所述一个像素相对于前向参考帧的运动向量的整数部分ixy和半整数部分hxy,其中mv1.x和mv1.y分别表示所述一个像素相对于前向参考帧的运动向量的x分量和y分量的绝对值,ixy.x和ixy.y分别表示所述一个像素相对于前向参考帧的运动向量的整数部分的x分量和y分量,floor()表示向下取整函数:ixy=vec2(floor(mv1.x/2.0),floor(mv1.y/4.0)) (14)hxy=vec2(mv1.x/2.0-ixy.x,mv1.y/4.0-ixy.y) (15)预测值计算单元,被配置为根据等式(16)至(20)计算所述一个像素的亮度/色度预测值,其中,tex0至tex3是用纹理坐标表示的所述一个像素周围的四个像素相对于前向参考帧的运动向量,texture2D(s_reference,tex0)、texture2D(s_reference,tex1)、texture2D(s_reference,tex2)、texture2D(s_reference,tex3)分别是根据tex0至tex3获取的位于前向参考帧上的参考像素的亮度/色度值,vp_width是所述一个画面的视窗宽度,texShift.x和texShift.y表示所述偏移量的x和y分量prediction=((texture2D(s_reference,tex0)+

hxy.x*texture2D(s_reference,tex1)+hxy.y*

(s_reference,tex2)+hxy.x*hxy.y* (16)texture2D(s_reference,tex3))+hxy.x+hxy.y)/(1.0+hxy.x+hxy.y+hxy.x*hxy.y)

tex1=tex0+vec2(1.0/vp_width,0.0) (18)tex2=tex0+vec2(0.0,-2.0/vp_height) (19)tex3=tex0+vec2(1.0/vp_width,-2.0/vp_height) (20)。

说明书 :

视频解码方法和系统

技术领域

[0001] 本发明涉及图像处理领域,更具体地涉及一种视频解码方法和系统。

背景技术

[0002] 在传统的桌面或手持设备中,视频解码通常由中央处理单元(CPU)执行。对于不具有强大CPU的系统而言,对高清(HD)视频进行解码是非常困难的。为了对HD视频进行解码,一个解决方案是在这种系统中添加专用的视频解码芯片,但是这种方案成本太高;另一种解决方案在这种系统中设置图形处理单元(GPU),由GPU来完成部分解码任务。
[0003] 适合由GPU来完成的解码处理包括反量化(IQ)、反离散余弦变换(IDCT)、运动补偿(MC)以及色彩空间转换(CSC)。这些处理通常由顶点着色器和片断着色器完成。MC处理是所有这些处理中最复杂的处理。MC处理的复杂性是由于画面类型、运动类型、预测方向、画面DCT(离散余弦变换)编码类型、以及内插类型的不同选择导致的。对于帧画面,前向预测中存在MC_FRAME、MC_FIELD、以及MC_DMV三种运动类型,并且在后向预测中存在MC_FRAME和MC_FIELD两种运动类型。对于场画面(上场和下场),前向预测中存在MC_FIELD、MC_16×8两种运动类型,后向预测中存在MC_FIELD和MC_16×8两种运动类型。还存在两种用于预测的内插方法,即整数采样和双线性内插。
[0004] 利用GPU进行MC的传统方法通常根据不同的画面类型、运动类型以及内插类型,将MC处理划分到多个着色器中。每个着色器利用画面中的矩形对宏块(MB)进行渲染。这样,一个画面中将存在很多矩形需要被处理。在不同矩形之间的着色器切换将带来很大开销。

发明内容

[0005] 鉴于以上所述的一个或多个问题,本发明提供了一种新颖的视频解码方法和系统。
[0006] 根据本发明实施例的视频解码方法包括:通过利用中央处理单元对一个画面的编码后的视频数据进行变长解码和反扫描,获取所述一个画面的变长解码和反扫描后的视频数据;以及通过利用可编程图形处理单元对所述一个画面的变长解码和反扫描后的视频数据进行反量化、反离散余弦变换、运动补偿以及色彩空间转换,获取所述一个画面的完成解码后的视频数据。其中,所述一个画面的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据包含有所述一个画面中的每个像素的亮度残差值和色度残差值,通过根据等式(1)对所述一个画面中的任意一个像素的亮度/色度残差值进行运动补偿来获取所述一个像素的亮度/色度值:
[0007] sum=residual+(1.0-MC_flag)*128.0+MC_flag*prediction(1)
[0008] 其中,sum表示所述一个像素的亮度/色度值,residual表示所述一个像素的亮度/色度残差值,prediction表示所述一个像素的亮度/色度预测值,MC_flag是所述一个像素所在宏块的运动补偿标记,当所述一个像素所在宏块为帧内编码宏块时MC_flag=0,当所述一个像素所在宏块不是帧内编码宏块时MC_flag=1。
[0009] 根据本发明实施例的视频解码系统包括:中央处理单元,被配置为通过对一个画面的编码后的视频数据进行变长解码和反扫描,获取所述一个画面的变长解码和反扫描后的视频数据;可编程图形处理单元,被配置为通过对所述一个画面的变长解码和反扫描后的视频数据进行反量化、反离散余弦变换、运动补偿以及色彩空间转换,获取所述一个画面的完成解码后的视频数据。其中,所述一个画面的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据包含有所述一个画面中的每个像素的亮度残差值和色度残差值。可编程图形处理单元通过根据等式(1)对所述一个画面中的任意一个像素的亮度/色度残差值进行运动补偿来获取所述一个像素的亮度/色度值:
[0010] sum=residual+(1.0-MC_flag)*128.0+MC_flag*prediction(1)
[0011] 其中,sum表示所述一个像素的亮度/色度值,residual表示所述一个像素的亮度/色度残差值,prediction表示所述一个像素的亮度/色度预测值,MC_flag是所述一个像素所在宏块的运动补偿标记,当所述一个像素所在宏块为帧内编码宏块时MC_flag=0,当所述一个像素所在宏块不是帧内编码宏块时MC_flag=1。
[0012] 本发明将不同预测方向、不同运动类型、以及不同编码类型的场画面或帧画面的运动补偿处理结合在了一起,并且将一个画面当作一个矩形进行处理,所以不需要对着色器进行切换,从而提高了处理速度。

附图说明

[0013] 从下面结合附图对本发明的具体实施方式的描述中可以更好地理解本发明,其中:
[0014] 图1示出了根据本发明实施例的视频解码方法和系统的逻辑图;
[0015] 图2示出了根据本发明实施例的遵循OpenGL ES 2.0(其是一种嵌入式3D图形算法标准)的可编程图形流水线;
[0016] 图3示出了由图2所示的片断着色器实现的MC着色器的逻辑图;
[0017] 图4A和图4B分别示出了帧DCT编码和场DCT编码的示意图;
[0018] 图5示出了根据本发明实施例的视频解码系统的逻辑框图;
[0019] 图6示出了在场画面中对像素的亮度/色度残差值进行采样的示意图;
[0020] 图7示出了专用于帧画面的MC着色器的结构;
[0021] 图8示出了专用于场画面的MC着色器的结构;以及
[0022] 图9示出了MC着色器处理器的硬件示意图。

具体实施方式

[0023] 下面将详细描述本发明各个方面的特征和示例性实施例。下面的描述涵盖了许多具体细节,以便提供对本发明的全面理解。但是,对于本领域技术人员来说显而易见的是,本发明可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅是为了通过示出本发明的示例来提供对本发明更清楚的理解。本发明绝不限于下面所提出的任何具体配置和算法,而是在不脱离本发明的精神的前提下覆盖了相关元素、部件和算法的任何修改、替换和改进。
[0024] 由于在MPEG-2视频解码中按照从左到右、从上到下的顺序对宏块(MB)进行处理,所以MPEG-2视频解码系统中的坐标系x轴指向右,y轴指向下。而在OpenGL ES 2.0(其是Khronos Group在2007年3月份制定的一种业界标准应用程序编程接口,可以大大提高不同消费电子设备的三维图形渲染速度,在嵌入式系统上实现了全面可编程的三维图形)中,坐标系x轴指向右,y轴指向上。
[0025] 图1示出了根据本发明实施例的视频解码方法和系统的逻辑图。如图1所示,该视频解码方法和系统在逻辑上包括变长解码(VLD)、反扫描(IS)、反量化(IQ)、反离散余弦变换(IDCT)、运动补偿(MC)以及色彩空间转换(CSC)处理102~114。除了CSC处理以外的所有处理都遵循MPEG-2标准。具体地,该视频解码方法和系统对需要解码的一帧(或者一场)画面的视频数据进行解码,并将解码后的视频数据发送给显示器以显示该一帧(或者一场)画面。也就是说,该视频解码方法和系统逐画面地对视频数据流进行解码处理。在图1中,VLD和IS处理将在CPU 116中完成,VLD和IS处理后的视频数据被存储在应用存储器120中。应用存储器也可以被称为CPU存储器、用户空间存储器或客户存储器。在VLD和IS处理后的视频数据被从应用存储器传递到图形存储器122后,IQ、IDCT、MC以及CSC处理将在GPU 118中完成(主要由GPU中的片断着色器完成)。在图形术语中,图形存储器通常被称为主机存储器。
[0026] 其中,由于画面类型、运动类型、预测方向、画面DCT编码类型、以及内插类型的不同,MC处理是上述这些处理中最复杂的一项处理。在本发明中,可以使用帧处理结构来对帧画面进行处理,并使用场处理结构来对场画面进行场处理。
[0027] 图2示出了根据本发明实施例的遵循OpenGL ES 2.0的可编程图形流水线。该流水线包括顶点着色器202、图元装配单元204、栅格化单元206、片断着色器208、以及逐片断操作单元210。其中,顶点着色器和片断着色器是可编程的,其他单元是固定功能。由可编程着色器实现的GPU被称为可编程GPU。
[0028] 下面详细描述图2所示的可编程图形流水线的具体处理过程。在图2中,一个画面(该画面可以看作一个矩形块)的坐标(即,该画面的四个顶点的位置坐标和纹理坐标)被发送给顶点缓存(其由顶点着色器202使用)。顶点着色器对该画面的四个顶点逐一进行处理。在OpenGL ES 2.0中,顶点着色器进行的处理包括对顶点坐标进行平移、旋转、透视变换等几何操作,为顶点计算光照值或生成纹理坐标等,但是在本发明中,这些操作都不会使用,唯一要做的就是保持顶点的位置坐标不变。图元装配单元所完成的操作包括裁剪、透视除法、以及视图变换等,这些操作能将该画面的大小设置为期望尺寸。栅格化单元完成图元的栅格化过程,将该画面所对应的两个三角形图元用片段进行填充,这里一个片段包含对应的像素以及附属的信息。在图元装配单元和栅格化单元的处理之后,图形流水线生成将由片断着色器进行处理的片断。在片段着色器的使用过程中,该画面的视频数据将被作为纹理对象发送给纹理存储器(其由片断着色器使用)。片段着色器对每个片段进行IQ、IDCT、MC和CSC处理过程,然后每个片段被送入逐片段操作单元。逐片段操作单元对每个片段进行裁剪框检测、模板缓冲区检测、深度缓冲区检测、混色、以及抖动操作,这些操作能将片段转化为可见的像素,以用于显示。
[0029] 在以上图形流水线的每个阶段,产生的结果被存储到帧缓存中。帧缓存可以是与将要描画的表面或者纹理对象有关的图形缓存。帧缓存中的这些纹理对象也可以被用作纹理存储器中的对象。当然,OpenGL ES 2.0应用程序接口(API)可以控制顶点缓存对象、流水线中的着色器、纹理存储器中的纹理对象、以及帧缓存。
[0030] 由于片断着色器可以更灵活地访问图形存储器并且具有更多的计算资源,所以在根据本发明实施例的视频解码处理中,IQ、IDCT、MC以及CSC处理由片断着色器完成。其中,每个画面将被作为一个矩形进行处理。每个矩形包括两个三角形,这两个三角形都可以被画为三角形扇或者三角形条带。
[0031] 图3示出了由图2所示的片断着色器实现的MC着色器的逻辑图。该MC着色器对需要处理的一个画面中的亮度值(Y)、蓝色色度值(Cb)、以及红色色度值(Cr)分别进行处理。首先,MC着色器302逐画面(帧画面或场画面)地对需要处理的一个画面的IDCT处理结果进行采样,即从该画面的IDCT处理结果中采样该画面中每个像素的亮度/色度残差值(Y’/Cb’/Cr’)(作为纹理304)。其次,MC着色器302从需要处理的一个画面的前向参考帧306采样前向参考帧中每个像素的亮度/色度值,并从后向参考帧308采样需要处理的一个画面的后向参考帧中每个像素的亮度/色度值,并将这些采样值作为需要处理的一个画面中像素的亮度/色度预测值。为了避免对参考方向(包括前向参考、后向参考和双向参考)不同的多个画面分别进行设置,根据本发明实施例的MC着色器同时对前向和后向参考帧进行设置,即使仅存在一个参考方向。最后,MC着色器302将需要处理的一个画面中的每个像素的亮度/色度残差值和亮度/色度预测值叠加在一起,发送到帧缓存310,以用于进行CSC处理。
[0032] 一个画面将被作为包括两个三角形的一个矩形进行处理。该矩形的四个顶点的位置坐标为(-1.0,-1.0)、(1.0,-1.0)、(1.0,1.0)、以及(-1.0,1.0),纹理坐标为(0.0,0.0)、(1.0,0.0)、(1.0,1.0)、以及(0.0,1.0)。这些顶点的位置坐标和纹理坐标由顶点着色器计算得出,并被作为属性发送给MC着色器302。来自顶点着色器的每个片断(即,像素)的纹理坐标v_texCoord被MC着色器302用来对每个像素的亮度/色度残差值和亮度/色度预测值进行采样。需要处理的画面的视窗大小和画面类型被打包为(vp_width,vp_height,picture_structure,0.0)并且被作为常量发送给MC着色器302。vp_width和vp_height分别表示需要处理的画面的视窗宽度和视窗高度,picture_structure表示需要处理的画面的画面类型。例如,当需要处理的画面为帧画面时picture_structure=0,当需要处理的画面为场画面时picture_structure=1。
[0033] 对于需要处理的一个帧画面,其预测模式可能为帧预测模式、双基预测模式、以及场预测模式中的一种。其中,在帧预测模式(该模式只是用于帧画面)下,需要处理的帧画面中的每个宏块具有相对于前向或后向参考帧的一个运动向量,或者具有相对于前向和后向参考帧的两个运动向量;在双基预测模式下,需要处理的帧画面被分成顶场和底场两个场来预测,并且需要处理的帧画面顶场中的每个宏块具有相对于前向参考帧的顶场和底场的两个运动向量,需要处理的帧画面底场中的每个宏块具有相对于前向参考帧的顶场和底场的两个运动向量;在场预测模式下,需要处理的帧画面被分成顶场和底场两个场来预测,并且需要处理的帧画面顶场中的每个宏块具有相对于前向或后向参考帧的顶场的一个运动向量或者具有相对于前向和后向参考帧的顶场的两个运动向量,需要处理的帧画面底场中的每个宏块具有相对于前向或后向参考帧的底场的一个运动向量或者具有相对于前向和后向参考帧的底场的两个运动向量。
[0034] 对于需要处理的一个场画面,其预测模式可能为场预测模式、双基预测模式、以及16×8预测模式中的一种。其中,在场预测模式下,需要处理的场画面中的每个宏块具有相对于前向或后向参考帧的一个运动向量,或者具有相对于前向和后向参考帧的两个运动向量;在双基预测模式下,需要处理的场画面中的每个宏块具有相对于前向参考帧的顶场和底场的两个运动向量;在16×8预测模式下,需要处理的场画面中的每个宏块被分成上半部分和下半部分来预测,并且需要处理的场画面中的每个宏块的上半部分具有相对于前向或后向参考帧的一个运动向量或者具有相对于前向和后向参考帧的两个运动向量,需要处理的帧画面底场中的每个宏块的下半部分具有相对于前向或后向参考帧的一个运动向量或者具有相对于前向和后向参考帧的两个运动向量。
[0035] 在这里需要说明的是,每个宏块包括16×16个像素,并且每个宏块的运动向量即是其中包含的每个像素的运动向量。为了通过一个MC着色器统一对多个场画面或多个帧画面进行MC处理,本发明将用四个运动向量组来描述需要处理的一个画面中包含的所有宏块的运动向量。
[0036] 在需要处理的画面为帧画面的情况下,当该画面的预测模式为帧预测时,该画面中每个宏块相对于前向参考帧的运动向量组成了第一运动向量组(MV1),每个宏块相对于后向参考帧的运动向量组成了第二运动向量组(MV2),第三和第四运动向量组(MV3和MV4)中的所有元素都为零;当该画面的预测模式是场预测模式时,该画面的顶场中的每个宏块相对于前向参考帧和后向参考帧的顶场的运动向量分别组成了第一向量组和第二向量组(MV1和MV2),该画面的底场中的每个宏块相对于前向参考帧和后向参考帧的底场的运动向量分别组成了第三向量组和第四向量组(MV3和MV4);当该画面的预测模式是双基预测模式时,该画面的顶场中的每个宏块相对于前向参考帧的顶场和底场的运动向量分别组成了第一向量组(MV1)和第三向量组(MV3),该画面的底场中的每个宏块相对于前向参考帧的顶场和底场的运动向量分别组成了第二向量组(MV2)和第四向量组(MV4)。需要说明的是,如果需要处理的画面的预测方向是前向,则该画面中每个宏块相对于后向参考帧的运动向量将为零,即MV2或MV4中的所有元素均为零;如果需要处理的画面的预测方向是后向,则该画面中每个宏块相对于前向参考帧的运动向量将为零,即MV1或MV3中的所有元素均为零。
[0037] 在需要处理的画面为场画面的情况下,当该画面的预测模式是场预测模式时,该画面中的每个宏块相对于前向参考帧和后向参考帧的运动向量分别组成了第一向量组(MV1)和第二向量组(MV2);当该画面的预测模式是双基预测模式时,该画面中的每个宏块相对于前向参考帧的顶场和底场的运动向量分别组成第一向量组(MV1)和第二向量组(MV2);当该画面的预测模式是16×8预测模式时,该画面中的每个宏块的上半部分相对于前向参考帧和后向参考帧的运动向量分别组成了第一向量组(MV1)和第二向量组(MV2),且该画面中的每个宏块的下半部分相对于前向参考帧和后向参考帧的运动向量分别组成了第三向量组(MV3)和第四向量组(MV4)。同样,如果需要处理的画面的预测方向是前向,则该画面中每个宏块相对于后向参考帧的运动向量将为零,即MV2或MV4中的每个元素均为零;如果需要处理的画面的预测方向是后向,则该画面中每个宏块相对于前向参考帧的运动向量将为零,即MV1或MV3中的每个元素均为零。
[0038] 在本发明的实施例中,由于RGBA(红-绿-蓝-透明度)通道中的每个通道具有8个比特,并且这8比特数据没有正负之分(即,都为正),所以需要将一个宏块的前向或后向运动向量打包为这样的形式:(运动向量的x分量的绝对值,运动向量的x分量的符号标记,运动向量的y分量的绝对值,运动向量的y分量的符号标记)。其中,当运动向量的x和y分量为负时,运动向量的x和y分量的符号标记均为1.0,当运动向量的x和y分量为正时,运动向量的x和y分量的符号标记均为0.0。
[0039] 另外,对于需要处理的一个画面,该画面中每个宏块的运动补偿标记MC_flag、预测方向标记ref_direct、DCT编码类型标记dct_type、以及显示场选择标记ffs被打包为(MC_flag,ref_direct,dct_type,ffs),并且被作为纹理发送给MC着色器302。另外,每个宏块的参考场选择标记mvfs也被作为纹理利用RGBA通道发送到MC着色器302。对于每个宏块,这些纹理被与该宏块相关联地打包在一起。这里需要说明的是,一个画面中的宏块可以具有不同的运动补偿方式、不同的DCT编码类型、以及不同的显示场选择,但是一个画面中的宏块一定具有相同的预测方向。DCT编码类型只存在于帧画面中,而不存在于场画面中。
[0040] 在本发明的实施例中,当一个宏块是帧内编码宏块时,该宏块的运动补偿标记MC_flag=0;当一个宏块不是帧内编码宏块时,该宏块的运动补偿标记MC_flag=1。当一个宏块的预测方向为前向时,该宏块的预测方向标记ref_direct=0;当一个宏块的预测方向为后向时,该宏块的预测方向标记ref_direct=1;以及当一个宏块的预测方向为双向时,该宏块的预测方向标记ref_direct=2。当一个宏块的DCT编码类型为帧DCT编码时,该宏块的DCT编码类型标记dct_type=0;当一个宏块的DCT编码类型为场DCT编码时,该宏块的DCT编码类型标记dct_type=1。当一个宏块的显示场为顶场时,该宏块的显示场选择标记ffs=0;当一个宏块的显示场为底场时,该宏块的显示场选择标记ffs=1。
[0041] 图4A和图4B分别示出了帧DCT编码和场DCT编码的示意图。如图4A中所示,在需要处理的帧画面中的一个像素所在宏块的DCT编码类型为帧DCT编码的情况下,可以从该需要处理的帧画面中获取该像素的亮度/色度残差值,并将所获取的亮度/色度残差值作为将要显示的画面中的相同位置的像素的亮度/色度残差值。如图4B所示,在需要处理的帧画面中的一个像素所在宏块的DCT编码类型为场DCT编码的情况下,可以从该需要处理的帧画面中获取该像素的亮度/色度残差值,并将所获取的亮度/色度残差值作为将要显示的画面中的相对于该像素的纹理坐标存在一定偏移的位置的像素的亮度/色度残差值。
[0042] 具体地,假设需要处理的画面中的像素A的纹理坐标为v_texCoord,可以将需要处理的画面中的相对于像素A存在一定偏移的、纹理坐标为texRef的像素B的亮度/色度残差值作为将要显示的画面中与像素A的纹理坐标相同的像素C的亮度/色度残差值:
[0043] texRef.s=v_texCoord.s (1)[0044] texRef.t=startTexCoord.t+(dety+2.0*fraction*8.0)*texDet.t (2)[0045] fraction=fract((gl_FragCoord-0.5)/2.0).y (3)[0046] 其中,v_texCoord.s表示需要处理的画面中的像素A的纹理坐标的s分量,texRef.s表示需要处理的画面中的像素B的纹理坐标的s分量,texRef.t表示需要处理的画面中的像素B的纹理坐标的t分量,startTexCoord.t表示需要处理的画面中的像素A所在宏块的最左下侧像素的纹理坐标的t分量,dety表示需要处理的画面中的像素A与像素A所在宏块的最下侧像素行之间的距离,texDet.t表示需要处理的画面中的像素A与像素A所在宏块的最左下侧像素之间的纹理坐标距离的t分量,gl_FragCoord表示需要处理的画面中的像素A的位置坐标,fract()表示求余函数,fraction表示fract((gl_FragCoord-0.5)/2.0)的y分量。注意,gl_FragCoord通常取诸如(0.5,0.5)、(0.5,1.5)、(1.5,0.5)、(1.5,2.5)之类的值,所以fraction通常取0.0或0.5。对于帧DCT编码类型,可以将纹理坐标偏移看作0。
[0047] 图5示出了根据本发明实施例的视频解码系统的逻辑框图。如图5所示,该视频解码系统包括中央处理单元502和可编程图形处理单元504。其中,可编程图形处理单元504进一步包括画面类型判断单元5042、编码类型判断单元5044、残差值获取单元5046、预测模式判断单元5048、预测方向判断单元5050、运动向量获取单元5052、运动向量计算单元5054、预测值计算单元5056、以及偏移量计算单元5058。
[0048] 对于一个需要处理的画面(为了描述方便,这里记为画面D),中央处理单元502通过对画面D的编码后的视频数据进行变长解码和反扫描,获取画面D的变长解码和反扫描后的视频数据;可编程图形处理单元504通过对画面D的变长解码和反扫描后的视频数据进行反量化、反离散余弦变换、运动补偿以及色彩空间转换,获取画面D的完成解码后的视频数据。其中,画面D的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据包含有画面D中的每个像素的亮度残差值和色度残差值,可编程图形处理单元504可以通过根据等式(4)对画面D中的任意一个像素(为了描述方便,这里记为像素P)的亮度/色度残差值进行运动补偿来获取像素P的亮度/色度值:
[0049] sum=residual+(1.0-MC_flag)*128.0+MC_flag*prediction(4)
[0050] 其中,sum表示像素P的亮度/色度值,residual表示像素P的亮度/色度残差值,prediction表示像素P的亮度/色度预测值,MC_flag是像素P所在宏块的运动补偿标记,当像素P所在宏块为帧内编码宏块时MC_flag=0,当像素P所在宏块不是帧内编码宏块时MC_flag=1。
[0051] 在可编程图形处理单元获取像素P的亮度/色度残差值的过程中,画面类型判断单元5042根据画面D的画面类型标记判断画面D是帧画面还是场画面。当画面D是场画面时,残差值获取单元5046根据像素P的纹理坐标从画面D的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据中获取像素P的亮度/色度残差值。当画面D是帧画面时,编码类型判断单元5044根据像素P所在宏块的离散余弦变换编码类型标记判断像素P所在宏块的离散余弦变换编码类型是场离散余弦变换编码还是帧离散余弦变换编码。如果像素P所在宏块的离散余弦变换编码类型为帧离散余弦变换编码,则残差值获取单元5046根据像素P的纹理坐标从画面D的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据中获取像素P的亮度/色度残差值,否则残差值获取单元5046根据等式(5)至(7)计算像素P的偏移后的纹理坐标,并根据像素P的偏移后的纹理坐标从画面D的变长解码、反扫描、反量化、以及反离散余弦变换后的视频数据中获取像素P的亮度/色度残差值。
[0052] texRef.s=v_texCoord.s (5)
[0053] texRef.t=startTexCoord.t+(dety+2.0*fraction*8.0)*texDet.t (6)[0054] fraction=fract((gl_FragCoord-0.5)/2.0).y (7)[0055] 其中,v_texCoord.s表示像素P的纹理坐标的s分量,texRef.s表示像素P的偏移后的纹理坐标的s分量,texRef.t表示像素P的偏移后的纹理坐标的t分量,startTexCoord.t表示像素P所在宏块的最左下侧像素的纹理坐标的t分量,dety表示像素P与像素P所在宏块的最下侧像素行之间的距离,texDet.t表示像素P与像素P所在宏块的最左下侧像素之间的纹理坐标距离的t分量,gl_FragCoord表示像素P的位置坐标,fract()表示求余函数,fraction表示fract((gl_FragCoord-0.5)/2.0)的y分量。
[0056] 在可编程图形处理单元获取像素P的亮度/色度预测值的过程中或者之前,预测模式判断单元5048根据画面D的预测模式标记判断画面D的预测模式是帧预测、场预测、双基预测还是16×8预测,预测方向判断单元5050根据画面D的预测方向标记判断画面D的预测方向是前向、后向还是双向。
[0057] 当画面D的画面类型是帧画面、预测模式是帧预测模式、且预测方向为前向/后向时,运动向量获取单元5052根据像素P的纹理坐标从第一向量组(MV1)/第二向量组(MV2)中获取像素P相对于前向参考帧/后向参考帧的运动向量;运动向量计算单元5054根据等式(8)和(9)计算像素P相对于前向参考帧/后向参考帧的运动向量的整数部分ixy和半整数部分hxy;预测值计算单元5056根据等式(10)至(14)计算像素P的亮度/色度预测值。
[0058] ixy=vec2(floor(mv1.x/2.0),floor(mv1.y/2.0)) (8)[0059] hxy=vec2(mv1.x/2.0-ixy.x,mv1.y/2.0-ixy.y) (9)[0060] 其中,mv1.x和mv1.y分别表示像素P相对于前向参考帧/后向参考帧的运动向量的x分量和y分量的绝对值,ixy.x和ixy.y分别表示像素P相对于前向参考帧/后向参考帧的运动向量的整数部分的x分量和y分量,floor()表示向下取整函数。tex0至tex3是用纹理坐标表示的像素P周围的四个像素相对于前向参考帧/后向参考帧的运动向量,texture2D(s_reference,tex0),texture2D(s_reference,tex1),texture2D(s_reference,tex2),texture2D(s_reference,tex3)分别是根据tex0至tex3获取的位于前向参考帧/后向参考帧上的参考像素的亮度/色度值,vp_width是画面D的视窗宽度,vp_height是画面D的视窗高度,texShift.x和texShift.y均为0。
[0061] prediction=((texture2D(s_reference,tex0)+
[0062] hxy.x*texture2D(s_reference,tex1)+hxy.y*
[0063] (s_reference,tex2)+hxy.x*hxy.y* (10)
[0064] texture2D(s_reference,tex3))+hxy.x+hxy.y)
[0065] /(1.0+hxy.x+hxy.y+hxy.x*hxy.y)
[0066]
[0067] tex1=tex0+vec2(1.0/vp_width,0.0) (12)
[0068] tex2=tex0+vec2(0.0,-1.0/vp_height) (13)
[0069] tex3=tex0+vec2(1.0/vp_width,-1.0/vp_height) (14)。
[0070] 当画面D的画面类型是帧画面、预测模式是场预测模式、且预测方向为前向/后向时以及当画面D的画面类型是场画面、预测模式为场预测模式或者16×8预测模式、且预测方向为前向/后向时,运动向量获取单元5052根据像素P的纹理坐标从相应的向量组中获取像素P相对于前向参考帧/后向参考帧的运动向量;偏移量计算单元5058根据像素P所在宏块的参考场选择标记判断是否需要对像素P相对于前向参考帧/后向参考帧的运动向量进行偏移,如果需要,在像素P处于画面D的顶场中的情况下根据等式(15)计算偏移量,在像素P处于画面D的底场中的情况下根据等式(16)计算偏移量texShift,其中v_texCoord.s和v_texCoord.t分别表示像素P的纹理坐标的s分量和t分量,vp_height是画面D的视窗高度:
[0071] texShift=vec2(v_texCoord.s,v_texCoord.t-1/vp_height)(15)
[0072] texShift=vec2(v_texCoord.s,v_texCoord.t+1/vp_height)(16)
[0073] 接着,运动向量计算单元5054根据等式(17)和(18)计算像素P相对于前向参考帧/后向参考帧的运动向量的整数部分ixy和半整数部分hxy,其中mv1.x和mv1.y分别表示像素P相对于前向参考帧/后向参考帧的运动向量的x分量和y分量的绝对值,ixy.x和ixy.y分别表示像素P相对于前向参考帧/后向参考帧的运动向量的整数部分的x分量和y分量,floor()表示向下取整函数:
[0074] ixy=vec2(floor(mv1.x/2.0),floor(mv1.y/4.0)) (17)[0075] hxy=vec2(mv1.x/2.0-ixy.x,mv1.y/4.0-ixy.y) (18)[0076] 然后,预测值计算单元5056根据等式(10)至(11)以及(19)至(21)计算像素P的亮度/色度预测值,其中,tex0至tex3是用纹理坐标表示的像素P周围的四个像素相对于前向参考帧/后向参考帧的运动向量,texture2D(s_reference,tex0),texture2D(s_reference,tex1),texture2D(s_reference,tex2),texture2D(s_reference,tex3)分别是根据tex0至tex3获取的位于前向参考帧/后向参考帧上的参考像素的亮度/色度值,vp_width是画面D的视窗宽度,texShift.x和texShift.y表示偏移量的x和y分量:
[0077] prediction=((texture2D(s_reference,tex0)+
[0078] hxy.x*texture2D(s_reference,tex1)+hxy.y*
[0079] (s_reference,tex2)+hxy.x*hxy.y* (10)
[0080] texture2D(s_reference,tex3))+hxy.x+hxy.y)
[0081] /(1.0+hxy.x+hxy.y+hxy.x*hxy.y)
[0082]
[0083] tex1=tex0+vec2(1.0/vp_width,0.0) (19)
[0084] tex2=tex0+vec2(0.0,-2.0/vp_height) (20)
[0085] tex3=tex0+vec2(1.0/vp_width,-2.0/vp_height) (21)
[0086] 其中,当画面D的画面类型为帧画面、预测模式为场预测模式时,可以根据等式(22)和(23)得出像素P相对于前向和后向参考帧的运动向量mv1和mv2:
[0087] mv1=2.0*fraction_2*texture2D(s_textMv1,v_textCoord)+ (22)[0088] (1.0-2.0*fraction_2)*texture2D(s_textMv3,v_texCoord)
[0089] mv2=2.0*fraction_2*texture2D(s_textMv2,v_textCoord)+ (23)[0090] (1.0-2.0*fraction_2)*texture2D(s_textMv4,v_texCoord)
[0091] 当画面D的预测方向为双向预测时,可编程图形处理单元502将根据像素P相对于前向参考帧的运动向量获取的像素P的亮度/色度预测值和根据像素P相对于后向参考帧的运动向量获取的像素P的亮度/色度预测值的平均值作为像素P的最终亮度/色度预测值。
[0092] 另外,当画面D的画面类型是帧画面、预测模式是双基预测模式时以及当画面D的画面类型是场画面、预测模式为双基预测模式时,运动向量获取单元5052根据像素P的纹理坐标从相应的向量组中获取像素P相对于前向参考帧的运动向量;偏移量计算单元5058根据像素P所在宏块的参考场选择标记判断是否需要对像素P相对于前向参考帧/后向参考帧的运动向量进行偏移,如果需要,在像素P处于画面D的顶场中的情况下根据等式(15)计算偏移量,在像素P处于画面D的底场中的情况下根据等式(16)计算偏移量texShift;运动向量计算单元5054根据等式(17)和(18)计算像素P相对于前向参考帧/后向参考帧的运动向量的整数部分ixy和半整数部分hxy;预测值计算单元5056根据等式(10)至(11)以及(19)至(21)计算像素P的亮度/色度预测值。
[0093] 图6示出了在场画面中对像素的亮度/色度残差值进行采样的示意图。在这种情况下,一个帧画面包括一个顶场602和一个底场604。MC着色器逐场进行处理,首先处理顶场然后处理底场,或者首先处理底场然后处理顶场。当处理顶场602时,对应于顶场的将要显示的画面中的条带606被使用,并且对应于底场的条带608被略过。当处理底场604时,对应于底场的将要显示的画面中的条带608被使用,并且对应于顶场的条带606被略过。所以,需要标记来示出正在处理顶场还是底场,并且相应地选择将要显示的画面中的正确的场。这个标记是msMbParaInfo参数中的ffs(ffs=0表示顶场,ffs=1表示底场)。
[0094] 使用下面的方法来计算正在对将要显示的画面中的顶场还是底场进行渲染。
[0095] Fraction_3=fract((gl_FragCoord-0.5)/2.0).y
[0096] 其中,gl_FragCoord是当前像素的位置坐标,fract()是求余函数,并且fract().y是获取向量中的y分量。
[0097] 图7示出了专用于帧画面的MC着色器的结构。输入着色器的是当前像素的纹理坐标v_texCoord,用于无运动补偿模式下的偏移值计算、以及有运动补偿模式下的运动向量值(mv0,mv1)的采样。当运动补偿预测方向为前向或者双向时,开关0合上;否则断开。当运动补偿预测方向为后向或者双向时,开关1合上;否则断开。v_texCoord和偏移值或者运动向量值(mv0,mv1)相加,得到一个新的纹理坐标,用于采样残差702、前向预测值704以及后向预测值706。预测值在半像素预测精度下需要进行内插712,然后和残差值相加,得到的结果输出到渲染目标帧缓存。其中,计算偏移值、mv0和mv1的动作可以统一为一个模块708;而采样残差、采样前向和后向预测值也可以统一为一个模块710;并且,整像素和半像素的插值也可以统一为一个模块712。
[0098] 图8示出了专用于场画面的MC着色器的结构。输入着色器的是当前像素的纹理坐标v_texCoord,用于无运动补偿模式下的残差采样、以及有运动补偿模式下的运动向量值(mv0,mv1)的采样。当渲染目标帧缓存中当前像素位于顶场,而当前处理画面为底场,或者当渲染目标帧缓存中当前像素位于底场,而当前处理画面为顶场,开关0合上,表示渲染目标帧缓存中当前像素的值不做处理802,同时开关1断开;而当顶场或底场匹配一致时,开关0断开,同时开关1合上。当运动补偿预测方向为前向或者双向时,开关2合上;否则断开。当运动补偿预测方向为后向或者双向时,开关3合上;否则断开。v_texCoord和偏移值或者运动向量值(mv0,mv1)相加,得到一个新的纹理坐标,用于采样残差804、前向预测值806以及后向预测值808。预测值在半像素预测精度下需要进行内插814,然后和残差值相加,得到的结果输出到帧缓冲。其中,计算mv0和mv1的动作可以统一为一个模块810;而渲染像素、采样残差、采样前向和后向预测值也可以统一为一个模块812;并且,整像素和半像素的插值也可以统一为一个模块814。
[0099] 图9示出了MC着色器处理器的硬件示意图。如图9所示,存在并行的多个MC着色器处理器,分别用于一个画面中的每个像素。在每个MC着色器处理器中,从纹理存储器获取运动向量、亮度/色度残差和其他参数,并且从具有纹理目标的帧缓存获取亮度或色度预测值。高速缓存被设置为增加访问速度。MC着色器处理器计算纹理坐标、采样亮度/色度残差值、采样亮度/色度预测值、进行内插、并且将亮度/色度残差值与亮度/色度预测值相加。所采样的亮度/色度残差值和内插后的亮度/色度预测值被存储在寄存器中,用于快速加法运算。
[0100] 本发明将MPEG-2中进行运动补偿时各种图像格式、运动模式、以及插值方法进行统一,使用一个着色器来完成,避免了传统方法中对着色器进行切换的额外开销。另外,本发明在很多方面使用一个计算式来包含两种或者更多的分支情况,避免的在着色器中条件判断的使用,提高了并行性。
[0101] 以上已经参考本发明的具体实施例来描述了本发明,但是本领域技术人员均了解,可以对这些具体实施例进行各种修改、组合和变更,而不会脱离由所附权利要求或其等同物限定的本发明的精神和范围。
[0102] 根据需要可以用硬件或软件来执行步骤。注意,在不脱离本发明范围的前提下,可向本说明书中给出的流程图添加步骤、从中去除步骤或修改其中的步骤。一般来说,流程图只是用来指示用于实现功能的基本操作的一种可能的序列。
[0103] 本发明的实施例可利用编程的通用数字计算机、利用专用集成电路、可编程逻辑器件、现场可编程门阵列、光的、化学的、生物的、量子的或纳米工程的系统、组件和机构来实现。一般来说,本发明的功能可由本领域已知的任何手段来实现。可以使用分布式或联网系统、组件和电路。数据的通信或传送可以是有线的、无线的或者通过任何其他手段。
[0104] 还将意识到,根据特定应用的需要,附图中示出的要素中的一个或多个可以按更分离或更集成的方式来实现,或者甚至在某些情况下被去除或被停用。实现可存储在机器可读介质中的程序或代码以允许计算机执行上述任何方法,也在本发明的精神和范围之内。
[0105] 此外,附图中的任何信号箭头应当被认为仅是示例性的,而不是限制性的,除非另有具体指示。当术语被预见为使分离或组合的能力不清楚时,组件或者步骤的组合也将被认为是已经记载了。