发明内容
本发明解决的问题是提供一种用于视频编/解码的邻居查找装置及其方法,可以有效降低邻居查找需要的时间和空间。
为解决上述问题,本发明还提供了一种用于视频编/解码的邻居查找装置,包括:
输入模块,用于获取待编/解码视频信号被分割和排序后的视频宏块信息和与所述视频宏块信息对应的邻居查找请求信息;
数据重组模块,连接所述输入模块,用于将接收的每个视频宏块重组为多个阵列排布的最小子块;
滑动窗口存储器,连接所述数据重组模块,包括多个滑动窗口,每个滑动窗口用于存储重组后的一个视频宏块信息及其正上方视频宏块重组后最后一行的最小子块信息;
缓存器,连接所述滑动窗口存储器,用于存储所述滑动窗口存储器中重组后的视频宏块信息最后一行信息;
控制模块,连接所述数据重组模块、所述滑动窗口存储器和所述缓存器,当存在空白滑动窗口时,将所述数据重组模块获取的重组后的视频宏块信息存入空白滑动窗口,且将从缓存器中搜索到的与存入空白滑动窗口的所述视频宏块信息正上方视频宏块重组后最后一行对应的最小子块信息存入所述空白滑动窗口;当不存在空白滑动窗口时,将目前滑动窗口存储器中最先编/解码结束的视频宏块重组后最后一行的最小子块信息转移到所述缓存器中,且删除转移的视频宏块所在滑动窗口中的所有信息,得到空白滑动窗口;获取每个所述最小子块在滑动窗口存储器中的存储位置;
查询模块,连接所述输入模块和所述控制模块,获取与所述邻居查找请求信息对应的最小子块,并获取所述最小子块在滑动窗口存储器中的存储位置;
输出模块,连接所述查询模块和所述滑动窗口存储器,根据查询得到的所述存储位置,从所述滑动窗口存储器中提取并输出与所述存储位置对应的最小子块信息。
可选地,所述视频宏块的大小包括:16×16,所述最小子块的大小包括:4×4。
可选地,所述邻居查找请求信息包括:当前宏块在当前帧图像中的序号、当前子块的类型、当前子块的序号、当前宏块左面的宏块是否存在、当前宏块上面的宏块是否存在、当前宏块左上的宏块是否存在和当前宏块右上的宏块是否存在。
可选地,所述当前子块的类型包括:16x16、16x8、8x16、16x4、4x16、8x8、8x4、4x8或4x4。
可选地,所述邻居查找请求信息还包括:当前帧是否H.264MBAFF类型、当前宏块是否H.264 MBAFF的场类型、当前宏块左面的宏块是否H.264MBAFF的场类型、当前宏块右面的宏块是否H.264MBAFF的场类型、当前宏块右上的宏块是否H.264 MBAFF的场类型和当前宏块左上的宏块是否H.264MBAFF的场类型。
可选地,所述滑动窗口存储器包括3个以上的滑动窗口。
可选地,所述滑动窗口存储器包括2N个滑动窗口,其中,N为大于或等于2的正整数。
可选地,所述滑动窗口存储器包括4个、8个或16个滑动窗口。
可选地,每个所述滑动窗口的大小对应20个最小子块的大小。
可选地,所述滑动窗口存储器为高速缓存器。
可选地,所述缓存器的大小对应待处理帧视频数据中行宽度的4倍。
可选地,所述缓存器为片上内存或者片外存贮。
可选地,所述缓存器的接口是FIFO类型或者随机访问类型。
可选地,所述控制模块包括:判断单元,连接所述滑动窗口存储器,用于判断所述滑动窗口存储器中是否存在空白滑动窗口;填充单元,连接所述判断单元、所述数据重组模块和所述滑动窗口存储器,当所述滑动窗口存储器中存在空白滑动窗口时,将所述数据重组模块获取的重组后的视频宏块信息存入空白滑动窗口;转移单元,连接所述判断单元、所述数据重组模块、所述滑动窗口存储器和所述缓存器,当所述滑动窗口存储器中不存在空白滑动窗口时,将目前滑动窗口存储器中最先编/解码结束的视频宏块重组后最后一行的最小子块信息转移到所述缓存器中,且删除转移的视频宏块所在滑动窗口中的所有信息,得到空白滑动窗口;搜索单元,连接所述缓存器和滑动窗口存储器,从所述缓存器中搜索与存入空白滑动窗口的所述视频宏块信息正上方视频宏块重组后最后一行对应的最小子块,且将所述最小子块信息存入所述空白滑动窗口中;位置获取单元,连接所述滑动窗口存储器和查询模块,用于获取每个所述最小子块在滑动窗口存储器中的存储位置,接收查询模块发送的与所述邻居查找请求信息对应的最小子块,并将所述最小子块的存储位置反馈给查询模块。
为了解决上述问题,本发明还提供了一种包括上述邻居查找装置的视频编/解码器。
为了解决上述问题,本发明还提供了一种用于视频编/解码的邻居查找方法,包括:
获取待编/解码视频信号被分割和排序后的视频宏块信息和与所述视频宏块信息对应的邻居查找请求信息;将接收的视频宏块信息重组为多个阵列排布的最小子块;
采用滑动窗口存储器存储重组后的一个视频宏块信息及其正上方视频宏块最后一行的最小子块信息,获取每个所述最小子块的存储位置;
采用缓存器存储所述滑动窗口存储器中重组后的视频宏块信息重组后最后一行信息;
当存在空白滑动窗口时,将所述重组后的视频宏块信息存入空白滑动窗口,且将从缓存器中搜索到的与存入空白滑动窗口的所述视频宏块信息正上方视频宏块重组后最后一行对应的最小子块信息存入所述空白滑动窗口;当不存在空白滑动窗口时,将目前滑动窗口存储器中最先编/解码结束的视频宏块重组后最后一行的最小子块信息转移到所述缓存器中,且删除转移的视频宏块所在滑动窗口中的所有信息,得到空白滑动窗口;获取每个所述最小子块在滑动窗口存储器中的存储位置;
获取与所述邻居查找请求信息对应的最小子块,并获取所述最小子块在滑动窗口存储器中的存储位置;
根据查询得到的所述存储位置,从所述滑动窗口存储器中提取并输出与所述存储位置对应的最小子块信息。
可选地,所述最小子块在滑动窗口存储器中的存储位置用编号进行表示。
可选地,所述输入模块获取的视频宏块被分割为16×16大小;每个所述视频宏块被重组成16个4×4的最小子块。
可选地,所述邻居查找请求信息包括:当前宏块在当前帧图像中的序号、当前子块的类型、当前子块的序号、当前宏块左面的宏块是否存在、当前宏块上面的宏块是否存在、当前宏块左上的宏块是否存在和当前宏块右上的宏块是否存在。
可选地,所述当前子块的类型包括:16x16、16x8、8x16、16x4、4x16、8x8、8x4、4x8或4x4。
可选地,所述邻居查找请求信息还包括:当前帧是否H.264 MBAFF类型、当前宏块是否H.264 MBAFF的场类型、当前宏块左面的宏块是否H.264MBAFF的场类型、当前宏块右面的宏块是否H.264 MBAFF的场类型、当前宏块右上的宏块是否H.264 MBAFF的场类型和当前宏块左上的宏块是否H.264MBAFF的场类型。
可选地,所述邻居查找请求信息以表格形式进行输入。
可选地,所述滑动窗口存储器包括3个以上的滑动窗口。
可选地,所述滑动窗口存储器包括2N个滑动窗口,其中,N为大于或等于2的正整数。
可选地,所述滑动窗口存储器包括4个、8个或16个滑动窗口。
可选地,每个所述滑动窗口被划分为20个区域,每个区域对应一个最小子块。
可选地,所述滑动窗口存储器为高速缓存器。
可选地,所述缓存器的大小对应待处理帧视频数据中行宽度的4倍。
为了解决上述问题,本发明还提供了一种包括上述邻居查找方法的视频编/解码方法。
与现有技术相比,本发明具有以下优点:本发明将接收的视频宏块信息重组为多个阵列排布的最小子块,采用滑动窗口存储器存储重组后的视频宏块信息,采用缓存器存储重组后的视频宏块信息最后一行的最小子块信息,并将从缓存器中搜索到的与所述视频宏块信息正上方视频宏块重组后对应的最小子块信息存入所述空白滑动窗口中,从而使得滑动窗口存储器中包括了所述视频宏块所需的所有邻居信息;获取每个最小子块在滑动窗口存储器中的存储位置,并获取与所述邻居查找请求信息对应的最小子块,查询得到所述最小子块在滑动窗口存储器中的存储位置,最后根据查询得到的存储位置,从滑动窗口存储器中提取并输出与存储位置对应的最小子块信息。本发明通过在滑动窗口存储器中进行邻居查找,降低了查找时间;通过滑动窗口存储器和缓存器进行宏块信息存储,降低了查找所需的空间。此外,本发明技术适用于各种视频编/解码,具有较强的通用性。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,因此本发明不受下面公开的具体实施例的限制。
正如背景技术部分所述,现有技术中视频编/解码中进行邻居查找时,需要直接存储所有块(宏块或子块)的邻居信息,从而导致邻居查找所需的内存很大;且不同视频编/解码算法中所需的邻居信息不同,需要对各种情况都进行罗列,从而导致邻居查找所需的时间很长。
针对上述缺陷,本发明提供了一种用于视频编/解码的邻居查找方法及其装置,将接收的视频宏块信息重组为多个阵列排布的最小子块,采用滑动窗口存储器存储重组后的视频宏块信息,采用缓存器存储重组后的视频宏块信息最后一行的最小子块信息,并将从缓存器中搜索到的与所述视频宏块信息正上方视频宏块重组后对应的最小子块信息存入所述空白滑动窗口中,从而使得滑动窗口存储器中包括了所述视频宏块所需的所有邻居信息;获取每个最小子块在滑动窗口存储器中的存储位置,并获取与所述邻居查找请求信息对应的最小子块,查询得到所述最小子块在滑动窗口存储器中的存储位置,最后根据查询得到的存储位置,从滑动窗口存储器中提取并输出与存储位置对应的最小子块信息。本发明通过在滑动窗口存储器中进行邻居查找,降低了查找时间;通过滑动窗口存储器和缓存器进行宏块信息存储,降低了查找所需的空间。
以下以编码过程中的邻居查找为例,结合附图进行详细说明。需要说明的是,在本发明的其他实施例中,至少还可以将下述邻居查找技术应用到解码过程中,其不限制本发明的保护范围。
以下实施例中将每个宏块的大小限定为16像素点×16像素点,但在其他实施例中,所述宏块还可以对应其他大小。此外,本实施例中将块(宏块或子块)信息的邻居块限定为其左上、右上、左面和右面中的一种或其组合,但随着编码方式的变化,块的邻居块的位置可以发生相应地变化,其不限制本发明的保护范围。
参考图3所示,本实施例提供了一种编码器100,至少包括:邻居信息请求装置200和邻居查找装置300。
其中,所述邻居信息请求装置200可以是任何需要进行邻居查找的装置,如:用于计算运动向量的装置、用于进行量化的装置、用于进行熵编码的装置等,其对于本领域的技术人员是熟知的,在此不再赘述。本实施例中将编码器中提供邻居宏块信息之外的其他装置统称为邻居信息请求装置200。需要说明的是,邻居信息请求装置200中包括多个需要查找邻居信息的单元。
其中,所述邻居信息请求装置200与邻居查找装置300电连接,用于为邻居查找装置300提供视频宏块信息和与所述视频宏块信息对应的邻居查找请求信息。
所述邻居信息请求装置200在将上述信息发送给邻居查找装置300之前,会将每帧待编码的视频信号分解为多个视频宏块,且根据采用的视频算法得到与所述视频宏块对应的邻居查找请求信息,然后将所述视频宏块及对应的邻居查找请求信息按照从左到右、从上到下的顺序依次发送给邻居查找装置300。
参考表1所示,所述邻居查找请求信息至少包括:当前宏块在当前帧图像中的序号、当前子块的类型(即16x16或16x8或8x16或16x4或4x16或8x8或8x4或4x8或4x4)、当前子块的序号、当前宏块左面的宏块是否存在、当前宏块上面的宏块是否存在、当前宏块左上的宏块是否存在和当前宏块右上的宏块是否存在。
由于当视频信息的编码方式为H.264 MBAFF类型时,宏块的扫描类型可以是隔行扫描,也可以为逐行扫描;而当视频信息的编码方式为H.264 MBAFF之外的类型时,则宏块的扫描类型大部分都是逐行扫描。因此,进一步地,当编码方式为H.264 MBAFF类型时,所述邻居查找请求信息还可以包括:当前帧是否H.264 MBAFF类型。当当前帧是H.264 MBAFF类型时,所述邻居查找请求信息还可以包括:当前宏块是否H.264 MBAFF的场类型。当当前宏块是H.264 MBAFF的场类型时,所述邻居查找请求信息还可以包括:当前宏块左面的宏块是否H.264 MBAFF的场类型、当前宏块右面的宏块是否H.264MBAFF的场类型、当前宏块右上的宏块是否H.264 MBAFF的场类型、当前宏块左上的宏块是否H.264 MBAFF的场类型。
为了简单起见,参考表1所示,所述邻居查找请求信息可以以表格形式进行输入,从而将邻居查找操作简化为查表,提高了运算速度。本实施例还可以对上述各请求信息进行命名,具体名称如表1所示。此外,上述各信息所需的比特数也可以参考表1所示。
表1
名称 |
所需比特数 |
描述 |
mbAdr |
4 |
当前宏块在当前帧图像中的序号 |
mode |
4 |
当前子块的类型(16x16/16x8/8x16/.../4x4) |
idx |
4 |
当前子块的序号 |
availA |
1 |
当前宏块左面的宏块是否存在 |
availB |
1 |
当前宏块上面的宏块是否存在 |
availC |
1 |
当前宏块左上的宏块是否存在 |
availD |
1 |
当前右上的宏块是否存在 |
MBAFF |
1 |
当前帧是否H.264 MBAFF类型 |
affFldX |
1 |
当前宏块是否H.264 MBAFF的场类型 |
affFldA |
1 |
当前宏块左面的宏块是否H.264 MBAFF的场类型 |
affFldB |
1 |
当前宏块上面的宏块是否H.264 MBAFF的场类型 |
affFldC |
1 |
当前宏块右上的宏块是否H.264 MBAFF的场类型 |
affFldD |
1 |
当前宏块左上的宏块是否H.264 MBAFF的场类型 |
最终,所有的邻居请求信息都可以以上述13个表项表示。
继续参考图3所示,所述邻居查找装置300可以包括:
输入模块310,用于获取待编/解码视频信号被分割和排序后的视频宏块信息和与所述视频宏块信息对应的邻居查找请求信息;数据重组模块320,连接所述输入模块310,用于将接收的每个视频宏块重组为多个阵列排布的最小子块;
滑动窗口存储器330,连接所述数据重组模块320,包括多个滑动窗口,每个滑动窗口用于存储重组后的一个视频宏块信息及其正上方视频宏块重组后最后一行的最小子块信息;
缓存器340,连接所述滑动窗口存储器330,用于存储所述滑动窗口存储器330中重组后的视频宏块信息最后一行信息;
控制模块350,连接所述数据重组模块320、所述滑动窗口存储器330和所述缓存器340,当存在空白滑动窗口时,将所述数据重组模块320获取的重组后的视频宏块信息存入空白滑动窗口,且将从缓存器340中搜索到的与存入空白滑动窗口的所述视频宏块信息正上方视频宏块重组后最后一行对应的最小子块信息存入所述空白滑动窗口;当不存在空白滑动窗口时,将目前滑动窗口存储器330中最先编/解码结束的视频宏块重组后最后一行的最小子块信息转移到所述缓存器340中,且删除转移的视频宏块所在滑动窗口中的所有信息,得到空白滑动窗口;获取每个所述最小子块在滑动窗口存储器330中的存储位置;
查询模块360,连接所述输入模块310和所述控制模块350,获取与所述邻居查找请求信息对应的最小子块,并获取所述最小子块在滑动窗口存储器330中的存储位置;
输出模块370,连接所述查询模块360和所述滑动窗口存储器330,根据查询得到的所述存储位置,从所述滑动窗口存储器330中提取并输出与所述存储位置对应的最小子块信息。
现有技术中可以综合考虑编码时间和编码质量的因素,将每个16×16的宏块划分为1个16x16或2个16x8或2个8x16或4个16x4或4个4x16或4个8x8或8个8x4或8个4x8或16个4x4的子块,从而每个宏块最小被划分为4×4的子块。每个子块可以有不同的预测块,也就是有不同的预测运动向量(即编码方式)等,而输入模块310接收到的视频宏块可以包括不同大小的子块。
本实施例中所述数据重组模块320用于对输入模块310接收的待处理的视频宏块信息进行数据重组处理,使每个视频宏块划分为16个4×4的子块,从而不管邻居信息请求装置200中对宏块具体进行了如何的划分,但是在滑动窗口存储器330中对宏块进行存储时,都是将宏块划分为16个4×4的子块,即每个子块的大小为4×4,每个宏块中的所有子块可以排布成4×4的阵列。每个子块占16个字节,其中8个字节包含前向预测信息,8个字节包含后向预测信息。这16个字节的定义会根据视频标准的变化而有所不同。在已知的所有视频标准中,16个字节足以存储所有的上下文信息。因此,不管邻居信息请求装置200中宏块如何划分,只要其左上、右上、左面、右面四个宏块都是16个4×4的子块,就肯定可以获取该宏块的邻居宏块信息。
所述控制模块350控制数据重组模块320将重组后的视频宏块信息依次存储到滑动窗口存储器330中。所述滑动窗口存储器330可以包括:多个滑动窗口。每个滑动窗口包括1个当前行宏块存储单元和1个历史行存储单元,同一滑动窗口中所述历史行存储单元中的宏块信息位于所述当前行宏块存储单元中宏块信息的正上方,所述历史行存储单元的数量与所述当前行存储单元的数量相同。
由于每个宏块至少要用到其左右两个宏块的信息,因此所述滑动窗口存储器330可以包括三个以上的滑动窗口,如:三个、四个、六个、八个、十个或十六个等。三个以上的滑动窗口共包括三个以上的当前行宏块存储单元,用于分别存储三个以上相邻的宏块信息。由于在对同一帧图像的宏块进行编码的过程中,都是采用从上到下、从左到右的顺序,因此相邻的宏块指的就是从上到下、从左到右的相邻关系。在滑动窗口存储器330包括至少三个滑动窗口的前提下,每个所述滑动窗口存储器的大小对应20个最小子块的大小。
优选地,所述滑动窗口存储器330包括2N个滑动窗口,其中,N为大于或等于2的正整数,从而利于通过计算机编程应用。具体地,所述滑动窗口存储器330可以包括4个、8个或16个滑动窗口。
当滑动窗口的个数较多,如为M个时,由于邻居信息请求装置200中包括多个需要查找邻居信息的单元,则不同的单元可以对中间位置的M-2个窗口进行不同的邻居查找。
每个所述历史行存储单元存储是包括16个4×4的子块的宏块中的最后一行的信息,从而每个所述历史宏块存储单元对应4个4×4的子块。
需要说明的是,本实施例中所述空白滑动窗口指的是滑动窗口中当前行宏块存储单元和历史行存储单元均空白,从而将一滑动窗口中当前行宏块存储单元和历史行存储单元均填满的情况归为非空白滑动窗口,将一滑动窗口中当前行宏块存储单元填满、历史行存储单元空白的情况也归为非空白滑动窗口。
本实施例中滑动窗口存储器330包括四个当前行宏块存储单元和四个历史行存储单元,从而滑动窗口存储器330共包括80个4×4的子块,每个滑动窗口需要20×4×4=320字节。每个子块在滑动窗口存储器330中的存储位置可以用编号进行表示,如:数字标号、字母标号等。所述滑动窗口存储器330中每个子块可以对应一个唯一的编号,本发明不限制具体的编号方式。结合参考图4所示,本实施例可以将滑动窗口存储器330中的80个子块以滑动窗口为单元从上至下、从左至右依次编号为0~79。
当确定滑动窗口存储器330包括的最小子块数量之后,所述控制模块350就会对滑动窗口存储器330中的各个最小子块进行编号,从而确定滑动窗口存储器330中每个子块的存储位置与编号之间的关系。
当最小子块存储到滑动窗口存储器330中之后,根据所述子块在滑动窗口存储器330中的存储位置,就可以确定其在滑动窗口存储器330中的编号。
本实施例中所述滑动窗口存储器330可以为高速缓存器,从而可以提高邻居查找的运算速度。
所述缓存器340连接所述滑动窗口存储器330,用于依次存储所述滑动窗口存储器330中当前行宏块存储单元中每个宏块最后4个4×4的子块信息,并当滑动窗口存储器330中获取新的宏块信息时,控制模块350将缓存器340中所述新的宏块信息正上方对应的子块信息发送给滑动窗口存储器330。
为了节省空间,所述缓存器340可以对应待处理帧数据中行宽度的4倍。具体地,所述缓存器340对应待处理帧数据中一行宏块的数量与64字节的乘积,其中,待处理帧数据中一行宏块的数量为待处理帧数据中行宽度除以宏块宽度(即16字节),而所述64字节是一个滑动窗口的行宽度。
所述缓存器340可以根据不同的应用平台选择片上内存或者片外存贮,接口可以是FIFO(First In First Out,先进先出)类型,也可以是随机访问类型的内存接口。
采用本实施例装置对一帧1920×1080的视频图像进行邻居查找时,则滑动窗口存储器330的存储空间可以为8*320字节=2560字节,缓存器340的存储空间可以为(1920/16)*64字节=7680字节。
具体地,结合参考图5所示,所述控制模块350可以包括:
判断单元351,连接所述滑动窗口存储器330,用于判断所述滑动窗口存储器330中是否存在空白滑动窗口;
填充单元352,连接所述判断单元351、所述数据重组模块320和所述滑动窗口存储器330,当所述滑动窗口存储器330中存在空白滑动窗口时,将所述数据重组模块320获取的重组后的视频宏块信息存入空白滑动窗口;
转移单元353,连接所述判断单元351、所述数据重组模块320、所述滑动窗口存储器330和所述缓存器340,当所述滑动窗口存储器330中不存在空白滑动窗口时,将目前所述滑动窗口存储器330中最先编/解码结束的视频宏块重组后最后一行的最小子块信息转移到所述缓存器340中,且删除转移的视频宏块所在滑动窗口中的所有信息,得到空白滑动窗口;
搜索单元354,连接所述缓存器340和滑动窗口存储器330,从所述缓存器340中搜索与所述视频宏块信息正上方视频宏块重组后最后一行对应的最小子块,且将所述最小子块信息存入所述空白滑动窗口中;
位置获取单元355,连接所述滑动窗口存储器330和查询模块360,用于获取每个所述最小子块在滑动窗口存储器330中的存储位置,接收查询模块360发送的与所述邻居查找请求信息对应的最小子块,并将所述最小子块的存储位置反馈给查询模块360。
本实施例中所述输出模块370输出的最小子块信息就是待处理的视频宏块的邻居信息。
作为一个具体例子,参考图6所示,本实施例对一帧包括8×4个宏块的视频图像进行编码。在编码的过程中,需要依次获取每个宏块的邻居信息,具体可以采用图3所示的邻居查找装置300进行邻居查找,其工作过程如下:
1)输入模块310获取宏块0的信息及与宏块0对应的邻居查找请求信息。其中,与宏块0对应的邻居查找请求信息包括:mbAdr是0;mode是16x8;idx是0;availA是不存在;availB是不存在;availC是不存在;availD是不存在;MBAFF是否。
2)数据重组模块320将宏块0进行重组,使宏块0重组为16个4x4的最小子块。
3)控制模块350判断滑动窗口存储器330中是否存在空白滑动窗口。
4)滑动窗口存储器330中存在4个空白滑动窗口(即第一滑动窗口至第四滑动窗口),控制模块350将数据重组模块320获取的重组后的视频宏块信息存入第一滑动窗口,且获取宏块0重组后的各最小子块在滑动窗口存储器中的位置对应编号4~19。
由于宏块0中availB是不存在,因此控制模块350无需对缓存器340进行搜索。此时缓存器340中空白。
5)对宏块0进行编码。
需要说明的是,当待编码的宏块不存在邻居宏块时,本实施例可以直接返回全零,从而直接采用现有任一种编码方式对该宏块进行编码,其与现有技术相同,在此不再赘述。
6)不断重复上述1)~5)的步骤,依次将宏块1、宏块2和宏块3存储到滑动窗口存储器330中,且完成对宏块1、宏块2和宏块3的编码。
此时,滑动窗口存储器330没有空白的滑动窗口,但是每个滑动窗口并未填满,仍留有一行空白。缓存器340中仍为空白。
7)输入模块310获取宏块4的信息及与宏块4对应的邻居查找请求信息。其中,与宏块4对应的邻居查找请求信息包括:mbAdr是0;mode是8x8;idx是4;availA是存在;availB是不存在;availC是不存在;availD是不存在;MBAFF否。
8)数据重组模块320将宏块4进行重组,使宏块4重组为16个4x4的最小子块。
9)控制模块350判断滑动窗口存储器330中是否存在空白滑动窗口。
10)滑动窗口存储器330中不存在空白滑动窗口,控制模块350将滑动窗口存储器中视频宏块0(即最先编码结束的视频宏块)最后一行的最小子块信息转移到所述缓存器340中,且删除所述滑动窗口存储器330中视频宏块0的所有信息,得到空白滑动窗口(即第一滑动窗口),将数据重组模块320重组后的视频宏块4对应的20个最小子块存储到第一滑动窗口。
由于宏块0中availB是不存在,因此控制模块350无需对缓存器340进行搜索。此时,缓存器340中包括宏块0最后一行的4个最小子块信息。滑动窗口存储器330没有空白的滑动窗口,但是每个滑动窗口都没有填满,仍留有一行空白。
11)采用上述方法依次完成对宏块4、宏块5、宏块6、宏块7和宏块8的编码。
12)参考图7所示,采用上述方法将宏块8、宏块9、宏块10和宏块11存储到滑动窗口存储器330中,同时滑动窗口存储器中还包括宏块0重组后的最后一行最小子块、宏块1重组后的最后一行最小子块、宏块2重组后的最后一行的最小子块和宏块3重组后的最后一行的最小子块。此时缓存器340中存储的是重组后宏块4至宏块11最后一行的最小子块信息。
需要说明的是,在将重组后的宏块8写入滑动窗口存储器330时,滑动窗口存储器330中其余三个滑动窗口中存储的是重组后的宏块5、重组后的宏块6和重组后的宏块7。
13)对宏块9进行编码,邻居信息请求装置200中宏块9对应4个8x8的子块,其编号依次为0’、1’、2’、3’。先对子块0’进行编码时,查询模块360从输入模块310中获取子块0’的邻居查找请求信息对应的最小子块的编号分别为:其左面的最小子块7、其上面的最小子块20、其左上的最小子块3和其右上的最小子块21。查询模块360将最小子块的编号7、20、3和21发送给输出模块370,输出模块370从当前滑动窗口存储器中提取并输出编号为7、20、3和21对应的最小子块信息,该最小子块信息就是宏块9中子块0’的邻居信息。
14)采用上述方法完成对宏块9的子块1’、2’、3’的编码。
需要说明的是,在邻居信息请求装置200中一单元对宏块9进行邻居查找的过程中,邻居信息请求装置200中另一单元还可以对宏块10进行邻居查找,从而可以进一步提高查找的速度。
15)参考图8所示,将滑动窗口存储器330中重组后的宏块8的最后一行的最小子块发送到缓存器340,并将宏块8及其上的宏块0的最后一行的最小子块从滑动窗口存储器330中删除,同时将重组后的宏块12存储到滑动窗口存储器330中,并从缓存器340中提取宏块4的最后一行的最小子块以存储在宏块12的正上方。
16)不断重复上述过程,直至完成对宏块31的编码。
本实施例可以减小邻居查找所需的空间。对于1920x1080的高清图像,当滑动窗口存储器包括16个滑动窗口时,滑动窗口存储器也仅需要约12K字节的内存代价,其与现有技术中约1M字节的内存相比,非常精简。
本实施例还可以降低邻居查找所需的时间。由于把多个判断分支简化为查表操作,所以运算速度大大提高。例如使用smic 65nm的流片工艺,在400MHz的时钟周期下,进行一次邻居查找仅需要3个时钟周期。在计算机上的实测结果表明使用本实施例装置进行邻居查找相比于现有技术可以提高4倍的运算速度。
本实施例可以适用于各种视频编/解码技术中,具有极强的通用性。
相应地,本发明还提供了一种视频编/解码方法,其中的邻居查找方法包括:
获取待编/解码视频信号被分割和排序后的视频宏块信息和与所述视频宏块信息对应的邻居查找请求信息;将接收的视频宏块信息重组为多个阵列排布的最小子块;
采用滑动窗口存储器存储重组后的一个视频宏块信息及其正上方视频宏块最后一行的最小子块信息,获取每个所述最小子块的存储位置;
采用缓存器存储所述滑动窗口存储器中重组后的视频宏块信息重组后最后一行信息;
当存在空白滑动窗口时,将所述重组后的视频宏块信息存入空白滑动窗口,且将从缓存器中搜索到的与存入空白滑动窗口的所述视频宏块信息正上方视频宏块重组后最后一行对应的最小子块信息存入所述空白滑动窗口;当不存在空白滑动窗口时,将目前滑动窗口存储器中最先编/解码结束的视频宏块重组后最后一行的最小子块信息转移到所述缓存器中,且删除转移的视频宏块所在滑动窗口中的所有信息,得到空白滑动窗口;获取每个所述最小子块在滑动窗口存储器中的存储位置;
获取与所述邻居查找请求信息对应的最小子块,并获取所述最小子块在滑动窗口存储器中的存储位置;
根据查询得到的所述存储位置,从所述滑动窗口存储器中提取并输出与所述存储位置对应的最小子块信息。
其中,所述最小子块在滑动窗口存储器中的存储位置用编号进行表示。
所述输入模块获取的视频宏块可以被分割为16×16大小;每个所述视频宏块可以被重组成16个4×4的最小子块。
所述邻居查找请求信息可以包括:当前宏块在当前帧图像中的序号、当前子块的类型、当前子块的序号、当前宏块左面的宏块是否存在、当前宏块上面的宏块是否存在、当前宏块左上的宏块是否存在和当前宏块右上的宏块是否存在。
所述当前子块的类型可以包括:16x16、16x8、8x16、16x4、4x16、8x8、8x4、4x8或4x4。
所述邻居查找请求信息还可以包括:当前帧是否H.264 MBAFF类型、当前宏块是否H.264 MBAFF的场类型、当前宏块左面的宏块是否H.264 MBAFF的场类型、当前宏块右面的宏块是否H.264MBAFF的场类型、当前宏块右上的宏块是否H.264 MBAFF的场类型和当前宏块左上的宏块是否H.264 MBAFF的场类型。
优选地,所述邻居查找请求信息可以以表格形式进行输入。
所述滑动窗口存储器可以包括3个以上的滑动窗口。具体地,所述滑动窗口存储器包括2N个滑动窗口,其中,N为大于或等于2的正整数。优选地,所述滑动窗口存储器包括4个、8个或16个滑动窗口。
每个所述滑动窗口被划分为20个区域,每个区域对应一个最小子块。
具体地,所述滑动窗口存储器为高速缓存器。
具体地,所述缓存器的大小对应待处理帧视频数据中行宽度的4倍。
上述邻居查找方法具体可以采用前述邻居查找装置实现,在此不再赘述。
虽然本发明已以较佳实施例披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。