具体实施例
本发明的各个方面和示例将被描述。以下描述提供了具体细节以透彻理解和实现对这些实施例的描述。然而,本领域技术人员将理解的是本发明可以在没有许多这些细节的情况下被实践。此外,一些众所周知的结构或功能可以不被详细示出或描述,以避免不必要地模糊相关描述。
在以下描述中,数据的范围如下所示:
熵转码器:0~P-1;
主解码单元:0~L-1;
DDR中每帧的转码流:0~K-1;
以CTU为单位的图像高度:0~N-1;以及
以CTU为单位的图像宽度:0~M-1。
图1是示出电路100的实施例的图。
电路100包括多个编号为0、1、...P-1的熵转码器和多个主解码单元0、1、...L-1。多个熵转码器0、1、...P-1在帧级并行化地对所接收的比特流执行多个熵转码,以生成转码(或重新压缩)流,其中多个熵转码的每一个包括对比特流的语法转码。在一个实施例中,多个熵转码器是帧级并行化地执行多个熵转码的帧级熵转码器,这意味着熵转码并行在多帧上同时执行。根据一个实施例,存在多个熵转码器,例如,P个熵转码器,以及每一个熵转码器处理与来自其它熵转码器的帧不同的帧的比特流,或换言之,P个熵转码器并行处理来自不同的帧的比特流。
多个主解码单元0、1、...L-1以多层的波前级并行化地对转码流的一帧执行多个转码流解压缩和像素解码。注意多个熵转码器和多个主解码单元能够并行执行它们各自的操作,或换言之,同时进行。在一些实施例中,熵转码器和主解码单元之间的并行操作可以通过DDR来实现。例如,当该***最初启动时,主解码单元可以在空闲状态。当转码流的第一帧准备好之后,主解码单元可以开始工作。同时,熵转码器可以开始处理转码流的第二帧。
波前并行处理(WPP)或波前并行化是当条带被分成CTU的多行时,其中第一行被正常解码,但每一附加行的解码需要前一行的相关信息。WPP具有来自先前CTU的行的熵编码器使用信息,并允许并行处理的方法,其可以允许比分片(tile)更好的压缩。波前并行化的细节将在下文参考图2A和2B进行详细讨论。
在一个实施例中,所接收的比特流可以以不同格式被编码。多个熵转码器的每一个将所接收的以不同格式被编码的比特流变换为统一的波前子流格式的转码流。
尽管图1示出了包括多个熵转码器和多个主解码单元的实施例,但是可替代地,本发明的实施例还包括电路,它包括一个熵转码器和一个主解码单元。熵转码器被配置为对所接收的比特流执行至少一个熵转码,以生成转码流,其中该熵转码包括对该比特流的语法转码。主解码单元被配置为对该转码流的一帧执行至少一个转码流解压缩和像素解码。
可选地,本发明的实施例也适用于包括一个熵转码器和多个主解码单元的电路,或者包括多个熵转码器和一个主解码单元的电路。
图2A和2B是分别示出实施例中具有不同图像结构的图像如何被转换成波前形式的图。
熵转码器并行运行,并且处理不同的帧的压缩流。熵转码器的输入能够符合各种编解码器标准,如HEVC/H.265,Google VP9和中国AVS2,符合各种图像结构,如分片、条带或波前。在熵转码之后,熵转码器将输出统一的波前子流格式的转码流,使得后一阶段能够正确并迅速地处理转码流。如图2A和2B所示,具有多个分片或多个条带的M×N的CTU的一幅图像将被转换到波前形式的N子流。
具体而言,在图2A中,在左侧部分中示出的所接收的比特流被排列为分片结构。分片允许图像被划分成能够被独立地解码/编码的矩形区域的网格。分片的主要目的是允许并行处理。分片排列的所接收的比特流被转换成在图2A的右侧部分示出波前形式。在图2A的右侧部分示出的帧被以波前形式排列,也即,该帧被分成CTU的行,其中第一行被正常解码,但每一附加行的解码需要前一行的相关信息。
在图2B中,在左侧部分中示出的所接收的比特流被排列为条带结构。条带是以光栅扫描的顺序进行解码的CTU。术语光栅扫描或进行光栅扫描,指电视中图像采集和重建的矩形图案。类似地,该术语也用于光栅图形,在大多数计算机位图图像***中使用的图像存储和传输的模式。排列在条带中的所接收的比特流被转换成在图2B的右侧部分中所示的波前形式。在图2B的右侧部分中所示的帧被以波前形式排列,也即,该帧被分成CTU的行,其中第一行被正常解码,但每一附加的行需要前一行的相关信息。
图3是如图1中所示的熵转码器(0到P-1)的每一个的结构的详细框图。
图3中示出的熵转码器300包括三个部分:熵解码器310、熵编码器320和流打包器330。在熵转码器300之前的流预解析器350扫描初始比特流,并将一帧的编码的流数据传递到每个熵转码器300。熵解码器310对所接收的以不同的格式编码的比特流进行熵解码。熵编码器320对解码的比特流熵编码,并且解码的比特流也能够被称为转码流,因为它首先被解码,然后被编码。转码流将被由流打包器330打包成统一格式的波前子流(或也称为统一的波前子流格式的比特流),并连同子流入口点一起存储在双倍数据速率(DDR)存储器中。DDR代表在电子***中一种广泛使用的存储器,该***可以是片外存储器。入口点指特定子流相对于DDR中相同帧的第一子流的偏移。后期解码所需的命令将存储在DDR的命令队列中。多个熵转码器单元将以帧并行化地运行。
图4是示出实施例中用于解码多个CTU-行的主解码单元的处理顺序的图。如图4中所示,转码的波前子流和有关信息将按照每帧被存储在DDR。注意如图4中所示的帧X的转码子流示例图与图2A或图2B的右侧部分相同。在图4中,不同子流和有关信息在长度上是变化的。注意一些子流,例如CTU行3的子流3的长度不同于CTU行N-2的子流N-2的长度,因为它们的信息量不同。此外,转码子流示例图只是表明不同子流的长度是可变的,并不代表子流在存储器中的实际存储位置。
假设总的L个(序号分别为0,1,2......L-1)主解码单元正在运行。数字L可以根据***的性能和功耗而变化。数字J可以被定义为J=ceil(N/2L)-1,其中N表示一个图像可以包括的CTU的行数。ceil(或有时被称为ceiling)函数将一个实数映射为该实数后面的最小的整数(向上取整)。因此,子流的序号可以被表示为2L*J+0,2L*J+1,2L*J+2,2L*J+3,2L*J+4,2L*J+5...2L*J+2L-2,2L*J+2L-1。当J=0时,以上表达式可以取0,1,2,3,4,5...2L-2,2L-1的值。当J=1时,以上表达式可以取2L+0,2L+1,2L+2,2L+32L+4,2L+5,4L-2,4L-1的值。
假设每一个主解码单元能够解码两个子流。然后子流2L*J+0和子流2L*J+1由主解码单元0处理,被表示为垂直线上的块。子流2L*J+2和子流2L*J+3由主解码单元1处理,被表示为水平线上的块。子流2L*J+4和子流2L*J+5由主解码单元2处理,被表示为斜线上的块。......子流2L*J+2L-2和子流2L*J+2L-1由主解码单元L-1处理,被表示为交叉线上的块。
在图4的下部,每一块代表编码树单元(CTU)。在子块中的数字表示每个解码单元的CTU的处理顺序。图4给出了M×N的CTU图像解码的示例。每个主解码单元每个命令处理两个子流,以及以对角线顺序解码两个CTU-行。例如,主解码单元0处理子流0和1,并对CTU-行0和1解码(CTU-行0和1被标记为垂直线,这意味着它们由主解码单元0解码);主解码单元1处理子流2和3,并且解码CTU-行2和3(CTU-行2和3被标记为水平线,这意味着它们由主解码单元1解码);主解码单元2处理子流4和5,并解码CTU-行4和5(CTU-行4和5被标记为斜线,这意味着它们由主解码单元2解码)等。空白子块,即,不具有数字的子块表示尚未被解码的子块。
每个主解码单元(0,1,...L-1)将从DDR读取转码子流,并且并行处理相同帧的不同子流。每个主解码单元(0,1,...L-1)能够同时处理多个子流,并如图5中所示以对角线顺序处理多个CTU-行,以使相邻CTU的参考像素可能被重新使用,并且运动补偿本地缓存的命中率能够得到提高。
注意以上实施例中,CTU被用于作为示出基本处理单元的示例。然而,本发明的实施例并不限于CTU。本发明的实施例也适用于其它基本处理单元,如Google VP9的超级块,或宏块单位等。另外,虽然图4示出了每一个主解码单元同时处理两个CTU-行,主解码单元可以同时处理多于两个CTU-行。
图5是示出当根据本发明的实施例以对角线顺序处理CTU时,参考数据是如何被跨多个CTU共享的图。图5中的对角线顺序能够以水平和垂直方向重用帧间(inter)参考数据。例如,当主解码单元0根据本发明的实施例解码CTU 2时,主解码单元0可以参考帧间参考数据2(参考2)。主解码单元0可以参考帧间参考数据0(参考0)用于解码CTU 0。主解码单元0可以参考帧间参考数据1(参考1)用于解码CTU 1。注意CTU 0、CTU 1和CTU 2分别以虚线块的形式被显示,同时参考0、参考1和参考2分别以实线块的形式被分别显示。注意参考的参考0是来自与当前解码的CTU 0的帧不同的帧,相同的规则适用于参考1和参考2。参考2与相邻CTU(CTU 0)的参考0的重叠是在当前解码的CTU(CTU 2)的垂直方向上的,而参考1与相邻CTU(CTU 0)的参考0的重叠是在当前解码的CTU(CTU 1)的水平方向上。因此,当CTU被处理时,水平和垂直的相邻CTU的帧间参考数据可以被共享和重用。
结合图5并参照图4,在本发明的实施例中,当主解码单元0解码较低的行(例如,CTU-1行)中的CTU(CTU 2),它会参考在CTU 2的上方行中的CTU 2的右上方的CTU(CTU 0和CTU 1)的信息。因此,下方行的解码进度比上方行慢。当CTU 2被以帧内预测模式编码时,右上方CTU的像素也将被参考。以及当CTU被以帧间预测模式编码时,右上方CTU的参考数据由于它们的空间相关性可能被部分地重复使用。换言之,图4中所解码的CTU图案逐行缩进。而且,当解码CTU 1时,当CTU 1被以帧间预测模式编码时,主解码单元0参考CTU 0,并且重用CTU 0的帧间参考数据。本实施例以这种方式重用在垂直和水平方向上的帧间参考数据,从而改善数据的相关性,并节省带宽。
此外,多层的波前包括波前的第一层和波前的第二层。波前的第一层指主解码单元用于同时解码多个子流。按照对角线顺序的多个CTU行由主解码单元处理,使得运动补偿本地缓存的命中率可以得到提高。波前的第二层指将多个主解码单元能够同时工作,并且多个主解码单元以波前形式并行工作。例如,每一个主解码单元能够同时解码2个子流,而三个主解码单元能够并行工作。因此,总共有6子流能够被并行解码。
图6A是示出运动补偿L2缓存和行缓冲被跨多个主解码单元共享的图。
如图6A所示,多个主解码单元0,1,......L-1共享同一个运动补偿共享L2(2级)缓存,以及一个共享行缓冲。通过将不同主解码单元保持在适当的速度,共享L2缓存的命中率能够被改善以节省带宽。共享L2缓存可以存储与帧间参考数据有关的信息。在统计上,不同主解码单元的帧间参考数据可以重叠。通过将帧间参考数据存储在L2缓存中,用于存取来自DDR的帧间参考数据的次数被降低,因此改善了电路的效率。
多级缓存被部署以进一步减少带宽需求。在一个实施例中,每一个主解码单元有它自己的本地缓存,这是1级缓存,而所有主解码单元将共用共享L2缓存。
行缓冲能够跨多个具有波前架构的主解码单元被共享,如帧内预测行缓冲、去块滤波器行缓冲、自适应样点补偿滤波行缓冲等。不管有多少主解码单元将被实例化,所需要的行缓冲的大小与一个主解码单元所需的行缓冲大小相同。这是因为,在同一时间,不同主解码单元将处理不同列的CTU,因此行缓冲的大小仅取决于图像宽度。相比其它帧级并行化的方法,在本发明的实施例中,行缓冲存储器的大小能够大大减少,使得硬件实现成本能够被节省。
多级运动补偿缓存,以及波前架构使参考像素能够跨多个主解码单元中被重复使用。因为本发明的实施例的并行化处理同一帧中的相邻CTU,本发明的实施例具有更好的相关性和空间局部性,相比通过现有技术的常规缓存,如像素解码帧级并行,本发明的实施例能够节省更多带宽。另外,多级运动补偿缓存包括主解码单元的本地(L1)的运动补偿缓存和由多个主解码单元共享的2级缓存。
相比于常规HEVC标准中的分层波前,根据本发明的实施例的多层波前和多级缓存被用于最小化对4K/8K视频***重要的带宽要求。波前的第一层被用于通过主解码单元以对角线顺序解码多个CTU行(CTU是编码树单元的缩写,也例如,Google VP9的超级块),以使运动补偿本地缓存的命中率能够改善;而波前的第二层被用于使主解码单元以波前形式并行工作,并且二级缓存的命中率也能够得到改善。
图6B是示出单个主解码单元的结构的图。单个主解码单元600包括:转码流解压缩器610、像素解码器620、运动补偿缓存650、帧缓冲压缩器630和帧缓冲解压缩器640。
转码流解压缩器610解压缩转码流,从而生成解压缩流。注意转码流来自DDR。像素解码器620对解压缩流执行反量化、反变换、帧内预测、运动补偿和环路滤波器功能。像素解码器620与转码流解压缩器610、行缓冲、帧缓冲解压缩器640和帧缓冲压缩器630进行交互。
帧缓冲压缩器630压缩重建解压缩流的YUV数据。由帧缓冲压缩器630生成的压缩重建的YUV数据被提供给到DDR。
运动补偿缓存650缓存解压缩流的运动补偿参考数据,该运动补偿参考数据为压缩的YUV格式的数据,其由帧缓冲压缩器630生成并在DDR中缓冲。由于运动补偿缓存650可以使用多个帧间参考数据,所以运动补偿缓存650可以读取多个先前由帧缓冲压缩器630生成并在DDR中缓冲的运动补偿参考数据。存储在运动补偿缓存650中的运动补偿参考数据被压缩,而且是来自于图6A中所示的运动补偿共享L2缓存。YUV模型以一个亮度(Y)和两个色度(UV)的分量定义了一个颜色空间。
由于与未压缩的数据相比,压缩的数据的大小被减少,所以帧缓冲压缩器630和帧缓冲解压缩器640可以减轻与DDR的通信总线的通信压力,从而消耗更少的通信总线资源并节省功耗。注意帧缓冲压缩器630和帧缓冲解压缩器640可以在一个实施例中被省略。
帧缓冲解压缩器640解压缩从运动补偿缓存650获得的压缩的YUV格式的数据。注意当主解码单元600的运动补偿缓存650读取由帧缓冲压缩器630生成的压缩的参考帧时,帧缓冲解压缩器640被需要。由于根据实施例,压缩的数据比解压缩的数据小得多,并且在可能是静态随机存取存储器(SRAM)、嵌入式同步动态随机存取存储器(eSDRAM)等的片上存储器上需要更少空间,或在同一个片上空间可以存储更多的信息,所以通过将帧缓冲解压缩器640定位在运动补偿缓存650之后,相对于将帧缓冲解压缩器定位在缓存前的其它常规方案,运动补偿缓存650的利用率能够得到改善或更小的运动补偿缓存650能够被使用。
通过将不同主解码单元保持在适当的速度,共享L2缓存的命中率能够被改善以节省带宽。
以上讨论的电路可以在任意产品中使用,包括视频解码器,如机顶盒(STB)、数字电视(DTV)、平板电脑、智能手机、笔记本电脑和个人计算机,个人数字助理(PDA)等。
图7是示出视频解码器的结构的图。视频解码器700包括可编程控制器710、多个帧级熵转码器0,1,P-1、DDR数据总线、多个主解码单元0,1,L-1和运动补偿共享L2缓存。帧级熵转码器0,1,...P-1类似于图1中的熵转码器0,1,...P-1。主解码单元0,1,...L-1类似于图1或图6A和图6B中所示的主解码单元0,1,...L-1。
如图7所示,可编程控制器(它可以是CPU、DSP、MCU等)发送指令到多个熵转码器器0,1,...P-1。多个熵转码器的每一个生成压缩子流,并经由DDR数据总线将它们相应的压缩子流存储在DDR存储器中。基于由可编程控制器输出的子流解码的命令队列,转码流将被打包成统一格式的波前子流,并连同子流的入口点被存储在DDR中。在一个实施例中,一帧的子流和同一帧的入口点被一起存储。可替换地,一帧的子流和同一帧的入口点可以被分别存储,即,在不同片外或片上存储器中。
主解码单元0,1,L-1的每一个经由DDR数据总线从DDR存储器读取压缩的子流,并将解码数据输出到DDR,根据与命令调度器、同步控制、共享行缓冲和运动补偿的共享L2缓存的交互。注意由于与主解码单元有关的部分类似于关于图6A和6B讨论的主解码单元0......L-1,它们的描述在一个实施例中被省去。
图8是示出本发明的实施例的方法的流程图。解码视频的方法800包括在框810中,帧级并行化地对所接收的比特流执行多个熵转码,以生成转码流,其中多个熵转码的每一个包括对比特流的语法转码;在框820中,以多层的波前级并行化地对转码流的一帧执行多个转码流解压缩和像素解码。
可替代地,所接收的比特流以不同的格式被编码,其中执行多个熵转码的每一个还包括:将所接收的以不同格式被编码的比特流转换为统一的波前子流格式的转码流。
可替代地,不同格式包括分片(tile)并行化、波前(wavefront)并行化、条带(slice)并行化或无并行化的条带(slice)。
图9是示出图8中的框810中的熵转码的详细运行的流程图。可替代地,所接收的比特流以不同的格式被编码。在框810中,执行多个熵转码的每一个还包括在框812中,对所接收的以不同格式被编码的比特流进行熵解码;在框814中,对解码的比特流熵编码;以及在框816中,将编码的比特流打包为统一格式的波前子流。
图10是示出根据本发明的实施例的视频解码器的工作流程的流程图。可替代地,在框1000中,多个熵转码的每一个还包括在框1010中,获得比特流的可用的帧;在框1020中,获得用于转码流的存储缓冲;在框1030中,确定用于转码流的存储缓冲是否可用。如果用于转码流的存储器缓冲可用,则方法1000前进到框1040,确定熵转码器是否可用,如果熵码器可用,则在框1050中,该方法执行熵转码。如果熵码器可用,该方法同时获得比特流的下一个可用帧。用于熵转码的详细操作已相对于图9讨论,因此,其详细情况在实施例中被省去。
可替代地,多个像素解码的每一个还包括解压缩转码流,从而生成解压缩流;对解压缩的流执行反量化、反变换、帧内预测、运动补偿和环路滤波;压缩解压缩的流的重建YUV数据;缓存解压缩的流的运动补偿的参考数据,该运动补偿的参考数据为压缩的YUV格式的数据;以及解压缩压缩的YUV格式的数据。
可替代地,执行多个像素解码的一个还包括通过多个主解码单元的一个,并行处理一帧的不同子流,以生成多个基本处理单元行;并且以对角线顺序解码多个处理单元行以便重用在水平和垂直方向的帧间参考数据,可以参考图5。
可替代地,参照图10的右侧部分,在并行处理帧的不同子流之前,在框1100中执行多个像素解码还包括在框1110中,检查转码流的一帧是否可用;在框1120中,如果转码流的帧可用,则通过命令调度器,根据存储在命令队列中的命令,调度多个候选主解码单元。在一个实施例中,命令调度器可以调用来自命令队列的指令,从而调度至少一个相应的主解码单元进行操作。
执行像素解码的方法还包括,在框1130中获取主解码单元,在框1140中确定主解码单元是否可用,如果主解码单元可用,则在框1150中,该方法根据命令解压缩多个子流,并且在框1160中,按照CTU以对角线顺序处理并输出多个CTU行。注意如果框1140的结果可用,该方法同时获得该帧的下一个命令,从而确保多个主解码单元可以并行工作。还应注意的多个主解码单元可以同时地并行操作框1150和1160。该方法前进到框1170,确定该帧的结束是否被检测到。如果该帧的结束被检测到,则该方法返回到框1110。如果该帧的结束未被检测到,则该方法返回到框1120。
两个阶段,熵转码(S1或1000)和主解码(S2或1100),概括出整体的解码流程。该工作流程具有多个熵转码器以帧并行化地运行,并且多个主解码单元以波前并行运行。
如图10所示,通过如图10所示的引入命令队列和命令调度器,主解码单元和可编程控制器(例如,CPU)之间的通信可被最小化,从而确保主解码单元以尽可能流畅的方式运行。
可替代地,多个熵转码并行进行;或者多个像素解码并行执行。
可替代地,执行多个熵转码与执行多个像素解码并行。
可替代地,基本处理单元包括编码树单元、超级块,或宏块单元。
本发明的实施例为熵转码部分使用帧级并行化,以及为同一帧内的转码的子流解码和像素解码使用多层的波前并行化。
熵转码器将各种图像结构,如分片、条带、波前转换为统一格式的波前子流,从而后期可以适当地和高效地处理它们。
本发明的实施例可以去除帧级并行地执行像素解码部分的现有技术需要的帧间解码的依赖性,因为现有技术的像素解码可能并行地处理来自不同帧的CTU,而在本本发明的实施例中,所有被并行处理的CTU是来自于同一帧中,以使解码器性能可以不受图像结构以及不同帧解码之间的依赖性的影响,而在其他情形下(例如现有技术中),图像结构以及不同帧解码之间的依赖性将会导致一些性能损失。熵转码器经由硬件加速器与主解码部并行执行,以实现较高的性能。
相比于帧级并行化,在本发明的实施例中,该波前并行化的可扩展性可以得到改善,并且本发明的实施例的每个主解码单元解码也可以具有更好的解码均衡性。
相比传统HEVC标准中的单层波前,多层波前和多级缓存可以被用于最小化带宽要求,这对4K/8K视频***非常关键。波前的第一层被用于通过像素解码单元以对角线顺序解码多个CTU行,使得运动补偿本地缓存的命中率可以得到改善;而波前的第二层被用于使像素解码单元以波前形式并行工作,并且第二级缓存的命中率也可以得到改进。
本发明的实施例可以以具有非常好的可扩展性和解码负载均衡性的混合并行化为特征,更具体的,熵转码具有帧级并行化;转码子流的解码和像素解码具有多层波前并行化。
本发明的实施例可以通过对可以由分片、波前或无任何并行化工具仅条带编码的原始流进行转码,以得到统一的波前子流为特征。
与HEVC标准中的单层波前相对,本发明的实施例可以进一步以多层波前相比为特征,使得运动补偿本地缓存的命中率能够被改善,而DDR带宽能够被减小。
本发明的实施例可以进一步以具有波前的架构的多级运动补偿缓存为特征,使得帧间参考像素能够跨多个主解码单元被重复使用。相比通过现有技术,如像素解码帧级并行性的常规缓存,本发明的实施例因为较好的相关性和空间局部性能够节省更多的带宽。
本发明的实施例可以适用于多标准架构,HEVC/H.265,Google VP9,中国AVS2等。
本发明的实施例可以进一步以跨具有波前架构的多个主解码单元的共享行缓冲为特征,以减少硬件实现的成本。
尽管本发明已经参照具体的示例性实施例被描述,但本发明并不限于本文描述的实施例,它能够在不脱离所附权利要求书的精神和范围的情况下,以修改或替换的形式来实现。相应地,说明书和附图应被视为说明性的而非限制性的。
从前述内容,将要理解的是技术具体实施例出于说明的目的已在本文被描述,然而各种修改在不脱离本发明的精神和范围的情况下能够被做出。因此,本发明除了所附权利要求书的精神,并不被限制。
对所公开的实施例的其它变型能够被本领域技术人员在实践所要求保护的发明时通过对附图、公开内容和所附权利要求书的研究来理解和实现。权利要求书中的词语“包括”并不排除其它元件或步骤,而不定冠词“一”或“一个”不排除多个。即使在不同的从属权利要求中记载了特定的特征,但本发明还涉及包括所有这些特征的实施例。权利要求中的任何附图标记不应当被解释为限制保护范围。
各种实施例的各特征和各方面可以被集成到其它实施例中,并且本文件中示出的实施例可以在未全部包含所有这些被示出或描述的特征或方面被实现。本领域技术人员将理解的是尽管出于说明的目的,***和方法的具体示例和实施例已经被描述,但在不脱离本发明的精神和范围的情况下,各种修改能够被做出。此外,一个实施例的特征可以被并入其它实施例中,即使那些特征未在本文件内的单个实施例中被一起描述。因此,本发明由所附权利要求书描述。