一种面向数字KVM切换器的屏幕视频压缩方法与流程

文档序号:15864791发布日期:2018-11-07 20:20阅读:616来源:国知局
一种面向数字KVM切换器的屏幕视频压缩方法与流程
本发明涉及数字视频信号处理领域,具体涉及一种面向数字KVM切换器的屏幕视频压缩方法。
背景技术
:数字KVM系统是基于IP网络的多计算机切换管理系统,能够实现使用一套键盘(Keyboard)、显示器(Video)、鼠标(Mouse)来远程控制多台计算机,主要包括数字KVM切换器和主控平台。数字KVM切换器对计算机显示器的输出信号进行数字化和网络传输,以便在主控平台的客户端中显示屏幕视频。此外,数字KVM切换器还接收来自主控平台的键盘和鼠标信息,并将其转换为本地计算机的输入信号,以实现主控平台对本地计算机的远程控制。键盘和鼠标由于操作频率较低,其信号经数字化后的数据量也较小,可以无需压缩直接传送,占用的网络带宽较少。显示器由于输出的屏幕视频的分辨率和帧率都较高,导致经数字化后的视频数据量巨大,无法直接传送。因此,数字KVM切换器只有对显示器输出的屏幕视频进行高效的压缩,才能在有限的网络带宽下将屏幕视频数据通过网络实时传输到远程的主控平台。数字KVM切换器采集的屏幕视频场景主要包括操作系统场景、应用软件场景和网页场景等,屏幕视频的分辨率包括从640×350到1920×1200的典型分辨率。在计算机系统中,输出的显示视频采用RGB色度空间,即图像中的每个像素包含一个R分量、一个G分量和一个B分量,每个分量通常用8比特表示,取值范围为0~255。数字KVM系统输出的屏幕视频虽然内容丰富多样,但存在很强的时空相关性,可以采用视频压缩的方法对其进行压缩处理。同时KVM的屏幕视频与摄像机拍摄的普通自然视频又存在明显差异,它包含一些由计算机生成的图形图像,人们对这些画面的清晰度要求非常高,很容易察觉画面的损失。因此,数字KVM切换器对屏幕视频既要进行高效压缩,同时还要保持较好的视频图像质量。自上世纪90年代以来,国际电信联盟(ITU)和国际标准化组织(ISO)推出了一系列视频压缩标准,包括H.261、MPEG-1、H.262/MPEG-2、H.263、MPEG-4、H.264/AVC和H.265/HEVC。目前主流的视频编码标准是ITU和ISO在2003年发布的H.264/AVC,最新的视频编码标准是ITU和ISO在2013年发布的H.265/HEVC。上述视频编码标准主要针对摄像机采集的自然视频场景进行压缩,主要应用在视频监控、视频会议、数字电视和数码相机等领域,且均采用YUV色度空间。YUV色度空间的包括一个亮度信号Y和两个色度信号U、V,可以通过RGB色度空间转换得到(见视频领域经典英文书籍“VideoDemystified:AHandbookfortheDigitalEngineer,FifthEdition”,KeithJack,2007)。在YUV444格式的视频中,Y、U和V三个分量的抽样率相同,每个像素都包含三个分量数据,经过8比特量化之后,未经压缩的每个像素占用3个字节。在YUV420格式的视频中,每个像素都有一个Y分量数据,每2×2像素方阵有一个U分量数据和一个V分量数据,即U、V分量在水平方向和竖直方向上都进行二分之一抽取。为了提高视频压缩效率,并考虑到人眼对U、V分量的分辨率低的特征,这些视频压缩标准主要对YUV420格式进行压缩。屏幕视频经过RGB到YUV的色度空间转换之后,可以采用这些压缩标准进行编码压缩,但是由于这些压缩标准采用预测加变换加熵编码的混合编码框架,整体计算复杂度很大,会显著增加数字KVM切换器的实现成本和计算延时,降低显示画面的响应速度。此外,这些压缩标准未考虑屏幕视频的特征,直接应用将会引入容易被用户察觉的视频质量损失。数字KVM切换器的视频压缩技术不仅要求降低视频码流的数据量、保持输出视频码流的平稳,以提高主控平台显示画面的响应速度,还要求压缩算法本身的计算复杂度不能过高,以降低算法实现成本。专利号为03816346.2的中国专利(专利名:视频压缩系统)利用计算机屏幕上的冗余以及用户可接受的视频损失来进行视频压缩。该专利的压缩方法虽然计算复杂度较低,但它基于RGB色度空间进行像素级的数据压缩,采用字节对齐的固定码流结构,整体压缩效率不高,尤其是对渐变纹理和复杂纹理的屏幕视频场景压缩效率整体较低。另外,该专利的压缩方法在视频场景从简单纹理画面切换到复杂纹理画面的过程中产生的视频码流瞬时数据量过大,会造成网络传输拥堵,严重影响主控平台显示画面的响应速度。专利号为98120137.7的中国专利(专利名:电脑键盘、鼠标及VGA屏幕信号的传输方法)利用VGA屏幕的三种视频信号及外加传输信号线,将VGA屏幕信号传输至远方主控电脑,令使用者可以正常地操作目标电脑。该专利采用特定的传输线及传输协议传送屏幕视频信号,不能在通用的数字网络上进行传输,其使用距离受到限制。专利号为200610080828.8的中国专利(专利名:一种视频压缩方法)通过控制量化系数的变化来实现KVM视频码流的平稳输出,提高了KVM显示画面的响应速度。但该专利的实施需要在已有的视频标准基础上进行,整体计算复杂度比较高,会明显增加视频压缩的处理延时和实现成本。此外,该专利的视频压缩方法由于需要对每帧进行画面切换检测以及对每个宏块都要计算量化参数,进一步增加了其计算复杂度。技术实现要素:为了克服数字KVM系统中屏幕视频数据的整体传输数据量巨大以及复杂视频场景下峰值传输数据量过大的问题,本发明提供了一种面向数字KVM器的屏幕视频压缩方法,在有限的计算复杂度下对屏幕视频数据进行压缩,有效地降低屏幕视频码流的整体数据量和峰值数据量,并保持良好的重建视频质量。一种面向数字KVM切换器的屏幕视频压缩方法,包括以下步骤:(1)输入一帧屏幕视频数据;(2)将当前视频帧的帧头信息写入码流;(3)从当前视频帧中获取一个未编码色度分量子帧作为当前色度分量子帧,对该子帧进行数据块划分,并计算数据块的总个数;(4)从当前色度分量子帧中获取一个未编码数据块作为当前块;(5)计算当前块在各个候选编码模式下的编码信息和重建数据,并选取最终编码模式和重建数据;(6)根据当前块的最终编码模式将当前块的编码信息写入码流;(7)重复步骤(4)到(6),完成当前色度分量子帧中所有数据块的编码和重建;(8)对当前视频帧已写入的码流进行比特填充以实现字节对齐;(9)重复步骤(3)到(8),完成当前视频帧中所有色度分量子帧的编码和重建;(10)对当前视频帧产生的码流进行帧同步头转义处理,输出最终的压缩码流。在步骤(1)中,所述的一帧屏幕视频数据是指KVM切换器采集的一帧采用YUV色度空间的屏幕视频图像,用于后续步骤的视频压缩。该帧图像的像素分辨率为H0×V0,其中H0为水平分辨率,即水平方向上的像素点个数,V0为竖直分辨率,即竖直方向上的像素点个数。本发明支持的屏幕视频数据的具体色度空间格式为YUV420、YUV422和YUV444中的一种,Y、U和V每个分量数据都用8比特表示,每个屏幕视频帧被分为三个色度分量子帧:所有Y分量数据组成H1×V1的二维数据阵列,记为Y分量子帧,其中H1表示Y分量子帧在水平方向上的数据个数,V1表示Y分量子帧在竖直方向上的数据个数;所有U分量数据组成H2×V2的二维数据阵列,记为U分量子帧,其中H2表示U分量子帧在水平方向上的数据个数,V2表示U分量子帧在竖直方向上的数据个数;所有V分量数据组成H3×V3的二维数据阵列,记为V分量子帧,其中H3表示V分量子帧在水平方向上的数据个数,V3表示V分量子帧在竖直方向上的数据个数。在这三种YUV色度空间格式中,Y分量子帧的水平方向数据个数H1等于当前帧图像的水平分辨率H0,Y分量子帧的竖直方向数据个数V1等于当前帧图像的竖直分辨率V0;U分量子帧的水平方向数据个数H2和竖直方向数据个数V2、V分量子帧的水平方向数据个数H3和竖直方向数据个数V3,与H0、V0之间的数值关系见表1。表1在步骤(2)中,所述的帧头信息包括:1)4个字节表示的帧同步头标识SyncF,前三个字节值为0xFF,第四个字节值为0xFE,用于标识一帧码流的开始。SyncF须从字节对齐处写入码流,并且须按字节顺序传送到解码端,每个字节的高比特位先传送,形成4个字节表示(32个比特)的比特流。SyncF写入码流的前三个字节的值(均为0xFF)与最后字节的值(0xFE)不同,这使先于SyncF写入码流的字节(属于前一帧码流)为任何数值都不会与SyncF的前三个字节组成SyncF,可以避免解码端对帧头起始位置的定位错误。2)6个比特表示的当前帧屏幕视频图像的分辨率标识PicR,其取值范围为1到24,分别表示数字KVM系统中的24种典型分辨率,每个取值对应的屏幕视频图像水平分辨率H0和竖直分辨率V0见表2,预留0、25到63共40个数值。写入码流的PicR具体值由实际输入屏幕视频图像的分辨率对照表2获得。表2PicR水平分辨率H0竖直分辨率V01640350264040036404804720400576857668006007848480810247689115286410128072011128076812128080013128096014128010241513607681613667681714409001814001050191600900201600102421160012002216801050231920108024192012003)3个比特表示的色度空间格式标识ColorF,表征当前视频帧具体采用的色度空间格式,值为0b000表示采用YUV420格式,值为0b001表示采用YUV422格式,值为0b010表示采用YUV444格式,预留0b011到0b111。当前帧采用YUV422格式的U和V分量数据个数为YUV444格式的一半;采用YUV420格式的U和V分量数据个数为YUV422格式的一半,仅为YUV444格式的四分之一。由于人眼对U和V分量数据的分辨率较低,选用YUV420格式具有非常接近YUV422和YUV444格式的色度主观视频质量,选用YUV422格式具有更为接近YUV444格式的色度主观视频质量。因此,ColorF的具体取值可根据数字KVM系统对色度视频质量和压缩比的需求来灵活选取,对色度视频质量要求最高则可选择YUV444格式,对压缩比要求最高则可选择YUV420格式,对色度视频质量和压缩比都要求较高,则可选择YUV422格式。4)4个比特表示的数据块划分模式标识BPMODE,表征对每个色度分量子帧进行数据块划分的基本单位hp×vp,即水平方向基本数据个数hp和竖直方向基本数据个数vp,BPMODE值为0b0000表示采用4×4划分模式,值为0b0001表示采用8×4划分模式,值为0b0010表示采用4×8划分模式,值为0b0011表示采用8×8划分模式,预留从0b0100到0b1111的12个数值。4×4划分模式的hp等于4、vp等于4;8×4划分模式的hp等于8、vp等于4;4×8划分模式的hp等于4、vp等于8;8×8划分模式的hp等于8、vp等于8。采用较小的块划分方式可以提高压缩效率,但由于块个数增加,也会增加额外的计算量。因此,数字KVM系统可以根据对计算量和压缩比的需求来选择BPMODE的具体值,如果要求计算量尽量小,则可将BPMODE的值设为0b0011,如果要求压缩比尽量大,则可将BPMODE的值设为0b0000,其它情况下由于BPMODE设为0b0001或0b0010具有相同级别的计算量,可根据典型应用场景下的压缩比大小来选择具体值。5)1个比特表示的帧间预测使能标识TPEN,其值为0b0表示当前帧的编码不允许使用帧间预测,即不能使用前一编码帧的重建数据来预测当前帧数据,其值为0b1表示当前帧的编码允许使用帧间预测,即允许使用前一编码帧的重建数据来预测当前帧数据。TPEN值为0b1可以有效提高当前帧的压缩效率,但也使当前帧的编码码流具有时域依赖性。若当前帧的码流在传送过程中丢失或出现误码,将会使重建错误在时域方向上扩散,直至出现TPEN值为0b0的帧为止。本发明中TPEN的设置具有以下限制:(a)当前帧为第1个编码帧,则TPEN只能设置为0b0。(b)当前帧视频图像的分辨率标识PicR与前一帧不同,则TPEN只能设置为0b0。(c)当前帧的色度空间格式标识ColorF与前一帧不同,则TPEN只能设置为0b0。在其它情况下,当前帧中TPEN的取值可根据数字KVM系统对压缩比的应用需求以及误码率情况来设置。另外,不管TPEN的值如何设置,本发明都允许当前帧进行空间预测,即使用当前帧中已编码数据的重建数据来预测当前帧中的待编码数据。6)2个比特表示的帧级图像质量模式PicQ,表征当前帧编码重建图像的主观质量等级,其值为0b00表示无损模式,值为0b01表示有损清晰模式,值为0b10表示有损均衡模式,预留0b11;若当前帧采用无损模式,则其帧级量化步长QStep值为1;若当前帧采用有损清晰模式,则其帧级量化步长QStep值为2;若当前帧采用有损均衡模式,则其帧级量化步长为QStep值为4。QStep的值越大,量化误差越大,有损均衡模式的QStep是有损清晰模式的两倍,重建图像清晰度就比有损清晰模式要差些。QStep将用在后续步骤中对预测残差进行量化和反量化,为了提升预测残差量化和反量化的计算效率,本发明的QStep值都为2的幂次,这样量化和反量化过程中的除法和乘法运算都转换为移位运算。本发明中当前帧帧级量化移位位数shift等于QStep按2取对数得到的整数。当QStep值为1,则shift值为0;当QStep值为2,则shift值为1;当QStep值为4,则shift值为2;本发明通过使用shift进行移位来实现对预测残差进行量化和反量化。为了保证视频图像的基本质量,本发明中QStep的最大值只到4。7)16个比特表示的帧序号FrameN:第一个编码帧的FrameN值设为0,后续每帧的FrameN等于其前一帧的FrameN加1,当FrameN值大于65535,则将其重新设为0。为了便于比特位数和数值的描述,本发明中0b为二进制方式数值表示的前缀,其后的数字为二进制数值,写入码流的编码信息数值同样可用其它进制方式表示,例如十进制和十六进制,不能以仅采用二进制方式表示来限定本发明的保护范围。在步骤(2)中,帧头信息按如下顺序写入码流:(2-1)从字节对齐处写入4个字节的帧同步标识SyncF;(2-2)写入当前帧屏幕视频图像的分辨率标识PicR;(2-3)写入色度空间格式标识ColorF;(2-4)写入数据块划分模式标识BPMODE;(2-5)写入帧间预测使能标识TPEN;(2-6)写入帧级图像质量模式PicQ;(2-7)写入当前帧的帧序号FrameN。进一步的,在步骤(2)中,每个数值都是其高比特位先写入码流(即先经过网络传送到解码端),低比特位后写入码流;所有预留数值在编码过程中都不会使用,既可以提高解码端对帧头码流的检错能力,同时也为本发明的后续语义扩展提供空间。在步骤(3)中,具体步骤如下:(3-1)首先按Y分量子帧、U分量子帧、V分量子帧的顺序获取一个未编码的色度分量子帧作为当前色度分量子帧,Hk和Vk分别为当前色度分量子帧在水平方向和竖直方向上的数据个数,k为当前色度分量子帧的索引,k值为1表示Y分量子帧,k值为2表示U分量子帧,k值为3表示V分量子帧;(3-2)接着根据步骤(2)中的BPMODE获得数据块划分基本单位hP×vP,hP为水平方向划分的数据个数,vP为竖直方向划分的数据个数;(3-3)然后根据数据块划分基本单位hP×vP按光栅扫描的顺序将当前色度分量子帧划分为多个h×v大小的待编码的二维矩形数据块,h为数据块在水平方向上的数据个数,v为数据块在竖直方向上的数据个数;对于不包含右边界的数据块,h值为步骤(2)中BPMODE对应的hp;对于不包含下边界的数据块,v为步骤(2)中BPMODE对应的vp;对于包含右边界的数据块,若当前色度分量子帧的水平方向数据个数Hk能被hp整除,则h值为hp,否则h值为Hk除hp得到的余数;对于包含下边界的数据块,若当前色度分量子帧的竖直方向数据个数Vk能被vp整除,则v值为vp,否则v值为Vk除vp得到的余数;(3-4)最后按公式(1)计算得到当前色度分量子帧水平方向的数据块个数Hblk,按公式(2)计算得到当前色度分量子帧竖直方向的数据块个数Vblk,按公式(3)计算得到当前色度分量子帧的数据块总个数Nblk。Nblk=Hblk×Vblk(3)在步骤(3)中,所述的光栅扫描的顺序为视频压缩领域常用的从左上角开始从左到右从上到下进行遍历的顺序。在步骤(4)中,按光栅扫描的顺序从当前色度分量子帧中获取一个h×v大小的未编码二维矩形数据块作为当前块。在步骤(5)中,所述的候选编码模式包括:1)帧间对应模式(IC_MODE):本发明中当前块选择IC_MODE作为其有效候选编码模式有两个条件,其中第一个条件为:当前帧已写入码流的帧间预测使能标识TPEN值为0b1,即允许使用前一编码帧的重建数据预测当前帧数据。采用该模式进行编码,当前块的编码信息和重建数据按如下方式计算得到:对于当前块中的每个原始数据P,其预测值PredIC为前一编码帧中相同色度分量子帧且相同空间位置的重建数据,其预测残差DIC按公式(4)计算得到、预测残差符号SignIC按公式(5)计算得到、量化残差QDIC按公式(6)、公式(7)和公式(8)计算得到、重建数据RIC按公式(9)计算得到。DIC=P-PredIC(4)在公式(5)中,SignIC值为0表示预测残差的符号为正,值为1表示预测残差的符号为负。在公式(6)中,QDICTmp为IC_MODE临时量化残差,>>符号表示右移运算,|DIC|表示对DIC取绝对值,|DIC|加上QStep2的一半(即QStep2>>1)是为了对最终量化结果进行四舍五入;为了提高IC_MODE预测残差幅度的量化精度,本发明在公式(6)中使用的减半量化步长QStep2按公式(8)计算得到,若QStep大于1,则QStep2值为帧级量化步长QStep的一半,若QStep等于1,则QStep2值为1;减半移位位数shift2由QStep2按2取对数计算得到,即当QStep2值为1时,shift2的值为0,当QStep2值为2时,shift2的值为1。在公式(7)中,为了提高帧级图像质量为有损均衡模式的情况下静止场景的压缩效率,当QDIC值为1且QStep2值为2时,将QDIC强制置为0,以增加当前块中量化残差为零的个数,提高后续压缩效率,其它情况下QDIC保持不变。在公式(9)中,<<符号表示左移运算,min()为取两个输入数据的较小值函数,max()为取两个输入数据的较大值函数,以确保重建数据在0到255之间,即在8比特表示的范围内。为了避免量化和反量化过程中的除法和乘法运算,本发明在公式(6)的量化运算中用向右移位代替除法,在公式(9)的反量化运算中用向左移位代替乘法。为了使解码端能够按公式(9)重建当前块的每个数据,本发明首先将表示IC_MODE的编码模式标识ModeIDIC编入码流,用2比特表示,其值为0b00,使解码端能够根据编码模式标识获取当前块的编码模式,进而获得PredIC以实现重建。然后根据当前块所有QDIC中的最大值QDICmax按公式(10)计算每个QDIC编入码流的比特位数QDBitsIC。在公式(10)中,当QDICmax值为0,表明当前块所有QDIC值都为0,则无需消耗比特实际编码每个QDIC,本发明将QDBitsIC的值置为0;当QDICmax大于0,则当前块所有QDIC值的范围为[0,QDICmax],每个QDIC至少用个比特表示,为了尽量减少QDIC的编码比特数,本发明将QDBitsIC的值置为最小的接着根据计算得到的QDBitsIC将1比特表示的全零块标识AZFlagIC编入码流:当QDBitsIC值等于0,则将AZFlagIC值置为0b1,表示当前块的QDIC全为零,无须将QDBitsIC编入码流;当QDBitsIC值大于0,则将AZFlagIC值置为0b0,表示当前块存在非零QDIC,须将QDBitsIC编入码流。为了减少编码比特数并考虑到QDBitsIC的常见范围,本发明统一限定只用3比特将QDBitsIC编入码流,QDBitsIC允许的范围为[0,7]。因此,本发明中当前块选择IC_MODE作为其有效候选编码模式的第二个条件为QDBitsIC不大于7。当QDBitsIC大于7,则无法用3比特将其编入码流,在这种情况下IC_MODE无法成为当前块的最终编码模式,即不是当前块的有效候选编码模式,须终止该模式的后续计算。这种情况只会出现在QStep2值为1的情况下(shift2值为0,即不移位),而且由于视频数据在时域上有很强的相关性,大部分QDIC的值都小于128,可以在7比特的表示范围内。最后根据QDBitsIC分两种情况对每个数据的SignIC和QDIC进行编码:(a)当QDBitsIC值大于0,当前块存在非零QDIC,则将当前块所有的QDIC和SignIC都编入码流,其中每个SignIC用1比特表示,每个QDIC用QDBitsIC个比特表示。(b)当QDBitsIC值等于0,当前块的QDIC全为零,即当前块为IC_MODE量化残差全零块,则SignIC不影响公式(9)的重建结果,当前块中所有SignIC和QDIC都不需要编入码流。为了提高静止画面场景的编码效率,本发明支持对多个连续的QDIC全零块进行统一编码。因此本发明接着写入1比特表示的连续相同单值块标识ContiFlagIC,其值为0b0,表示只对1个全零块进行编码,并结束当前块的编码;其值为0b1表示对从当前块开始的连续QDIC全零块(其个数记为ContiCntIC,其值大于1)进行统一编码。本发明将ContiCntIC减1后的值用ContiCntBitsIC个比特表示编入码流。为了减少ContiCntIC的编码比特数,本发明按公式(11)分四种情况计算得到ContiCntBitsIC,前三种情况下的ContiCntBitsIC都为ContiCntIC对应的上限值按2取对数得到,最后一种情况为Nblk按2取对数后向上取整得到。在公式(11)中,Nblk为当前色度分量子帧的数据块个数,已由步骤(3)计算得到。为了使解码端能够正确解析ContiCntIC,在编入ContiCntIC之前须先将ContiCntBitsIC的标识信息编入码流。为了减少ContiCntBitsIC的编码比特数,且考虑到ContiCntBitsIC的值只有四种情况,本发明只用2比特将ContiCntBitsIC的编码标识(记为ContiCntBitsIdxIC)编入码流,ContiCntBitsIdxIC与ContiCntBitsIC的对应关系如公式(12)所示。根据以上编码信息,采用IC_MODE对当前块或当前块开始的连续块进行编码消耗的编码比特数CBitsIC按公式(13)计算得到。2)单值原始模式(SO_MODE):本发明中当前块选择SO_MODE作为其有效候选编码模式只有一个条件:当前块为单值块,即当前块所有数据均相等,都为当前块的单值PS。采用该模式进行编码,编码端须将SO_MODE的模式信息和PS信息编入码流。为了提高采用该模式进行编码的图像质量,该模式不对PS进行量化,编码模式为SO_MODE的数据块的重建数据都为PS。为了提高采用该模式进行编码的压缩效率,该模式将PS编入码流的方式有两种:(a)直接用8比特将PS编入码流;(b)当空间相邻的上方块的编码模式也为SO_MODE且其PS与当前块的PS相等,则不需要将PS编入码流,解码端可以从已解码的上方块获得PS。为了提高采用该模式的压缩效率,本发明支持对从当前块开始的连续相同单值块(其个数记为ContiCntSO,其值大于1)进行统一编码。为了使解码端能够获得当前块的重建数据或当前块为首的连续块的重建数据,本发明采用SO_MODE进行编码的码流编入方式如下:(a)首先将SO_MODE的编码模式标识ModeIDSO编入码流,2比特表示,值为0b01。(b)然后将1比特表示的单值编码方式CodPsFlagSO编入码流,其值为0b0表示上方块的编码模式为SO_MODE且上方的单值PS与当前块的单值PS相等,当前块的单值PS不编入码流,解码端通过从上方块获得PS来实现当前块的数据重建,其值为0b1表示将8比特表示的单值PS编入码流,解码端通过解析码流获得PS来实现当前块的数据重建。(c)再将1比特表示的连续相同单值块标识ContiFlagSO编入码流,当ContiFlagSO的值为0b0,表示只有当前块编入码流,结束当前块的编码;当ContiFlagSO的值为0b1,表示以当前块为首的连续ContiCntSO个块采用SO_MODE进行编码且各个块之间的PS相等,则将ContiCntSO减1后的值用ContiCntBitsSO个比特表示编入码流。为了减少ContiCntSO减1的编码比特数,本发明根据ContiCntSO按公式(14)分四种情况计算ContiCntBitsSO,前三种情况下的ContiCntBitsSO都为ContiCntSO对应的上限值按2取对数得到,最后一种情况为Nblk按2取对数后向上取整得到。为了使解码端能够正确解析ContiCntSO,在编入ContiCntSO减1之前须先将ContiCntBitsSO的编码信息编入码流。为了减小ContiCntBitsSO的编码比特数,且考虑到ContiCntBitsSO的值只有四种情况,本发明只用2比特将ContiCntBitsSO的编码标识(记为ContiCntBitsIdxSO)编入码流,ContiCntBitsIdxSO与ContiCntBitsSO的对应关系如公式(15)所示。根据以上编码信息,采用SO_MODE对当前块或当前块开始的连续块进行编码消耗的编码比特数CBitsSO按公式(16)计算得到。CBitsSO=2+1+8×CodPsFlagSO+1+ContiFlagSO×(2+ContiCntBitsSO)(16)3)水平逐点模式(HP_MODE):HP_MODE使用水平方向左侧相邻位置的重建数据进行逐点预测,并对预测残差进行移位量化、移位反量化和重建:对当前块中的每个原始数据P,当P处在当前色度分量子帧的左边界,则P的预测值PredHP设为128,否则PredHP都为P空间相邻左侧位置的重建数据RL;P的预测残差DHP按公式(17)计算得到、预测残差符号SignHP按公式(18)计算得到、量化残差QDHP按公式(19)计算得到、重建数据RHP按公式(20)计算得到。DHP=P-PredHP(17)QDHP=(|DHP|+(QStep>>1))>>shift(19)为了让解码端能够按公式(20)重建当前块的每个数据,编码端首先须将HP_MODE的编码模式标识ModeIDHP编入码流,本发明中ModeIDHP用3比特表示,值为0b100。解码端在解析码流得到当前块的编码模式标识ModeID后,当ModeID值为ModeIDHP,则说明当前块采用HP_MODE进行编码,进而获得当前块的每个PredHP。接着根据当前块的最大量化残差QDHPmax按公式(21)计算每个QDHP编入码流的比特数QDBitsHP。在公式(21)中,当QDHPmax等于0,表明当前块所有QDHP都为0,即当前块为HP_MODE量化残差全零块,则无需消耗比特编码每个QDHP,本发明将QDBitsHP置为0;当QDHPmax大于0,则当前块所有QDHP的范围为[0,QDHPmax],每个QDHP至少用个比特表示,本发明将QDBitsHP置为为了减少码流比特数并考虑到QDBitsHP的常见范围,本发明将只用3比特表示的QDBitsHP编入码流,QDBitsHP允许的范围为[0,7]。因此,本发明中当前块选择HP_MODE作为其有效候选编码模式的唯一条件为:QDBitsHP不大于7。当QDBitsHP大于7,则无法用3比特将其编入码流,在这种情况下HP_MODE无法成为当前块的最终编码模式,即不是当前块的有效候选编码模式,须终止该模式的后续计算。最后根据QDBitsHP将每个数据的SignHP和QDHP编入码流:当QDBitsHP等于0,表明当前块的QDHP都为0,SignHP不影响公式(20)的重建结果,因此当前块中所有SignHP和QDHP都不需要编入码流;当QDBitsHP大于0,表明当前块存在某个QDHP大于0,本发明将当前块所有的QDHP和SignHP都编入码流,其中每个SignHP均用1比特表示、每个QDHP均用QDBitsHP个比特表示。根据以上编码信息,采用HP_MODE对当前块进行编码消耗的编码比特数CBitsHP按公式(22)计算得到。4)竖直逐点模式(VP_MODE):VP_MODE使用竖直方向上方相邻位置的重建数据进行逐点预测,并对预测残差进行移位量化、移位反量化和重建:对当前块中的每个原始数据P,当P处在当前色度分量子帧的上边界,则P的预测值PredVP设为128,否则PredVP都为P空间相邻上方位置的重建数据RU;P的预测残差DVP按公式(23)计算得到、预测残差符号SignVP按公式(24)计算得到、量化残差QDVP按公式(25)计算得到、重建数据RVP按公式(26)计算得到。DVP=P-PredVP(23)QDVP=(|DVP|+(QStep>>1))>>shift(25)为了让解码端能够按公式(26)重建当前块的每个数据,编码端首先须将VP_MODE的编码模式标识ModeIDVP编入码流,本发明中ModeIDVP用3比特表示,值为0b101。解码端在解析码流得到当前块的编码模式标识ModeID后,当ModeID值为ModeIDVP,则说明当前块采用VP_MODE进行编码,进而获得当前块的每个PredVP。接着根据当前块的最大量化残差QDVPmax按公式(27)计算每个QDVP编入码流的比特数QDBitsVP。在公式(27)中,当QDVPmax等于0,表明当前块所有QDVP值都为0,即当前块为VP_MODE量化残差全零块,则无需消耗比特编码每个QDVP,本发明将QDBitsVP置为0;当QDVPmax大于0,则当前块所有QDVP的范围为[0,QDVPmax],每个QDVP至少用个比特表示,本发明将QDBitsVP置为为了减少码流比特数并考虑到QDBitsVP的常见范围,本发明将只用3比特表示的QDBitsVP编入码流,QDBitsVP允许的范围为[0,7]。因此,本发明中当前块选择VP_MODE作为其有效候选编码模式的唯一条件为:QDBitsVP不大于7。当QDBitsVP大于7,则无法用3比特将其编入码流,在这种情况下VP_MODE无法成为当前块的最终编码模式,即不是当前块的有效候选编码模式,须终止该模式的后续计算。最后根据QDBitsVP将每个数据的SignVP和QDVP编入码流:当QDBitsVP等于0,表明当前块的QDVP都为0,SignVP不影响公式(26)的重建结果,此时当前块中所有SignVP和QDVP都不需要编入码流;当QDBitsVP大于0,表明当前块存在某个QDVP大于0,因此本发明将当前块所有的QDVP和SignVP都编入码流,其中每个SignVP均用1比特表示、每个QDVP均用QDBitsVP个比特表示。根据以上编码信息,采用VP_MODE对当前块进行编码消耗的编码比特数CBitsVP按公式(28)计算得到。5)复杂水平模式(CH_MODE):采用该模式进行编码,当前块的每行数据有两种可选编码方式:水平预测量化方式和直接量化方式。在采用水平预测量化方式的所有数据行中,使用水平方向左侧相邻位置的重建数据进行逐点预测,并对预测残差进行移位量化、移位反量化和重建:对当前行中的每个原始数据P,当P处在当前色度分量子帧的左边界,则P的预测值PredCH设为128,否则PredCH都为P空间相邻左侧位置的重建数据RL;P的预测残差DCH按公式(29)计算得到、预测残差符号SignCH按公式(30)计算得到、量化残差QDCH按公式(31)计算得到、重建数据RCH按公式(32)计算得到。DCH=P-PredCH(29)QDCH=(|DCH|+(QStep>>1))>>shift(31)在采用直接量化方式的所有数据行中,不进行任何预测,对当前行的每个原始数据P,直接按公式(33)计算量化数据QPCH,并按公式(34)计算P的重建数据RCH。QPCH=(P+(QStep>>1))>>shift(33)RCH=QPCH<<shift(34)为了使解码端能够按公式(32)或(34)重建当前块的所有数据行,本发明首先将CH_MODE的编码模式标识ModeIDCH编入码流,用4比特表示,值为0b1100。然后按从上到下的顺序将每行的编码方式RowModeCH编入码流,每个RowModeCH用1比特表示,共v个比特(v为当前块在竖直方向上的数据个数,即为当前块的数据行数)。当前行的RowModeCH值为0b0表示当前行采用水平预测量化的编码方式,其值为0b1表示当前行采用直接量化的编码方式。接着对采用水平预测量化方式的数据行和直接量化方式的数据行分别进行编码:在采用水平预测量化方式的所有数据行中,为了使解码端能够按公式(32)重建数据,编码端须将当前块中所有QDCH和SignCH的信息编入码流:本发明先从当前块所有QDCH中选出最大值QDCHmax,再按公式(35)计算每个QDCH编入码流的比特数QDBitsCH。在公式(35)中,当QDCHmax等于0,表明当前块所有的QDCH都为0,即当前块为CH_MODE量化残差全零块,则无需消耗比特来编码QDCH,本发明将QDBitsCH置为0;当QDCHmax大于0,则当前块所有QDCH的范围区间为[0,QDCHmax],每个QDCH至少用个比特表示,本发明将QDBitsCH置为为了减少QDBitsCH的编码码流比特数,本发明将只用3比特表示的QDBitsCH编入码流,QDBitsCH的允许范围为[0,7],与之对应的QDCH的允许范围为[0,127]。因此,本发明中当前块选择CH_MODE作为其有效候选编码模式的唯一条件为:QDBitsCH不大于7。当QDBitsCH大于7(即存在QDCH大于127),则无法用3比特将其编入码流,在这种情况下CH_MODE无法成为当前块的最终编码模式,即不是当前块的有效候选编码模式,须终止该模式的后续计算。对采用水平预测量化方式的每行,当其存在QDCH大于127,则该行采用水平预测量化方式将导致CH_MODE不是当前块的有效候选编码模式。在这种情况下,当前块可以将当前行的编码方式改为另一种直接量化方式,避免按公式(35)计算得到的QDBitsCH超出[0,7]的范围。在采用直接量化方式的所有数据行中,为了使解码端能够按公式(34)重建数据,编码端须将当前块所有QPCH编入码流,本发明将每个QPCH均用QPBitsCH个比特表示编入码流。由于P是用8比特表示,P经过公式(33)移位量化后得到的QPCH只需用8减shift个比特表示即可(shift为帧级量化移位位数),因此本发明中QPBitsCH按公式(36)计算得到。在公式(36)中,QPBitsCH的计算只与shift有关,当前帧所有的QPBitsCH都相等。解码端可以先通过帧头信息中的帧级图像质量模式PicQ获得shift,再按公式(36)计算得到QPBitsCH。因此,为了减少编码比特数,本发明不将当前块的QPBitsCH编入码流。QPBitsCH=8-shift(36)本发明具体根据当前块中RowModeCH值为0b1的行数n以及QDBitsCH分三种情况将每个数据的编码信息(QPCH、QDCH和SignCH)编入码流:i.当n值等于当前块的行数v时,则当前块所有数据都采用直接量化方式,只需将每个QPCH均用QPBitsCH个比特编入码流,不需要将QDBitsCH、QDCH和SignCH编入码流。ii.当n值小于当前块的行数v且QDBitsCH等于0时,当前块所有的QDCH都为0,SignCH不影响公式(32)中RCH的计算,因此无需将SignCH和QDCH编入码流。在这种情况下,本发明先将3比特表示的QDBitsCH编入码流,再将每个QPCH均用QPBitsCH个比特编入码流。iii.其它情况下,n值小于当前块的行数v、QDBitsCH大于0且小于等于7,需要将所有的SignCH和QDCH编入码流。在该情况下,本发明先将3比特表示的QDBitsCH编入码流,再将每个SignCH均用1个比特编入码流、将每个QDCH均用QDBitsCH个比特编入码流,最后将每个QPCH均用QPBitsCH个比特编入码流。根据以上编码信息,采用CH_MODE对当前块进行编码消耗的编码比特数CBitsCH按公式(37)计算得到:6)复杂竖直模式(CV_MODE):采用该模式进行编码,当前块的每列数据有两种可选编码方式:竖直预测量化方式和直接量化方式。在采用竖直预测量化方式的所有数据列中,该方式使用竖直方向上方相邻位置的重建数据进行逐点预测,并对预测残差进行移位量化、移位反量化和重建:对当前列中的每个原始数据P,当P处在当前色度分量子帧的上边界,则P的预测值PredCV为128,否则PredCV都为P空间相邻上方位置的重建数据RU;P的预测残差DCV按公式(38)计算得到、预测残差符号SignCV按公式(39)计算得到、量化残差QDCV按公式(40)计算得到、重建数据RCV按公式(41)计算得到。DCV=P-PredCV(38)QDCV=(|DCV|+(QStep>>1))>>shift(40)在采用直接量化方式的所有数据列中,不进行任何预测,对当前列的每个原始数据P,直接按公式(42)计算量化数据QPCV,并按公式(43)计算P的重建数据RCV。QPCV=(P+(QStep>>1))>>shift(42)RCV=QPCV<<shift(43)为了使解码端能够按公式(41)或(43)重建当前块的所有数据列,本发明首先将表示CV_MODE的编码模式标识ModeIDCV编入码流,用4比特表示,值为0b1101。再按从左到右的顺序将每列的编码方式ColModeCV编入码流,每个ColModeCV用1比特表示,共h个比特(h为当前块在水平方向上的数据个数,即为当前块的数据列数)。ColModeCV值为0b0表示当前列采用竖直预测量化的编码方式,其值为0b1表示当前列采用直接量化的编码方式。接着对采用竖直预测量化方式的数据列和直接量化方式的数据列分别进行编码:在采用竖直预测量化方式的所有数据列中,为了使解码端能够按公式(41)重建数据,编码端须将当前块所有QDCV和SignCV的信息编入码流:本发明先从当前块所有QDCV中选出最大值QDCVmax,再按公式(44)计算每个QDCV编入码流的比特数QDBitsCV。在公式(44)中,当QDCVmax等于0,表明当前块所有的QDCV都为0,即当前块为CV_MODE量化残差全零块,则无需消耗比特来编码QDCV,本发明将QDBitsCV置为0;当QDCVmax大于0,则当前块所有QDCV的范围区间为[0,QDCVmax],每个QDCV至少用个比特表示,本发明将QDBitsCV置为为了减少QDBitsCV的编码码流比特数,本发明将只用3比特表示的QDBitsCV编入码流,QDBitsCV的允许范围为[0,7],与之对应的QDCV的允许范围为[0,127]。因此,本发明中当前块选择CV_MODE作为其有效候选编码模式的唯一条件为:QDBitsCV不大于7。当QDBitsCV大于7(即存在QDCV大于127),则无法用3比特将其编入码流,在这种情况下CV_MODE无法成为当前块的最终编码模式,即不是当前块的有效候选编码模式,须终止该模式的后续计算。对采用竖直预测量化方式的每列,当其存在QDCV大于127,则该列采用竖直预测量化方式将导致CV_MODE不是当前块的有效候选编码模式。在这种情况下,当前块可以将当前列的编码方式改为另一种直接量化方式,避免按公式(44)计算得到的QDBitsCV超出[0,7]的范围。在采用直接量化方式的所有数据列中,为了使解码端能够按公式(43)重建数据,编码端须将当前块所有QPCV编入码流,本发明将每个QPCV均用QPBitsCV个比特表示。由于P是用8比特表示,P经过公式(42)移位量化后得到的QPCV只需用8减shift个比特表示即可(shift为帧级量化移位位数),因此本发明中QPBitsCV按公式(45)计算得到。在公式(45)中,QPBitsCV的计算只与shift有关,当前帧所有的QPBitsCV都相等。解码端可以先通过帧头信息中的帧级图像质量模式PicQ获得shift,再按公式(45)计算得到QPBitsCV。因此,为了减少编码比特数,本发明不将当前块的QPBitsCV编入码流。QPBitsCV=8-shift(45)接着根据当前块中ColModeCV值为0b1的列数m以及QDBitsCV分三种情况将每个数据的编码信息(QPCV、QDCV和SignCV)编入码流,具体如下:i.当m值等于当前块的列数h时,当前块所有数据都采用直接量化方式,没有QDBitsCV、QDCV和SignCV,只需将每个QPCV均用QPBitsCV个比特编入码流。ii.当m值小于当前块的列数h且QDBitsCV等于0时,由于当前块所有的QDCV都为0,SignCV不影响公式(41)中RCV的计算,因此无需将SignCV和QDCV编入码流。在这种情况下,本发明先将3比特表示的QDBitsCV编入码流,再将每个QPCV均用QPBitsCV个比特编入码流。iii.其它情况下,m值小于当前块的列数h、QDBitsCV大于0且小于等于7,需要将SignCV和QDCV都实际编入码流。在该情况下,本发明先将3比特表示的QDBitsCV编入码流,再将每个SignCV均用1个比特编入码流、将每个QDCV均用QDBitsCV个比特编入码流,最后将每个QPCV均用QPBitsCV个比特编入码流。根据以上编码信息,采用CH_MODE对当前块进行编码消耗的编码比特数CBitsCV按公式(46)计算得到:7)自适应逐点模式(AP_MODE):本发明中当前块选择AP_MODE作为其有效候选编码模式有两个条件,其中第一个条件为:当前块不包含当前色度分量子帧的上边界数据和左边界数据。采用该模式进行编码,对当前块中的每个原始数据P,其预测值PredAP按公式(47)计算得到。在公式(47)中,RL为P的空间相邻左侧位置的重建数据、RU为P的空间相邻上方重建数据、RUL为P的空间相邻左上位置的重建数据。当RUL与RU的差异幅值小于等于RUL与RL的差异幅值,则表明重建数据的水平方向相关性大于竖直方向相关性,本发明将RL作为P的预测值,否则表明重建数据的竖直方向相关性大于水平方向相关性,本发明将RU作为P的预测值。P的预测残差DAP按公式(48)计算得到、预测残差符号按公式(49)计算得到、量化残差QDAP按公式(50)计算得到、重建数据RAP按公式(51)计算得到。DAP=P-PredAP(48)QDAP=(|DAP|+(QStep>>1))>>shift(50)为了使解码端能够按公式(51)重建当前块的每个数据,首先须将AP_MODE的编码模式标识ModeIDAP编入码流,本发明中ModeIDAP用4比特表示,值为0b1110。解码端在解析码流得到当前块的编码模式标识ModeID后,当ModeID值为ModeIDAP,则说明当前块采用AP_MODE进行编码,进而获得当前块的每个PredAP。接着根据当前块的最大量化残差QDAPmax按公式(52)计算每个QDAP编入码流的比特数QDBitsAP。在公式(52)中,当QDAPmax等于0,表明当前块所有QDAP都为0,即当前块为AP_MODE量化残差全零块,则无需消耗比特编码每个QDAP,本发明将QDBitsAP置为0;当QDAPmax大于0,则当前块所有QDAP的范围为[0,QDAPmax],每个QDAP至少用个比特表示,本发明将QDBitsAP置为为了减少码流比特数并考虑到QDBitsAP的常见范围,本发明将只用3比特表示的QDBitsAP编入码流,QDBitsAP的允许范围为[0,7]。因此,本发明中当前块选择AP_MODE作为其有效候选编码模式的第二个条件为:QDBitsAP不大于7。当QDBitsAP大于7,则无法用3比特将其编入码流,在这种情况下AP_MODE无法成为当前块的最终编码模式,即不是当前块的有效候选编码模式,须终止该模式的后续计算。最后根据QDBitsAP将每个数据的SignAP和QDAP编入码流:当QDBitsAP等于0,表明当前块的QDAP都为0,SignAP不影响公式(51)的重建结果,因此当前块中所有SignAP和QDAP都不需要编入码流;当QDBitsAP大于0,表明当前块存在QDAP大于0,因此本发明将当前块所有的SignAP和QDAP都编入码流,其中SignAP用1比特表示、QDAP用QDBitsAP个比特表示。根据以上编码信息,采用AP_MODE对当前块进行编码消耗的编码比特数CBitsAP按公式(53)计算得到。8)直接量化模式(DQ_MODE):所有数据块都可以选择该模式作为其有效候选编码模式。该模式根据当前帧已编入码流的帧头信息中的帧级图像质量模式PicQ,分为以下两种实现方式:(a)全部量化方式:在以下三种情况,DQ_MODE采用全部量化方式实现:(a-1)帧级图像质量模式为无损模式(写入码流的PicQ值为0);(a-2)帧级图像质量模式为有损清晰模式(写入码流的PicQ值为1);(a-3)帧级图像质量模式为有损均衡模式(写入码流的PicQ值为2)且当前色度分量子帧为U或V分量子帧。DQ_MODE采用全部量化方式的具体实现方法如下:对当前块中每个原始数据P,本发明不进行预测,直接采用量化、重建和编码的方式:先按公式(54)计算P的量化数据QPDQ1,再按公式(55)计算重建数据RDQ1,最后按公式(56)计算量化数据表示比特数QPBitsDQ1。为了使解码端能够按公式(55)重建当前块的数据,本发明首先将表示DQ_MODE的编码模式标识ModeIDDQ编入码流,用4比特表示,值为0b1111;接着将每个QPDQ1用QPBitsDQ1个比特数编入码流。本发明中P用8比特表示,P经过公式(54)移位量化后,QPDQ1只需用8减shift个比特表示即可(shift为帧级量化移位位数),因此QPBitsDQ1按公式(56)计算得到。根据公式(56),当前帧中所有QPBitsDQ1都相等,只与shift有关,而shift可由已编码码流的帧级图像质量模式PicQ获得,因此QPBitsDQ1不需要编入码流。QPDQ1=(P+(QStep>>1))>>shift(54)RDQ1=QPDQ1<<shift(55)QPBitsDQ1=8-shift(56)根据以上编码信息,采用DQ_MODE的全部量化方式对当前块进行编码消耗的编码比特数CBitsDQ1按公式(57)计算得到。CBitsDQ1=4+h×v×QPBitsDQ1(57)(b)水平减半量化方式:当帧级图像质量模式为有损均衡模式(写入码流的PicQ值为2)且当前色度分量子帧为Y分量子帧,则DQ_MODE采用水平减半量化方式进行编码,具体实现方法如下:当前块先在水平方向上按从左到右的顺序每取相邻两个数据P(2*i,j)和P(2*i+1,j),计算它们的均值作为一个新数据P′(i,j),如公式(58)所示,i和j分别为新数据块的水平位置索引和竖直位置索引;对于处在色度分量子帧右边界的数据块,若其h为奇数,则每行最后一个P(2*i,j)没有与之配对的P(2*i+1,j),本发明直接将P′(i,j)设为P(2*i,j)。当前块经过水平方向的分辨率减半后获得的所有P′组成新数据块,对新数据块中每个数据P′,先按公式(59)计算其量化数据QPDQ2,再按公式(60)计算其重建数据R′,最后按公式(61)计算与P′对应的P(2*i,j)和P(2*i+1,j)的两个重建数据RDQ2(2*i,j)和RDQ2(2*i+1,j)。P'(i,j)=(P(2*i,j)+P(2*i+1,j))>>1(58)QPDQ2=(P'+(QStep>>1))>>shift(59)R'=QPDQ2<<shift(60)为了使解码端能够按公式(60)和(61)重建当前块的数据,本发明首先将DQ_MODE的编码模式标识ModeIDDQ编入码流,用4比特表示,值为0b1111;接着将每个QPDQ2用QPBitsDQ2个比特数编入码流。本发明中P用8比特表示,P′也用8比特表示,经过公式(59)移位量化后,QPDQ2只需用8减shift个比特表示即可,因此QPBitsDQ2按公式(62)计算得到。根据公式(62),当前帧所有的QPBitsDQ2都相等,只与shift有关,因此QPBitsDQ2不需要编入码流。QPBitsDQ2=8-shift(62)根据以上编码信息,采用DQ_MODE的水平减半量化方式对当前块进行编码消耗的编码比特数CBitsDQ2按公式(63)计算得到。CBitsDQ2=4+((h+1)>>1)×v×QPBitsDQ2(63)为了便于统一表述,本发明将采用DQ_MODE对当前块进行编码消耗的编码比特数记为CBitsDQ,根据具体实现方式,其值为CBitsDQ1或CBitsDQ2。公式(63)与公式(57)相比,虽然QPBitsDQ2与QPBitsDQ1相等,但由于量化数据的个数减少了一半,显著减少了编码比特数。为了在提高压缩率的同时获得较好的视频质量,本发明考虑到典型的屏幕视频都是水平分辨率大于竖直分辨率,因此DQ_MODE的减半量化方式只选择对水平方向数据进行二分之一抽取,并且在抽取过程中使用取均值的方式,减少主观视频质量的损失。由于解码端可以根据PicQ和色度分量子帧类型来获取DQ_MODE的实现方式,因此本发明没有将每个块的DQ_MODE实现方式编入码流,减少了编码比特数。在复杂屏幕视频场景切换下,视频数据之间的时空相关性降低,除DQ_MODE之外的候选编码模式预测效率显著降低,编码比特数较多,而DQ_MODE由于可采用水平减半量化方式,只对一半的视频数据进行压缩,有效地降低了视频码流的峰值数据量。在步骤(5)中,所述的有效候选编码模式是指允许直接作为最终编码模式的候选编码模式,是针对单个数据块的,数据块之间的有效候选编码模式存在差异。所述的连续块要求在当前色度分量子帧中数据块的编码顺序相邻。由于在步骤(5)中,所有候选模式的量化残差比特位数(QDBitsXX,其上标XX为IC、HP、VP、CH、CV或AP时分别对应各个候选模式)统一用3比特表示,便于解码端统一解析,其允许的最大值为7。在当前帧的帧间图像质量为无损模式的情况下量化步长都为1,候选编码模式IC_MODE、HP_MODE、VP_MODE、CH_MODE、CV_MODE和AP_MODE都存在QDBits大于7的情况,导致它们不能作为当前块的有效候选编码模式,即无法成为最终编码模式。而DQ_MODE由于其QPBitsDQ1或QPBitsDQ2无需编入码流,没有有效候选限制,可以保证每个块至少有一个有效候选编码模式,避免出现没有编码模式可用的情况。在步骤(5)中,候选编码模式HP_MODE、VP_MODE、CH_MODE、CV_MODE和AP_MODE在计算编码信息时,都对当前块中的每个数据使用了一边重建一边预测的方式,即空间相邻的重建数据将作为当前数据的预测值。在步骤(5)中,每个编码模式标识的二进制值互不为前缀、十进制值互不相等,并且在典型屏幕视频场景下,最终编码模式统计比例较高的模式标识用较少的比特位数表示,有效减少了编码总比特数,如表3所示。表3编码模式标识十进制值比特位数二进制值ModeIDIC020b00ModeIDSO120b01ModeIDHP430b100ModeIDVP530b101ModeIDCH1240b1100ModeIDCV1340b1101ModeIDAP1440b1110ModeIDDQ1540b1111在步骤(5)中,当前块可以从其有效候选编码模式中任选一个模式直接作为最终编码模式。为了提高视频压缩比、降低模式选择的计算复杂度并获得良好的视频图像质量,可按以下方法和子步骤优选最终编码模式:(5-1)若SO_MODE为当前块的有效候选编码模式或为从当前块开始的连续相同单值块的有效候选编码模式,则直接将其作为当前块或从当前块开始的连续块的最终编码模式,并将该模式下的重建数据组成对应位置的最终重建块,以及提前终止模式选择;否则执行下一步。(5-2)若IC_MODE为当前块的有效候选编码模式且当前块存在非零量化残差,则计算当前块采用该模式编码需消耗的比特数CBitsIC,并执行下一步;若IC_MODE为当前块的有效候选编码模式且当前块的量化残差均为零,则从下一个块开始检测后续块是否也为IC_MODE量化残差全零块,直到检测到量化残差非全零块或最后一个块为止,并直接将IC_MODE作为当前块或从当前块开始的连续块的最终编码模式,将该模式下的重建数据组成对应位置的的最终重建块,以及提前终止模式选择;其它情况执行下一步。(5-3)计算采用HP_MODE对当前块进行预测量化的编码信息;若HP_MODE为当前块的有效候选编码模式且当前块存在非零量化残差,则计算当前块采用该模式编码需消耗的比特数CBitsHP,并执行下一步;若HP_MODE为当前块的有效候选编码模式且当前块的量化残差均为零,则直接将其作为当前块的最终编码模式,并将该模式下的重建数据组成当前块的最终重建块,以及提前终止当前块模式选择;其它情况执行下一步。(5-4)计算采用VP_MODE对当前块进行预测量化的编码信息;若VP_MODE为当前块的有效候选编码模式且当前块存在非零量化残差,则计算当前块采用该模式编码需消耗的比特数CBitsVP,并执行下一步;若VP_MODE为当前块的有效候选编码模式且当前块的量化残差均为零,则直接将其作为当前块的最终编码模式,并将该模式下的重建数据组成当前块的最终重建块,以及提前终止当前块模式选择;其它情况执行下一步。(5-5)计算采用AP_MODE对当前块进行预测量化的编码信息;若AP_MODE为当前块的有效候选编码模式且当前块存在非零量化残差,则计算当前块采用该模式编码需消耗的比特数CBitsAP,并执行下一步;若AP_MODE为当前块的有效候选编码模式且当前块的量化残差均为零,则直接将其作为当前块的最终编码模式,并将该模式下的重建数据组成当前块的最终重建块,以及提前终止当前块模式选择;其它情况执行下一步。(5-6)当HP_MODE不满足成为当前块有效候选编码模式的条件或其CBitsHP大于阈值TH1,则首先计算采用CH_MODE对当前块进行预测量化的编码信息,接着若CH_MODE满足成为当前块有效候选编码模式的条件,再计算采用CH_MODE对当前块进行编码需要消耗的比特数CBitsCH。TH1的取值范围为[6,h×v×QPBitsCH],TH1越大,CH_MODE成为最终编码模式的可能性就越小。当前块在CH_MODE下每行的编码方式RowModeCH根据公式(64)决定,其中值为1表示当前行采用直接量化方式,值为0表示当前行采用水平预测量化方式,表示当前行最大量化残差QDCHrow-max需要的最少编码比特数,阈值THCH的范围为[0,7],其取值越小则更多的行将选择直接量化方式。(5-7)当VP_MODE不满足成为当前块有效候选编码模式的条件或其CBitsVP大于阈值TH2,则首先计算采用CV_MODE对当前块进行预测量化的编码信息,接着若CV_MODE满足成为当前块有效候选编码模式的条件,再计算采用CV_MODE对当前块进行编码需要消耗的比特数CBitsCV。TH2的取值范围为[6,h×v×QPBitsCV],TH2越大,CV_MODE成为最终编码模式的可能性就越小。当前块在CV_MODE下每列的编码方式ColModeCV根据公式(65)决定,其值为1表示当前列采用直接量化方式,值为0表示当前列采用竖直预测量化方式,表示当前列最大量化残差QDCVcol-max需要的最少编码比特数,阈值THCV的范围为[0,7],取值越小则更多的列将选择直接量化方式。(5-8)若当前色度分量子帧的DQ_MODE使用全部量化方式,则根据公式(66)决定当前块是否计算DQ_MODE的量化及重建数据,ENDQ1值为1表示当前块计算DQ_MODE的量化及重建数据,值为0表示当前块不计算DQ_MODE的量化及重建数据,CBitsMIN表示已计算的各模式中编码需消耗比特数的最小值,shift为帧级量化步长QStep按2取对数得到的帧级量化移位位数。若当前色度分量子帧的DQ_MODE使用水平减半量化方式,即当帧级图像质量模式为有损均衡模式且当前色度分量子帧为Y分量子帧,则按公式(67)决定当前块是否计算DQ_MODE的量化及重建数据,ENDQ2值为1表示当前块计算DQ_MODE的量化及重建数据,值为0表示当前块不计算DQ_MODE的量化及重建数据;TotalBitsY表示当前Y分量子帧已消耗的编码比特数,η为比较系数,小于1.0,典型取值范围为[0.2,0.8],H1为Y分量子帧的水平分辨率,V1为Y分量子帧的竖直分辨率。当前块经过公式(66)或公式(67)判定后,若ENDQ1或ENDQ2值为1,则计算当前块采用DQ_MODE的量化及重建数据,并计算采用DQ_MODE进行编码需要消耗的比特数CBitsDQ,其值为CBitsDQ1或CBitsDQ2。(5-9)按消耗编码比特数最少的原则从已估计的有效候选编码模式中选择最终编码模式,在编码比特数相同的情况下,选择编码模式标识值较小作为最终编码模式;将当前块在最终编码模式下的重建数据组成对应位置的最终重建块,为后续块的编码提供预测参考。所述的步骤(6)根据当前块的最终编码模式将编码信息按顺序写入码流,具体分以下八种情况:(6-1)当前块的最终编码模式为IC_MODE,则按如下步骤将编码信息写入码流:(a)写入码流2比特表示的编码模式标识ModeIDIC,其值为0b00。(b)写入码流1比特表示的全零块标识AZBFlagIC。(c)若AZBFlagIC值为0b1,则表明当前块为IC_MODE量化残差全零块,跳到步骤(f),否则表明当前块存在非零量化残差,执行下一步。(d)将3比特表示的量化残差比特位数QDBitsIC写入码流。(e)先按光栅扫描的顺序将当前块所有的预测残差符号SignIC写入码流,每个SignIC用1比特表示;再按相同的顺序将当前块所有的量化残差QDIC写入码流,每个QDIC用QDBitsIC个比特表示;在所有的SignIC和QDIC都写入码流之后,结束当前块的码流写入。(f)写入码流1比特表示的连续相同单值块标识ContiFlagIC:若只对单个量化残差全零块进行编码,则ContiFlagIC值为0b0,并结束当前块的码流写入;若对从当前块开始的连续ContiCntIC个量化残差全零块进行编码,则ContiFlagIC值为0b1,并执行下一步。(g)先将ContiCntIC的编码比特数标识ContiCntBitsIdxIC使用2比特写入码流,再将ContiCntIC减1使用ContiCntBitsIC个比特写入码流,最后结束当前块的码流写入。解码端可以通过ContiCntBitsIdxIC获得ContiCntBitsIC:若ContiCntBitsIdxIC值为0b00,则对应ContiCntBitsIC值为2;当ContiCntBitsIdxIC值为0b01,则对应ContiCntBitsIC值为6;若ContiCntBitsIdxIC值为0b10,对应ContiCntBitsIC值为11;若ContiCntBitsIdxIC值为0b11,则对应ContiCntBitsIC值为(6-2)当前块的最终编码模式为单值原始模式SO_MODE,则按如下步骤将编码信息写入码流:(a)写入2比特表示的编码模式标识ModeIDSO,其二进制值为0b01。(b)写入1比特表示的单值编码方式CodPsFlagSO。(c)若CodPsFlagSO值等于0b1,则将8比特表示的单值数据Ps写入码流;若CodPsFlagSO值等于0b0,表明当前块空间相邻的上方已编码块的最终编码模式为SO_MODE且其单值数据与当前块的单值数据Ps相等,因此不将Ps写入码流。(d)写入1比特表示的连续相同单值块标识ContiFlagSO。(e)若ContiFlagSO值等于0b0,表示只对当前块进行编码,则结束当前块的码流写入;若ContiFlagSO值等于0b1,表示从当前块开始的ContiCntSO个连续数据块的编码模式都为SO_MODE且它们的单值都相等,则先写入2比特表示的ContiCntSO编码比特数标识ContiCntBitsIdxSO,再将ContiCntSO减1用ContiCntBitsSO个比特表示写入码流。解码端可以通过ContiCntBitsIdxSO获得ContiCntBitsSO:当ContiCntBitsIdxSO值为0b00,则对应ContiCntBitsSO值为2;当ContiCntBitsIdxSO值为0b01,则对应ContiCntBitsSO值为6;则当ContiCntBitsIdxSO值为0b10,对应ContiCntBitsSO值为11;当ContiCntBitsIdxSO值为0b11,则对应ContiCntBitsSO值为(6-3)当前块的最终编码模式为水平逐点模式HP_MODE,则按如下步骤将编码信息写入码流:(a)写入码流3比特表示的编码模式标识ModeIDHP,其二进制值为0b100。(b)写入码流3比特表示的量化残差比特位数QDBitsHP。(c)若QDBitsHP值为0,则结束当前块的码流写入;若QDBitsHP值大于0,则先按光栅扫描的顺序将当前块所有的预测残差符号SignHP写入码流,每个SignHP用1比特表示,再按相同的顺序将当前块所有的量化残差QDHP写入码流,每个QDHP用QDBitsHP个比特表示。(6-4)当前块的最终编码模式为竖直逐点模式VP_MODE,则按如下步骤将当前块的编码信息写入码流:(a)写入码流3比特表示的编码模式标识ModeIDVP,其二进制值为0b101。(b)写入码流3比特表示的量化残差比特位数QDBitsVP。(c)若QDBitsVP值为0,则结束当前块的码流写入;若QDBitsVP值大于0,则先按光栅扫描的顺序将当前块所有的预测残差符号SignVP写入码流,每个SignVP用1比特表示,再按相同的顺序将当前块所有的量化残差QDVP写入码流,每个QDVP用QDBitsVP个比特表示。(6-5)当前块的最终编码模式为复杂水平模式CH_MODE,则按如下步骤将当前块的编码信息写入码流:(a)写入4比特表示的编码模式标识ModeIDCH,其二进制值为0b1100。(b)按从上到下的顺序将每行数据的编码方式RowModeCH写入码流,每行的RowModeCH用1比特表示。(c)根据RowModeCH值的分布分以下三种情况进行编码:(c-1)若所有写入码流的RowModeCH值都为0b1,即所有行的数据都采用直接量化编码方式,则按光栅扫描的顺序将当前块所有的量化数据QPCH写入码流,每个QPCH用QPBitsCH个比特表示。(c-2)若写入码流的RowModeCH值都为0b0,即所有行的数据都采用水平预测量化编码方式,则首先写入用3比特表示的量化残差比特位数QDBitsCH;接着若QDBitsCH大于0,则先按光栅扫描的顺序将当前块所有的预测残差符号SignCH写入码流,每个SignCH用1比特表示,再按相同的顺序将当前块所有的量化残差QDCH写入码流,每个QDCH用QDBitsCH个比特表示。(c-3)若写入码流的RowModeCH值为0b0和为0b1都存在,则首先写入用3比特表示的量化残差比特位数QDBitsCH;接着若QDBitsCH大于0,则先按光栅扫描的顺序将当前块所有的预测残差符号SignCH写入码流,每个SignCH用1比特表示,再按相同的顺序将当前块所有的量化残差QDCH写入码流,每个QDCH用QDBitsCH个比特表示;最后按光栅扫描的顺序将当前块所有的量化数据QPCH写入码流,每个QPCH用QPBitsCH个比特表示。(6-6)当前块的最终编码模式为复杂竖直模式CV_MODE,则按如下步骤将当前块的编码信息写入码流:(a)写入4比特表示的编码模式标识ModeIDCV,其二进制值为0b1101。(b)按从左到右的顺序将每列编码方式ColModeCV写入码流,每列的ColModeCV在码流中用1比特表示。(c)根据ColModeCV值的分布分以下三种情况进行编码:(c-1)若所有写入码流的ColModeCV值都为0b1,即所有列的数据都采用直接量化方式,则按光栅扫描的顺序将所有的量化数据QPCV写入码流,每个QPCV用QPBitsCV个比特表示。(c-2)若所有写入码流的ColModeCV值都为0b0,即所有列的数据都采用竖直预测量化方式,则首先写入用3比特表示的量化残差比特位数QDBitsCV;接着若QDBitsCV大于0,则先按光栅扫描的顺序将当前块所有的预测残差符号SignCV写入码流,每个SignCV用1比特表示,再按相同的顺序将当前块所有的量化残差QDCV写入码流,每个QDCV用QDBitsCV个比特表示。(c-3)若写入码流的ColModeCV值为0b0和为0b1都存在,则首先写入用3比特表示的量化残差比特位数QDBitsCV;接着若QDBitsCV大于0,则先按光栅扫描的顺序将当前块所有的预测残差符号SignCV写入码流,每个SignCV用1比特表示,再按相同的顺序将当前块所有的量化残差QDCV写入码流,每个QDCV用QDBitsCV个比特表示;最后按光栅扫描的顺序将当前块所有的量化数据QPCV写入码流,每个QPCV用QPBitsCV个比特表示。(6-7)当前数据块的最终编码模式为自适应逐点模式AP_MODE,则按如下步骤将当前块的编码信息写入码流:(a)写入码流4比特表示的编码模式标识ModeIDAP,其二进制值为0b1110。(b)写入码流3比特表示的量化残差比特位数QDBitsAP。(c)若QDBitsAP值为0,则结束当前块的码流写入;若QDBitsAP值大于0,则先按光栅扫描的顺序将当前块所有的预测残差符号SignAP写入码流,每个SignAP用1比特表示,再按相同的顺序将当前块所有的量化残差QDAP写入码流,每个QDAP用QDBitsAP个比特表示。(6-8)当前数据块的最终编码模式为直接量化模式DQ_MODE,则按如下步骤将编码信息写入码流:(a)写入4比特表示的编码模式标识ModeIDDQ,其二进制值为0b1111。(b)若DQ_MODE采用全部量化的编码方式,则按光栅扫描的顺序将所有量化数据QPDQ1写入码流,每个QPDQ1用QPBitsDQ1个比特表示;若DQ_MODE采用水平减半量化的编码方式,则按光栅扫描的顺序将所有量化数据QPDQ2写入码流,每个QPDQ2用QPBitsDQ2个比特表示。所述的步骤(8)对当前帧已写入的码流进行字节对齐处理,具体方法如下:若当前帧已写入码流的总比特数TotalBits不是8的倍数,则往码流尾部填充若干个值为零的比特数据,填充个数为8减去rem(rem为TotalBits按8取余得到的余数),码流经过填充后变为字节对齐;若当前帧已编码码流总比特数TotalBits已是8的倍数,则不进行填充。所述的步骤(8)在每个色度分量子帧的最后一个数据块编码完成后进行码流字节对齐处理,可以保证每个色度分量子帧的编码码流比特数为8的倍数,使本发明在具体实施时支持按三个色度分量子帧进行子帧级并行编码,并按顺序将三个子帧的码流直接连接在一起,码流连接时无需对码流进行整体移位处理,提高处理速度。所述的步骤(10)对当前帧帧同步标识之后的码流进行帧同步标识转义处理,具体方法如下:对当前帧码流的帧同步标识之后的每个字节,按顺序读取该字节及其后3字节的数据,组成4字节数据FourBytes(先读的字节在高比特位),当FourBytes值为0xFFFFFFFD,则在码流中0xFD之后插入一个字节数据,值为0x00;当FourBytes值为0xFFFFFFFE,则将码流中的0xFE替换为0xFD,并在0xFD之后插入一个字节数据,值为0x01。解码端在当前帧码流进行解析和重建前首先须将当前帧码流中所有连续五字节值为0xFFFFFFFD00中的最后一个字节0x00删除,将所有连续五字节值为0xFFFFFFFD01中第四个字节0xFD替换为0xFE,并将最后一个字节0x01删除。数字KVM切换器对计算机输出的屏幕视频进行编码压缩,以在有限的网络带宽下实现屏幕视频的快速传输。本发明在充分考虑屏幕视频的特征下设计候选编码模式,在有限的计算复杂度下提高屏幕视频的压缩效率。针对屏幕视频中部分画面的像素值完全相同,本发明设计了单值原始模式,支持对连续的相同单值块进行统一编码;为了提高画面渐变的压缩效率,本发明设计了水平逐点模式和竖直逐点模式;为了提高复杂纹理画面的压缩效率,本发明设计了自适应预测模式、复杂水平模式和复杂竖直模式;为了提高突变画面的压缩效率,本发明设计了直接量化模式;为了提高静止画面的压缩效率,本发明设计了帧间对应模式,支持对量化残差强制置零,以及对连续的量化残差全零块进行统一编码。本发明的视频压缩方法适用于对数字KVM切换器采集的屏幕视频进行数据压缩。与现有技术相比,本发明具有以下的有益效果:1)支持重建视频质量的分级可配置,用户可以根据应用需求灵活选择。2)对各典型屏幕视频场景具有较好的压缩效率,同时保持良好的重建视频质量。3)显著降低复杂屏幕视频场景切换下视频码流的峰值数据量。4)整体计算复杂度低,适合在嵌入式处理器上实现,有效降低数字KVM切换器的实现成本和处理延时。附图说明图1为本发明方法的基本流程图;图2为帧头信息的码流结构图,当前码流表示当前帧的图像分辨率为1366×768,色度空间格式为YUV420,块划分采用8×4划分模式,帧间预测使能关闭,采用有损均衡模式压缩,为第1个编码帧;图3为色度分量子帧的数据块划分图。具体实施方式下面结合附图和实例来说明本发明的具体实施方式,应当指出,以下针对分辨率为1366×768的屏幕视频进行数据压缩,在压缩码流的具体写入过程中,本实施例按大端存储模式进行写入,待压缩数据的高位比特数据优先写入码流字节的高比特位,描述的方式只是数字KVM切换器典型的应用方式之一。在本发明的范围内,本领域的技术人员还可以根据需求使用其它一些替代实施方式。一种面向数字KVM切换器的屏幕视频压缩方法,如图1所示,包括以下步骤:(1)输入一帧屏幕视频数据:所述的一帧屏幕视频数据由数字KVM切换器采集得到,本实施例中输入的屏幕视频数据采用YUV色度空间,图像分辨率为1366×768(即图像的水平分辨率H0为1366,竖直分辨率为V0为768),共包含1049088个像素点。为了尽量减少高分辨率屏幕视频的压缩码流数据量,本实施例选用的色度空间格式为YUV420,它较YUV422和YUV444具有更少的U分量数据和V分量数据。当前视频帧被分为三个色度分量子帧,所有Y分量数据组成H1×V1的二维数据阵列,记为Y分量子帧,其水平分辨率H1等于1366、竖直分辨率V1等于768;所有U分量数据组成H2×V2的二维数据阵列,记为U分量子帧,根据表1,其水平分辨率H2等于683,竖直分辨率V2等于384;所有V分量数据组成H3×V3的二维数据阵列,记为V分量子帧,根据表1,其水平分辨率H3等于683、竖直分辨率V3等于384。(2)将当前视频帧的帧头信息按如下顺序写入码流:(2-1)从字节对齐处写入4个字节的帧同步标识SyncF,前三个字节值为0xFF,第四个字节值为0xFE。(2-2)写入用6比特表示的当前屏幕视频图像的分辨率标识PicR。本实施例的屏幕视频分辨率为1366×768,根据
发明内容中表2,PicR值为0b001111。(2-3)写入用3比特表示的色度空间格式标识ColorF。本实施例的色度空间格式为YUV420格式,ColorF值为0b000。(2-4)写入用4比特表示的数据块划分模式标识BPMODE。为了在当前高分辨率屏幕视频下获得较好的压缩效率,本实施例选择8×4划分模式,BPMODE值为0b0001。(2-5)写入用1比特表示的帧间预测使能标识TPEN。当前帧为第一个编码帧,则不允许使用时域预测,本实施例将TPEN置为0b0;当前帧不是第一个编码帧,则允许使用时域预测,为了提高屏幕视频的压缩效率,本实施例都允许使用帧间预测,TPEN值为0b1。(2-6)写入用2比特表示的帧级图像质量模式PicQ。为了尽量减少高分辨率屏幕视频的码流数据量,本实施例选用帧级图像质量模式为有损均衡模式,PicQ值为0b10。(2-7)写入用16比特表示的当前帧的帧序号FrameN。当前帧为第一帧,则FrameN值为0。后续每编码一帧,FrameN值加1,当FrameN等于65536,则先将FrameN重置为0,再将FrameN写入码流。在步骤(2)中,每个数值都是其高位比特先写入码流(先经过网络传送到解码端)、低位比特后写入码流。本实施例在写入码流过程中,将每个比特优先写入一个存储字节的高比特位。图2所示为本实施例采用大端存储模式下的帧头信息码流结构图。(3)从当前视频帧中按Y分量子帧、U分量子帧、V分量子帧的顺序获取一未编码色度分量子帧作为当前色度分量子帧,根据步骤(2)选择的8×4划分模式对当前子帧按光栅扫描的顺序进行数据块划分,按公式(1)计算当前子帧水平方向上的数据块个数Hblk,按公式(2)计算当前子帧竖直方向上的数据块个数Vblk,按公式(3)计算该子帧中待编码数据块总个数Nblk。本实施例中三个色度分量子帧的具体数据块划分如图3所示,Y分量子帧的分辨率为1366×768,水平方向171个块,竖直方向192个块,共32832个块;U分量子帧和V分量子帧的分辨率都为683×384,水平方向都有86个块,竖直方向都有96个块,整个子帧各有8256个块。(4)从当前色度分量子帧中获取一个未编码数据块作为当前块:按光栅扫描的顺序从当前色度分量子帧中获取一个h×v大小的待编码的二维数据块。根据步骤(2)中写入码流的BPMODE获得数据块划分单位,本实施例中BPMODE值为0b0001,数据块划分单位为8×4,对应的水平方向划分的数据个数hP为8,对应的竖直方向划分的数据个数vP为4。在Y分量子帧中,包含右边界的块大小为6×4(h等于6、v等于4),其它块的大小都为基本划分尺寸8×4(h等于8、v等于4);在U分量子帧中,包含右边界的块大小为3×4(h等于3、v等于4),其它块的大小都为基本划分尺寸8×4;在V分量子帧中,包含右边界的块大小为3×4(h等于3、v等于4),其它块的大小都为基本划分尺寸8×4。(5)计算当前块在各个有效候选编码模式下的编码信息和重建数据,并选取最终编码模式和重建数据。为了提高视频压缩比、降低模式选择的计算复杂度并获得良好的视频图像质量,本实施例按以下步骤和方法进行模式选择,以优选最终编码模式,并获得最终重建数据:(5-1)若SO_MODE为当前块的有效候选编码模式或为从当前块开始的连续相同单值块的有效候选编码模式,则直接将其作为当前块或从当前块开始的连续块的最终编码模式,并将该模式下的重建数据组成对应位置的最终重建块,以及提前终止模式选择。(5-2)若IC_MODE为当前块的有效候选编码模式且当前块存在非零量化残差,则按公式(13)计算当前块采用该模式编码需消耗的比特数CBitsIC;若IC_MODE为当前块的有效候选编码模式且当前块的量化残差均为零,则从下一个块开始检测后续块是否也为IC_MODE量化残差全零块,直到检测到量化残差非全零块或最后一个块为止,并直接将IC_MODE作为当前块或从当前块开始的连续块的最终编码模式,将该模式下的重建数据组成对应位置的的最终重建块,以及提前终止模式选择;(5-3)若HP_MODE为当前块的有效候选编码模式且当前块存在非零量化残差,则按公式(22)计算当前块采用该模式编码需消耗的比特数CBitsHP;若HP_MODE为当前块的有效候选编码模式且当前块的量化残差均为零,则直接将其作为当前块的最终编码模式,并将该模式下的重建数据组成当前块的重建块,以及提前终止模式选择。(5-4)若VP_MODE为当前块的有效候选编码模式且当前块存在非零量化残差,则按公式(28)计算当前块采用该模式编码需消耗的比特数CBitsVP;若VP_MODE为当前块的有效候选编码模式且当前块的量化残差均为零,则直接将其作为当前块的最终编码模式,并将该模式下的重建数据组成当前块的重建块,以及提前终止模式选择。(5-5)若AP_MODE为当前块的有效候选编码模式且当前块存在非零量化残差,则按公式(53)计算当前块采用该模式编码需消耗的比特数CBitsAP;若AP_MODE为当前块的有效候选编码模式且当前块的量化残差均为零,则直接将其作为当前块的最终编码模式,并将该模式下的重建数据组成当前块的重建块,以及提前终止模式选择。(5-6)若HP_MODE不满足成为当前块有效候选编码模式的要求或其CBitsHP大于TH1,则首先计算采用CH_MODE对当前块进行预测量化的编码信息,接着若CH_MODE满足成为当前块有效候选编码模式的条件,再按公式(37)计算采用CH_MODE对当前块进行编码需要消耗的比特数CBitsCH。本实施例中TH1取h×v×QPBitsCH/2;当前块在CH_MODE下每行的编码方式RowModeCH根据公式(64)决定,本实施例中公式(64)的THCH取4。(5-7)若VP_MODE不满足成为当前块有效候选编码模式的要求或其CBitsVP大于TH2,则首先计算采用VP_MODE对当前块进行预测量化的编码信息,接着若VP_MODE满足成为当前块有效候选编码模式的条件,再按公式(46)计算采用CV_MODE对当前块进行编码需要消耗的比特数CBitsCV。本实施例中TH2取h×v×QPBitsCV/2;当前块在CV_MODE下每列的编码方式ColModeCV根据公式(65)决定,本实施例中公式(65)的THCV取6。(5-8)若DQ_MODE使用全部量化方式,则按公式(66)决定当前块是否计算DQ_MODE的量化及重建数据,本实施例取公式(66)中比较系数η取为0.5;若DQ_MODE使用水平减半量化方式,则按公式(67)决定当前块是否计算DQ_MODE的量化及重建数据。当前块经过公式(66)或公式(67)判定后,若ENDQ1或ENDQ2值为1,则需要计算DQ_MODE的量化及重建数据,并按公式(57)或(63)计算采用DQ_MODE对当前块进行编码需要消耗的比特数CBitsDQ,其值为CBitsDQ1或CBitsDQ2。(5-9)按消耗编码比特数最少的原则从已估计的有效候选编码模式中选择最终编码模式,在编码比特数相同的情况下,选择编码模式标识值较小作为最终编码模式;将最终编码模式下的重建数据组成对应位置的最终重建块,为后续块的编码提供预测参考。(6)根据当前块的最终编码模式将当前块的编码信息写入码流,具体分以下八种情况:(6-1)若当前块的最终编码模式为IC_MODE,则按如下步骤将编码信息写入码流:(a)写入码流2比特表示的编码模式标识ModeIDIC,其值为0b00。(b)写入码流1比特表示的全零块标识AZBFlagIC。(c)若AZBFlagIC值为0b1,则表明当前块为量化残差全零块,跳到步骤(f),否则表明当前块存在量化残差非零,执行下一步。(d)将3比特表示的量化残差比特位数QDBitsIC写入码流。(e)先按光栅扫描的顺序将当前块所有的预测残差符号SignIC写入码流,每个SignIC用1比特表示;再按相同的顺序将当前块所有的量化残差QDIC写入码流,每个QDIC用QDBitsIC个比特表示;在所有的SignIC和QDIC都写入码流之后,结束当前块的码流写入。(f)写入码流1比特表示的连续相同单值块标识ContiFlagIC。(g)若ContiFlagIC值为0b0,表示对单个量化残差全零块进行编码,则结束当前块的编码。若ContiFlagIC值为0b1,表示从当前块开始的ContiCntIC个连续数据块的编码模式都为IC_MODE且都为量化残差全零块,则先将ContiCntIC的编码比特数标识ContiCntBitsIdxIC使用2比特写入码流,再将ContiCntIC减1使用ContiCntBitsIC个比特写入码流。(6-2)若当前块的最终编码模式为单值原始模式SO_MODE,则按如下步骤将编码信息写入码流:(a)写入2比特表示的编码模式标识ModeIDSO。(b)写入1比特表示的单值编码方式CodPsFlagSO。(c)若CodPsFlagSO值等于0b1,则将8比特表示的单值数据Ps写入码流;若CodPsFlagSO值等于0b0,表明当前块空间相邻的上方已编码块的最终编码模式为SO_MODE且其单值数据与当前块的单值数据Ps相等,因此不将Ps写入码流。(d)写入1比特表示的连续相同单值块标识ContiFlagSO。(e)若ContiFlagSO值等于0b0,表示只对当前块进行编码,则结束当前块的编码;若ContiFlagSO值等于0b1,表示从当前块开始的ContiCntSO个连续数据块的编码模式都为SO_MODE且它们的单值都相等,则先写入2比特表示的ContiCntSO编码比特数标识ContiCntBitsIdxSO,再将ContiCntSO减1用ContiCntBitsSO个比特表示写入码流。(6-3)若当前块的最终编码模式为水平逐点模式HP_MODE,则按如下步骤将编码信息写入码流:(a)写入码流3比特表示的编码模式标识ModeIDHP。(b)写入码流3比特表示的量化残差比特位数QDBitsHP。(c)若QDBitsHP值为0,则结束当前块的码流写入;若QDBitsHP值大于0,则先按光栅扫描的顺序将当前块所有的预测残差符号SignHP写入码流,每个SignHP用1比特表示,再按相同的顺序将当前块所有的量化残差QDHP写入码流,每个QDHP用QDBitsHP个比特表示。(6-4)若当前块的最终编码模式为竖直逐点模式VP_MODE,则按如下步骤将当前块的编码信息写入码流:(a)写入码流3比特表示的编码模式标识ModeIDVP,其二进制值为0b101。(b)写入码流3比特表示的量化残差比特位数QDBitsVP。(c)若QDBitsVP值为0,则结束当前块的码流写入;若QDBitsVP值大于0,则先按光栅扫描的顺序将当前块所有的预测残差符号SignVP写入码流,每个SignVP用1比特表示,再按相同的顺序将当前块所有的量化残差QDVP写入码流,每个QDVP用QDBitsVP个比特表示。(6-5)若当前块的最终编码模式为复杂水平模式CH_MODE,则按如下步骤将当前块的编码信息写入码流:(a)写入4比特表示的编码模式标识ModeIDCH。(b)按从上到下的顺序将每行数据的编码方式RowModeCH写入码流,每行的RowModeCH用1比特表示。(c)根据RowModeCH值的分布分以下三种情况进行编码:(c-1)若所有写入码流的RowModeCH值都为0b1,则按光栅扫描的顺序将当前块所有的量化数据QPCH写入码流,每个QPCH用QPBitsCH个比特表示。(c-2)若写入码流的RowModeCH值都为0b0,则首先写入用3比特表示的量化残差比特位数QDBitsCH;接着若QDBitsCH大于0,则先按光栅扫描的顺序将当前块所有的预测残差符号SignCH写入码流,每个SignCH用1比特表示,再按光栅扫描的顺序将当前块所有的量化残差QDCH写入码流,每个QDCH用QDBitsCH个比特表示。(c-3)若写入码流的RowModeCH值为0b0和为0b1都存在,则首先写入用3比特表示的量化残差比特位数QDBitsCH;接着若QDBitsCH大于0,则先按光栅扫描的顺序将当前块所有的预测残差符号SignCH写入码流,每个SignCH用1比特表示,再按光栅扫描的顺序将当前块所有的量化残差QDCH写入码流,每个QDCH用QDBitsCH个比特表示;最后按光栅扫描的顺序将当前块所有的量化数据QPCH写入码流,每个QPCH用QPBitsCH个比特表示。(6-6)若当前块的最终编码模式为复杂竖直模式CV_MODE,则按如下步骤将当前块的编码信息写入码流:(a)写入4比特表示的编码模式标识ModeIDCV。(b)按从左到右的顺序将每列编码方式ColModeCV写入码流,每列的ColModeCV在码流中用1比特表示。(c)根据ColModeCV值的分布分以下三种情况进行编码:(c-1)若所有写入码流的ColModeCV值都为0b1,则按光栅扫描的顺序将所有的量化数据QPCV写入码流,每个QPCV用QPBitsCV个比特表示。(c-2)若所有写入码流的ColModeCV值都为0b0,则首先写入用3比特表示的量化残差比特位数QDBitsCV;接着若QDBitsCV大于0,则先按光栅扫描的顺序将当前块所有的预测残差符号SignCV写入码流,每个SignCV用1比特表示,再按相同的顺序将当前块所有的量化残差QDCV写入码流,每个QDCV用QDBitsCV个比特表示。(c-3)若写入码流的ColModeCV值为0b0和为0b1都存在,则首先写入用3比特表示的量化残差比特位数QDBitsCV;接着若QDBitsCV大于0,则先按光栅扫描的顺序将当前块所有的预测残差符号SignCV写入码流,每个SignCV用1比特表示,再按相同的顺序将当前块所有的量化残差QDCV写入码流,每个QDCV用QDBitsCV个比特表示;最后按光栅扫描的顺序将当前块所有的量化数据QPCV写入码流,每个QPCV用QPBitsCV个比特表示。(6-7)若当前数据块的最终编码模式为自适应逐点模式AP_MODE,则按如下步骤将当前块的编码信息写入码流:(a)写入码流4比特表示的编码模式标识ModeIDAP。(b)写入码流3比特表示的量化残差比特位数QDBitsAP。(c)若QDBitsAP值为0,则结束当前块的码流写入;若QDBitsAP值大于0,则先按光栅扫描的顺序将当前块所有的预测残差符号SignAP写入码流,每个SignAP用1比特表示,再按相同的顺序将当前块所有的量化残差QDAP写入码流,每个QDAP用QDBitsAP个比特表示。(6-8)若当前数据块的最终编码模式为直接量化模式DQ_MODE,则按如下步骤将编码信息写入码流:(a)写入4比特表示的编码模式标识ModeIDDQ。(b)若DQ_MODE采用全部量化的实现方式,则按光栅扫描的顺序将所有量化数据QPDQ1写入码流,每个QPDQ1用QPBitsDQ1个比特表示;若DQ_MODE采用减半量化的实现方式,则按光栅扫描的顺序将所有量化数据QPDQ2写入码流,每个QPDQ2用QPBitsDQ2个比特表示。(7)重复步骤(4)到(6),完成当前色度分量子帧中所有数据块的编码和重建。(8)对当前视频帧已写入的码流进行比特填充以实现字节对齐:若当前帧已写入码流的总比特数TotalBits不是8的倍数,则往码流尾部填充比特0,填充个数为8减去rem(rem为TotalBits按8取余得到的余数),码流经过填充后变为字节对齐;若当前帧已编码码流总比特数TotalBits是8的倍数,则不进行比特填充。(9)重复步骤(3)到(8),完成当前视频帧中所有色度分量子帧的编码和重建。(10)对当前视频帧产生的码流进行帧同步头转义处理,输出最终的压缩码流:对当前帧码流的帧同步标识之后的每个字节,按顺序读取该字节及其后3字节的数据,组成4字节数据FourBytes(先读的字节放在FourBytes的高比特位字节,即按大端模式组成FourBytes),当FourBytes值为0xFFFFFFFD,则在码流中0xFD之后插入一个字节数据,值为0x00;当FourBytes值为0xFFFFFFFE,则将码流中的0xFE替换为0xFD,并在0xFD之后插入一个字节数据,值为0x01;当前视频帧的码流经转义处理后输出其最终压缩码流。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1