具体实施方式
为使本发明的上述目的、特征和优点能更明显易懂,下文特举一优选实施例,并配合附图,作详细说明如下。
图1为依据本发明一实施例中的视频解码装置的方块图。
如图1所示,视频解码装置100包括视频解码器110、易失性存储器120、以及存储器单元130。视频解码器110用以解码一视频流以得到多张图像帧。在一些实施例中,视频解码器110支持开放媒体联盟(AOMedia)Video1(AV1)、高效率视频编码(HighEfficiencyVideoCoding,HEVC)及VP9等视频编解码标准,但本发明并不限于此。在一实施例中,视频解码器110可用硬件电路所实现,例如为一应用导向集成电路(application-specific integrated circuit,ASIC)、现场可编程逻辑门阵列(field-programmable gatearray,FPGA)、或其他具有相同功能的逻辑电路,但本发明并不限于此。在另一实施例中,视频解码器110可用一中央处理器或数字信号处理器以执行相应的程序代码所实现。
易失性存储器120例如为静态随机存取存储器(static random access memory),其用以暂存视频解码器110在视频解码过程中所需的解码块。在一些实施例中。在一些实施例中,视频解码器110及易失性存储器120可整合至一集成电路(integrated circuit)150之中。
在一实施例中,视频解码器110可接收来自一编码器所产生的视频流以进行解码。在另一实施例中,视频解码装置100还包括一存储装置140,且视频流例如可以视频文件的形式存储在存储装置140中。视频解码器110可由存储装置140读取视频文件中的视频流以进行解码。存储装置140为一非易失性存储器,例如可为硬盘机(hard disk drive)、固态硬盘(solid-state disk)、快闪存储器(flash memory)等等,但本发明并不限于此。
图2为依据本发明一实施例中超级区块及递归划分为编码单元的示意图。如图2所示,超级区块200的尺寸为128x128像素。举例来说,在AV1标准中,最小的编码单元的尺寸为4x4像素,故视频解码器110需要对欲解码的超级区块200进行递归划分直到得到4x4的编码单元。
首先,将超级区块200划分为4个64x64区块,例如区块21~24,并接着依照循序扫描(raster scan)的顺序判断各个64x64区块21~24是否需进行划分。以64x64区块为例,当依照循序扫描的顺序进行判断时,视频解码器110首先会判断左上方的64x64区块(区块21)是否需要划分,再依序判断右上方、左下方及右下方的64x64区块22、23、24是否需要划分。
举例来说,在视频解码器110依据视频编解码标准进行正确解码的前提下,如果解码得到的syntax value是PARTITION_SPLIT,就继续划分;如果解码得到的syntax value是其他值(比如PARTITION_NONE,PARTITION_VERT,……)就返回并重新进入解码阶段。其中依据视频编解码标准进行解码不属于本发明的范围,在此不做赘述。
若视频解码器110判断第一个64x64区块21需要划分,则会将区块21划分为4个32x32区块,例如区块211~214。依据类似方式,如图2所示,视频解码器110判断区块211及214需要进一步划分,且区块212及213并不需进一步划分,故视频解码器110则将区块211及214划分为4个16x16区块,例如分别为区块2111~2114及区块2141~2144。此外,视频解码器110判断区块2111~2114及区块2141~2144均不需进一步划分,故可将区块2111~2114及区块2141~2144的每一个均视为一个编码单元(CU)。
图3A~3O为依据本发明图2的实施例中的堆栈顺序的示意图。
在一实施例中,易失性存储器120的其中一部分的存储器空间例如可做为堆栈存储器(stack memory)121,且视频解码器110例如可执行一区块递归划分指令,例如可称为QTREE指令,并将堆栈存储器121以先入后出(First-in-Last-out,FILO)或后入先出(Last-in-First-out,LIFO)的方式来实现区块递归划分之操作。对于堆栈存储器121而言,加入(push)操作与删除(pop)操作是在堆栈存储器121的同一端执行。
为了便于说明,图3A~3O的堆栈顺序依据图2中的超级区块的划分顺序来说明如何实现区块递归划分指令。
在一实施例中,视频解码器110例如可预先设定堆栈存储器121的最大划分深度,其中最大划分深度表示将超级区块200中的所有区块均划分至最小的编码单元(即4x4区块)时的4x4区块数量。举例来说,虽然尺寸为128x128的超级区块最多可划分为1024个4x4区块,但视频解码器110在执行区块递归划分指令时,实际上并不会用到1024个项目(entry),而是会依据循序扫描的顺序对每一层的四个区块的其中一个进行处理。故若要计算堆栈存储器121的最大划分深度,则超级区块200的划分方式如图4A所示,即每一层区块仅会占用堆栈存储器121中的3个项目。因此,64x64区块、32x32区块、16x16区块、8x8区块各占用堆栈存储器121中的3个项目。因为4x4区块为最小的编码单元,所以视频解码器110不会再将4x4区块划分为更小的区块,可以对4x4区块直接解码,故视频解码器110不需将4x4区块写入至堆栈存储器121。
因此,当执行超级区块200的区块递归划分指令时,一共最多会占用堆栈存储器121中的12个项目,故堆栈存储器121的最大划分深度为12。假定堆栈存储器121具有N个项目(entry)(例如N=12),则堆栈存储器121最底部的项目的逻辑地址例如为#0,最顶部的项目的逻辑地址为#(N-1),即#11,如图4B所示。然而,本发明并不限定于上述最大划分深度,且视频解码器110可视解码过程的实际情况而调整上述最大划分深度。
如图3A所示,视频解码器110进行第一次划分处理,例如将超级区块200(例如为128x128区块)划分为4个64x64区块21~24。在此实施例中,视频解码器110先判断区块21是否需要进一步划分,但是先不判断区块22~24是否需要进一步划分,故不会将区块21写入至堆栈存储器121,而是将区块24、区块23及区块22依序写入至堆栈存储器121,即区块24会在堆栈存储器121的最底部,如图3A所示。
接着,视频解码器110判断区块21需进一步划分,故执行第二次划分处理以将区块21划分为4个32x32区块211~214。因为已经执行第二次或以上的划分处理,故区块211~214也可称为子区块。类似地,依照循序扫描的顺序,视频解码器110会先判断第一个32x32区块211是否需要进一步划分,但是先不判断区块212~214是否需要进一步划分,故不会将区块211写入至堆栈存储器121,而是将区块214、区块213及区块212依序写入至堆栈存储器121,如图3B所示。
接着,视频解码器110判断区块211需进一步划分,故执行第三次划分处理以将区块211划分为4个16x16区块2111~2114(也可称为子区块)。类似地,依照在16x16区块此层的循序扫描顺序,视频解码器110会先判断第一个16x16区块2111是否需要进一步划分,但是先不判断区块2112~2114是否需要进一步划分,故不会将区块2111写入至堆栈存储器121,而是将区块2114、区块2113及区块2112依序写入至堆栈存储器121,如图3C所示。
接着,视频解码器110判断区块2111不需进一步划分,即在第四次划分处理时,区块2111的尺寸仍维持在16x16,故视频解码器110可将区块2111设定为编码单元CU0,并对区块2111进行解码。此时,堆栈存储器121仍然维持在图3C所示的存储内容。
视频解码器110并接着从堆栈存储器121取出(pop)区块2112,并判断出区块2112不需进一步划分。即在第五次划分处理时,区块2112的尺寸仍维持在16x16,即划分中止。因此,视频解码器110可将区块2112设定为编码单元CU1,并对区块2112进行解码。此时,堆栈存储器121的存储内容如图3D所示。
类似地,视频解码器110并继续依照在16x16区块此层的循序扫描顺序从堆栈存储器121取出区块2113,并判断出区块2113不需进一步划分。即在第六次划分处理时,区块2113的尺寸仍维持在16x16,即划分中止。因此,视频解码器110可将区块2113设定为编码单元CU2,并对区块2113进行解码。此时,堆栈存储器121的存储内容如图3E所示。
类似地,响应于编码单元CU2的划分中止,视频解码器110并继续依照在16x16区块此层的循序扫描顺序从堆栈存储器121取出区块2114,并判断出区块2114不需进一步划分。即在第七次划分处理时,区块2114的尺寸仍维持在16x16,即划分中止。因此,视频解码器110可将区块2114设定为编码单元CU3,并对区块2114进行解码。此时,堆栈存储器121的存储内容如图3F所示,且区块211的递归划分处理已结束。
接着,视频解码器110并继续依照在32x32区块此层的循序扫描顺序从堆栈存储器121取出32x32区块212,并判断出区块212不需进一步划分。即在第八次划分处理时,区块212的尺寸仍维持在32x32,即划分中止。因此,视频解码器110可将区块212设定为编码单元CU4,并对区块212进行解码。此时,堆栈存储器121的存储内容如图3G所示。
接着,响应于编码单元CU4的划分中止,视频解码器110并继续依照在32x32区块此层的循序扫描顺序从堆栈存储器121取出32x32区块213,并判断出区块213不需进一步划分。即在第九次划分处理时,区块213的尺寸仍维持在32x32,即划分中止。因此,视频解码器110可将区块213设定为编码单元CU5,并对区块213进行解码。此时,堆栈存储器121的存储内容如图3H所示。
接着,响应于编码单元CU5的划分中止,视频解码器110并继续依照在32x32区块此层的循序扫描顺序从堆栈存储器121取出32x32区块214,并判断出区块214需要进一步划分。因此,视频解码器110执行第十次划分处理以将32x32区块214划分为四个16x16区块2141~2144,并将区块2144、2143、2142依序写入堆栈存储器121,如图3I所示。
处理16x16区块2141~2144的步骤类似于处理16x16区块2111~2114。详细而言,视频解码器110先判断区块2141不需进一步划分,即在第十一次划分处理时,区块2141的尺寸仍维持在16x16,即划分中止。因此,视频解码器110可将区块2141设定为编码单元CU6,并对区块2141进行解码。此时,堆栈存储器121仍然维持在图3I所示的存储内容。
接着,响应于编码单元CU6的划分中止,视频解码器110并继续依照在16x16区块此层的循序扫描顺序从堆栈存储器121取出16x16区块2142,并判断出区块2142不需进一步划分。即在第十二次划分处理时,区块2142的尺寸仍维持在16x16,即划分中止。因此,视频解码器110可将区块2142设定为编码单元CU7,并对区块2142进行解码。此时,堆栈存储器121的存储内容如图3J所示。
响应于编码单元CU7的划分中止,视频解码器110并继续依照在16x16区块此层的循序扫描顺序从堆栈存储器121取出16x16区块2143,并判断出区块2143不需进一步划分。即在第十三次划分处理时,区块2143的尺寸仍维持在16x16,即划分中止。因此,视频解码器110可将区块2143设定为编码单元CU8,并对区块2143进行解码。此时,堆栈存储器121的存储内容如图3K所示。
响应于编码单元CU8的划分中止,视频解码器110并继续依照在16x16区块此层的循序扫描顺序从堆栈存储器121取出16x16区块2144,并判断出区块2144不需进一步划分。即在第十四次划分处理时,区块2144的尺寸仍维持在16x16,即划分中止。因此,视频解码器110可将区块2144设定为编码单元CU9,并对区块2144进行解码。此时,堆栈存储器121的存储内容如图3L所示,且64x64区块21的所有递归划分处理均已处理完毕。
接着,视频解码器110并继续依照在64x64区块此层的循序扫描顺序从堆栈存储器121取出64x64区块22,并判断出区块22不需进一步划分。即在第十五次划分处理时,区块22的尺寸仍维持在64x64,即划分中止。因此,视频解码器110可将区块22设定为编码单元CU10,并对区块22进行解码。此时,堆栈存储器121的存储内容如图3M所示。
响应于编码单元CU10的划分中止,视频解码器110并继续依照在64x64区块此层的循序扫描顺序从堆栈存储器121取出64x64区块23,并判断出区块23不需进一步划分。即在第十五次划分处理时,区块23的尺寸仍维持在64x64,即划分中止。因此,视频解码器110可将区块23设定为编码单元CU11,并对区块23进行解码。此时,堆栈存储器121的存储内容如图3N所示。
响应于编码单元CU11的划分中止,视频解码器110并继续依照在64x64区块此层的循序扫描顺序从堆栈存储器121取出64x64区块24,并判断出区块24不需进一步划分。即在第十六次划分处理时,区块24的尺寸仍维持在64x64,即划分中止。因此,视频解码器110可将区块24设定为编码单元CU12,并对区块24进行解码。此时,堆栈存储器121的存储内容已完全清空,如图3O所示。当完成编码单元CU12的解码后,表示超级区块200的解码过程结束。
图5A为依据本发明一实施例中的递归划分解码区块的方法的流程图。图5B为依据本发明图5A实施例中的当前区块的区块递归划分处理的流程图。请同时参考图1及图5A~5B。
在步骤S510,从欲解码的一视频流取得一超级区块,其中该超级区块在水平方向及垂直方向均具有第一尺寸。举例来说,以AV1标准中的超级区块的最大尺寸例如可为128x128。
在步骤S520,将该超级区块在水平方向及垂直方向均等划分为一第一区块、一第二区块、一第三区块及一第四区块。举例来说,第一区块、第二区块、第三区块及第四区块的顺序依照循序扫描的顺序而定(例如分别对应于图2中的区块21、22、23及24),即第一区块、第二区块、第三区块及第四区块分别位于超级区块的左上方、右上方、左下方及右下方。
在步骤S530,选择该第一区块做为一当前区块以执行一区块递归划分处理,并依序将该第四区块、该第三区块及该第二区块写入至一堆栈存储器。举例来说,先写入至堆栈存储器的第四区块会位于堆栈存储器的最底部。
在步骤S540,响应于该当前区块的该区块递归划分处理结束,从该堆栈存储器取出最上层区块以做为该当前区块,并对该当前区块执行该区块递归划分处理。需注意的是堆栈存储器121以先入后出(FILO)或后入先出(LIFO)的方式来实现区块递归划分的操作。对于堆栈存储器121而言,加入(push)操作与删除(pop)操作是在堆栈存储器121的同一端执行。因此,从该堆栈存储器所取出的下一区块为该堆栈存储器最上层的区块(或子区块)。
在步骤S550,判断当前区块是否为该第四区块。若当前区块为该第四区块,则此流程结束。若当前区块并非该第四区块,则回到步骤S540。
在此实施例中,当前区块的区块递归划分处理可进一步分为步骤S521~S527。
在步骤S521,判断当前区块是否需要划分。若判断当前区块需要划分,则执行步骤S522。若判断当前区块不需要划分,则执行步骤S525。
在步骤S522,将该当前区块在水平方向及垂直方向均等划分为一第一子区块、一第二子区块、一第三子区块及一第四子区块,并依序将该第四子区块、该第三子区块及该第二子区块写入至该堆栈存储器。
在步骤S523,将该第一子区块设定为当前子区块,并判断当前子区块是否需要划分。若当前子区块需要划分,执行步骤S524。若当前子区块不需要划分,执行步骤S525。
在步骤S524,对当前子区块重复执行区块递归划分处理直到当前子区块的尺寸等于一预定尺寸。举例来说,该预定尺寸例如为最小编码单元(CU)的尺寸,即4x4区块。
在步骤S525,对当前子区块进行解码。
在步骤S526,响应于该当前子区块的解码结束,从该堆栈存储器取出最上层子区块以做为该当前子区块,并对该当前子区块执行该区块递归划分处理。
在步骤S527,响应于该当前子区块的该区块递归划分处理结束,判断当前子区块是否为该第四子区块。若当前子区块为该第四子区块,则执行步骤S540。若当前子区块并非该第四子区块,则回到步骤S526。
综上所述,本发明提供一种集成电路及递归划分解码区块的方法,其可利用堆栈存储器以使视频解码器有效率地将超级区块递归划分为多个编码单元,藉以增进解码效能。
在权利要求中使用如“第一”、“第二”、“第三”等词用来修饰权利要求中的元件,并非用来表示之间具有优先权顺序,先行关系,或者是一个元件先于另一个元件,或者是执行方法步骤时的时间先后顺序,仅用来区别具有相同名字的元件。
本发明虽以优选实施例公开如上,然其并非用以限定本发明的范围,本领域技术人员,在不脱离本发明的精神和范围内,当可做些许的更动与润饰,因此本发明的保护范围当视所附权利要求书界定范围为准。