CN101072349A - 内容适应性可变长度编码的解码***与方法 - Google Patents
内容适应性可变长度编码的解码***与方法 Download PDFInfo
- Publication number
- CN101072349A CN101072349A CN 200710110295 CN200710110295A CN101072349A CN 101072349 A CN101072349 A CN 101072349A CN 200710110295 CN200710110295 CN 200710110295 CN 200710110295 A CN200710110295 A CN 200710110295A CN 101072349 A CN101072349 A CN 101072349A
- Authority
- CN
- China
- Prior art keywords
- cavlc
- level
- buffer
- information
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Image Generation (AREA)
- Image Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明揭露一种解码***与方法,***实施例包含软件可编程核心处理单元,其具有内容适应性可变长度编码(CAVLC)单元,用于执行着色器,该着色器用于施行CAVLC解码视频流,并提供解码数据输出。
Description
技术领域
本发明涉及一种解码***与方法。
背景技术
计算机绘图乃是以计算机产生图像、影像或其它图形或图像信息的一门艺术和科学,目前的绘图***多包含数个接口,例如微软的Direct3D接口及OpenGL等等,如此可于执行特定操作***(如微软的WINDOWS)的计算机上控制诸如图形加速器或图形处理单元(graphics processing unit,GPU)等的多媒体硬件,图像、影像的产生常被称为「描绘成像(rendering)」,此类操作的细节一般是由图形加速器进行,于三维(3D)计算机绘图中,构成场景中对象表面(或物体)的几何形状经转变为像素(图形单元)后,储存于画面缓冲区(frame buffer)中,接着显示于显示装置上,每一个对象或对象群都有与表面外观有关的特定视觉性质,例如材质、反射性、形状、纹理等等,这些可以定义成对象或对象群的描绘内容(context)。
计算机绘图必须迎合消费者对游戏及其它多媒体产品的控制性及特色的重口味要求,还要能产生更加真实的影像以及改善处理速度及耗能,现已发展出许多标准可以利用较少的位数产生较佳影像的质量,例如H.264标准(又称为ISO动画专家群组MPEG-4第十部)是一种高压缩数字视频编码标准,与MPEG-2兼容的编码相比,H.264兼容的编码仅需要差不多三分之一的位数,即可储存同样视频质量的视频,H.264标准提供两种熵(entropy)解码程序,分别是内容适应性二进制算术编码(context-adaptive binary arithmeticcoding,CABAC)以及内容适应性可变长度编码(context-adaptive variablelength coding,CAVLC),CAVLC是一种霍夫曼(Huffman)编码的内容适应性变化,根据编码数据的总类会改变每一个编码符号的机率,CAVLC使用运作-层级(run-level)编码以简洁表达零字符串,使用这种方法发出一些高频+/-1系数并于相邻图块的非零系数连结,CAVLC中,将适应性编码位于或低于切片(slice)层的4×4转换的DC系数的第二Hadamard转换),目前CAVLC解码结构可满足消费者的部分需求,但是在设计上仍有其限制。
发明内容
本发明揭露一种内容适应性可变长度编码(context-adaptive variablelength coding,CABAC)的解码***及方法(之后简称为解码***),运用于图形处理单元(graphics processing unit,GPU)内的多线程(multithread)并行计算核心,简单地说,于一实施例中,本***包含软件可编程核心处理单元,其内具有CAVLC单元以执行着色器(shader),该着色器可以执行视频流的CAVLC解码,并提供解码数据输出。
方法实施例则包括下列步骤:将着色器加载具有CAVLC单元的可编程核心处理单元,CAVLC执行该着色器以CAVLC解码视频流,并提供解码数据输出。
本领域技术人员于检视以下图式及详细说明之后,当可推演出其它***、方法、特征及优点,所有此等推演的***、方法、特征及优点均属本发明的范围,受到如附申请专利范围的保护。
附图说明
这里所揭露实施例的各方观点可参考下列图式以获得更深入的了解,图式中的元件并未限定其尺寸比例,仅用于清楚说明本发明的原则,各图中相似的标号代表相对应的部分。
图1:图形处理器***实施例的方块图,其中可施行多种解码***(及方法)实施例。
图2:例示处理环境的方块图,其中可施行多种解码***实施例。
图3:图2例示处理环境内的选择元件方块图。
图4:图2与图3例示处理环境内的计算核心方块图,其中可施行多种解码***实施例。
图5A:图4计算核心内的执行单元的选择元件方块图,其中可施行多种解码***实施例。
图5B:执行单元数据路径的方块图,其中可施行多种解码***实施例。
图6A:图5所示解码***实施例的方块图。
图6B:图6A解码***的比特流缓冲器实施例的方块图。
图6C:图6A解码***的内容存储器结构配合相关暂存器实施例的方块图。
图6D:用于CAVLC解码的解码***200所使用窗体结构实施例的方块图。
具体实施方式
本发明揭示了多种内容适应性可变长度编码(context-adaptivevariable length coding,CAVLC)的解码***及方法(之后将通称为解码***),于一实施例中,解码***是内嵌于图形处理单元(graphics processingunit,GPU)的可编程、多线程、并行计算核心的一个或多个执行单元中,利用软件结合硬件的方式来达成解码功能,亦即视频解码是以图形处理单元编程(programming)的内容(context)配合施行于图形处理单元数据路径内的硬件所完成,举个例子,解码运算或方法是由具有扩充指令集(extendedinstruction set)的着色器(shader,如顶点着色器)、图形处理单元的执行单元数据路径、以及用于CAVLC处理环境中的自动管理比特流缓冲器的附加硬件所共同完成,不像已知的旧有***,仅具有单纯硬件或单纯软件的CAVLC处理方法,限制了实施弹性,举个例子,纯数字信号处理器(digital signalprocessor,DSP)或微处理器基础实施方式便没有用于符号解码及比特流管理的硬件。
另外,自动比特流缓冲器具备一些优点,例如,一旦比特流缓冲器的直接存储器存取(direct memory access,DMA)引擎得知比特流的位置(地址),便会自动管理比特流而不需要进一步的指令,这样的机制就跟传统的微处理器***不同,一提到比特流管理就代表了大量的间接费用,再则,通过记录已使用的位数量,比特流缓冲器机制可以检测和处理错误的比特流。
本发明解码***的另一个优点是可以减少指令延迟(latency),因为CAVLC解码是非常连续的操作,不易利用多线程,因此在各种实施例中就会使用一种转递机制来减少等待延迟,例如暂存器转递(registerforwarding),进一步解释,便是深管(deep-pipeline)及多线程处理器无法以同一线程在每一周期执行指令,有些***利用一般转递(generalforwarding),是通过检查前次产生的操作数(operand)地址以及指令操作数地址(如果相同,则使用前次产生操作数),此种一般转递需要复杂的比较及多工操作。在某些解码***实施例中,会使用不同的转递方式,不管是利用前次计算结果(如保留在内部暂存器)还是来源操作数的数据,均利用指令中的位(例如总共2位,每一操作数使用1位)来编码,通过这种方式,可以减少整体的延迟,改善处理器管线的效率。
这里描述的解码***可以利用已知的国际电信联盟通讯标准部门(International Telecommunication Union TelecommunicationStandardization Sector,ITU-T)H.264标准,根据执行从图形处理单元画面缓冲器存储器或主处理器(如中央处理单元(central processing unit,CPU))存储器所接收到的一个或多个指令组(如通过预加载(preload)等已知机制或是快取失败等),多种解码***实施例即可进行运算。
图1是图形处理器***100实施例的方块图,其中介绍了解码***及方法,于某些实施方式中,图形处理器***100可为计算机***,其中,图形处理器***100可包含由显示接口单元(display interface unit,DIU)104驱动的显示装置102以及区域存储器106(可包含显示缓冲器、画面缓冲器、纹理缓冲器、命令缓冲器等等),区域存储器106可以画面缓冲器或储存单元取代,区域存储器106通过一个或多个存储器接口单元(memory interfaceunit,MIU)110连接至图形处理单元(graphics processing unit,GPU)114,于一实施例中,存储器接口单元110、图形处理单元114、显示接口单元104三者连接至高速***元件互连(peripheral component interconnectexpress,PCI-E)兼容的总线接口单元(bus interface unit,BIU)118,于一实施例中,总线接口单元118可以使用图形地址重绘表(graphics addressremapping table,GART),当然也可使用其它存储体绘图机制,图形处理单元114包含解码***200,稍后会针对此部分作进一步的说明,虽然于某些实施例中将图形处理单元114内的解码***200画成一个元件,但是解码***200其实可以包含更多图形处理器***100的绘示或未绘示元件。
总线接口单元118连接至芯片组122(如北桥芯片组)或开关,芯片组122包含接口电路(interface electronics),以增强从中央处理单元(centralprocessing unit,CPU)126(又称主处理器)接收到的信号,并分离从***存储器124进出的信号与从输出入(I/O)装置进出的信号,虽然这里提到PCI-E总线协议,不过也可使用其它的连接及/或通讯方式来沟通主处理器与图形处理单元114(如PCI、专用高速总线等),***存储器124还包含驱动软件128,可利用中央处理单元126将指令组或命令传送给图形处理单元114内的暂存器。
在某些实施例中可再另外配置图形处理单元,利用PCI-E总线协议或其它通讯协议经由芯片组122连接至图1的其它元件,于一实施例中,图形处理单元100可以包含图1的所有元件,当然亦可剔除、新增或改变某些元件,例如,可另外增加连接至芯片组122的南桥芯片组。
请参阅图2,其为例示处理环境的方块图,其中应用解码***200,图形处理单元114包含图形处理器202,图形处理器202则包含多个执行单元(execution unit,EU)和计算核心204(即软件可编程核心处理单元),于一实施例中,计算核心204包含内嵌于执行单元数据路径(execution unit datapath,EUDP)的解码***200(即CAVLC单元),该数据路径分配至一个或多个执行单元,图形处理器202还包含执行单元集合控制及顶点/串流高速缓存单元206(以后称为EU集合控制单元206)以及具有固定功能逻辑(例如,包含三角形设定单元(triangle set-up unit,TSU)、栅格-图块产生器(span-tilegenerator,STG)等)的绘图管线208,计算核心204包含联合的多个执行单元,以符合不同着色器程序的着色器任务的计算要求,所述着色器程序可包含顶点着色器、几何着色器、及/或像素着色器,使绘图管线208能处理数据,计算核心204的着色器能进行解码***200的大部分功能,下面将详细说明图形处理器202的实施例,接着说明解码***200的细节。
解码***可以硬件、软件、固件或其组合等方式实施,于较佳实施例中,解码***200可包含硬件或软件,利用下列已知技术或其组合,例如:具有逻辑门而可对数据信号进行逻辑功能的离散逻辑电路、具有适当组合逻辑门的特殊应用集成电路(application specific integrated circuit,ASIC)、可编程栅极阵列(programmable gate array,PGA)、场式可编程栅极阵列(field programmable gate array,FPGA)等等元件。
请参考图3及图4,其为图形处理器202实施例选择元件的方块图,如前所述,解码***200可以是图形处理器202内的着色器,另外加上扩充指令组及其它硬件元件,以下将说明图形处理器202及对应程序的实施例,虽然图3与图4并未绘出图形处理所用到的全部元件,但是已足以令本领域技术人员明了相关图形处理器的功能及架构。请参阅图3,可编程处理环境的中心为计算核心204,其包含解码***200,并可处理各种指令,计算核心204可以执行或映像多种着色器程序,如顶点、几何、像素着色器程序等,多线程处理器的计算核心204可以在单一时钟周期内处理多个指令。
于图3中,图形处理器202的相关元件包含计算核心204、纹理过滤单元302、像素打包元件304、命令流处理器306、写回单元308、以及纹理地址产生器310,图3中的EU集合控制单元206也包含顶点高速缓存及/或串流高速缓存,另外,图3的纹理过滤单元302提供纹素(texel)数据给计算核心204(输入A及B),于某些实施例中,纹素数据为512位数据。
像素打包元件304提供像素器着色输入(PS输入,输入C和D)给计算核心204,输入同样是512位数据格式,另外,像素打包元件304向EU集合控制单元206请求像素着色器任务,而EU集合控制单元206便会提供指定执行单元号码(EU#)及线程号码(THREAD#)给像素打包元件304,因为像素打包元件304及纹理过滤单元302是已知的技术,这里便不再赘述,虽然图3显示像素及纹素封包为512位的数据封包,但是可依各实施例根据图形处理器202所需的效能改变其大小。
命令流处理器306提供三角形顶点索引给EU集合控制单元206,于图3的实施例中,索引为256位的数据,EU集合控制单元206组合从串流高速缓存接收到的顶点着色器输入,并将这些数据送至计算核心204(输入E);EU集合控制单元206亦组合几何着色器输入,并将这些数据送至计算核心204(输入F);EU集合控制单元206另外控制执行单元输入(EU输入)402及执行单元输出(EU输出)404(图4),换句话说,EU集合控制单元206控制计算核心204的各输入流与输出流。
经过处理之后,计算核心204提供像素着色器输出(PS输出,输出J1与J2)给写回单元308,像素着色器输出包括色彩信息,例如红/绿/蓝/透明度(RGBA)信息,关于实施例中的数据结构,像素着色器输出可以是两条512位的数据流,其它实施例亦可使用其它的位宽度。
除了像素着色器输出,计算核心204亦会输出纹理坐标(TC,输出K1及K2)给纹理地址产生器310,其中包括UVRQ信息,纹理地址产生器310向计算核心204的L2高速缓存408发出纹理描述符号请求(T#请求,输入X),然后计算核心204的L2高速缓存408会输出纹理描述符号数据(T#数据,输出W)给纹理地址产生器310,因为纹理地址产生器310及写回单元308是已知的技术,因此这里不再赘述,再则,虽然画中显示URVQ及RGBA是512位的数据,但是此参数亦可随不同实施例而做变化,于图3的实施例中,总线分成两条512位信道,同时传输4个像素的128位RGBA色彩值及128位UVRQ纹理坐标。
绘图管线208包含固定功能的图形处理功能,例如,因应从驱动软件发出的绘制三角形的命令,顶点信息通过计算核心204内的顶点着色器逻辑元件以进行顶点转换,对象将从对象空间种换成工作空间及屏幕空间的三角形,三角形通过计算核心204到达绘图管线208的三角形设定单元,结合像素后进行已知的任务,例如产生边界盒(bounding box)、拣选(culling)、产生边缘功能(edge function generation)及三角形层级剔除(triangle levelrejection)等,接着三角形设定单元再将数据传递至绘图管线208中具有图块产生功能的栅格及图块产生单元,因此,数据对象被分割成图块(例如8×8、16×16等),并且传递至其它的固定功能单元,进行深度(z-值)处理,例如z-值的高阶(同样的程序在高阶时使用的位数比低阶少)剔除,然后将z-值传回计算核心204的像素着色器逻辑元件,以根据所得纹理及管线数据进行像素着色器功能,计算核心204将已处理的值输出至位于绘图管线208内的目标单元,目标单元在各高速缓存将更新内部值之前进行α测试及模板测试。
请注意计算核心204的L2高速缓存408以及EU集合控制单元206之间有512位的顶点高速缓存溢出(spil1)数据的传输(输入G),另外,计算核心204输出两个512位顶点高速缓存(VC)写入数据(输出M1及M2)给EU集合控制单元206做进一步的处理。
请参阅图4,其显示计算核心204的其它元件及相关元件,计算核心204包含具有一个或多个执行单元420a~420h(以后通称执行单元420)的执行单元集合412,每一个执行单元420可以在一个时钟周期内处理多个指令,因此,执行单元集合412在尖峰时可以同时或几乎同时处理多个线程,尽管图4仅绘出8个执行单元(EU0~EU7),但是并不表示限制其数量为8,于其它实施例可以增加或减少数量,其中至少一个执行单元(例如EU0 420a)具有解码***200,详细说明如下。
计算核心204亦包含存储器存取单元(memory access unit,MXU)406,存储器存取单元406通过存储器接口仲裁器410与L2高速缓存408连接,L2高速缓存408从EU集合控制单元206接收顶点高速缓存溢出数据(输入G),并提供顶点高速缓存溢出数据(输出H)给EU集合控制单元206,另外,L2高速缓存408从纹理地址产生器310接收纹理描述符号请求(T#请求,输入X),并因应接收到的该请求,提供纹理描述符号数据(T#数据,输出W)给纹理地址产生器310。
存储器接口仲裁器410提供了区域视频存储器(如画面缓冲器或区域存储器106)的控制接口,总线接口单元118则提供了***的接口,其可为PCI-E总线,存储器接口仲裁器410和总线接口单元118做为存储器及L2高速缓存408之间的接口,于某些实施例中,L2高速缓存408通过存储器存取单元406与存储器接口仲裁器410以及总线接口单元118连接,存储器存取单元406会把从L2高速缓存408及其它区块得到的虚拟存储器地址转换成实际存储器地址。
存储器接口仲裁器410提供L2高速缓存的存储器存取(如读/写存取),可提取指令/常数/数据/纹理、直接存储器存取(如加载/储存)、索引暂存存取、暂存器溢出、顶点快取存储器内容溢出等等。
计算核心204还包含执行单元输入(EU输入)402和执行单元输出(EU输出)404,分别用于提供执行单元集合412的输入以及接收执行单元集合412的输出,执行单元输入402和执行单元输出404可以是交换开关(crossbar)或总线,或是其它已知的输出机制。
执行单元输入402从EU集合控制单元206接收顶点着色器输入(输入E)以及几何着色器输入(输入F),然后将信息提供给执行单元集合412,让各执行单元420去处理;另外,执行单元输入402接收像素着色器输入(输入C及D)及纹素封包(输入A及B),并将这些封包传送至执行单元集合412,让各执行单元420去处理;再者,执行单元输入402从L2高速缓存408接收信息(L2读取),然后在必要时将这些信息提供给执行单元集合412。
图4实施例的执行单元输出404会分成偶输出404a和奇输出404b,执行单元输出404和执行单元输入402一样可为交换开关或总线,或是其它已知的架构,执行单元偶输出404a处理偶执行单元420a、420c、420e、420g的输出,而执行单元奇输出404b处理奇执行单元420b、420d、420f、420h的输出,总而言之,两个执行单元输出404a和404b共同接收执行单元集合412的输出,如UVRQ及RGBA数据,这些输出可传回L2高速缓存408,或是从计算核心204经由J1及J2输出至写回单元308,或是经由K1及K2输出至纹理地址产生器310。
执行单元集合412的执行单元流通常包含数个层级,如描绘内容层级、线程或任务层级、指令或执行层级,在任一时间点,每一执行单元420可能准许两个描绘内容,其中利用一位旗标或其它机制识别其描绘内容,在属于这个内容的任务开始之前,从EU集合控制单元206输出内容信息,内容层级信息可为着色器种类、输入/输出暂存器数量、指令起始地址、输出对映表、顶点识别符、各常数缓冲器内的常数,执行单元集合412内的每一个执行单元420可以同时储存多个任务或线程(例如32个线程),于一实施例中,每一线程根据程序计数器提取指令。
EU集合控制单元206类似总任务调度,利用数据驱动(data-driven)方法(如输入信号内的顶点、像素、几何封包)指派执行单元420内的适当线程,举例来说,EU集合控制单元206指派一个线程给执行单元集合412的执行单元420内的一个空线程位置,当线程已开始执行,顶点高速缓存或其它元件或模块(根据着色器种类)所输入的数据会放置在共享暂存缓冲器中。
通常图形处理器202使用可编程顶点、几何、及像素缓冲器,不再把这些元件当成具有不同设计及指令组的各别固定功能单元而各别执行或操作这些元件,而是取代成以联合的执行单元420a、420b...420n配合统一指令组执行,除了执行单元420a(这个执行单元包含解码***200,因此具有额外的功能)之外,每一个用于程序运算的执行单元420的设计与结构均相同,于一实施例中,每一个执行单元420可以进行多线程运算,当顶点着色器、几何着色器、像素着色器等产生不同的着色器任务,这些着色器任务将送至个别的执行单元420去执行,于一实施例中,解码***200可使用顶点着色器,与其它执行单元420有些不同,例如,执行单元420a使用解码***200,这是其它执行单元(如图4的420b)所没有的,因为解码***200管理一个或多个对应的内部缓冲器,解码***200通过接线413及执行单元输入402自存储器存取单元406取得数据。
当生成了个别的任务,EU集合控制单元206会指派这些任务给不同执行单元420的可用线程,当完成任务,EU集合控制单元206再管理相关线程的释放,就这一点而言,EU集合控制单元206负责指派顶点着色器、几何着色器及像素着色器的任务给执行单元420的线程,然后记录相关的任务及线程,具体来说,EU集合控制单元206会有所有执行单元420的线程及存储器的资源表(这里不多做说明),EU集合控制单元206会知道哪一个线程指派给哪一个任务使用、知道哪一个线程的任务结束要释放、知道占用多少的共享暂存器文件存储器暂存器(register file memory register)、知道每一个执行单元有多少可用空间。
因此,如果已将一个任务指派给一个执行单元,如420a,EU集合控制单元206会将这个线程标示为忙碌中,然后将全部的共享暂存器文件存储器减去每一个线程用掉的暂存器文件机体(footpring)数量,机体是根据顶点着色器、几何着色器及像素着色器的状态而定,另外,每一个着色器阶段可以有不同的机体大小,例如,顶点着色器线程可以要求10个共享暂存器文件暂存器,而像素着色器线程可以仅要求5个暂存器。
当线程完成其被指派的工作,运行该线程的执行单元420便会发出信号给EU集合控制单元206,EU集合控制单元206便会更新资源表,标注该线程未使用,并将线程共享暂存器文件空间的数量加回可用空间,当所有的线程都处于忙碌中或所有的共享暂存器文件存储器都已分配完(或是保留的暂存器空间太小,无法容纳额外的线程),则该执行单元420算是已满,EU集合控制单元206不会再指派新的线程给该执行单元。
每一个执行单元420内部亦有一个线程控制器,可以管理或标注每一个线程是在使用中(或执行中)或是可用的,就这一点而言,于一实施例中,当顶点着色器正执行解码***200的功能时,EU集合控制单元206可以防止几何着色器与像素着色器在此同时运行。
图5A说明具有前述图形处理器202及计算核心204特征的执行单元420a,其包含内嵌有解码***200的执行单元数据路径512,具体来说,图5A是执行单元420a的方块图,于一实施例中,其包含指令高速缓存控制器504、与指令高速缓存控制器504连接的线程控制器506、缓冲器508(如常数缓冲器)、共享暂存器文件(common register file,CRF)510、与线程控制器506及缓冲器508及共享暂存器文件510连接的执行单元数据路径(EU datapath,EUDP)512、执行单元数据路径先进先出缓冲器(first in first out,FIFO)514、述部暂存器文件(predicate register file,PRF)516、纯量暂存器文件(scalar register file,SRF)518、数据输出控制器520以及线程任务接口524,如前所述,执行单元420从执行单元输入402接收输入,然后提供输出给执行单元输出404。
线程控制器506提供整个执行单元420a的控制功能,包括管理每一个线程及判断功能,例如决定如何执行其线程,EUDP 512包含解码***200,可进行各种的计算,包含像是浮点运算计算逻辑单元(arithmetic logic unit,ALU)、移位逻辑功能等逻辑电路。
数据输出控制器520可将完成的数据移至某些与执行单元输出404连接的元件,例如EU集合控制单元206的顶点高速缓存、写回单元308等等,EUSP512传送「任务结束」的信息给数据输出控制器520,告知任务已完成,数据输出控制器520包含储存部分,以储存完成的任务(如32个项目(entry)),还包含多个写入端口,数据输出控制器520从储存部分选择任务,接着根据着色器描绘内容所指定的暂存器位置,从共享暂存器文件510读出所有的输出数据项,然后将数据送至执行单元输出404。
线程任务接口524输出执行单元420a完成的任务识别符给EU集合控制单元206,任务识别符会通知EU集合控制单元206有特定执行单元内有线程资源,可指派新的任务给该执行单元(如420a)。
于一实施例中,常数缓冲器508可以分成16个区块,每一个区块有16个128位水平向量常数的位置,着色器使用操作数与索引存取常数缓冲器位置,其中,索引可以是包含32位或接近32位不具正负号的整数常数的暂存器。
指令高速缓存控制器504是线程控制器506的接口方块,如果有线程控制器读取请求(如从指令存储器提取可执行着色器码),指令高速缓存控制器504会查找标签表(未绘出),进行击中/不中(hit/miss)测试,举个例子,如果请求的指令位于指令高速缓存控制器504的高速缓存中则表示击中,如果所欲请求的指令将从L2高速缓存408或存储器106提取则表示不中,如果击中,而同时没有从执行单元输入402发出的请求,则指令高速缓存控制器504即可同意请求,这是因为指令高速缓存控制器504的指令高速缓存只有一个读写端口,而执行单元输入402具有最高的优先权;相反地,如果不中,而L2高速缓存408内有可取代的区块并有空间存在EUDP FIFO 514,则指令高速缓存控制器504可同意请求。于一实施例中,指令高速缓存控制器504的高速缓存包含32组,每一组有4个区块,每一个区块带有2位状态信号,可代表三种状态,分别是无效、加载、或有效状态,在区块加载L2数据之前,区块是「无效」状态,当等候L2数据时,是「加载」状态,当完全加载L2数据时,则成为「有效」状态。
通过EUDP路径512可对述部暂存器文件516进行读写,执行单元输入402做为进入数据与执行单元420a的接口,于一实施例中,执行单元输入402包含8项目先进先出缓冲器以缓冲进入数据,执行单元输入402亦可将数据送至指令高速缓存控制器504的指令高速缓存及常数缓冲器508,执行单元输入402也可保留着色器内容。
执行单元输出404做为将输出数据从执行单元420a送至EU集合控制单元206、L2高速缓存408、及写回单元308的接口,于一实施例中,执行单元输出404包含4项目先进先出缓冲器,用以接收仲裁请求,并缓冲输出至EU集合控制单元206的数据,执行单元输出404包含多种功能,可以仲裁指令高速缓存读取请求、数据输出写入请求、EUDP读/写请求。
共享暂存器文件510用于储存输入、输出、以及暂存数据,于一实施例中,共享暂存器文件510包含8存储页(bank)的128×128位暂存器文件及一读一写和一读写端口,一读一写端口是供EUDP 512使用,用于指令执行启动的读写存取,偶线程共享存储页0、2、4、6,奇线程则共享存储页1、3、5、7,线程控制器506配对不同线程的指令,并确认共享暂存器文件的存储器没有读或写存储页冲突。
读写端口则供执行单元输入402及数据输出控制器520使用,以加载初始线程输入数据以及将最终线程输出写至EU集合控制单元数据缓冲器及L2高速缓存408或其它模块,执行单元输入402及执行单元输出404共享读写I/O端口,于一实施例中,写入比读出具有更高的优先权,512位输入数据进入4个不同的存储页,以避免将数据加载共享暂存器文件510时发生冲突,2位信道索引、数据与512位对齐基准地址(aligned base address)一起通过以指定输入数据的开始存储页,举个例子,如果开始信道索引为1,则存储页1加载从最低有效位(least significant bit,LSB)起算的第一个128位,下一个128位则加载存储页2,以此类推,假设线程基准存储页补偿为0,最后一个128位则加载存储页0,请注意线程ID的两个最低有效位用于产生存储页补偿,以随机排列每一个线程的开始存储页位置。
CRF暂存器索引及线程ID可用于建立独一无二的逻辑地址,以卷标配对(tag matching)共享暂存器文件510的读写数据,举个例子,地址可以排成128位,就跟共享暂存器文件存储页的宽度一样,通过结合8位的CRF暂存器索引以及5位的线程ID,可以建立独一无二的13位地址,每一个1024位行有一个卷标,每一行则有两个512位项目(字符),每一字符储存于4个存储页中,并将CRF索引的两个最低有效位加入目前线程的存储页补偿,以建立存储页选择。
标签配对方法可让不同线程的暂存器共享共享暂存器文件510,有效利用存储器,EU集合控制单元206记录共享暂存器文件510的存储器使用程度,确保调度执行单元420a的新任务时有足够的空间。
检查目前线程的目标CRF索引占全部CRF暂存器的大小,在线程控制器506着手进行线程及着色器执行之前,输入数据就应该存放于共享暂存器文件510中,当线程执行结束,数据输出控制器520从共享暂存器文件510读取输出数据。
前述执行单元420的实施例具有内含解码***200的EUDP 512,图5B说明EUDP 512的实施例,EUDP 512包含暂存器文件526、多工器528、向量浮点(FP)单元532、向量整数算术逻辑单元(ALU)534、特殊目的单元536、多工器538、暂存器文件540、以及解码***200,解码***200包含一个或多个CAVLC单元530,可以解码一个或多个串流,举个例子,单一CAVLC单元530可以解码单一串流,两个CAVLC单元530(如虚线所示,但为简洁之故未绘出其连接关系)可以同时解码两个串流等等,为了清楚说明,之后的叙述仅针对使用单一CAVLC单元530的解码***200的操作,其原则可推衍至超过一个CAVLC单元。
如图所示,EUDP 512包含对应于CAVLC解码单元530、向量浮点单元532、向量ALU 534、特殊目的单元536的一些平行数据路径,每一个单元均可根据接收到的指令执行对应的运算,暂存器文件526接收操作数(标示为SRC1及SRC2),于一实施例中,暂存器文件526可为图5A所示的共享暂存器文件510、述部暂存器文件516、及/或纯量暂存器文件518,请注意于某些实施例中,亦可使用更多的操作数运算(功能)信号线542提供各单元530~536接收运算信号的手段,目前信号线544连接至多工器528,可传送编码成指令的当前值,供每一个单元530~536进行小整数值的整数运算,指令解码器(未绘出)提供操作数、运算(功能)信号、以及目前信号,数据路径(可以包含写回阶段)末端的多工器538选择正确路径的输出结果,送至暂存器文件540,输出暂存器文件540包含目标元件,可以是暂存器文件526或其它暂存器,请注意,于一实施例中,当来源及目标暂存器包含相同元件,指令的位具有来源及目标元件选择,供多工器处理来自/送至适当暂存器文件的数据。
因此,执行单元420a可以视为多阶管线(如4阶管线,具有4个算术逻辑单元),CAVLC解码运算于4个执行时相中发生,需要延迟好让CAVLC解码线程操作,举个例子,当比特流缓冲器发生向下溢位(underflow)、等候初始化内容存储器、等候将比特流加载FIFO缓冲器及sREG暂存器(稍后解释)、及/或处理时间已超过预定门坎时间等,可以在执行阶段加入延迟。
与某些实施例中,解码***200利用单一执行单元420a同时解码两个比特流,举个例子,根据一个扩充指令组,解码***可以使用两个数据路径(如新增另一CAVLC单元530)同时进行两个串流的解码,当然也可解码较多或较少的串流(那么就会使用较多或较少的数据路径),当牵涉到多个串流,某些解码***200并不限制同时解码,另外,在某些实施例中,单一CAVLC单元530可以执行多重同时串流解码。
于一实施例中,当解码***200使用两个数据路径、两个线程便可以同时运行,举个例子,在两串流解码实施例中,限制线程的数量为两个,第一线程(如线程0)指派给解码***200的第一存储页(即CAVLC单元530),第二线程(如线程1)则指派给解码***200的第二存储页(即图5B的虚线CAVLC单元),于某些实施例中,两个或多个线程可以运行于单一存储页,另外,虽然此处显示解码***200是内嵌于EUDP 512,亦可包含其它的元件,像是EU集合控制单元206内的逻辑电路。
现已说明执行单元420a、EUDP 512、以及CAVLC单元530的某些实施例,下面简单解释用于H.264 CAVLC运算内容的解码***,已知CAVLC程序编码与巨图块(macroblock)或部分巨图块有关的信号的层级(level,大小),知道这个层级有多常(如多少周期)重复(run,运作),就不需要对每一位进行编码,从比特流缓冲器获得并解析(parse)此类信息,当解码***200的解码引擎使用了缓冲器内的信息,则数据会再补充进去,解码***200从比特流抽出内含层级(level)及运作(run)系数的巨图块信息,反转编码程序,然后重建信号。解码***200从比特流缓冲器获得巨图块信息并解析串流,以获得层级及运作系数值,暂时储存于层级阵列及运作阵列,接着读出这些层级阵列及运作阵列(如巨图块内的区块的4×4区块像素),然后清空层级阵列及运作阵列准备进行下一个区块,根据H.264标准,使用软件处理每一个4×4区块可以建立完整的巨图块。
已说明解码巨图块信息的一般运算,下列叙述提出于CAVLC解码程序的内容中的解码***200的各种元件,可将符合实际应用的各种变形列入考虑,本领域技术人员可知下列所使用的许多术语(如各参数的名称)是出自H.264规格,为了简洁之故不再赘述,除非是有助于了解所述的不同程序及/或元件,才会再做进一步的说明。
图6A至图6C是说明解码***200的方块图,其中绘出的解码***200具有单一CAVLC单元530(于图6A至图6C,所使用的CAVLC单元530可与解码***200互换),因此于实施例中,解码***200可解码单一比特流,同样的原则可应用至具有多个CAVLC单元的解码***200,可同时解码多个(如两个)串流。简单地说,图6A是CAVLC单元530的选择元件,图6B则说明CAVLC单元提供的串流缓冲器功能,图6C说明CAVLC单元530的内容存储器(包含暂存器)功能,图6D说明CAVLC解码的窗体结构。虽然下列叙述是有关巨图块解码的内容,但是此原则可应用至各种图块解码。
请参阅图6A,CAVLC单元530包含数个硬件模块,有系数符记(coeff_token)模块610、层级码(CAVLC_LevelCode)模块612、层级(CAVLC_Level)模块614、层级0(CAVLC_L0)模块616、零层级(CAVLC_ZL)模块618、运作(CAVLC_Run)模块620、层级阵列(LevelArray)622、以及运作阵列(RunArray)624,解码***还包含移位暂存器(SREG)-串流缓冲器/直接存储器存取(DMA)引擎602(亦见于图6B,之后称为DMA引擎模块)、总暂存器606、区域暂存器608、以及图6C中的巨图块相邻内容(mbNeighCtx)存储器604(于一实施例中,mbNeighCtx存储器包含96位暂存器,可以是着色器写入的3个32位暂存器),另外有些暂存器未绘出。
CAVLC单元530与执行单元420a的接口包括一个或多个目标总线及对应的暂存器(如DST暂存器)、两个来源总线及对应的暂存器(SRC1、SRC2),目标总线上的数据可以直接或间接(如经由中间高速缓存、暂存器、缓冲器、或存储器)传送至图形处理单元114内部或外部的视频处理单元,目标总线上的数据可以是微软的DX API格式或其它格式,这些数据包含系数、巨图块参数、操作信息、及/或I PCM取样或是其它数据,CAVLC单元530还包括由地址总线和数据总线组成的存储器接口,从地址总线得到地址后,便可以通过从数据总线得到的数据进行比特流数据的存取,于一实施例中,数据总线上的数据可以包括未加密视频流,其中包括各种信号参数及其它数据与格式,于某些实施例中,可以使用加载-储存操作来存取比特流数据。
在开始说明CAVLC单元530的各元件之前,简单说明一下有关CAVLC解码的执行单元420a的整个操作,通常,根据切片(slice)形式,驱动软件128(图1)准备CAVLC着色器并将其加载执行单元420a,该CAVLC着色器使用标准指令组加上coeff_token、CAVLC_LevelCode、CAVLC_Level、CAVLC_L0、CAVLC_ZL、及CAVLC_Run指令,可以进行比特流的解码,这里命名的原则是各模块会发出相同名称的指令,另外,在层级阵列622及运作阵列624还有跟读取操作及清除操作有关的READ_LEVEL_RUN及CLR_LEVEL_RUN指令,于一实施例中,在发出其它指令之前,CAVLC着色器执行的第一指令是INIT_CAVLC及INIT_ADE指令,这两个指令使CAVLC单元530开始CAVLC解码比特流,并将比特流从串流解码点开始加载FIFO缓冲器,稍后将说明这两个指令,因此CAVLC单元530提供了解析比特流、初始化解码硬件及暂存器/存储器结构、以及层级-运作(level-run)解码,所述H.264 CAVAC解码程序功能将于稍后解释,先从比特流缓冲器的操作开始。
关于解析比特流,从存储器接口的数据总线接收比特流,然后由SREG串流缓冲器/DMA引擎618进行缓冲,切片数据解析阶段提供比特流解码,比特流(如NAL比特流)包括一张或多张图片,将其切割成图档头(header)及许多切片(slice),一张切片通常包含一系列的巨图块,于一实施例中,外部程序(即CAVLC单元530外部)解析NAL比特流、解码切片文件头、传送指向该切片数据(如切片开始处)的指针,通常,驱动软件128从切片数据处理比特流,因为这是应用程序及API提供的功能,指向切片数据位置的指针传递还牵涉到切片数据的第一字节地址(如RBSPbyeAddress)和指出比特流开始或标头位置(如sREGptr)的位补偿指针(如一个位或多个位),比特流的初始化将于稍后解释,于某些实施例中,可以利用主处理器(如图1的中央处理单元126)处理外部程序,以提供图片解码及切片标头解码,与某些实施例中,因为解码***200从图片进行H.264比特流解析,而CAVLC解码操作是根据切片数据从巨图块着手进行,于某些实施例中,因为CAVLC单元的可编程特性,可以于任何阶段进行解码。
请参阅图6B,其为CAVLC单元530的SREG串流缓冲器/DMA引擎602的选择元件部分及其它元件的方块图,其包含操作数暂存器661及663,分别接收SRC1与SRC2值,再传递至暂存器656及667,CAVLC逻辑电路660就是图6A的模块及元件,不过没有包括SREG串流缓冲器/DMA引擎602、mbNeighCtx存储器604、总暂存器606、以及区域暂存器608,SREG串流缓冲器/DMA引擎618包含内部比特流缓冲器602b,于一实施例中可为BigEndian格式的32位暂存器及8个128位暂存器。驱动软件128发出的初始化指令于开始时设定SREG串流缓冲器/DMA引擎602,一旦启动,便自动管理SREG串流缓冲器/DMA引擎602的内部缓冲器602b,SREG串流缓冲器/DMA引擎602保留待解析位的位置。
于一实施例中,SREG串流缓冲器/DMA引擎602使用两个暂存器,一个快速32位正反器与一个较慢512或1024位存储器,比特流会使用位,移位暂存器602a以位进行操作,而比特流缓冲器602b以字节进行操作,可以节省能源。通常移位暂存器602a运算的指令会使用少许位(如1~3位),当移位暂存器618a使用超过一字节的数据,数据(字节片段)将从比特流缓冲器602b传送给移位暂存器602a,然后缓冲器指标会减去传送的字节数量,当SREG串流缓冲器/DMA引擎602的DMA引擎检测到使用256位或更多位时,便从存储器提取256位填满比特流缓冲器602b,如此CAVLC单元530实行了一个简单的循环缓冲器(256位片段×4),以追踪比特流缓冲器602b并进行填充,于某些实施例中可以使用单一缓冲器,不过一个循环缓冲器需要更复杂的指针计算来跟上存储器的速度。
利用初始化指令达成与内部缓冲器602b互动,称为INIT_BSTR指令,于一实施例中,INIT_BSTR指令(可由驱动软件128发出)与INIT_CAVLC(或-ADE)指令几乎同时发出,形成延迟(stall),直到比特流数据进入缓冲器602b,一旦数据到达缓冲器602b,解除延迟状况开始后面的程序,之后,如果缓冲器的储存状况低于预定门坎,SREG比特流缓冲器/DMA引擎602的DMA引擎会继续提取比特流数据存入缓冲器602b。如果已知比特流位置的字节地址及位补偿,INIT_BSTR指令将数据加载内部比特流缓冲器602b,并开始管理程序,每一次呼叫处理切片数据均会发出下列格式的指令:
INIT_BSTR offset,RBSPbyteAddress
这个指令用于将数据加载SREG串流缓冲器/DMA引擎602的内部缓冲器602b,于一实施例中,SRC2暂存器663提供字节地址(RBSPbyteAddress),而SRC1暂存器661提供位补偿,如此,可以使用下列通用的指令格式:
INIT_BSTR SRC2,SRC1,
其中,这个指令中的SRC1以及SRC2及其它信号是对应内部暂存器661及663的值,但是不限于这些暂存器,于一实施例中,使用256字节排列的存储器提取来存取比特流数据,并将其写入缓冲暂存器并传送至SREG串流缓冲器/DMA引擎602的32位移位暂存器602a,于一实施例中,在这些暂存器或缓冲器进行运算之前,比特流缓冲器602b内的数据是以字节方式排列,此数据排列可通过排列指令实施,亦称之为ABST指令,ABST指令会排列比特流缓冲器602b内的数据,在解码过程中,排列位(如填充位)最后将被丢弃。
当移位暂存器602a使用数据,内部缓冲器602b便会填充数据,换句话说,SREG串流缓冲器/DMA引擎602的内部缓冲器602b类似以3为模(modulo)的循环缓冲器,将数据输入SREG串流缓冲器/DMA引擎602的32位暂存器602a,CAVLC单元530(如CAVLC逻辑模块660)可以使用READ指令从移位暂存器602a读取数据,READ指令的格式如下:
READ DST,SRC1,
其中DST对应于一输出或目标暂存器,于一实施例中,SRC1暂存器661包含不具正负号的整数值n,经过READ指令,从移位暂存器602a获得n位,当从32位移位暂存器602a消耗了256位的数据(如解码一个或多个语法成分),自动开始提取操作以获得另一个256位的数据,将其写入内部缓冲器602b的暂存器,接着进入移位暂存器602供下一循环使用。
于某些实施例中,如果对应于符号解码的移位暂存器602a的数据已被使用了预定数量的位或字节,而内部缓冲器602b没有再接收到任何数据,则CAVLC逻辑电路660可以进行延迟,以便执行其它的线程(例如与CAVLC解码程序无关的线程),像是顶点着色器操作。
使用SREG串流缓冲器/DMA引擎602的DMA引擎可以减少所需的缓冲器数量,以补偿存储器延迟(例如,于某些图形处理单元中,会到三百多周期),当使用了比特流,可以请求流入排在后面的比特流数据,如果比特流数据太少使得比特流缓冲器602b有向下溢位的风险(例如已知让信号从CAVLC单元530流至处理器管线的周期数),可传递延迟信号给处理器管线,暂停操作,等候数据到达比特流缓冲器602b。
另外,SREG串流缓冲器/DMA引擎602原本便有处理错误比特流的能力,举个例子,因为比特流错误,有可能没有检测到切片结尾记号,这种检测错误可能会导致解码完全错误,并用到后来的图样或切片的位,SREG串流缓冲器/DMA引擎602记录使用的位数,如果使用的位数大于预设的门坎值(可针对每一切片改变),则结束处理程序并将除去的信号送到处理器(如主处理器),然后处理器执行编码尝试从错误中回复。
两个有关比特流存取的指令为INPSTR及INPTRB指令,INPSTR及INPTRB指令用于检测是否在切片或巨图块中有出现特别的样式(pattern,如数据开始或结束样式),不需进行比特流就能开始读取比特流,于一实施例中,指令顺序为INPSTR、INPTRB、然后是READ指令,INPSTR指令包含下列格式:
INPSTR DST,
于一实施例中,检视比特流并将移位暂存器602a的最高有效16位送至目标(DST)暂存器的较低16位,目标暂存器的较高16位包含sREGbitptr值,数据不会从移位暂存器602a移出做为运算结果,可以根据下式例示伪码施行指令:
MODULE INPSTR(DST)
OUTPUT[31:0]DST
DST={ZE(sREGbitptr),sREG[msb:msb-15]};
ENDMODULE
与比特流有关的另一个指令是INPTRB指令,检视原始字节顺序酬载(rawbyte sequence payload,RBSP)尾端位(如字节排列数据流),INPTRB指令用于读取比特流缓冲器602b,可为下列格式:
INPTRBDST.
于INPRB运算中,没有从移位暂存器602b移出位,如果移位暂存器602b的最高有效位包含100(非限定),则包含了RBSP停止位,剩下的字节就都是零位,可以根据下式例示伪码施行指令:
MODULE INPTRB(DST)
OUTPUT DST;
REG[7:0]P;
P=sREG[msb:msb-7];
Sp=sREGbitptr;
T[7:0]=(P>>sp)<<sp;
DST[1]=(T==0x80)?1:0;
DST[0]=!(CVLC_BufferBytesRemaining>0);
ENDMODULE
READ指令用于排列比特流缓冲器602内的数据。
现已说明CAVLC单元530的比特流缓冲器操作,再来是CAVLC运算的初始化,尤其是初始化存储器、暂存器结构以及解码引擎(如CAVLC逻辑电路660),在切片起始处,于解码对应于第一巨图块的语法成分之前,初始化暂存器结构、总暂存器606、区域暂存器608、以及CAVLC解码引擎,于一实施例中,驱动软件128发出INIT_CAVLC指令进行这个初始化操作,INIT_CAVLC指令可以具有下列指令格式:
INIT_CAVLC SRC2,SRC1
其中,SRC2包含切片数据待解码的位数目,将这个值写入内部CVLC_bufferBytesRemining暂存器:
SRC1[15:0]=mbAddrCurr,
SRC1[23:16]=mbPerLine,
SRC1[24]=constrained_intra_predflag,
SRC1[27:25]=NAL_unit_type(NUT),
SRC1[29:28]=chroma_format_idc(于一实施例中,chroma_format_idc值为1时对应4:2:0格式,于其它实施例可使用其它取样机制)
SRC1[31:20]=未定义
关于INIT_CAVLC指令,将SRC1值写入总暂存器606的对应字段,利用INIT指令,另将SRC2值写入内部暂存器(如CVLC_bufferByteRemaining),CVLC_bufferByteRemaining暂存器用于恢复错误比特流,举个例子,解码开始时,CAVLC单元530(如SREG比特流缓冲器/DMA引擎602)针对一切片记录有关比特流中的缓冲位,比特流使用后,CAVLC单元530计数并更新CVLC_bufferByteRemaining值,如果这个值低于0,这表示缓冲器或比特流有错误,此时迅速终止处理,并返回应用程控或驱动软件128控制,进行恢复。
请参阅图6C,INIT_CAVLC指令也可初始化CAVLC单元530的各储存结构,如mbNeighCtx存储器604、左侧mbNeighCtx暂存器684、目前mbNeighCtx暂存器686,于一实施例中,mbNeighCtx存储器610的巨图块基准相邻内容存储器排列成存储器阵列,以储存有关巨图块列的数据,目前mbNeighCtx暂存器686用于储存目前解码的巨图块,而左侧mbNeighCtx暂存器684用于储存先前解码的(左侧)巨图块,另外,利用上方指标683、左侧指标685、及目前指标687(在图6C中以箭头表示)指向mbNeighCtx存储器604、左侧mbNeighCtx暂存器684、以及目前mbNeighCtx暂存器686,当解码目前的巨图块时,解码的数据储存于目前mbNeighCtx暂存器686,当已知CAVLC解码的内容性质时,根据CAVLC_TOTC指令从前次解码巨图块时所搜集的信息来解码目前的巨图块,亦即左侧巨图块储存于左侧mbNeighCtx暂存器684并利用左侧指针685进行指向,而上方巨图块储存于阵列元素[i]681中并利用上方指标683进行指向。
INIT_CAVLC指令用于初始化与目前巨图块(如mbNeighCtx存储器阵列604的元素)相邻的巨图块有关的上方及左侧指标683及685,举个例子,左侧指标685可以设为0而上方指标683可以设为1,另外,INIT_CAVLC指令还会更新总暂存器606。
于一实施例中,mbNeighCtx存储器604包含具有120个元素的阵列,标示为mbNeighCtx[0]、mbNeighCtx[1]...mbNeighCtx[119],每一图片宽度最多能储存120个巨图块(因HDTV为1920×1080像素),本领域技术人员可利用不同大小的其它阵列结构。
举个例子,要判断相邻巨图块(如左侧巨图块)是否存在(有效),CAVLC_TOTC指令必须进行运算(如mbCurrAddr % mbPerLine),检查结果是否为0,于一实施例中,进行下列算式:
a=(mbCurrAddr%mbPerLine)
mbCurrAddr代表对应于待解码二进制符号的目前巨图块位置,mbPerLine代表每一列的巨图块数量,上面的计算用到除法、乘法、以及减法。
考虑下式:
mbCurrAddr∈[0:max MB-1]
其中,maxMB是8192,而mbPerLine=120,可利用乘法及由储存于芯片上存储器的窗体(如120×11位表)查找的(1/mbPerLine)进行除法,如果mbCurrentAddr是13位,则使用13×11乘法器,于一实施例中,将乘法运算的结果取整数,储存较上方的13位,进行13×7的乘法运算,储存较低的13位,最后进行13位的减法运算以决定“a”,整个运算程序需要2个周期,可以储存这个结果给其它运算使用,每当mbCurrAddr改变就计算一次。
于某些实施例中不进行模数(modulo)运算,改以执行单元(如执行单元420a,420b等等)内的着色器逻辑电路提供第一个mbAddrCurr值,其位于第一切片的第一行,举个例子,这个着色器逻辑电路可以进行下列计算:
mbAddrCurr=absoluteMbAddrCurr-n × mbPerLine
使用CWRITE指令可以「移动」mbNeighCtx存储器604的内容,CWRITE指令的格式可以是:
CWRITE SRC1,
其中,SRC1[15:0]=mbAddrCurr,CWRITE指令从目前mbNeighCtx暂存器686的适当字段复制到mbNeighCtx[]结构604的上方mbNeighCtx[i]以及左侧mbNeighCtx[i-1],当(mbAddrCurr % mbPerLine==0),左侧mbNeighCtxLeft 684标记为不存在(如初始化成0),可以利用CWRITE指令「移动」mbNeighCtx存储器604、区域暂存器608、以及总暂存器606的内容,举个例子,CWRITE指令移动mbNeighCtx存储器604的相关内容到第i个巨图块的左侧及上方区块(如mbNeighCtx[i]或目前巨图块),并清空mbNeighCtx暂存器686,如前所述,与mbNeighCtx存储器604相关的两个指标是左侧指标685及上方指针683,CWRITE指令之后,上方索引增加1,而目前巨图块的内容则移至阵列604的上方位置及左侧位置,上述***可以减少存储器阵列的读取/写入端口的数量至一个读取/写入端口。
利用INsERT指令可以更新mbNeighCtx存储器604、局部寄存器608、以及总暂存器606的内容,INSERT指令的格式可为:
INSERT DST,#Imm,SRC1
于此INSERT指令,#Imm包含10位数字,数据的前5位宽度和较高5位指定将***数据的位置,输入参数具有下列格式:
Mask=NOT(0xFFFFFFFF<<#Imm[4:0])
Data=SRC1 & Mask
SDATA=Data<<#Imm[9:5]
SMask=Mask<<#Imm[9:5]
输出DST可以下式表示:
DST=(DST & NOT(sMask))I SDATA
举个例子,可利用INSERT指令(如INSERT $mbNeighCtxCurrent_1,#Imm10,SRC1)写入目前巨图块,这个操作不会影响左侧指标685及上方指标683(亦即只写入目前位置)。
INSERT指令可以写入目前mbNeighCtx 686,左侧指针685指向的阵列元素与相邻(相邻于目前mbNeighCtx)阵列元素(即mbNeighCtx[i-1])相同,当发出CWRITE指令,目前mbNeighCtx结构的全部或一些内容会复制到左侧指标685及上方指针683所指向的元素,同时上方指针增加1(如每一行巨图块的模数值),在复制操作的同时(或之后),以0值清空目前mbNeighCtx阵列元素。
保留于mbNeighCtx存储器604的数据结构如下:
mbNeighCtxCurrent[01:00]:2’b:mbType
mbNeighCtxCurrent[65:02]:4’b:TC[16]
mbNeighCtxCurrent[81:66]:4’b:TCC[cb][4]
mbNeighCtxCurrent[97:82]:4’b:TCC[cr][4]
当执行CWRITE指令,会更新mbNeighCtx[]相邻数据以及初始化目前mbNeighCtx 686。
现已描述CAVLC单元530使用的内容存储器结构,接下来说明CAVLC单元530及CAVLC_TOTC指令如何利用相邻内容信息计算TotalCoeff(TC),TotalCoeff用来决定要使用哪一个CAVLC表来解码符号,通常CAVLC解码是利用H.264规格书的可变长度解码表(之后称为CAVLC表),其中根据先前解码符号的内容来决定用于解码的CAVLC表,因此,每一个符号可能会用到不同的CAVLC表,图6D显示一个基本的窗体结构,其为可变尺寸2D阵列,提供一个「窗体」阵列(每一个窗体对应一个符号),而每一个符号都是霍夫曼编码,霍夫曼编码存成下列窗体结构:
struct Table{
unsigned head;
struct table{
unsigned val;
unsigned shv;
}table[];
}Table[];
下面描述根据各前置码(prefix coding)的配对(MatchVLC功能)方法,通常CAVLC表分成可变长度部分和固定长度部分,因此利用固定尺寸索引查找可以简化配对,于MatchVLC功能中,进行READ操作不会从移位暂存器602a移出比特流,READ操作与前面说明的READ指令(用于比特流缓冲器602b)不同,后者是针对比特流的。于matchVLC功能中,从比特流缓冲器602b复制一些位(fixL),接着于指定窗体中查找,指定窗体中的每一个项目包含一系数对(dublet,如值与位数),这个位数可用于处理比特流。
FUNCTION MatchVLC(Table,maxIdx)INPUT Table;INPUT maxIdx;Idx1=CLZ(sREG);//count number of leading zerosIdx1=(Idx1>maxIdx)?maxIdx:Idx1;fixL=Table[Idx1].head;SHL(sREG,Idx1+#1); //shift buffer Idx1+1 bitleftIdx2=(fixL)?0:READ(fixL);(val,shv)=Table[Idx1][Idx2];SHL(sREG,shv);return val;ENDFUNCTON |
图6D是前述窗体结构的例示2D阵列的方块图,用于解释CAVLC解码内容中的MatchVLC功能,这个例子是H.264规格书的表9-5(nC==-1):
Coeff_token | TrailingOnes | TotalCoeff | Head | Value | Shift |
1 | 1 | 1 | 0 | 33 | 0 |
01 | 0 | 0 | 0 | 0 | 0 |
001 | 2 | 2 | 0 | 66 | 0 |
000100 | 0 | 2 | 2 | 2 | 2 |
000101 | 3 | 3 | 99 | 2 | |
000110 1 | 2 | 34 | 2 | ||
000111 | 0 | 1 | 1 | 2 |
000010 | 0 | 4 | 1 | 4 | 1 |
000011 | 0 | 3 | 3 | 1 | |
0000010 | 2 | 3 | 1 | 67 | 1 |
0000011 | 1 | 3 | 35 | 1 | |
00000010 | 2 | 4 | 1 | 68 | 1 |
00000011 | 1 | 4 | 36 | 1 | |
0000000 | 3 | 4 | 0 | 100 | 0 |
就伪码来说,此表可以下式表示:
Table9-5[8]={
0,{{33,0}},
0,{{0,0}},
0,{{66,0}},
2,{{2,2},{99,2},{34,2},{1,2}},
1,{{4,1},{3,1}},
1,{{67,1},{35,1}},
1,{{68,1},{36,1}},
0,{{100,0}}
};
上述伪码可以表示成图6D的2D窗体,利用这个窗体结构,上述MatchVLC功能可以用于CAVLC解码,MatchVLC功能会计算比特流中从最高位起连续0的数目(count leading zero,CLZ),以存取对应已知语法成分的窗体;另外,当CLZ值大于macIdx,则MatchVLC功能启动参数化清除(parameterizedclear zero)操作,然后maxIdx回复(在图6D的窗体中为0000000)。MatchVLC功能以及窗体结构的另一个好处便是不需要多个指令来进行处理,只要下列的MatchVLC片段:Idx1=CLZ(sREG);//count number of leading zeros,and Idx1=(Idx1>maxIdx)?maxIdx:Idx1。利用下列MatchVLC片段移除已使用的位:SHL(sREG,Idx1+#1);//shift buffer Idx1+1 bit left。利用下列MatchVLC片段读取子阵列标头:fixL=Table[Idx1].head,andIdx2=(!fixL)?0:READ(fixL)。前方连续0的数目可能相同,但是尾端位的大小不同,于一实施例中可利用CA SEX-type状态叙述(casestatement)(使用较多存储器但是较简单的码结构)。
利用(val,shv)=Table[Idx1][Idx2]以及SHL(sREG,shv)从窗体得到真实值,也可知道这个语法成分使用的实际位数,从比特流移出这些位,然后将语法成分值放回目标暂存器。
前面已描述比特流解析、初始化解码引擎及存储器结构、以及VLC配对方法及窗体结构,现回到图6A描述CAVLC解码引擎(如CAVLC逻辑电路660)及程序,一旦加载比特流、解码引擎、存储器结构、以及暂存器,驱动软件128发出CAVLC_TOTC指令致能coeff_token模块610,CAVLC_TOTC指令格式可为:
CAVLC_TOTC DST,S1,
其中S1和DST分别为输入暂存器及内部输出暂存器,具有下列格式:
SRC1[3:0]=blkIdx
SRC1[18:16]=blkCat
SRC1[24]=iCbCr
剩下的位未定义,输出格式如下:
DST[31:16]=TrailingOnes
DST[15:0]=TotalCoeff
因此,coeff_token模块610接收对应于mbCurrAddr、mbType(表示色度通道是否有在处理,如iCbCr)、以及blkIdx(如区块索引,因为图形可能切成许多区块)的信息,当存取比特流缓冲器602b的巨图块,blkIdx表示特定位置处理的是8×8像素区块或是4×4像素区块,这类信息是由驱动软件128所提供,coeff_token模块610包含查找表(look-up table),根据前述输入coeff_token模块610的查找表得到尾端1(TrailingOnes)及全体系数(TotalCoeff),尾端1表示一列中有多少1,全体系数则表示从比特流拉出的数据片段有多少运作/层级系数对,TrailingOnes以及TotalCoeff将分别输入CAVLC_Level模块614及CAVLC_ZL模块618,TrailingOnes亦同时输入CAVLC_L0模块616,其对应从比特流缓冲器602b取出的第一层级(如DC值)。
CAVLC_level模块614记录符号的字尾长度(如尾端1的数目),并结合LevelCode计算储存于层级阵列622及运作阵列624的层级值(level[Idx]),CAVLC_Level模块614根据CAVLC_LVL指令运算,CAVLC_LVL指令的格式如下:
CAVLC_LVL DST,S2,S1,
其中:
S1=Idx(16-bit),
S2=suffixLength(16-bit),and
DST=suffixLength(16-bit)。
suffixLength表示字符码长度,来自驱动软件128的输入会提供指定suffixLength的信息,另外,于一实施例中,因为更新了suffixLength值,DST和S2可以由同样的暂存器取得。
这里亦可使用转递暂存器(保留特定模块于内部产生的数据),如图6B的F1 665及F2 667,一个指令及对应的模块是否使用转递暂存器会于指令中用转递旗标表示,代表转递暂存器的符号有F1(使用转递来源1的值,于一实施例中可以指令中的位26表示)以及F2(使用转递来源2的值,于一实施例中可以指令中的位27表示),如果使用转递暂存器,CAVLC_LVL指令会有下列例示格式:
CAVLC_LVL.F1.F2 DST,SRC2,SR1,
其中,如果F1或F2设为1,则指定的转递来源将成为输入,转递暂存器F1对应于CAVLC_Level模块614所产生的层级索引(level[Idx]),经过增量(increment)模块后输入多工器630,转递暂存器F2对应于CAVLC_Level模块614所产生的suffixLength,并将输入多工器628,多工器603及多工器628的其它输入还有EU暂存器输入(图6A中标示为EU),说明如下。
CAVLC_Level模块614还有另一个输入levelCode,是由CAVLC_LevelCode模块612所提供,CAVLC_LevelCode模块612及CAVLC_Level模块614联合运算解码层级值(在调整大小(scaling)之前的变换系数(transformcoefficient)值),致能CAVLC_LevelCode模块612的指令格式如下:
CAVLC_LC SRC1,
其中,SRC1=suffixLength(16-bit),如果使用转递暂存器F1 665,则指令表示如下:
CAVLC_LVL.F1 SRC1,
如果设定F1,则转递SRC1将做为输入,配合图6A,如果设定F1(如F1=1),则CAVLC_LevelCode模块612使用转递SRC1值(如CAVLC_Level模块614的suffixLength)做为输入,不然(如F1=0),EU暂存器的值将做为输入。
现在回到CAVLC_Level模块614,suffixLength输入可以经由多工器628从CAVLC_Level模块614转递,也可以经由EU暂存器提供至多工器628,另外Idx输入同样可以经由多工器630从CAVLC_Level转递(可以通过增量模块进行增量或自动增量),也可以经由EU暂存器提供至多工器630。CAVLC_Level模块614还直接从CAVLC_LevelCode模块612接收levelCode输入,除了传送给转递暂存器的输出,CAVLC_Level模块614还提供层级索引(level[idx])输出给层级阵列622。
如前所述,将TrailingOne s输出(如DC值)传送至CAVLC_L0模块616,通过下列指令致能CAVLC_L0模块:
CAVLC_LVL0 SRC,
其中,SRC=trailingOnes(coeff_token),CAVLC_L0模块616的输出包括输出给层级阵列622的层级索引(Level[Idx]),系数值编码成正负号(sign)与大小(magnitude),CAVLC_L0模块616提供系数的正负值,CAVC_Level模块614提供的大小值与CVLC_L0模块616提供的正负值结合,写入层级阵列622,利用层级索引(level[idx])指定写入位置,于一实施例中,系数的每一子区块是4×4矩阵(区块是8×8),还不是扫描(raster)顺序,这个阵列稍后转换成4×4矩阵,换句话说解码的系数层级及运作并不是扫描格式,利用层级-运作数据,可以重建4×4矩阵(但是为Z字扫描顺序),然后重新排列成扫描顺序的4×4矩阵。
将coeff_token模块610的输出TotalCoeff传送给CAVLC_ZL模块618,通过下列指令致能CAVLC_ZL模块618:
CAVLC_ZL DST,SRC1,
其中,SRC1=maxNumCoeff(16-bit)而DST=ZerosLeft(16-bit),maxNumCoeff(H.264标准)做为指令的来源值,换句话说,maxNumCoeff是由软件设定的,于某些实施例中,maxNumCoeff储存于硬件中,变换系数编码成(层级,运作)系数对,代表编码成0的系数(层级)数目,CAVLC_ZL模块618提供两个输出ZerosLeft及Reset(reset=0)给多工器640及642,多工器640亦从CAVLC_Run模块620接收转递暂存器F2,多工器642从CAVLC_Run模块620接收增量(经由增量模块)的转递暂存器的值F1。
CAVLC_Run模块620分别从多工器640及642接收ZerosLeft及Idx输入,并输出运作索引(Run[Idx])至运作阵列624,如前所述,因为会使用运作-长度编码进行更进一步的压缩,因此系数编码成(层级,运作)对,举个例子,假设具有数值10 12 12 15 19 1 1 1 0 0 0 0 0 0 1 0,会编码成(10,0)(12,1)(15,0)(19,0)(1,2)(0,5)(1,0)(0,0),这种字符码通常比较短,索引便是层级索引的对应索引,通过下列指令致能CAVLC_Run模块620:
CAVLC_RUN DST,S2,S1,
其中,因为已更新ZerosLeft值,因此DST及S2可从同的暂存器取得,CVLC_Run的不具正负号数值如下:
S1=Idx(16-bit),
S2=ZerosLeft(16-bit),
DST=Zerosleft(16-bit)
由图6A可知,如果使用转递暂存器,CAVLC_RUN指令的格式如下:
CAVLC.F1.F2 DST,SRC2,SRC1,
其中,如果设定F1或F2,就表示对应的转递来源将做为输入。
至于两个暂存器阵列,层级阵列622对应于层级,而运作阵列624对应于运作,每一个阵列都包括16个元素,层级阵列622的每一个元素都包含16位具正负号的值,而运作阵列624的每一个元素都包含4位不具正负号的值,利用下列指令分别从运作阵列624及层级阵列622读取运作及层级值:
READ_LRUNDST,
其中,于一实施例中,DST包括4个128位的连续暂存器(如EU临时或共享暂存器),这个操作会读取CAVLC单元530内的层级暂存器622及运作暂存器624,并将其储存于目标暂存器DST,当读取运作并将其储存于暂存器中,运作值会转换成16位不具正负号的值,举个例子,前2个暂存器保留16个16位层级(亦即阵列储存第一笔16个系数)值,而第三及第四暂存器则保留16个16位运作值,如果超过16个系数,将其解码至存储器,于一实施例中,依照下列顺序将值写入:于第一暂存器中,最低有效16位包含LEVEL[0]、位16-31包含LEVEL[1]等等,以此类推直到位112-127包含LEVEL[7];于第二暂存器中最低有效16位包含LEVEL[8]...,运作值亦使用同样的排列方法。
用于清除运作阵列624及层级阵列624暂存器的另一个指令格式如下:
CLR_LRUN。
前述解码***200(如CAVLC单元530)的软件(着色器程序)以及硬件操作(如模块)可以利用下列虚拟码表示:
Residual_block_cavlc(coeffLevel,maxNumCoeff){ |
CLR_LEVEL_RUN |
coeff_token |
if(TotalCoeff(coeff_token)>0){ |
if(TotalCoeff(coeff_token)>10 &&TrailingOnes(coeff_token)<3) |
suffixLength=1 |
Else |
suffixLength=0 |
CAVLC_level0(); |
for(I=TrailingOnes(coeff_taken);I<TotalCoeff(coeff_token);i++){ |
CAVLC_levelCode(levelCode,suffixLength); |
CAVLC-level(suffixLength,i,levelCode) |
} |
CAVLC_ZerosLeft(ZerosLeft,maxNumCoeff) |
for(i=0;i<TotalCoeff(coeff_token)-1;i++){ |
CAVLC_run(i,ZerosLeft) |
READ_LEVEL_RUN(level,run) |
run[TotalCoeff(coeff_token)-1]=zerosLeft |
coeffNum=-1 |
for(i=TotalCoeff(coeff_token)-1;i>=0;i--){ |
coeffNum+=run[I]+1 |
coeffLevel[coeffNum]=level[i] |
} |
} |
} |
应强调的是,本发明所举的上所实施例或「较佳」实施例仅为可能的施行范例,仅用以清楚说明本发明的原理,即便对上述实施例施以变化和修饰,然皆不脱此中所述***及方法的精神和原则,所有此等修饰及变化应涵括于本发明的范围内,受如附权利要求范围保护。
Claims (29)
1.一种解码***,其包含:
软件可编程核心处理单元,其具有执行着色器的内容适应性可变长度编码(context-adaptive variable length coding,CAVLC)单元,该着色器施行视频流的CAVLC解码并提供解码数据输出,
其中该CAVLC解码是使用硬件配合软件的方式施行。
2.根据权利要求1所述的***,其中该CAVLC解码是以图形处理单元编程的内容配合施行于图形处理单元数据路径内的硬件所完成。
3.根据权利要求1所述的***,其中该CAVLC单元还包含系数符记(coeff_token)模块,用以接收巨图块信息,因应该着色器的第一指令(CAVLC_TOTC),提供尾端1信息及全体系数信息。
4.根据权利要求3所述的***,其中该CAVLC单元还包含层级(CAVLC_Level)模块,用以接收该尾端1信息及层级码信息,因应该着色器的第二指令(CAVLC_LVL),提供字尾长度信息及层级索引(Level[Idx])信息。
5.根据权利要求4所述的***,其中该CAVLC单元还包含层级码(CAVLC_LevelCode)模块,用以接收该字尾长度信息,因应该着色器的第三指令(CAVLC_LC),提供该层级码信息给该层级模块。
6.根据权利要求5所述的***,其中该层级码模块从转递暂存器或执行单元暂存器接收该字尾长度信息。
7.根据权利要求5所述的***,其中该层级码模块从转递暂存器或执行单元暂存器接收该字尾长度信息及该层级索引信息,该层级索引信息是经过增量运算。
8.根据权利要求4所述的***,其中该CAVLC单元还包含层级0(CAVLC_L0)模块,用以接收该尾端1信息,因应该着色器的第四指令(CAVLC_LVL0),提供第二层级索引(Level[Idx])信息给层级阵列。
9.根据权利要求8所述的***,其中该CAVLC单元还包含零层级(CAVLC_ZL)模块,用以接收该全体系数信息及最大数目系数信息,因应该着色器的第五指令(CAVLC_ZL),提供左方0信息及重置值给第一多工器及第二多工器。
10.根据权利要求9所述的***,其中该CAVLC单元还包含运作(CAVLC_Run)模块,用以从该第一多工器及该第二多工器接收该左方0信息及第二索引信息,因应该着色器的第六指令(CAVLC_RUN),提供运作索引(Run[Idx])信息给运作阵列。
11.根据权利要求10所述的***,其中该第一多工器及该第二多工器分别从第一转递暂存器及第二转递暂存器接收该左方0信息及该第二索引信息。
12.根据权利要求10所述的***,其中该层级阵列及该运作阵列因应该着色器的第七指令(READ_LRUN)提供解码层级值及解码运作值,并因应该着色器的第八指令(CLR_LRUN)而清空。
13.根据权利要求1所述的***,其中该CAVLC单元使用指令内的位,判断储存在内部暂存器的前一次运算结果是否可用,或是来源操作数中的数据是否可供一个或多个模块于目前运算中使用。
14.根据权利要求1所述的***,其中该CAVLC单元还包含直接存储器存取(direct memory access,DMA)引擎模块,其内包含比特流缓冲器以及DMA引擎,该DMA引擎模块因应该着色器针对每一切片执行的指令,当已使用该比特流内的预定数量的位,自动重复填入该预定数量的位,该位对应于该视频流。
15.根据权利要求14所述的***,其中该CAVLC单元因应该比特流缓冲器内有向下溢位的可能,延迟该DMA引擎模块。
16.根据权利要求14所述的***,其中该DMA引擎模块用于记录该比特流缓冲器内的已使用位数目,并因应检测到该位数目大于预定值,暂停该比特流缓冲器运算,并将控制权转移至主处理器。
17.一种解码方法,其包括步骤:
将着色器加载具有CAVLC单元的可编程核心处理单元中;
执行该CAVLC单元上的该着色器,以CAVLC解码视频流;以及
提供解码数据输出。
18.根据权利要求17所述的方法,其中该CAVLC解码是以图形处理单元编程的内容配合施行于图形处理单元数据路径内的硬件所完成。
19.根据权利要求17所述的方法,还包括步骤:
该CAVLC单元的系数符记(coeff_token)模块接收巨图块信息;
因应该着色器的第一指令(CAVLC_TOTC),提供尾端1信息及全体系数信息;
该CAVLC单元的层级(CAVLC_Level)模块接收该尾端1信息及层级码信息;
因应该着色器的第二指令(CAVLC_LVL),提供字尾长度信息及层级索引(Level[Idx])信息;
该CAVLC单元的层级码(CAVLC_LevelCode)模块接收该字尾长度信息;以及
因应该着色器的第三指令(CAVLC_LC),提供该层级码信息给该层级模块。
20.根据权利要求19所述的方法,其中该层级码模块从转递暂存器或执行单元暂存器接收该字尾长度信息及该层级索引信息,该层级索引信息是经过增量运算。
21.根据权利要求19所述的方法,还包括步骤:
该CAVLC单元的层级0(CAVLC_L0)模块接收该尾端1信息;以及
因应该着色器的第四指令(CAVLC_LVL0),提供第二层级索引信息(Level[Idx])给层级阵列。
22.根据权利要求21所述的方法,还包括步骤:
该CAVLC模块的零层级(CAVLC_ZL)模块接收该全体系数信息及最大数目系数信息;
因应该着色器的第五指令(CAVLC_ZL),提供左方0信息及重置值给第一多工器及第二多工器;
该CAVLC单元的运作(CAVLC_Run)模块分别从该第一多工器及该第二多工器接收该左方0信息及第二索引信息;以及
因应该着色器的第六指令(CAVLC_RUN),提供运作索引(Run[Idx])给运作阵列。
23.根据权利要求22所述的方法,其中该第一多工器及该第二多工器分别从第一转递暂存器及第二转递暂存器接收该左方0信息及该第二索引。
24.根据权利要求22所述的方法,其中该层级阵列及该运作阵列因应该着色器的第七指令(READ_LRUN)提供解码层级值及解码运作值。
25.根据权利要求22所述的方法,其中该层级阵列及该运作阵列因应该着色器的第八指令(CLR_LRUN)而清空。
26.根据权利要求17所述的方法,还包括步骤:
该CAVLC单元使用指令内的位,判断储存在内部暂存器的前一次运算结果是否可用,或是来源操作数中的数据是否可供一个或多个模块于目前运算中使用。
27.根据权利要求17所述的方法,其中还包括步骤:
因应该着色器针对每一切片执行的指令,当已使用该比特流内的预定数量的位,自动重复填入该预定数量的位,该位对应于该视频流。
28.根据权利要求27所述的方法,还包括步骤:
因应该比特流缓冲器内有向下溢位的可能,延迟使用该比特流缓冲器内的该位。
29.根据权利要求27所述的方法,还包括步骤:
记录该比特流缓冲器内的已使用位数目,并因应检测到该位数目大于预定值,暂停该比特流缓冲器运算,并将控制权转移至主处理器。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US81182106P | 2006-06-08 | 2006-06-08 | |
US60/811,821 | 2006-06-08 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101072349A true CN101072349A (zh) | 2007-11-14 |
CN101072349B CN101072349B (zh) | 2012-10-10 |
Family
ID=38899303
Family Applications (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200710126453 Pending CN101087411A (zh) | 2006-06-08 | 2007-06-08 | 译码方法 |
CN 200710110295 Active CN101072349B (zh) | 2006-06-08 | 2007-06-08 | 内容适应性可变长度编码的解码***与方法 |
CN 200710110297 Active CN101072350B (zh) | 2006-06-08 | 2007-06-08 | 译码***及其译码方法 |
CN 200710126452 Active CN101072353B (zh) | 2006-06-08 | 2007-06-08 | 译码***以及图形处理单元 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200710126453 Pending CN101087411A (zh) | 2006-06-08 | 2007-06-08 | 译码方法 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200710110297 Active CN101072350B (zh) | 2006-06-08 | 2007-06-08 | 译码***及其译码方法 |
CN 200710126452 Active CN101072353B (zh) | 2006-06-08 | 2007-06-08 | 译码***以及图形处理单元 |
Country Status (2)
Country | Link |
---|---|
CN (4) | CN101087411A (zh) |
TW (4) | TWI348653B (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101527856B (zh) * | 2008-03-05 | 2011-05-04 | 奇景光电股份有限公司 | 在图像解码器中对于循环冗余校验的快速除错工具 |
CN102254297A (zh) * | 2010-10-15 | 2011-11-23 | 威盛电子股份有限公司 | 多着色器***及其处理方法 |
CN101908200B (zh) * | 2009-06-05 | 2012-08-08 | 财团法人资讯工业策进会 | 具电源闸控功能的绘图处理***及方法 |
CN102647589A (zh) * | 2011-02-18 | 2012-08-22 | Arm有限公司 | 并行视频解码 |
CN102917215A (zh) * | 2011-08-05 | 2013-02-06 | 美国博通公司 | 针对cabac/cavlc熵编码的统一二值化 |
CN103608848A (zh) * | 2011-06-17 | 2014-02-26 | 超威半导体公司 | 使用着色器处理器的实时片上纹理解压缩 |
CN103813177A (zh) * | 2012-11-07 | 2014-05-21 | 辉达公司 | 一种视频解码***和方法 |
CN104869398A (zh) * | 2015-05-21 | 2015-08-26 | 大连理工大学 | 一种基于cpu+gpu异构平台实现hevc中的cabac的并行方法 |
CN105898301A (zh) * | 2015-02-17 | 2016-08-24 | 联发科技股份有限公司 | 算术译码的方法及设备 |
CN106415484A (zh) * | 2014-05-27 | 2017-02-15 | 高通股份有限公司 | 专用算术编码指令 |
CN106959822A (zh) * | 2013-12-27 | 2017-07-18 | 威盛电子股份有限公司 | 数据储存装置及其数据写入方法 |
CN107925420A (zh) * | 2015-09-25 | 2018-04-17 | 英特尔公司 | 用于经优化压缩比的异构压缩架构 |
CN109818855A (zh) * | 2019-01-14 | 2019-05-28 | 东南大学 | 一种NDN中支持pipeline模式获取内容的方法 |
CN110710219A (zh) * | 2017-12-08 | 2020-01-17 | 谷歌有限责任公司 | 用于系数代码化的上下文推导 |
Families Citing this family (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8686921B2 (en) * | 2008-12-31 | 2014-04-01 | Intel Corporation | Dynamic geometry management of virtual frame buffer for appendable logical displays |
CN101577629B (zh) * | 2009-05-14 | 2011-05-25 | 北京邮电大学 | 组播网络中基于图着色的编码向量动态分配方法 |
CN103037213B (zh) * | 2011-09-28 | 2016-02-17 | 晨星软件研发(深圳)有限公司 | 布林熵解码器及影像播放***的布林熵解码方法 |
TWI590649B (zh) | 2011-11-08 | 2017-07-01 | 三星電子股份有限公司 | 視訊之算術解碼裝置 |
EP2831720A4 (en) * | 2012-03-30 | 2015-12-09 | Intel Corp | PREFERRING MEDIA DEVICES WITH DETERMINED FUNCTIONS |
US9451258B2 (en) | 2012-04-03 | 2016-09-20 | Qualcomm Incorporated | Chroma slice-level QP offset and deblocking |
CN106851275A (zh) * | 2012-05-29 | 2017-06-13 | 寰发股份有限公司 | 视频数据的自适应采样点偏移的处理装置及方法 |
US9196014B2 (en) * | 2012-10-22 | 2015-11-24 | Industrial Technology Research Institute | Buffer clearing apparatus and method for computer graphics |
US9947084B2 (en) | 2013-03-08 | 2018-04-17 | Nvidia Corporation | Multiresolution consistent rasterization |
JP6379107B2 (ja) * | 2013-05-21 | 2018-08-22 | 株式会社スクウェア・エニックス・ホールディングス | 情報処理装置並びにその制御方法、及びプログラム |
DE102015115605A1 (de) * | 2014-09-16 | 2016-03-17 | Jeffrey A. Bolz | Techniken zur Weiterleitung von Abhängigkeiten in einer API |
US10205957B2 (en) * | 2015-01-30 | 2019-02-12 | Mediatek Inc. | Multi-standard video decoder with novel bin decoding |
GB2542162B (en) * | 2015-09-10 | 2019-07-17 | Imagination Tech Ltd | Trailing or leading digit anticipator |
US10467006B2 (en) * | 2015-12-20 | 2019-11-05 | Intel Corporation | Permutating vector data scattered in a temporary destination into elements of a destination register based on a permutation factor |
US10375395B2 (en) | 2016-02-24 | 2019-08-06 | Mediatek Inc. | Video processing apparatus for generating count table in external storage device of hardware entropy engine and associated video processing method |
CN106921859A (zh) * | 2017-05-05 | 2017-07-04 | 郑州云海信息技术有限公司 | 一种基于fpga的cabac熵编码方法与装置 |
CN107277505B (zh) * | 2017-05-19 | 2020-06-16 | 北京大学 | 基于软硬件分区的avs-2视频解码器装置 |
CN107242882A (zh) * | 2017-06-05 | 2017-10-13 | 上海瓴舸网络科技有限公司 | 一种b超显示辅助设备及其控制方法 |
TWI674558B (zh) * | 2018-06-12 | 2019-10-11 | 財團法人工業技術研究院 | 數值陣列資料影像處理裝置、數值陣列資料影像處理方法及色碼表產生方法 |
CN110458120B (zh) * | 2019-08-15 | 2022-01-04 | 中国水利水电科学研究院 | 一种复杂环境下不同车型识别方法及*** |
CN111028135B (zh) * | 2019-12-10 | 2023-06-02 | 国网重庆市电力公司电力科学研究院 | 一种图像文件修复方法 |
CN112582009B (zh) * | 2020-12-11 | 2022-06-21 | 武汉新芯集成电路制造有限公司 | 单调计数器及其计数方法 |
US11748011B2 (en) | 2021-03-31 | 2023-09-05 | Silicon Motion, Inc. | Control method of flash memory controller and associated flash memory controller and storage device |
US11733895B2 (en) * | 2021-03-31 | 2023-08-22 | Silicon Motion, Inc. | Control method of flash memory controller and associated flash memory controller and storage device |
CN114816434B (zh) * | 2022-06-28 | 2022-10-04 | 之江实验室 | 一种面向可编程交换的硬件解析器及解析器实现方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1599049A3 (en) * | 2004-05-21 | 2008-04-02 | Broadcom Advanced Compression Group, LLC | Multistandard video decoder |
US7742544B2 (en) * | 2004-05-21 | 2010-06-22 | Broadcom Corporation | System and method for efficient CABAC clock |
KR100612015B1 (ko) * | 2004-07-22 | 2006-08-11 | 삼성전자주식회사 | 컨텍스트 적응형 이진 산술 부호화 방법 및 그 장치 |
US7800620B2 (en) * | 2004-11-05 | 2010-09-21 | Microsoft Corporation | Optimizing automated shader program construction |
-
2007
- 2007-06-08 TW TW096120896A patent/TWI348653B/zh active
- 2007-06-08 CN CN 200710126453 patent/CN101087411A/zh active Pending
- 2007-06-08 TW TW96120728A patent/TWI354239B/zh active
- 2007-06-08 TW TW96120899A patent/TWI344795B/zh active
- 2007-06-08 TW TW96120726A patent/TWI428850B/zh active
- 2007-06-08 CN CN 200710110295 patent/CN101072349B/zh active Active
- 2007-06-08 CN CN 200710110297 patent/CN101072350B/zh active Active
- 2007-06-08 CN CN 200710126452 patent/CN101072353B/zh active Active
Cited By (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101527856B (zh) * | 2008-03-05 | 2011-05-04 | 奇景光电股份有限公司 | 在图像解码器中对于循环冗余校验的快速除错工具 |
CN101908200B (zh) * | 2009-06-05 | 2012-08-08 | 财团法人资讯工业策进会 | 具电源闸控功能的绘图处理***及方法 |
CN102254297A (zh) * | 2010-10-15 | 2011-11-23 | 威盛电子股份有限公司 | 多着色器***及其处理方法 |
CN102254297B (zh) * | 2010-10-15 | 2013-11-27 | 威盛电子股份有限公司 | 多着色器***及其处理方法 |
CN102647589B (zh) * | 2011-02-18 | 2016-12-28 | Arm有限公司 | 并行视频解码 |
CN102647589A (zh) * | 2011-02-18 | 2012-08-22 | Arm有限公司 | 并行视频解码 |
US10510164B2 (en) | 2011-06-17 | 2019-12-17 | Advanced Micro Devices, Inc. | Real time on-chip texture decompression using shader processors |
US11043010B2 (en) | 2011-06-17 | 2021-06-22 | Advanced Micro Devices, Inc. | Real time on-chip texture decompression using shader processors |
CN103608848A (zh) * | 2011-06-17 | 2014-02-26 | 超威半导体公司 | 使用着色器处理器的实时片上纹理解压缩 |
CN103608848B (zh) * | 2011-06-17 | 2017-03-15 | 超威半导体公司 | 使用着色器处理器的实时片上纹理解压缩 |
TWI493885B (zh) * | 2011-08-05 | 2015-07-21 | Broadcom Corp | 用於操作通訊裝置的熵編碼器及設備 |
CN102917215A (zh) * | 2011-08-05 | 2013-02-06 | 美国博通公司 | 针对cabac/cavlc熵编码的统一二值化 |
CN102917215B (zh) * | 2011-08-05 | 2016-05-04 | 美国博通公司 | 针对cabac/cavlc熵编码的统一二值化 |
CN103813177A (zh) * | 2012-11-07 | 2014-05-21 | 辉达公司 | 一种视频解码***和方法 |
CN106959822B (zh) * | 2013-12-27 | 2020-02-07 | 威盛电子股份有限公司 | 数据储存装置及其数据写入方法 |
CN106959822A (zh) * | 2013-12-27 | 2017-07-18 | 威盛电子股份有限公司 | 数据储存装置及其数据写入方法 |
CN106415484A (zh) * | 2014-05-27 | 2017-02-15 | 高通股份有限公司 | 专用算术编码指令 |
CN106415484B (zh) * | 2014-05-27 | 2019-02-01 | 高通股份有限公司 | 用于执行专用算术编码指令的设备、方法和计算机可读介质 |
US10250912B2 (en) | 2015-02-17 | 2019-04-02 | Mediatek Inc. | Method and apparatus for entropy decoding with arithmetic decoding decoupled from variable-length decoding |
CN105898301A (zh) * | 2015-02-17 | 2016-08-24 | 联发科技股份有限公司 | 算术译码的方法及设备 |
CN104869398B (zh) * | 2015-05-21 | 2017-08-22 | 大连理工大学 | 一种基于cpu+gpu异构平台实现hevc中的cabac的并行方法 |
CN104869398A (zh) * | 2015-05-21 | 2015-08-26 | 大连理工大学 | 一种基于cpu+gpu异构平台实现hevc中的cabac的并行方法 |
CN107925420A (zh) * | 2015-09-25 | 2018-04-17 | 英特尔公司 | 用于经优化压缩比的异构压缩架构 |
CN107925420B (zh) * | 2015-09-25 | 2022-01-04 | 英特尔公司 | 用于经优化压缩比的异构压缩架构 |
CN110710219A (zh) * | 2017-12-08 | 2020-01-17 | 谷歌有限责任公司 | 用于系数代码化的上下文推导 |
CN110710219B (zh) * | 2017-12-08 | 2022-02-11 | 谷歌有限责任公司 | 用于系数代码化的上下文推导的方法和设备 |
CN114449277A (zh) * | 2017-12-08 | 2022-05-06 | 谷歌有限责任公司 | 用于系数代码化的上下文推导的方法和设备 |
CN114449277B (zh) * | 2017-12-08 | 2024-06-07 | 谷歌有限责任公司 | 用于系数代码化的上下文推导的方法和设备 |
CN109818855B (zh) * | 2019-01-14 | 2020-12-25 | 东南大学 | 一种NDN中支持pipeline模式获取内容的方法 |
CN109818855A (zh) * | 2019-01-14 | 2019-05-28 | 东南大学 | 一种NDN中支持pipeline模式获取内容的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101072353A (zh) | 2007-11-14 |
TW200809689A (en) | 2008-02-16 |
TW200803526A (en) | 2008-01-01 |
TWI428850B (zh) | 2014-03-01 |
TWI348653B (en) | 2011-09-11 |
TW200821982A (en) | 2008-05-16 |
CN101072349B (zh) | 2012-10-10 |
TWI344795B (en) | 2011-07-01 |
CN101072353B (zh) | 2013-02-20 |
CN101072350A (zh) | 2007-11-14 |
CN101072350B (zh) | 2012-12-12 |
TWI354239B (en) | 2011-12-11 |
CN101087411A (zh) | 2007-12-12 |
TW200813884A (en) | 2008-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101072349B (zh) | 内容适应性可变长度编码的解码***与方法 | |
US7623049B2 (en) | Decoding of context adaptive variable length codes in computational core of programmable graphics processing unit | |
US7656326B2 (en) | Decoding of context adaptive binary arithmetic codes in computational core of programmable graphics processing unit | |
US7626518B2 (en) | Decoding systems and methods in computational core of programmable graphics processing unit | |
US7626521B2 (en) | Decoding control of computational core of programmable graphics processing unit | |
US7034849B1 (en) | Method and apparatus for image blending | |
CN1620819A (zh) | 改进的可变长度解码器 | |
US7015921B1 (en) | Method and apparatus for memory access | |
US9705526B1 (en) | Entropy encoding and decoding of media applications | |
CN101841707B (zh) | 基于jpeg2000标准的高速实时处理算术熵编码方法 | |
CN110121072A (zh) | 对数据阵列进行编码 | |
US8031208B2 (en) | Drawing apparatus and method for processing plural pixels in parallel | |
JP2005348410A (ja) | 圧縮装置及びその方法 | |
JPH1185969A (ja) | 画像処理装置及びその方法 | |
US7114058B1 (en) | Method and apparatus for forming and dispatching instruction groups based on priority comparisons | |
US6512852B1 (en) | Method and apparatus for concatenating bits of odd-length words | |
US20230185873A1 (en) | Method and apparatus for separable convolution filter operations on matrix multiplication arrays | |
AU739533B2 (en) | Graphics processor architecture | |
US7075462B2 (en) | Speeding up variable length code decoding on general purpose processors | |
CN1541356A (zh) | 有软/硬件环压缩的先进先出写/后进先出读跟踪缓冲器 | |
US11327687B2 (en) | Encoding data arrays | |
Montero et al. | Parallel zigzag scanning and Huffman coding for a GPU-based MPEG-2 encoder | |
US10778990B2 (en) | Embedded codec circuitry for randomized refinement of uncoded-bits | |
AU728882B2 (en) | Compression | |
Choi et al. | Design of an application specific instruction set processor for a universal bitstream codec |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |