首页> 中国专利> 基于CABAC的并行归一化编码实现电路及编码方法

基于CABAC的并行归一化编码实现电路及编码方法

摘要

本发明公开了一种基于CABAC的并行归一化编码实现电路及编码方法。该电路包括第一级流水线,用于完成归一化操作,以及第二级流水线,用于产生输出码流,二者间以先入先出队列FIFO连接,FIFO的深度为5段。这样,当输出码流产生引擎需要多周期操作时,不会阻塞前级归一化引擎的操作。本发明的方案避免了原有算法的多周期归一化操作所引发的CABAC流水线停滞问题。

著录项

  • 公开/公告号CN101771879A

    专利类型发明专利

  • 公开/公告日2010-07-07

    原文格式PDF

  • 申请/专利权人 清华大学;

    申请/专利号CN201010103340.9

  • 发明设计人 刘振宇;汪东升;

    申请日2010-01-28

  • 分类号H04N7/26(20060101);H04N7/50(20060101);H03M7/40(20060101);

  • 代理机构11002 北京路浩知识产权代理有限公司;

  • 代理人胡小永

  • 地址 100084 北京市海淀区清华园北京100084-82信箱

  • 入库时间 2023-12-18 00:10:00

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2011-08-17

    授权

    授权

  • 2010-09-08

    实质审查的生效 IPC(主分类):H04N7/26 申请日:20100128

    实质审查的生效

  • 2010-07-07

    公开

    公开

说明书

技术领域

本发明涉及视频编码领域,尤其涉及一种基于CABAC的并行归一化编码实现电路及编码方法。

背景技术

基于上下文的自适应二进制算术编码(Context-based AdaptiveBinary Arithmetic Coding,CABAC)是H.264/AVC的主要类所采用的编码算法。实验证明,与基于上下文的可变长编码算法(Context-Adaptive Variable-Length Codinig,CAVLC)比较,在相同的码流下,CABAC将图像质量提高0.3-0.6dB。CABAC编码算法的不足在于吞吐率低,难以满足高清应用的需求。CABAC结构框图如图1所示,首先对不具备二元特性的语义元素进行二元化处理;然后,对二元化处理的输出比特流中的每一比特进行自适应二进制算术编码,对于那些具备二元特性的语义元素则直接进行自适应二进制算术编码。根据被编码比特的概率分布特点,对具有均匀概率分布的比特采用旁路模式编码;相反,对于具有基于上下文概率分布特点的比特采用标准模式编码。对于采用标准模式编码的比特,首先在上下文模型引擎获得其概率索引值(pStateIdx[5:0])和大概率符号值(valMPS)。pStateIdx[5:0]和valMPS以及当前被编码比特的值(binVal)输入到标准模式编码引擎。标准模式编码引擎根据pStateIdx[5:0]、valMPS和binVal更新编码区间(R[8:0])和编码下限(L[9:0]),然后通过对更新后的编码区间和编码下限进行归一化操作,产生输出到原始字节序列载荷(RBSP)的码流。标准模式编码的处理流程参见参考文献1(T.Wiegand,G.Sullivan,and A.Luthra,“Draft itu-t recommendation andfinal draft international standard of joint video specification(ITUT rec.H.264-ISO/IEC 14496-10 AVC),”May 2003.JVT-G050r1)中图9-7所示。

H.264/AVC所提供的标准中(参见参考文献1),标准模式编码中归一化操作以及输出码流的产生流程如图2所示(其中,函数PutOneBit(b)是将1比特的b及跟随比特计数变量(bits_follow)所记录的bits_follow个比特的(1-b)写入RBSP中)。图2所示的处理流程会引起如下处理瓶颈:

1)在图2所示的流程中,对编码区间R和编码下限L的归一化操作和输出比特的产生处于同一个循环体内。如果Rx表示归一化前编码区间的值,那么需要次循环完成此次归一化操作以及输出码流的产生,其中为向下取整操作。在电路实现中,如果假设图2中PutBit(b)函数可以在一个周期内完成(后面我们看到这个假设是乐观的),则需要个周期完成当前被编码比特的归一化及输出码流的操作。由于后续比特的编码依赖于当前比特的归一化结果,所以,如果当前被编码比特采用多周期归一化处理,后续比特的编码将被停滞,从而降低整个CABAC流水线的效率。

2)由于在输出码流产生过程中要解决进位传播问题,H.264/AVC协议中引入如图2所示的bits_follow变量。如果bits_follow不等于0,PutBit(b)执行单元需要多个周期操作,这种情况会进一步降低CABAC编码引擎的效率。

进一步,当码流中小概率符号的比重增加时,上述两种情况所引入的负面效应也随之增加。

发明内容

(一)要解决的技术问题

针对现有技术中存在的缺陷和不足,本发明的目的是提供一种用于H.264/AVC视频编码协议的基于CABAC的并行归一化编码实现电路及编码方法,其解决了原归一化处理和输出码流产生过程中由比特间相关性所引发的计算瓶颈,能够避免现有算法的循环操作,以及多周期归一化操作所引发的CABAC流水线停滞问题。

(二)技术方案

为达到上述目的,本发明提供了一种基于CABAC的并行归一化编码实现电路,包括第一级流水线,用于完成归一化操作,以及第二级流水线,用于产生输出码流,二者间以先入先出队列FIFO连接,所述第一级流水线包括:

标准模式L和R更新引擎,用于完成标准编码模式下归一化操作之前编码下限L[9:0]和编码区间R[8:0]的更新,此引擎的输入为binVal,valMPS,pStateIdx[5:0],R[8:0],L[9:0],输出为中间结果RM/LPS[8:0]和LM/LPS[9:0];

标准模式归一化引擎,用于完成标准编码模式下对编码区间和编码下限的归一化操作,其输入为RM/LPS[8:0]和LM/LPS[9:0],输出为ρ[3:0],RM/LPS[8:0]和LM/LPS[9:0];

标准模式跟随比特更新引擎,用于完成标准编码模式下对跟随比特计数变量bits_follow的更新并且生成写入段间FIFO的变量β[2:0],此引擎的输入信号为LM/LPS[9:0]、ρ[3:0]、mode以及bits_follow[7:0],输出信号为bits_follow[7:0]的更新值btfreg[7:0]以及写入段间FIFO的β[2:0];

旁路模式L更新引擎,用于计算旁路编码模式下编码下限的更新值,此引擎的输入为binVal,R[8:0],L[9:0],输出为Lbyp[10:0];

旁路模式归一化引擎,用于完成旁路模式下对编码下限的归一化操作,输入为Lbyp[10:0],输出为Lbyp[9:0];

旁路模式跟随比特更新引擎,用于完成旁路模式下对变量bits_follow的更新,输入信号为Lbyp[10:9]和bits_follow[7:0],输出信号为bits_follow的更新值btfbyp[7:0];

其中,bits_follow[7:0]寄存器用于存储当前变量bits_follow值;编码区间寄存器R[8:0]用于存储当前编码区间变量R值;编码下限寄存器L[9:0]用于存储当前编码下限变量L值;pStateIdx[5:0]为当前被编码比特的概率索引值,由前级上下文模型引擎产生;valMPS为大概率符号值,由前级上下文模型引擎产生;binVal为当前被编码比特的值;标准编码模式中,RM/LPS[8:0]和LM/LPS[9:0]分别为归一化操作前的编码区间和编码下限,RM/LPS[8:0]和LM/LPS[9:0]分别为归一化操作后的编码区间和编码下限,中间变量n为RM/LPS[8:0]中前导0的个数,变量ρ等于9-n;旁路编码模式中,Lbyp[10:0]为归一化操作前的编码下限,Lbyp[9:0]为归一化操作后的编码下限;

所述标准编码模式和旁路编码模式两种编码模式由输入信号mode控制,当工作于标准编码模式时,标准模式归一化引擎的输出RM/LPS[8:0]和LM/LPS[9:0]用于更新编码区间寄存器R[8:0]和编码下限寄存器L[9:0],标准模式跟随比特更新引擎的输出btfreg[7:0]用于更新寄存器bits_follow[7:0],若RM/LPS[8:0]的值小于256,寄存器bits_follow[7:0]的输出、标准模式L和R更新引擎的输出LM/LPS[9:3]以及标准模式跟随比特更新引擎的输出β[2:0]分别写入FIFO尾部项的btf[7:0]、low[6:0]以及beta[2:0]字段中;当工作于旁路编码模式时,旁路模式归一化引擎的输出Lbyp[9:0]用于更新编码下限寄存器L[9:0],编码区间寄存器R[8:0]的值维持不变,旁路模式跟随比特更新引擎的输出btfbyp[7:0]被选择用于更新寄存器bits_follow[7:0],寄存器bits_follow[7:0]的输出写入FIFO尾部项的btf[7:0]字段,Lbyp[10]写入FIFO尾部项的low[6]字段,将0写入FIFO尾部项的beta[2:0]字段。

其中,所述FIFO的深度为5段,每项为18比特位宽,由btf[7:0]、low[6:0]以及beta[2:0]字段组成。

其中,所述第二级流水线为可在每周期产生多位输出比特的输出码流产生引擎,所述输出码流产生引擎包括前导比特输出引擎和后缀比特输出引擎,所述前导比特输出引擎和后缀比特输出引擎分别连接同一选择器,前导比特输出引擎的输入信号low[6]连接到FIFO输出项low[6];前导比特输出引擎的输入信号btf[7:0]连接到FIFO输出项btf[7:0];后缀比特输出引擎的输入信号low[5:0]连接到FIFO输出项的low[5:0];后缀比特输出引擎的输入信号beta[2:0]连接到FIFO输出项的beta[2:0]。

本发明还提供了一种利用上述电路实现的基于CABAC的并行归一化编码方法。

其中,标准编码模式下,定义γ为LM/LPS[8:9-n]中最后一个为0的比特所在位,且当LM/LPS[8:9-n]不存在为0的比特时,γ等于0,根据变量RM/LPS[8:0],LM/LPS[9:0],n和γ,通过移位操作和逻辑操作得到RM/LPS[8:0]和LM/LPS[9:0]。

其中,标准编码模式下,btfreg[7:0]为归一化操作后变量bits_follow[7:0]的值,根据当前变量bits_follow[7:0]的值,n和γ,通过算数运算和逻辑操作得到btfreg[7:0]。

其中,旁路编码模式下,根据当前变量Lbyp[10:0]的值,通过逻辑操作得到Lbyp[9:0]。

其中,旁路编码模式下,btfbyp[7:0]为归一化操作后变量bits_follow[7:0]的值,根据变量bits_follow[7:0]和Lbyp[10:9]的值,通过算数运算和逻辑操作得到btfbyp[7:0]。

(三)有益效果

与现有技术相比,本发明能够产生如下有益效果:在软件实现中,当前比特的归一化处理不需循环操作,从而提高了归一化处理速度;在电路实现中,任何比特的归一化均为单周期处理,避免了原多周期归一化操作所引入的流水线停滞;将归一化处理与产生RBSP码流操作分解为两级流水线,两级流水线间以5级先入先出(FIFO)寄存器连接,此结构可有效避免流水线停滞。因此,该设计避免了原有算法的多周期归一化操作所引发的CABAC流水线停滞问题。而且,所提出的电路实现的吞吐率恒定,其吞吐率与所处理比特流中小概率符号发生概率无关。

附图说明

图1为H.264/AVC中现有CABAC系统框图;

图2为H.264/AVC中标准模式归一化操作以及输出码流的产生流程框图;

图3为本发明实施例的电路整体架构框图;

图4为本发明实施例的标准模式L和R更新引擎的电路图;

图5为本发明实施例的标准模式归一化引擎的电路图;

图6为本发明实施例的标准模式跟随比特更新引擎中生成变量btfreg[7:0]的电路图;

图7为本发明实施例的标准模式跟随比特更新引擎中生成β[2:0]的电路图;

图8为本发明实施例的RBSP比特生成引擎中数据通路的电路图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

依据本发明实施例的电路整体架构框图如图3所示。首先说明一些变量的定义:

输入信号:

pStateIdx[5:0]:当前被编码比特的概率索引值,由前级上下文模型引擎产生;

valMPS:大概率符号值,由前级上下文模型引擎产生;

binVal:当前被编码比特的值;

mode:0表明当前工作于标准编码模式,1表明当前工作于旁路编码模式。

输出信号:

toRBPS[7:0]:以字节为单位,写入RBSP的码流;

RBPS_we:向RBSP写出使能信号。

定义归一化操作前的编码区间和编码下限分别为RM/LPS[8:0]和LM/LPS[9:0];定义归一化操作后的编码区间和编码下限分别为RM/LPS[8:0]和LM/LPS[9:0];定义RM/LPS[8:0]中前导0的个数为n;定义LM/LPS[8:9-n]中最后一个为0的比特所在位为γ(当LM/LPS[8:9-n](即LM/LPS[9:0]中第8至第9-n位)不存在为0的比特时,γ等于0);定义btfreg[7:0]为归一化操作后变量bits_follow的值;定义归一化操作前编码下限为Lbyp[10:0];定义归一化操作后编码下限为Lbyp[9:0];定义btfbyp[7:0]为归一化操作后变量bits_follow的值。

如图3所示的电路结构由两级流水线构成。第一级流水线包括如下功能部件:

bits_follow[7:0]寄存器:存储当前变量bits_follow值;

编码区间寄存器R[8:0]:存储当前编码区间变量R值;

编码下限寄存器L[9:0]:存储当前编码下限变量L值;L[9:0]表示编码下限为10比特信号,最高为编号为9,最低位编号为0,本发明中,其它具有相同形式的变量采用上述表示方法定义。

标准模式L和R更新引擎:完成标准编码模式下(参考文献1中图9-7所示)归一化操作之前的逻辑功能,此引擎的输入为binVal,valMPS,pStateIdx[5:0],R[8:0],L[9:0],输出为中间结果RM/LPS[8:0]和LM/LPS[9:0];

标准模式归一化引擎:完成标准编码模式下对编码区间和编码下限的归一化操作,此引擎的输入为RM/LPS[8:0]和LM/LPS[9:0],输出为ρ[3:0],RM/LPS[8:0]和LM/LPS[9:0];

标准模式跟随比特更新引擎:完成标准编码模式下对变量bits_follow的更新并且生成写入段间FIFO的变量β[2:0],此引擎的输入信号为LM/LPS[9:0]、ρ[3:0]、mode以及bits_follow[7:0],输出信号为bits_follow的更新值btfreg[7:0],以及写入段间FIFO的β[2:0];

旁路模式L更新引擎:完成旁路编码模式下编码下限更新值的计算工作,此引擎的输入为binVal,R[8:0],L[9:0],输出为Lbyp[10:0];

旁路模式归一化引擎:完成旁路模式下对编码下限的归一化操作,输入为Lbyp[10:0],输出为Lbyp[9:0];以及

旁路模式跟随比特更新引擎:完成旁路模式下对变量bits_follow的更新,输入信号为Lbyp[10:9]和bits_follow[7:0],输出信号为bits_follow的更新值btfbyp[7:0]。

上述第一级流水线有两种工作模式:标准编码模式和旁路编码模式,其工作模式的选择由输入信号mode控制。

当第一级流水线工作于标准编码模式时,标准模式L和R更新引擎、标准模式归一化引擎、以及标准模式跟随比特更新引擎处于工作状态。标准模式归一化引擎的输出RM/LPS[8:0]和LM/LPS[9:0]被用于更新编码区间寄存器R[8:0]和编码下限寄存器L[9:0]。标准模式跟随比特更新引擎的输出btfreg[7:0]被用于更新寄存器bits_follow[7:0]。如果RM/LPS[8:0]的值小于256,寄存器bits_follow[7:0]的输出、标准模式L和R更新引擎的输出LM/LPS[9:3]以及标准模式跟随比特更新引擎的输出β[2:0]分别写入FIFO尾部项的btf[7:0]、low[6:0]以及beta[2:0]字段中。

当第一级流水线工作于旁路编码模式时,旁路模式L更新引擎、旁路模式归一化引擎、以及旁路模式跟随比特更新引擎处于工作状态。旁路模式归一化引擎的输出Lbyp[9:0]被选择,用于更新编码下限寄存器L[9:0]。注意,当处于旁路编码模式时,编码区间寄存器R[8:0]的值维持不变。旁路模式跟随比特更新引擎的输出btfbyp[7:0]被选择,用于更新寄存器bits_follow[7:0]。寄存器bits_follow[7:0]的输出写入FIFO尾部项的btf[7:0]字段,Lbyp[10]写入FIFO尾部项的low[6]字段,将0写入FIFO尾部项的beta[2:0]字段。

其中,第一级与第二级流水线之间以FIFO连接。FIFO的深度可以大于或等于5段,优选为5段,FIFO中每项存储区的位宽为18比特,每项由字段btf[7:0]、low[6:0]以及beta[2:0]组成。

第二级流水线包括RBSP比特生成引擎。RBSP比特生成引擎中包括一个8比特的缓冲寄存器buf[7:0],前导比特输出引擎和后缀比特输出引擎。如果FIFO非空,RBSP比特生成引擎从FIFO读取头指针所指向的存储项,根据此项中btf[7:0]、low[6:0]以及beta[2:0]字段生成输出码流。RBSP比特生成引擎的输出端口为:1.以字节为单位写入RBSP的码流数据输出端口toRBPS[7:0];2.输出使能信号RBPS_we。RBSP比特生成引擎的比特输出过程分为两个阶段,第一阶段为前导比特输出,第二阶段为后缀比特输出。下面对这两个阶段的输出比特产生过程进行具体的说明。

前导比特输出:假设前导比特输出操作之前,缓冲寄存器中残存未输出的比特数为m(表示为buf[m-1:0]),前导比特输出将占用个时钟周期完成操作,其中为向上取整运算。前导比特输出操作分为两种情况:

1)如果btf+m+1的值小于8,将比特串{buf[m-1:0],low[6],{btf{!low[6]}}}写回8比特的缓冲寄存器buf[7:0]的低btf+m+1位,即buf[btf+m:0]。(符号“{}”为按位拼接操作,{bft{!low[6]}}表示连续btf个值为!low[6]的比特拼接的比特串,!low[6]表示对比特变量low[6]进行取反操作);

2)当i≥1,分三步输出前导比特:

a)在第1时钟周期,输出{buf[m-1:0],low[6],{(8-m-1){!low[6]}}}到RBSP码流中,如果i等于1,此时就可以结束前导比特输出操作,否则:

b)如果i大于2,从第2到第i-1时钟周期,每周期向RBSP码流中写入{8{!low[6]}};

c)设变量k等于btf+m+1-8×(i-1),在第i时钟周期,将{k{!low[6]}}写入buf[k-1:0]。

当beta[2:0]>0时,后缀比特输出引擎将low[5:6-beta]输出。设后缀比特输出前缓冲寄存器buf[7:0]中残存尚未输出的比特数为k,分两种情况讨论:

a)如果k+beta<8,将{buf[k-1:0],low[5,6-beta]}写回缓冲寄存器buf[7:0]的低k+beta位;

b)否则,即k+beta≥8,此时k一定大于2,首先在第一周期将{buf[k-1:0],low[5:k-2]}写入RBSP码流,如果k+beta等于8,此时结束后缀比特输出操作,否则;在第二周期,将low[k-3:6-beta]写入缓冲寄存器buf[7:0]的低k+beta-8位。

下面分别说明本发明实施例的电路整体架构框图中各组成部分的实现结构。

标准模式L和R更新引擎电路设计如图4所示。其中编码范围查找表的组合逻辑是根据当前编码区间的R[7:6]和pStateIdx[5:0]实现查表逻辑,其真值表如文献1中表9-33所示。

标准模式归一化引擎电路设计如图5所示。其中,符号M>>n代表将变量M右移n位操作,高位补零。符号RM/LPS<<n代表将变量RM/LPS[8:0]左移n位操作,低位补零。符号LM/LPS<<n代表将变量LM/LPS[9:0]左移n位操作,低位补零。前导0计数是检测其输入信号中前导0的个数,采用参考文献2(Synopsys Inc.,“Design Ware BuildingBlock IP Documentation Overview”,October 2009)中的电路设计。

标准模式跟随比特更新引擎中生成btfreg[7:0]的电路结构如图6所示。其中,符号LM/LPS[8:0]>>ρ代表将LM/LPS[8:0]右移ρ位操作,高位补零。位旋转引擎的功能是将其第i比特的输入信号连接到第8-i比特的输出信号。前导1计数是检测其输入信号中前导1的个数,采用参考文献2中的电路设计。表达式δ≠9-ρ?0:1表示如下逻辑关系:当δ不等于9-ρ时输出为0,否则输出为1。

标准模式跟随比特更新引擎中生成β[2:0]的电路结构如图7所示。其中,输入信号δ为图6中前导1计数模块的输出。当工作在旁路编码模式时,β[2:0]恒等于0。

旁路模式L更新引擎完成如下逻辑功能:如果输入变量binVal等于0,Lbyp[10:0]等于L[9:0]左移一位;否则,即binVal等于1,Lbyp[10:0]等于L[9:0]左移一位后与R[8:0]之和。

旁路模式归一化引擎完成如下功能:Lbyp[8:0]等于Lbyp[8:0];当Lbyp[10](即Lbyp[10:0]中的最高位第10位)和Lbyp[9]都为1时,Lbyp[9]为1,否则Lbyp[9]为0。

旁路模式跟随比特更新引擎完成如下功能:当Lbyp[10:9]为01时,btfbyp[7:0]等于bits_follow[7:0]加1;否则,btfbyp[7:0]等于0。

第二级流水线RBSP比特生成引擎的数据通路电路如图8所示。此数据通路主要由8比特的缓冲存储器buf[7:0]、前导比特输出引擎和后缀比特输出引擎组成。前导比特输出引擎的输入信号low[6]连接到FIFO输出项的low[6];前导比特输出引擎的输入信号btf[7:0]连接到FIFO输出项btf[7:0];后缀比特输出引擎的输入信号low[5:0]连接到FIFO输出项的low[5:0];后缀比特输出引擎的输入信号beta[2:0]连接到FIFO输出项的beta[2:0]。

上述电路在实现基于CABAC的并行归一化编码方法时,按照以下方式实现:

对于第一级流水线:

1)标准编码模式中,根据变量RM/LPS[8:0],LM/LPS[9:0],n和γ,通过移位操作和逻辑操作得到RM/LPS[8:0]和LM/LPS[9:0],此算法在软件实现中不需要循环,在电路实现中以组合逻辑单周期完成。

2)标准编码模式中,所提出的算法根据当前变量bits_follow的值,n和γ,通过算数运算和逻辑操作得到btfreg[7:0]。此算法在软件实现中不需要循环,在电路实现中以组合逻辑单周期完成所需功能。

3)旁路编码模式中,归一化操作只涉及对编码下限和变量bits_follow的操作。所提出的算法根据当前变量Lbyp[10:0]的值,通过逻辑操作得到Lbyp[9:0],在软件实现中不需要循环,在电路实现中以组合逻辑单周期完成所需功能。

4)旁路编码模式中,定义btfbyp[7:0]为归一化操作后变量bits_follow的值。所提出的算法根据变量bits_follow[7:0]和Lbyp[10:9]的值,通过算数和逻辑运算得到btfbyp[7:0],所需的操作在软件实现中不需要循环,在电路实现中以组合逻辑单周期完成所需功能。

5)在电路实现中,提高了RBSP码流产生引擎的吞吐率,并且将归一化引擎与输出码流产生引擎分解为两级流水线操作,两级流水线间以深度为5的FIFO连接。

6)如果当前的归一化操作需要产生输出码流并且FIFO非满,归一化引擎向FIFO的尾指针所指向的存储项写入:low[6:0],beta[2:0]以及btf[7:0]。如果当前FIFO非空,输出码流产生引擎每次从FIFO头指针所指向的存储项取出low[6:0],beta[2:0]以及btf[7:0],通过对这些信息的解析生成输出码流。

而第二级流水线的输出码流产生引擎可在每周期产生多位输出比特,每次以字节为单位写出到RBSP。因为输出码流的吞吐率大于CABAC归一化操作(第一级流水线的操作),所以即使对当前FIFO项的处理需要多周期操作,只要FIFO的深度足够,就不会停滞前级归一化引擎流水线。根据实验,FIFO的深度置为5段即可满足要求。

具体来说,标准编码模式中,所提出的归一化算法和输出码流算法如下:

(1)RM/LPS[8:0]等于左移RM/LPS[8:0]n位;

(2)LM/LPS[9:0]通过以下操作获得:

定义临时变量等于左移LM/LPS[9:0]n位后的低10位;

LM/LPS[8:0]等于

如果在LM/LPS[9:9-n+1]中没有0,LM/LPS[9]等于否则,LM/LPS[9]等于0.

(3)为方便标记,定义ρ等于9-n。输出码流的产生和变量bits_follow[7:0]的更新分两种情况:

如果LM/LPS[9]等于1,首先将写入RBSP;

如果γ等于0,将LM/LPS[8:ρ+1]写入RBSP;否则,将LM/LPS[8:γ+1]写入RBSP;

变量btfreg[7:0]等于max(0,γ-ρ)。

否则,

如果γ等于0,btfreg[7:0]等于bits_follow+(9-ρ),此情况下,不需要向RBSP写入任何数据;

否则,

首先将写入RBSP;

然后将LM/LPS[8:γ+1]写入RBSP;

得到变量btfreg[7:0]等于γ-ρ。

旁路编码模式中,定义归一化操作前的编码下限为Lbyp[10:0];定义归一化操作后的编码下限为Lbyp[9:0];定义btfbyp[7:0]为归一化操作后bits_follow[7:0]的值。所提出的归一化算法和输出码流算法如下:

(1)如果Lbyp[10]等于1,Lbyp[9:0]=Lbyp[9:0];否则,Lbyp[9]=0且Lbyp[8:0]=Lbyp[8:0];

(2)如果Lbyp[10:9]等于01,btfbyp[7:0]等于bits_follow+1;否则btfbyp[7:0]等于0;

(3)输出码流分3种情况:

如果Lbyp[10]等于1,将写入RBSP;

否则,如果Lbyp[10:9]等于00,将写入RBSP;

否则,不需要向RBSP写入任何数据。

由以上实施例可以看出,本发明的方案在软件实现中,当前比特的归一化处理不需循环操作,从而提高了归一化处理速度;在电路实现中,任何比特的归一化均为单周期处理,避免了原多周期归一化操作所引入的流水线停滞;将归一化处理与产生RBSP码流操作分解为两级流水线,两级流水线间以5级先入先出(FIFO)寄存器连接,此结构可有效避免流水线停滞。因此,该设计避免了原有算法的多周期归一化操作所引发的CABAC流水线停滞问题。而且,本发明所提出的电路实现的吞吐率恒定,其吞吐率与所处理比特流中小概率符号发生概率无关。

以上所述仅是本发明的实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变型,这些改进和变型也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号