首页> 中国专利> 二进制算术视频编码的高性能再归一化

二进制算术视频编码的高性能再归一化

摘要

描述为视频编码进行高性能再归一化的各种实施例。在一个或多个实施例中,再归一化可包括检测输入符号流的范围值中的前导‘0’的个数、输入符号流的偏移值中的一连串‘1’和在偏移值中的这一连串‘1’之后的一连串‘0’。可以基于迭代窗为多次再归一化迭代输出位流。迭代窗可以包括在偏移值中的这一连串‘1’之后的位范围,并且再归一化迭代的次数可以基于范围值中的前导‘0’的个数。在一些实施例中,可以将在一连串‘1’之后有一个或多个‘0’的模式识别为特定模式。还描述其它实施例并主张其它实施例的权利。

著录项

  • 公开/公告号CN102158708A

    专利类型发明专利

  • 公开/公告日2011-08-17

    原文格式PDF

  • 申请/专利权人 英特尔公司;

    申请/专利号CN201110134237.5

  • 发明设计人 K·维蒂亚纳坦;

    申请日2007-12-17

  • 分类号H04N7/26;

  • 代理机构中国专利代理(香港)有限公司;

  • 代理人曲卫涛

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-18 03:00:25

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-12-06

    未缴年费专利权终止 IPC(主分类):H04N7/26 授权公告日:20140305 终止日期:20181217 申请日:20071217

    专利权的终止

  • 2014-03-05

    授权

    授权

  • 2011-09-28

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

    实质审查的生效

  • 2011-08-17

    公开

    公开

说明书

背景技术

在由诸如运动图像专家组(MPEG)、国际电信联盟(ITU)、国际标准化组织(ISO)和国际电工技术委员会(IEC)的组织颁布的标准中描述了各种视频编码技术。例如,上下文自适应二进制算术编码(CABAC)是在H.264/AVC标准ITU-T/ISO/IEC H.264/MPEG-4(第10部分)Advanced Video Coding(Video Coding for Very Low Bit Rate Communication,ITU-T Recommendation H.264(2003年5月),ITU-T Recommendation H.264:Advanced video coding for generic audiovisual services,ISO/IEC 14496-10:2005(E))中指定的熵编码要求。

CABAC包括在计算上相当复杂的算术编码。算术编码取符号流作为输入,并基于输入流中每个符号的出现概率输出0和1之间的浮点数。输入流的大小越长,就需要越多的位来表示该浮点数。为了避免此浮点数溢出,利用再归一化(renormalization)过程。

再归一化过程使用范围值(如codIRange)和偏移值(如codILow)来在每个时钟将位输出到压缩位流中。利用二进制算术编码来在每个时钟修正codIRange值和codILow值并提供修正后的值作为下一个时钟的输入。在迭代循环中反复使用这些值。当值超出某个范围或窗口时,将这些值再归一化并使其回到窗口内。

再归一化过程一般包括将九位codIRange值和10位codILow值限制在特定范围。如果codIRange值落在0-255范围内,则通过将codIRange值反复地(例如,在N步中)乘以2来将codIRange值推到256-511范围内。

对于这N次迭代,如果codILow值落在256-511范围内,则将codILow值减去256,同时将bitsOutstanding值递增。如果codILow值落在512-1023范围内,则将codILow值减去512,同时输出‘1’。如果codILow值落在0-255范围内,则将codILow值乘以2,同时输出‘0’。

这种再归一化过程实质上是连续的,并且是实现高吞吐量CABAC编码器的瓶颈。CABAC再归一化的当前解决方法是基于软件的,它们采用多个周期来将一个值归一化。基于硬件的解决方法一般每个位采取3-5个周期。典型的CABAC编码器平均每3-5个时钟输出1个位。这意味着,对于200MHz的时钟频率,以每4个时钟1个位,编码位速率为50Mbps。因此,要实时编码越高位速率的视频流,就需要越高的操作频率。

附图说明

图1示出根据一个或多个实施例包含再归一化装置的媒体处理系统。

图2是根据一个或多个实施例的再归一化逻辑流程。

图3示出根据一个或多个实施例的再归一化系统。

图4示出根据一个或多个实施例的再归一化装置。

图5示出根据一个或多个实施例的模式检测器和置换计算模块。

图6示出根据一个或多个实施例包含再归一化逻辑的制品。

具体实施方式

各种实施例涉及为诸如根据H.264/AVC标准的CABAC编码的视频编码执行高性能再归一化。在一个或多个实施例中,再归一化可包括检测输入符号流的范围值中的前导‘0’的个数、输入符号流的偏移值中的一连串(a run of)‘1’和在偏移值中的这一连串‘1’之后的一连串‘0’。可以基于迭代窗为多次再归一化迭代输出位流(A bitstream may be outputted based on an iteration window for a number of renormalization iterations)。迭代窗可以包括在偏移值中的这一连串‘1’之后的位范围,并且再归一化迭代的次数可以基于范围值中前导‘0’的个数。

在各种实现中,可以通过将范围值移动前导‘0’的个数个位来将范围值再归一化。可基于再归一化迭代的次数确定新的范围值和新的偏移值。如果偏移值的有效位在迭代窗中包含一连串‘1’,则偏移值可落在上限范围(upper range)内,并将值‘1’输出到位流。可在迭代之后将偏移值减少上限范围的最小值,并执行乘法以使偏移值回到上限范围内。偏移值可在这一连串‘0’期间落在上限范围以下,并可将值‘0’输出到位流。可将迭代窗锁存到寄存器中,并且如果寄存器中的最后一个位包含‘1’,则可将尚未确认的位(bits outstanding)的数量递增。否则,将值‘0’输出到位流。在一些实施例中,可将在一连串‘1’之后有一个或多个‘0’的模式识别为特定模式。

图1示出根据一个或多个实施例的媒体处理系统100。一般来说,媒体处理系统100可以包括用于传送信息的各种物理和/或逻辑组件,根据给定的一组设计参数或性能约束的需要,这些组件可作为硬件、软件或其任意组合来实现。尽管图1举例示出有限数量的组件,但可明白,对于给定实现,可以采用更多或更少数量的组件。

在一些实施例中,对于PC、消费型电子设备(CE)和/或移动平台,媒体处理系统100可作为设备内和/或连接到设备的系统来实现,设备可以是例如个人PC、STB、数字TV设备、互联网协议TV(IPTV)设备、数码相机、媒体播放器和/或蜂窝电话。这些设备的其它实例可以包括但不限于工作站、终端、服务器、媒体设备、音频/视频(A/V)接收器、数字音乐播放器、娱乐系统、数字TV(DTV)设备、高清晰TV(HDTV)设备、直播卫星TV(DBS)设备、视频点播(VOD)设备、WebTV设备、数字视频录像机(DVR)设备、数字多功能盘(DVD)设备、高清晰DVD(HD-DVD)设备、蓝光盘(BD)设备、家用视频系统(VHS)设备、数字VHS设备、游戏控制台、显示设备、笔记本型PC、膝上型计算机、便携式计算机、手持式计算机、个人数字助理(PDA)、IP语音(VoIP)设备、组合式蜂窝电话/PDA、智能电话、寻呼机、消息传送设备、无线接入点(AP)、无线客户机设备、无线站(STA)、基站(BS)、用户站(SS)、移动用户中心(MSC)、移动单元等。

例如,在移动应用中,媒体处理系统100可在设备内实现和/或连接到设备,该设备包括一个或多个用于进行无线通信的接口和/或组件,这一个或多个接口和/或组件可以是例如一个或多个发射器、接收器、收发器、芯片组、放大器、滤波器、控制逻辑、网络接口卡(NIC)、天线等。天线的实例可以包括但不限于内置天线、全向天线、单极天线、偶极天线、底端馈电天线、圆极化天线、微带天线、分集天线、双天线、天线阵列等。

在各种实施例中,媒体处理系统100可以形成有线通信系统、无线通信系统或其组合的一部分。例如,媒体处理系统100可以设置成通过一种或多种类型的有线通信链路传送信息。有线通信链路的实例可以包括但不限于电线、电缆、总线、印刷电路板(PCB)、以太网连接、对等(P2P)连接、底板、交换结构、半导体材料、对绞线、同轴电缆、光纤连接等。媒体处理系统100还可设置成通过一种或多种类型的无线通信链路传送信息。无线通信链路的实例可以包括但不限于无线电信道、卫星信道、电视信道、广播信道、红外信道、射频(RF)信道、无线保真(WiFi)信道、RF频谱的一部分、和/或一个或多个许可或免许可的频带。尽管可以利用特定通信介质举例说明某些实施例,但可明白,本文论述的原理和技术可以利用各种通信介质和伴随的技术来实现。

在各种实施例中,媒体处理系统100可以设置成在网络内操作,网络可以是例如广域网(WAN)、局域网(LAN)、城域网(MAN)、无线WAN(WWAN)、无线LAN(WLAN)、无线MAN(WMAN)、无线个域网(WPAN)、全球微波接入互操作性(WiMAX)网络、宽带无线接入(BWA)网络、互联网、万维网、电话网络、无线电网络、电视网络、电缆网络、诸如直播卫星(DBS)网络的卫星网络、码分多址接入(CDMA)网络、诸如宽带CDMA(WCDMA)的第三代(3G)网络、第四代(4G)网络、时分多址接入(TDMA)网络、扩展型TDMA(E-TDMA)蜂窝无线电话网络、全球移动通信系统(GSM)网络、GSM和通用分组无线电业务(GPRS)系统(GSM/GPRS)网络、同步分割多址接入(SDMA)网络、时分同步CDMA(TD-SCDMA)网络、正交频分复用(OFDM)网络、正交频分多址接入(OFDMA)网络、北美数字蜂窝(NADC)蜂窝无线电话网络、窄带高级移动电话业务(NAMPS)网络、通用移动电话系统(UMTS)网络、和/或配置成根据所描述的实施例载送数据的任何其它有线或无线通信网络。

媒体处理系统100可以设置成传送一种或多种类型的信息,如媒体信息和控制信息。媒体信息一般是指表示用于用户的内容的任何数据,如图像信息、视频信息、音频信息、A/V信息、图形信息、语音信息、文本信息、数值信息、字母数字符号、字符符号等。控制信息一般是指表示用于自动化系统的命令、指令或控制字的任何数据。例如,控制信息可用于通过系统路由媒体信息、或命令节点以某种方式处理媒体信息。媒体和控制信息可以从多个不同的设备或网络传送,并且可以传送到多个不同的设备或网络。

在各种实现中,可以将媒体信息和控制信息分成一系列的分组。每个分组可以包括例如具有以位或字节表示的固定或可变大小的离散数据集。可明白,所描述的实施例可适用于任何类型的通信内容或格式,例如分组、帧、段、小区、窗口、单元等。

媒体处理系统100可以根据一个或多个协议传送信息。协议可以包括用于管理节点间的通信的一组预定规则或指令。例如,在各种实施例中,媒体处理系统100可以采用一个或多个协议,例如媒体接入控制(MAC)协议,物理层会聚协议(PLCP),简单网络管理协议(SNMP),异步传输模式(ATM)协议,帧中继协议,系统网络体系结构(SNA)协议,传输控制协议(TCP),互联网协议(IP),TCP/IP,X.25,超文本传输协议(HTTP),用户数据报协议(UDP),等等。

媒体处理系统100可以根据由标准组织颁布的一个或多个标准来传送信息,标准组织可以是例如ITU、ISO、IEC、电气和电子工程师协会(IEEE)、互联网工程任务组(IETF)等。例如,在各种实施例中,媒体处理系统100可以根据诸如下列的媒体处理标准来传送信息:H.264/AVC标准,ITU/IEC H.263标准(Video Coding for Low Bitrate Communication,ITU-T Recommendation H.263v3,2000年11月发布),MPEG标准(例如,MPEG-1、MPEG-2、MPEG-4),数字视频广播(DVB)地面(DVB-T)标准,DVB卫星(DVB-S或-S2)标准,DVB电缆(DVB-C)标准,手持设备的DVB地面(DVB-H),美国国家电视系统委员会(NTSC)和逐行倒相(PAL)标准,高级电视系统委员会(ATSC)标准,电影与电视工程师学会(SMPTE)标准(例如,基于视窗媒体视频(WMV)的SMPTE 421M或VC-1标准第9版),通过互联网协议的数字传输内容保护(DTCP-IP)标准,高性能无线电局域网(HiperLAN)标准,等等。

在一些实现中,媒体处理系统100可设置成从媒体源接收媒体内容。媒体源一般可以包括能够向媒体处理系统100递送静态或动态媒体内容的各种设备和/或系统。例如,在一个实施例中,媒体源可以包括诸如摄像机或具有成像能力的移动设备的图像获取设备,或者可以构成此图像获取设备的部分。媒体源还可包括设置成提供广播或流式媒体内容的多媒体服务器。在其它实施例中,媒体源可以包括媒体分配系统(DS)或广播系统或构成其部分,媒体分配系统(DS)或广播系统可以是例如空中(OTA)广播系统、DVB系统、无线电广播系统、卫星广播系统等。媒体源可以在允许用户通过网络选择、接收和观看视频内容的VOD系统或交互式电视系统内实现。媒体源还可包括通过诸如宽带连接的IP连接递送数字电视内容的IPTV系统,或形成IPTV系统的部分。

媒体处理系统100可以通过能够载送信息信号的各种类型的通信信道耦合到媒体源,根据给定实现的需要,通信信道可以是例如有线通信链路、无线通信链路或其组合。媒体处理系统100还可设置成通过各种类型的组件或接口从媒体源接收媒体内容。例如,媒体处理系统100可以设置成通过一个或多个调谐器和/或接口接收媒体内容,其中调谐器和/或接口可以是例如开放电缆(OC)调谐器、NTSC/PAL调谐器、调谐器/解调器、部署点(POD)/DVB公共接口(DVB-CI)、A/V解码器接口、以太网接口、PCI接口等。

递送给媒体处理系统100的媒体内容可以包括各种类型的信息,例如图像信息、音频信息、视频信息、A/V信息和/或其它数据。在一些实现中,媒体源可以设置成以各种格式递送媒体内容以供诸如STB、IPTV设备、VOD设备、媒体播放器等设备使用。

媒体内容可以作为压缩媒体内容来递送,以便允许媒体处理系统100高效地存储和/或传送数据。在各种实现中,可以采用多种技术来压缩媒体内容,这些技术可以是例如利用离散余弦变换(DCT)的空间压缩、时间压缩、运动补偿和量化。媒体内容的视频压缩可以例如根据诸如H.264、MPEG-2、MPEG-4、VC-1等标准来执行。在一些情况下,媒体内容可以作为加扰和/或加密媒体内容来递送,以便防止未经授权的接收、复制和/或观看。

媒体处理系统100可以设置成处理一种或多种类型的信息,如视频信息。视频信息一般是指从一个或多个视频图像得出或与一个或多个视频图像相关联的任何数据。例如,视频信息可以包括以下信息中的一种或多种信息:视频数据、视频序列、图片组(GOP)、图片、图像、区域、对象、帧、片段、宏块、块、像素、信号(如Y、U和V)等。赋予像素的值可以包括实数和/或整数。

媒体处理系统100可以设置成执行视频编码,如熵编码。在一个或多个实施例中,媒体处理系统100可以在熵编码器内实现和/或耦合到熵编码器,熵编码器可以是例如CABAC编码器或符合所描述的实施例的任何其它合适的熵编码器。尽管出于说明的目的将一些实施例描述成实现CABAC编码,但可明白,所描述的实施例的各个方面可适用于其它视频编码和/或解码技术,例如可变长度编码(VLC)、基于上下文的自适应可变长度编码(CAVLC)等。

例如,当通过CABAC编码器来实现时,媒体处理系统100可以设置成根据H.264/AVC标准来利用算术编码并利用每个符号非整数或小数个位来将值编码。媒体处理系统100还可设置成基于观察到的相关语法元素来自适应地调整到动态符号统计并利用上下文建模。

媒体处理系统100可以设置成接收并编码符号流102并输出包括压缩视频位的序列的编码位流104。在一个或多个实施例中,符号流102可以包括用于各种语法元素的符号。语法元素的实例可以包括以下元素中的一种或多种元素:片段有效载荷数据、宏块类型和/或块模式、内部预测模式、参考帧索引、运动向量、量化变换系数等。

在各种实现中,符号流102可从量化器提供。在这些实现中,量化器可以设置成根据量化因子和/或量化矩阵来量化经过变换(如前向DCT)的系数并输出残余系数。余数可与预测的和/或实际的内容(如像素、运动向量)之差有关,例如与当前帧和一个或多个参考帧的块之间的差有关。

如图1所示,媒体处理系统100可以包括再归一化装置106。在各种实施例中,再归一化装置可以设置成优化CABAC编码和再归一化的数据路径。再归一化装置106可经实现以便例如为在较低时钟频率需要非常高吞吐量的应用和/或产品执行高性能再归一化,这些应用和/或产品可以是例如高清晰(HD)应用和产品(例如,支持HD的H.264编码器、多流HD编码器、用于数码相机应用的超过HD分辨率的编码器(4000×3000像素)等)。但是,实施例在这方面不受限制。

如图所示,再归一化装置106可以包括多个功能组件或模块。这些模块可以通过一个或多个芯片或集成电路(IC)来实现,并且可以包括例如硬件和/或诸如将通过逻辑设备执行的逻辑(如指令、数据和/或代码)的软件。逻辑设备的实例可以包括但不限于中央处理单元(CPU)、微控制器、微处理器、通用处理器、专用处理器、芯片多处理器(CMP)、媒体处理器、数字信号处理器(DSP)、网络处理器、协处理器、输入/输出(I/O)处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、可编程逻辑设备(PLD)等。可执行逻辑可以在逻辑设备的内部或外部存储在一种或多种类型的计算机可读存储介质上,计算机可读存储介质可以是例如易失性或非易失性存储器、可移动或不可移动存储器、可擦除或不可擦除存储器、可写或可重写存储器等。根据给定实现的需要,这些模块可以通过包括有线通信介质、无线通信介质或两者的组合的通信介质在物理或逻辑上耦合和/或连接。在一些实施例中,这多个模块可以通过单个芯片或集成电路(IC)作为芯片上系统(SOC)来实现。实施例在这方面不受限制。

如图所示,再归一化装置106可以接收符号流102。在一个或多个实施例中,符号流102可以包括范围值和偏移值。在各种实现中,范围值可以包括九位(如B0-B8)codIRange值,而偏移值可以包括十位(如B0-B9)codILow值。

再归一化装置106可以包括前导‘0’检测模块108。在一个或多个实施例中,前导‘0’检测模块108可以设置成接收范围值codIRange并在范围值codIRange中从左到右检测在第一个‘1’之前的前导‘0’的个数。前导‘0’检测模块108可以基于范围值codIRange中前导‘0’的个数来确定再归一化迭代的次数,并且可以将再归一化迭代数IterN设置成等于前导‘0’的个数。在各种实现中,再归一化迭代数IterN的最小值可以是1,再归一化迭代数IterN的最大值可以是8。

再归一化装置106可以包括耦合到前导‘0’检测模块108的第一移位器和寄存器模块110与第二移位器和寄存器模块112。移位器和寄存器模块110、112可以通过例如桶形移位器逻辑和寄存器来实现。第一移位器和寄存器模块110可以接收范围值codIRange和再归一化迭代数IterN作为输入。第二移位器和寄存器模块112可以接收偏移值codILow和再归一化迭代数IterN作为输入。

在一个或多个实施例中,第一移位器和寄存器模块110可以设置成将范围值codIRange再归一化。例如,范围值codIRange可以包含九位值(如B0-B8),并且范围值codIRange的再归一化可以通过重复向左移位直到在位八(B8)位置出现‘1’来获得。在各种实现中,用于将范围值codIRange再归一化的移位数ShiftN对应于再归一化迭代的次数和范围值codIRange中前导‘0’的个数。

移位器和寄存器模块110、112可以设置成基于再归一化迭代数IterN来确定将用于下一步算术编码的新的范围值codIRange和新的偏移值codILow。在一个或多个实施例中,新的范围值codIRange可以通过第一移位器和寄存器模块110将范围值codIRange向左移动再归一化迭代数IterN个位(例如,codIRange=codIRange<<IterN)来获得。新的偏移值codILow可以通过第二移位器和寄存器模块112将偏移值codILow向左移动再归一化迭代数IterN个位(例如,codILow=codILow<<IterN)来获得。在各种实现中,新codIRange值和新codILow值可由移位器和寄存器模块110、112在一个周期中生成。

再归一化装置106可以包括前导‘1’检测模块114。在一个或多个实施例中,前导‘1’检测模块114可以设置成接收偏移值codILow并在偏移值codILow中检测一连串前导‘1’。例如,前导‘1’检测模块114可将一连串前导‘1’的值LeadOneN设置为从偏移值codILow的位位置B9到位位置B0中‘1’的个数。

再归一化装置106可以包括耦合到前导‘0’检测模块108和前导‘1’检测模块114的减法模块116。减法模块116可以将新迭代值IterNew设置成等于再归一化迭代数IterN和前导‘1’的个数之差(例如,IterNew=IterN-LeadOneN)。减法模块116可以将IterNew值提供给决策模块118。在一个或多个实施例中,如果IterNew值小于或等于0,则决策模块118可结束再归一化循环。

决策模块118可以将IterNew值提供给耦合到前导‘0’检测模块122的减法模块120。在一个或多个实施例中,前导‘0’检测模块122可以设置成在偏移值codILow中检测一连串前导‘0’。这一连串前导‘0’可跟在范围值codILow中的一连串前导‘1’之后。如果在范围值中有一连串‘1’,则可将OneWindow值设置成等于LeadOneN值。如果没有一连串‘1’(例如,LeadOneN=0),则可将OneWindow值设置成等于1。前导‘0’检测模块122可以将一连串前导‘0’的值LeadZeroN设置为从偏移值codILow的位位置B9-OneWindow到位位置B0中‘0’的个数。

减法模块120可以设置成确定有效迭代值IterEffective,该有效迭代值IterEffective设置成等于新迭代值IterNew和跟在这一连串‘1’之后的‘0’的个数之差(例如,IterEffective=IterNew-LeadZeroN)。

减法模块120可以将IterEffective值提供给决策模块124。如果连串长度(run length)大于有效迭代值IterEffective(例如,IterEffective<0),则决策模块124可以指示可将值‘0’多次放到位流中,放入次数对应于有效迭代值IterEffective的绝对值。

决策模块124可以耦合到迭代循环(interloop)模块126。在一个或多个实施例中,迭代循环模块126可以接收IterEffective值和codILow值,并将在偏移值codILow中的这一连串‘1’之后的位范围锁存到寄存器(如八位寄存器A[8:0])中。

再归一化装置106可以包括有限状态机(FSM)模块128。FSM模块128可以耦合到前导‘1’检测模块114、决策模块124和迭代循环模块126。在一个或多个实施例中,FSM模块可以从前导‘1’检测模块114接收PutBit(1)指令和PutBit(1)调用次数指令。FSM模块可以从决策模块124接收PutBit(0)指令和PutBit(0)调用次数指令。FSM模块128可以从迭代循环模块126接收PutBit(x)指令和PutBit(x)调用次数指令。FSM模块128还可从耦合到尾部‘1’检测模块132的寄存器130接收bitsOutstanding值,其中尾部‘1’检测模块132设置成在codILow值中检测‘1’的序列。

在一个或多个实施例中,FSM模块128可以设置成将PutBit(x)指令、PutBit(x)调用次数指令和bitsOutstanding值提供给位生成模块134。位生成模块134可以设置成响应从FSM模块128接收的PutBit(x)指令、PutBit(x)调用次数指令和bitsOutstanding值而输出位流104。在各种实现中,位生成模块130可以设置成如下生成位流104。

如果在偏移值codIRange的最高有效位位置中(例如,从位位置B9开始)存在连续多个‘1’,则当进入再归一化循环时,偏移值codILow可落在512-1023范围内。例如,如果B9及其以下的位位置在迭代窗位范围IterWindow中包含一连串‘1’,则在每次迭代之后,将偏移值codILow减小512,并乘以2以使偏移值codILow回到512-1023范围内,同时将‘1’输出到位流。在各种实现中,在多次再归一化迭代IterN的再归一化期间,一旦codILow值落到0-255范围内,它便不会再落在512-1023范围内。

对于在检测到的这一连串前导‘1’之后检测到的一连串‘0’,偏移值codILow可在这一连串‘0’期间落在0-511范围内,并且可将值‘0’输出到位流。在一个或多个实施例中,可将新迭代值IterNew设置成等于再归一化迭代的次数和前导‘1’的个数之差(例如,IterNew=IterN-LeadOneN)。如果IterNew值小于或等于0,则再归一化循环可结束。

可将有效迭代值IterEffective设置成等于新迭代值IterNew和在这一连串‘1’之后的‘0’的个数之差(例如,IterEffective=IterNew-LeadZeroN)。如果连串长度大于有效迭代值IterEffective(例如,IterEffective<0),则多次将值‘0’放到位流中,放入次数对应于有效迭代值IterEffective的绝对值。

如果连串长度不大于有效迭代值IterEffective(例如,IterEffective>0),则将包含偏移值codILow中的这一连串‘1’之后的位的迭代窗锁存到寄存器(如八位寄存器A[8:0])中。对于迭代窗,如果寄存器中的最后一位是‘1’,则将尚未确认的位的数量递增(例如,bitsOutstanding++)。否则,将值‘0’放到位流中,并将寄存器向左移动1个位(例如,A[8:0]<<1)。可明白,可能要花费多达8个时钟周期来完成迭代窗。

图2示出根据一个或多个实施例的再归一化逻辑流程200。在各个实施例中,根据给定的一组设计参数或性能约束的需要,逻辑流程200可以通过各种系统、设备、单元和/或组件来执行,并且可以作为硬件、软件和/或其任意组合来实现。例如,逻辑流程200可通过如图1所示的再归一化装置106(例如,多周期再归一化单元)来实现。但是,实施例在这方面不受限制。

逻辑流程200可以包括接收包含范围值和偏移值的输入符号流(方框202)。在一个或多个实施例中,范围值可以包含九位(如B0-B8)codIRange值,而偏移值可以包含十位(如B0-B9)codILow值。

逻辑流程200可以包括基于范围值中的前导‘0’的个数来确定再归一化迭代的次数(方框204)。在一个或多个实施例中,在范围值codIRange中从左到右检测在第一个‘1’之前的前导‘0’的个数。基于前导‘0’的个数设置再归一化迭代数IterN。在各种实现中,再归一化迭代数IterN的最小值可以是1,而再归一化迭代数IterN的最大值可以是8。

逻辑流程可以包括将范围值再归一化(方框206)。在一个或多个实施例中,范围值codIRange可以包括九位值(如B0-B8),并且范围值codIRange的再归一化可以通过重复向左移位直到在位八(B8)位置出现‘1’来获得。在各种实现中,用于将范围值codIRange再归一化的移位数ShiftN对应于再归一化迭代的次数以及范围值中前导‘0’的个数。

逻辑流程200可以包括基于再归一化迭代的次数确定用于下一步算术编码的新的范围值和新的偏移值(方框208)。在一个或多个实施例中,新的范围值codIRange可以通过将范围值codIRange向左移动再归一化迭代数IterN个位(例如,codIRange=codIRange<<IterN)来获得。新的偏移值codILow可以通过将偏移值codILow向左移动再归一化迭代数IterN个位(例如,codILow=codILow<<IterN)来获得。在各种实现中,新codIRange值和新codILow值可以在一个周期中生成。

逻辑流程200可以包括在范围值中检测一连串前导‘1’(方框210)。在一个或多个实施例中,可将一连串前导‘1’的值LeadOneN设置为从偏移值codILow的位位置B9到位位置B0的这一连串‘1’。如果在范围值中存在一连串‘1’,则可将OneWindow值设置成等于LeadOneN值。如果没有一连串‘1’(例如,LeadOneN=0),则可将OneWindow值设置成等于1。

逻辑流程200可以包括在偏移值中检测在这一连串前导‘1’之后的一连串前导‘0’(方框212)。一连串前导‘0’的值LeadZeroN可以通过检测从偏移值codILow的位位置B9-OneWindow到位位置B0的一连串前导‘0’来确定。

逻辑流程200可以包括确定迭代窗(方框214)。在一个或多个实施例中,迭代窗可以包括在偏移值codILow中的这一连串‘1’之后的位范围。例如,如果在偏移值codILow中有一连串‘1’(例如,LeadOneN!=0),则可将迭代窗值IterWindow设置成等于包含偏移值codILow的位位置B9-OneWindow到位位置B9-IterN的位范围。如果没有一连串‘1’,则可将迭代窗值IterWindow设置成等于包含偏移值codILow的位位置B8到位位置B8-IterN的位范围。

逻辑流程200可以包括基于迭代窗为多次再归一化迭代生成位流(方框216)。如果在偏移值codIRange的最高有效位位置中(例如,从位位置B9开始)有多个连续‘1’,则当进入再归一化循环时,偏移值codILow可落在512-1023范围内。例如,如果B9及其以下位位置在迭代窗位范围IterWindow中包含一连串‘1’,则在每次迭代之后,将偏移值codILow减小512,并乘以2以使偏移值codILow回到512-1023范围内,同时将‘1’输出到位流。在各种实现中,在多次再归一化迭代IterN的再归一化期间,一旦codILow值落到0-255范围内,它便不会再落在512-1023范围内。

对于在检测到的这一连串前导‘1’之后检测到的一连串‘0’,偏移值codILow可在这一连串‘0’期间落在0-511范围内,并且可将值‘0’输出到位流。在一个或多个实施例中,可将新迭代值IterNew设置成等于再归一化迭代的次数和前导‘1’的个数之差(例如,IterNew=IterN-LeadOneN)。如果IterNew值小于或等于0,则再归一化循环可结束。

可将有效迭代值IterEffective设置成等于新迭代值IterNew和在这一连串‘1’之后的‘0’的个数之差(例如,IterEffective=IterNew-LeadZeroN)。如果连串长度大于有效迭代值IterEffective(例如,IterEffective<0),则多次将值‘0’放到位流中,放入次数对应于有效迭代值IterEffective的绝对值。

如果连串长度不大于有效迭代值IterEffective(例如,IterEffective>0),则将包含偏移值codILow中的这一连串‘1’之后的位的迭代窗锁存到寄存器(如八位寄存器A[8:0])中。对于此迭代窗,如果寄存器中的最后一位是‘1’,则将尚未确认的位的数量递增(例如,bitsOutstanding++)。否则,将值‘0’放到位流中,并将寄存器向左移动1个位(例如,A[8:0]<<1)。可明白,可能要花费多达8个时钟周期来完成迭代窗。

用于实现再归一化逻辑流程200的算法或伪代码的一个实施例如下:

1.令IterN=ShiftN=codIRange再归一化过程的移位数(从左到右数codIRange的第一个‘1’之前的前导‘0’的个数)。IterNmax=8;IterNmin=1;

2.将codILow向左移动IterN个位,以便获得新的codILow,即,codILow=codILow<<IterN;

3.将codIRange向左移动IterN个位,以便获得新的codIRange,即,codIRange=codIRange<<IterN;

4.令LeadOneN=codILow的B9到B0范围中的一连串前导‘1’;

5.if(LeadOneN!=0),令OneWindow=LeandOneN;else  ‘1’;

6.令LeadZeroN=codILow的B9-OneWindow到B0范围中的一连串前导‘0’;

7.if(LeadOneN!=0),令IterWindow=B9-OneWindow到B9-IterN;else B8到B8-IterN;

8.进行如下操作以便生成位流:

可明白,在再归一化逻辑流程200和/或算法的各种实现中,再归一化循环的迭代次数(IterN)等于从左到右数在codIRange值中的第一个‘1’之前的前导‘0’的个数。codIRange的再归一化可以通过重复向左移位直到在位位置B8中出现‘1’来获得。在codILow再归一化迭代(IterN)期间,一旦该值落到0-255范围内,它便不会再落在512-1023范围内。codILow落在512-1023范围内的唯一可能性是当在进入再归一化循环时从位位置B9开始在最高有效位置存在多个连续‘1’时。

图3示出根据一个或多个实施例的再归一化系统300。在各种实施例中,再归一化系统300可用于实现图2中的逻辑流程200。但是,实施例在这方面不受限制。

再归一化系统300可设置成接收并编码符号流302并输出包含压缩视频位的序列的编码位流304。再归一化系统300可以包括多个多周期再归一化单元306-1-X,其中X表示符合所描述的实施例的任何正整数值。在一个或多个实施例中,每个多周期再归一化单元306-1-X可以由图1中的再归一化装置106来实现。但是,实施例在这方面不受限制。

如图3所示,再归一化系统300可以包括八个多周期再归一化单元306-1-8来实现单周期再归一化。在各种实现中,再归一化系统300可以包括多周期体系结构来实现每个时钟一个位的单时钟性能。

再归一化系统300可以包括耦合到多周期再归一化单元306-1-8的调度器模块308。在一个或多个实施例中,调度器模块308可设置成按顺序将待再归一化的输入值分配给每个多周期再归一化单元306-1-8。在这样的实施例中,在8个时钟之后,调度器模块308可返回到第一多周期再归一化单元306-1。即使假设在最差情况下要8个周期来再归一化每个值,在第9个时钟,第一多周期再归一化单元306-1准备好接收下一个值。类似地,在第10个时钟,第二多周期再归一化单元306-2准备好接收下一个值,依此类推。

在多周期再归一化单元306-1-8的输出处有对应的缓冲器310-1-8,它们流入到用于采集输出的排放器和位流编写器(drainer and bitstream composer)模块312。在一个或多个实施例中,排放器和位流编写器模块312可以作为按照顺序方式放出来自每个多周期再归一化单元306-1-8的输出的位以编写最终位流的先进先出(FIFO)排放器来实现。在各种实现中,可以在每次迭代时通过排放器和位流编写器模块312生成一个或多个位。但是,有时不生成任何位。为了考虑这样的业务突发,可在输出处提供位流缓冲器314以承受这种突发性。

尽管bitsOutstanding的值通常在30-100范围内,但在一些实现中,bitsOutstanding值可增大至片段(slice)大小。bitsOutstanding的值越大,将导致越高的突发性。为了适应这种突发性,排放器和位流编写器模块312可以包括可在一个时钟中将128个位倾倒到位流的128位寄存器。

在各种实现中,再归一化系统300可以提供1位/周期至10位/时钟的吞吐量。在这些实现中,再归一化系统300可以设置成每个时钟接收一个codILow值并且无任何背压地创建位流。因此,以1位/周期的吞吐率,再归一化系统300可以利用50MHz时钟实现50Mbps吞吐量。另外,再归一化系统300的体系结构是高度流水线式的,并且可从时钟频率和性能方面扩展。例如,平均编码吞吐量可以是10位/周期,并且以250MHz时钟,再归一化系统300能以2.5Gbps编码位流。

图4示出根据一个或多个实施例的再归一化装置400。在各种实施例中,再归一化装置400可用于实现图2中的逻辑流程200。但是,实施例在这方面不受限制。

如图所示,再归一化装置400可以接收包含范围值和偏移值的符号流402。范围值可以包括九位(如B0-B8)codIRange值,而偏移值可以包括十位(如B0-B9)codILow值。在一个或多个实施例中,再归一化装置400可以作为能够输出每个时钟一个位的位流404的单周期再归一化器来实施。

再归一化装置400可以包括前导‘0’检测模块408、第一移位器和寄存器模块410、第二移位器和寄存器模块412、前导‘1’检测模块414、减法模块416、决策模块418、减法模块420、前导‘0’检测模块422和决策模块424。在各种实施例中,这些元件可以基本上如上文结合图1中的再归一化装置106所描述地那样来实现。在各种实现中,发送codILow值使其经过前导‘1’检测模块414和决策模块424,这两个模块414和424处理如上所述的三种再归一化情形中的两种再归一化情形。

如图所示,再归一化装置400可以包括模式检测器和置换(in-place)计算模块426。在再归一化装置400中,将决策模块424的输出(例如,SourceReg、OutputReg)馈送给模式检测器和置换计算模块426,由模块426来完成再归一化流程。在每个逻辑级,修正codILow值的位。在任何级不进行移位。因此,可在一个周期中完成所有位操纵操作。

在一个或多个实施例中,模式检测器和置换计算模块402可以设置成将在一连串‘1’之后有一个或多个‘0’的模式识别为特定模式。检测到的‘1’的连串可以包括几种可能的模式,例如“10”至“11111110”。另外,对于每个模式,有几种可能的位置。例如,对于“10”模式,从B7到B1,可以有七种可能的位置。可以利用尾部‘1’检测模块432来检测八个‘1’的序列。

在一些情况下,特定模式需要特殊处理。例如,如果发现一连串‘1’,则在发现转化状况(breaking condition)之前不将位倾倒到位流中。转化状况是指在将要编码的当前codILow值中出现0和/或在将要编码的下一个codILow值中出现0/1。

在一个或多个实施例中,模式检测器和置换计算模块426可以设置成对某些模式进行优先级排序。例如,如果对相同的位结束位置断言模式“10”和模式“110”,则可赋予模式“110”较高优先级。模式检测器和置换计算模块426可以设置成执行置换计算,其中可对模式进行位反转。例如,将codILow值11011010转换为01101101,接着将01101101写入到位流中。

在各种实施例中,通过采用并行的模式检测和置换计算技术,再归一化装置400能以额外管芯面积为代价来实现单周期再归一化器。在各种实现中,再归一化装置400可以提供1位/周期至10位/时钟的吞吐量。因此,再归一化装置400可以利用50MHz时钟或5MHz时钟来实现50Mbps吞吐量。对于以25MHz时钟运行的系统,可实现250Mbps的平均编码吞吐量。另外,再归一化装置400的体系结构是高度流水线式的,并且可从时钟频率和性能方面扩展。例如,平均编码吞吐量可以是10位/周期,并且以250MHz时钟,再归一化装置400能以2.5Gbps编码位流。

图5示出根据一个或多个实施例的模式检测器和置换计算模块500。模式检测器和置换计算模块500可以在例如图4中的再归一化装置400中实现。但是,实施例在这方面不受限制。

模式检测器和置换计算模块500可以包括多个模式检测器502-1-Y,其中Y表示符合所描述的实施例的任何正整数值。例如,可以采用总计28个模式检测器502-1-Y(例如,N=28)来涵盖所有模式和所有位置。

如图5所示,模式检测器和置换计算模块500可以包括耦合到位置解算器504的七个模式检测器502-1-7。检测到的‘1’的连串可以包括几种可能的模式,例如“10”到“11111110”。另外,多于每种模式,有几种可能的位置。例如,对于“10”模式,从B7到B1,有七种可能的位置。在此实施例中,这七个模式检测器502-1-7可对应于七种可能的包含‘1’的连串的模式“10”到“11111110”。

在各种实现中,将来自每个模式检测器502-1-7的信号发送到位置解算器(resolver)504。在一个或多个实施例中,如果对相同的位结束位置断言来自模式“10”和来自模式“110”的信号,则可赋予模式“110”较高优先级。位置解算器504可设置成将最终的位置和连串馈送给置换计算单元506,在置换计算单元506中对模式进行位反转。例如,将codILow11011010值转换为01101101,接着将01101101写入到位流中。

图6示出制品600的一个实施例。如图所示,制品600可以包括用于存储再归一化逻辑604的存储介质602,其中再归一化逻辑604用于执行根据所描述的实施例的各种操作。在各种实施例中,制品600可由各种系统、组件和/或模块来实现。

制品600和/或存储介质602可以包括一种或多种类型的能够存储数据的计算机可读存储介质,包括易失性存储器或非易失性存储器、可移动或不可移动存储器、可擦除或不可擦除存储器、可写或可重写存储器等。计算机可读存储介质的实例可以包括但不限于随机存取存储器(RAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双倍数据速率RAM(DDR RAM)、DDR SDRAM、静态RAM(SRAM)、只读存储器(ROM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、致密盘ROM(CD-ROM)、可刻录致密盘(CD-R)、可重写致密盘(CD-RW)、闪存(例如,NOR或NAND闪存)、内容可寻址存储器(CAM)、聚合物存储器(例如,铁电聚合物存储器)、相变存储器(例如,奥氏存储器)、铁电存储器、硅氧化物氮氧化物硅(SONOS)存储器、盘(例如,软盘、硬盘驱动器、光盘、磁盘、磁光盘)、或卡(例如,磁卡、光卡)、磁带、卡带、或任何其它类型的适于存储信息的计算机可读存储介质。

制品600和/或存储介质602可以存储包含指令、数据和/或代码的再归一化逻辑604,这些指令、数据和/或代码在执行时使计算机或计算机系统执行根据所描述的实施例的方法和/或操作。这样的计算机或计算机系统可以包括例如任何适合的处理平台、计算平台、计算设备、处理设备、计算系统、处理系统、处理器等,并且可以利用任何合适的硬件和/或软件的组合来实现。

再归一化逻辑604可以包含以下内容或作为以下内容来实现:软件、软件模块、应用、程序、子例行程序、指令、指令集、计算代码、字、值、符号或其组合。指令可以包括任何合适类型的代码,例如源代码、编译代码、解释代码、可执行代码、静态代码、动态代码等。指令可以根据预定的计算机语言、方式或语法来实现,以指示处理器执行某个功能。指令可以利用诸如C、C++、Java、BASIC、Perl、Matlab、Pascal、Visual BASIC、汇编语言、机器代码等任何合适的高级、低级、面向对象、可视、编译和/或解释编程语言来实现。实施例在这方面不受限制。

上文阐述了众多具体细节以便充分理解实施例。但将了解,没有这些具体细节也可实现这些实施例。在其它情况下,没有详细描述熟知的操作、组件和电路,以免使这些实施例晦涩难懂。可明白,这些具体结构和功能细节只是代表性的,它们不一定限制这些实施例的范围。

各种实施例可以包括一个或多个元件。元件可以包括设置成执行某些操作的任何结构。根据给定的一组设计和/或性能约束的需要,每个元件可以作为硬件、软件或其任意组合来实现。尽管举例描述在某种拓扑中具有有限数量的元件的实施例,但根据给定实现的需要,实施例可在备选拓扑中包含更多或更少的元件。

值得注意的是,任何时候提到“一个实施例”或“实施例”时表示,结合该实施例描述的特定特征、结构或特性包含在至少一个实施例中。说明书中出现短语“在一个实施例中”时不一定都指相同的实施例。

尽管可以将一些实施例说明并描述为包括执行各种操作的示范性功能组件或模块,但可明白,这些组件或模块可以通过一个或多个硬件组件、软件组件和/或其组合来实现。这些功能组件和/或模块可以通过例如将由逻辑设备(如处理器)执行的逻辑(例如,指令、数据和/或代码)来实现。此逻辑可以在逻辑设备的内部或外部存储在一种或多种类型的计算机可读存储介质上。

附图中的一些图可以包含流程图。尽管这些图可以包含特定的逻辑流程,但可明白,此逻辑流程只是提供通用功能的示范实现。此外,除非另外指出,否则逻辑流程不一定要按照所给出的顺序执行。另外,逻辑流程可以通过硬件元件、由处理器执行的软件元件或其任意组合来实现。

除非另外特别指出,否则可明白,诸如“处理”、“计算”、“演算”、“确定”等术语是指计算机或计算系统或类似电子计算设备的动作和/或处理,此动作和处理用于操纵表示为寄存器和/或存储器内的物理量(如电子)的数据和/或将此数据变换为类似地表示为存储器、寄存器或其它这样的信息存储、传输或显示设备内的物理量的其它数据。

值得注意的是,可以利用表述“耦合”和“连接”及其派生词来描述一些实施例。这些术语不是彼此同义的。例如,可以通过使用术语“连接”和/或“耦合”来指示两个或两个以上元件彼此直接物理或电接触而描述一些实施例。但是,术语“耦合”还可表示,两个或两个以上元件彼此不直接接触,但仍然彼此协作或交互。例如,关于软件元件,术语“耦合”可以指接口、消息接口、API、交换消息等。

尽管如上所述说明了实施例的某些特征,但本领域的技术人员现在将可联想到许多修改、替换、改变和等效物。因此,将明白,希望随附权利要求涵盖所有这些落在实施例的真实精神内的修改和改变。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号