CN105592314B - 并行解码方法和并行解码装置 - Google Patents

并行解码方法和并行解码装置 Download PDF

Info

Publication number
CN105592314B
CN105592314B CN201510955169.7A CN201510955169A CN105592314B CN 105592314 B CN105592314 B CN 105592314B CN 201510955169 A CN201510955169 A CN 201510955169A CN 105592314 B CN105592314 B CN 105592314B
Authority
CN
China
Prior art keywords
decoding
block
entropy
thread
parallel
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.)
Active
Application number
CN201510955169.7A
Other languages
English (en)
Other versions
CN105592314A (zh
Inventor
宋思超
陶品
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tsinghua University
Original Assignee
Tsinghua University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tsinghua University filed Critical Tsinghua University
Priority to CN201510955169.7A priority Critical patent/CN105592314B/zh
Publication of CN105592314A publication Critical patent/CN105592314A/zh
Application granted granted Critical
Publication of CN105592314B publication Critical patent/CN105592314B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/146Data rate or code amount at the encoder output
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

提供了并行解码方法及其装置,对于一个宏块的解码操作包括熵解码操作和除了熵解码操作外的在后解码操作,并行解码方法包括:接收来自编码器侧的码流,该码流是采用了CABAC熵编码技术熵编码的;利用单独的CABAC熵解码线程对所接收的码流中的宏块进行CABAC熵解码;至少部分基于CABAC熵解码的结果、帧内宏块和帧间宏块之间的依赖关系、当前能够利用的存储资源和计算资源,界定能够彼此并行进行在后解码操作的宏块;以及利用并行的块解码线程,彼此并行地对所界定的宏块进行在后解码操作。提供了帧内图像块和帧间图像块的图像块级别的并行解码方法。

Description

并行解码方法和并行解码装置
技术领域
本发明总体地涉及视频编码技术,更具体地涉及并行编码方法和并行编码装置。
背景技术
传统的视频编码标准,从H.261开始,历经MPEG-1,MPEG-2,H.263,MPEG-4,H.264等等,都是编码器复杂,解码器相对简单;编码器可以自由定义算法,解码器算法固定。这样做的主要原因是解码器是大众消费产品,解码器往往是硬件芯片实现,为了便于解码器能够接收不同编码器编出的码流,因此码流格式必须标准化、一致化,因此解码器的解码流程也就标准化了,几乎没有改动或改进的余地,这样也事实上提高了解码器的量产数量,降低了解码器的设计制造成本。
但是随着编解码标准越来越复杂,解码器也变得越来越复杂,4K分辨率的视频在2.7GHz的i7处理器上单线程也只能刚好达到30fps的软件解码速度。另一方面,由于硬件解码研发周期长,操作系统适配兼容性差,因此在不少实际产品中研发企业更偏向于更为灵活的软件解码方案,而越来越高的解码复杂度对软件解码提出了挑战。
软件解码主要分为三个阶段:
1)熵解码
2)反量化+反DCT
3)预测或运动补偿
4)SAO、环路滤波等后处理
由于解码器已经被视频标准约束得比较严格,能做的变化和改进相对比较少,具体到并行解码技术上,传统的并行方案有如下这几种:
1)GOP即帧组级别的并行,比如每16帧一个组,且第1帧为Intra帧,这样每16帧的解码做为一个并行单位,用多核或者集群等技术进行并行。这种方案的缺点是1)当前最邻近的帧解码速度并没有得到提升,第一个GOP还是很慢;2)如果用户在点播的时候要拖动、快进、快退,新起始点的第一个GOP还是慢,且之前很多GOP的解码被白白浪费掉了;3)缓存需求很大,在线实时解码时需要提前下载后面GOP的数据,网络缓存加大,同时还需要更多的缓存保存后面GOP解码完成的图像数据。
2)Slice/Tile级别的并行,即把一帧图像分成若干个小图像,分别按小图像编码和解码,小图像之间可以并行。这种方案的缺点是:1)需要编码器端配合,编码器首先要将图像分割成小图像,否则解码端无法并行;2)由于分成了小图像,小图像之间不能互相参考,严重影响编码效率,即压缩率将变低。
3)WPP级别的并行,即根据帧内编码瀑布式下推的特性,通过多个熵编码起始点,使得多行编码块的解码过程之间可以并行。这种方案的缺点是:1)需要编码端的配合,如果编码端不按并行的方式编码,解码端就无法并行;2)由于有多个熵编码起始点,编码效率下降虽然不多,但仍然会有一点下降。
4)帧解码内部的并行,即在每个编码块的内部进行并行,比如DCT计算过程并行,预测过程并行等。这种方案的确定是:由于每个块的执行时间粒度已经很小(毫秒级别),而操作系统调度的时间片大小一般在20毫秒左右,所以这种并行设计起来非常困难,硬件兼容性差。
发明内容
针对上述各种并行解码方案存在的问题,本专利提出一种可以克服上述问题较为通用的解码器并行方案,可以在宏块级别并行,无需编码端针对并行做任何专门的处理,编码效率没有损失,并行化的软件实现不是很困难,对缓存要求不高的软件并行解码方案。
根据本发明的一个方面,提供了一种计算机执行的、针对采用了CABAC熵编码技术编码的码流进行的、宏块级别的并行解码方法,对于一个宏块的解码操作包括熵解码操作和除了熵解码操作外的在后解码操作,其中包括:接收来自编码器侧的码流,该码流是采用了CABAC熵编码技术熵编码的;利用单独的CABAC熵解码线程对所接收的码流中的宏块进行CABAC熵解码;至少部分基于CABAC熵解码的结果、帧内宏块和帧间宏块之间的依赖关系、当前能够利用的存储资源和计算资源,界定能够彼此并行进行在后解码操作的宏块;以及利用并行的块解码线程,彼此并行地对所界定的宏块进行在后解码操作。
根据本发明实施例的并行解码方法,还可以包括:利用环状缓冲区来存储宏块进行在后解码操作所需要的上下文内容数据集,缓冲区的存储单位为每个宏块进行在后解码操作所需要的上下文内容数据集,缓冲区的长度大于图像水平方向所包含的编码块的数目,缓冲区中的每个数据集具有可填充标记和可解码标记,可填充标记标识该数据集是否可以被覆盖,可解码标记标识该元素是否有足够的数据进行对应区域的解码工作,具体图像块可解码指的是能够对该具体图像块进行在后解码操作。
根据本发明实施例的并行解码方法,所界定的能够彼此并行进行在后解码操作的宏块可以包括在不同帧中的宏块。
根据本发明实施例的并行解码方法,所述界定能够彼此并行进行在后解码操作的宏块可以在以下两种情况下被触发执行:在CABAC熵解码线程中具体图像块的CABAC熵解码完成后,确定该具体图像块是否可以进行在后解码操作,如果确定可以,则将该具体图像块加入能够彼此并行进行在后解码操作的宏块的集合中;在具体图像块的在后解码操作完成后,确定与该具体图像块相关的图像块中是否有新的可进行在后解码操作的图像块出现,如果有,则将出现的新的可进行在后解码操作的图像块加入能够彼此并行进行在后解码操作的宏块的集合中。
根据本发明实施例的并行解码方法,还可以包括:利用并行化调度模块,基于环状缓冲区中可进行在后解码操作的图像块的数量A、图像块熵解码完成领先数量B、当前计算资源的使用率C、当前的并行的块解码线程的数量D,对熵解码线程和并行的块解码线程进行调度。
根据本发明实施例的并行解码方法,所述对熵解码线程和并行的块解码线程进行调度可以包括下述项目中的至少一个:暂停熵解码线程、重启熵解码线程、增加并行的块解码线程、减少并行的块解码线程。
根据本发明实施例的并行解码方法,并行化调度模块可以在每次块解码线程准备开始寻找一个可解码图像块进行解码时进行调度。
根据本发明实施例的并行解码方法,所述并行化调度模块可以根据下述规则中的至少一个进行调度:熵解码线程处于运行状态时,当图像块熵解码完成领先数量等于预定的最大值时,熵解码线程暂停;熵解码线程处于暂停状态时,并且图像块熵解码完成领先数量小于预定最大值的预定百分比时,熵解码线程重启;如果环状缓冲区中可进行在后解码操作的图像块的数量A大于等于2,且当前计算资源的使用率C不大于第一预定阈值,则增加一个块解码线程;如果当前的并行的块解码线程的数量D大于1、当前计算资源的使用率C大于第二预定阈值、图像块熵解码完成领先数量B小于预定的最大值,则减少一个块解码线程。
根据本发明的另一方面,提供了一种针对采用了CABAC熵编码技术编码的码流进行的、宏块级别的并行解码装置,对于一个宏块的解码操作包括熵解码操作和除了熵解码操作外的在后解码操作,并行解码装置可以包括:码流接收单元,接收来自编码器侧的码流,该码流是采用了CABAC熵编码技术熵编码的;CABAC熵解码单元,利用单独的CABAC熵解码线程对所接收的码流中的宏块进行CABAC熵解码;可解码宏块界定单元,至少部分基于CABAC熵解码的结果、帧内宏块和帧间宏块之间的依赖关系、当前能够利用的存储资源和计算资源,界定能够彼此并行进行在后解码操作的宏块;以及在后解码操作执行单元,利用并行的块解码线程,彼此并行地对所界定的宏块进行在后解码操作。
根据本发明的再一方面,提供了一种针对采用了CABAC熵编码技术编码的码流进行宏块级别的并行解码的计算装置,对于一个宏块的解码操作包括熵解码操作和除了熵解码操作外的在后解码操作,所述计算装置包括存储器和处理器,存储器中存储有计算机可执行指令集合,当处理器执行所述计算机可执行指令集合时,执行下述操作:接收来自编码器侧的码流,该码流是采用了CABAC熵编码技术熵编码的;利用单独的CABAC熵解码线程对所接收的码流中的宏块进行CABAC熵解码;至少部分基于CABAC熵解码的结果、帧内宏块和帧间宏块之间的依赖关系、当前能够利用的存储资源和计算资源,界定能够彼此并行进行在后解码操作的宏块;以及利用并行的块解码线程,彼此并行地对所界定的宏块进行在后解码操作。
附图说明
从下面结合附图对本发明实施例的详细描述中,本发明的这些和/或其它方面和优点将变得更加清楚并更容易理解,其中:
图1示出了根据本发明一个实施例的并行解码方法100的流程图。
图2示例性地示出了帧内图像块解码的依赖关系的示意图。
图3示例性地示出了帧间图像块解码的依赖关系的示意图。
图4示出了根据本发明一个实施例的并行编码框架的示意图。
图5A到5Y示例性说明对帧内图像和帧间图像的图像块进行解码的解码过程的一系列示意图。
具体实施方式
为了使本领域技术人员更好地理解本发明,下面结合附图和具体实施方式对本发明作进一步详细说明。
本文中,在没有特别说明的情况下,“可解码”指的是可进行除了“熵解码”操作之外的在后解码操作。单独出现的“解码”也是指的是进行除了“熵解码”操作的在后解码操作。
后面的描述将以H.265标准的解码技术为例加以说明,其中采用CABAC熵编码方式。而H.264标准的编码技术H.264中是有两种熵编码方式,CAVLC和CABAC,CAVLC由于复杂度低是事实上大部分码流所采用的编码方式,CAVLC的解码过程比较快,相邻的元素解码不存在依赖关系,因此如果H.264采用CAVLC方式编码的话,解码可以不用特别考虑熵解码部分带来的复杂性。H.265中出于编码效率的考虑,统一只采用CABAC的熵编码方式,CAVLC不再被包含在H.265标准中。而如果采用CABAC,即算术编码,则CABAC的编码和解码过程都比CAVLC复杂很多,速度也慢,前后元素的编解码过程互相关联,如果前面的元素不解码完成,后面的元素是无法解码的,只有到了帧(更准确的说是Slice)的边界,熵解码才会有结束标志,并重新初始化进行编解码,也就是说只有到了帧的边界,熵解码才有并行的可能,在帧的内部,熵解码必须串行顺序执行。
下面描述一下本发明的发明思想,以便于透彻理解本发明。
针对H.265只有CABAC这一种熵编码方式,并考虑到CABAC的解码在Intra帧中占据了近50%的解码时间,在Inter帧中占据了约30%的解码时间这一统计事实,着重考虑了有CABAC条件下如何并行解码的问题。
首先,本发明实施例给CABAC熵解码单独建立了一个线程,解码器的其他线程跟随在CABAC线程后面执行,CABAC与其他线程之间存在并行关系,CABAC之外的块解码线程之间也存在并行关系。
此外,本发明实施例的并行解码方法同时面向帧内图像解码和帧间图像解码,特别的是对帧间图像而言,图像块是否可以解码很多情况下并不依赖其左侧和上方的图像块是否已经解码完成,而是依赖前一帧图像中的参考位置是否存在,因此图像块之间的并行没有很强的依赖关系,可以“乱”序并行解码。在一个示例中,为了将帧间图像的“乱”序并行和帧内图像的“顺”序并行融合在一起,采用了一种由环状缓冲区管理可解码图像块列表,统一图像块可并行解码的信号触发方式,使得“顺”和“乱”两种方式都能得到统一的并行化支持。
根据本发明的一个实施例,为了保障最大并行效率,基于一些参数对熵解码线程和其他并行的块解码线程进行调度,以便有效控制H.265解码器取得最佳的并行效率。由于在H.265标准中,要求必须采用CABAC熵编码方式,而且熵解码过程必须串行执行且必须比其他块解码线程的执行进度提前,同时一些实验的统计结果已经表明熵解码的计算量在整个解码器中占较大的比例。基于上述这些原因,当面对有限的计算资源时(比如CPU核数量、内存访问带宽等),为了更好的保障整个解码器的并行性能尽可能的好,不出现某些线程被堵塞,应该有一个控制机制保障解码器的并行达到最大并行效率,即所有图像块解码完成所用的时间最短。
由于CABAC算术解码线程必须领先其他块解码线程,才能让其他块解码线程有活可干,所以多核或者类似多核的系统中,应该保障熵解码线程能分配到足够的计算资源,最大情况下熵解码线程独占一个独立的处理器核,以可能的最快速度进行熵解码。如果处理器中的并行计算资源非常丰富,熵解码线程的处理速度应该有一个最慢下限,就是不能让其他块解码线程出现等待,如果其他线程出现等待,则表明有计算资源处于浪费状态,并行性能受到了损失。这个下限应该是熵解码至少领先其他并行的块解码线程一个图像块,实际操作中应该是领先N个(N为大于1的整数)图像块,在我们的专利方法中,实际上可以用环状缓冲区中可解码的图像块数量来表达这个信息。在一个示例中,通过环状缓冲区中可解码图像数量和图像块熵解码完成领先数量等信息作为并行化控制模块的输入,调节熵解码线程和其他并行的块解码线程的调度策略,可以有效控制H.265解码器取得最佳的并行效率。
下面参考附图结合具体实施例来描述本发明的技术方案。
图1示出了根据本发明一个实施例的并行解码方法100的流程图。
该并行解码方法由计算机执行,针对采用了CABAC熵编码技术编码的码流进行,为在宏块级别并行的解码方法。这里的计算机该广义概念,既包括单机情况,也包括分布式计算的情况。这里,对于一个宏块的解码操作包括熵解码操作和除了熵解码操作外的在后解码操作,在不至于引起混淆的情况下,有时将后者即“除了熵解码操作外的在后解码操作”,称为数据解码或更简单地称为解码。
如图1所示,并行解码方法主要包括如下步骤。
在步骤S110中,接收来自编码器侧的码流,该码流是采用了CABAC熵编码技术熵编码的。
在步骤S120中,利用单独的CABAC熵解码线程对所接收的码流中的宏块进行CABAC熵解码。
在一个示例中,针对图像帧组GOP进行熵解码,并行对于经过了熵解码的图像块进行计数,在对图像帧组GOP开始进行熵解码前,进行计数器清零。
通过进行熵解码,可以获得语义层面的信息,例如可以包括图像块划分信息、预测模式信息、残差信号编码方式、残差系数、后处理相关信息等。
在步骤S130中,至少部分基于CABAC熵解码的结果、帧内宏块和帧间宏块之间的依赖关系、当前能够利用的存储资源和计算资源,界定能够彼此并行进行在后解码操作的宏块。
在界定能够彼此并行进行在后解码操作的宏块过程中,需要分析图像块解码的信息依赖关系。
在H.265中,每个图像块的大小是64x64,这是本实施例的并行解码方案的基本并行单位。图像块可以分为帧内图像块和帧间图像块两种类型,帧内图像中所有的块都是帧内图像块,帧间图像中的块可能是帧内图像块,也可能是帧间图像块,一般来说,大部分是帧间图像块,少数是帧内图像块。所谓帧内图像(intra frame)指的是对该帧图像编码时不能用之前的图像信息作为参考的图像,一般为一个图像帧组GOP中的第一帧图像;帧间图像(inter frame)指对该帧图像变啊时可以用其它帧图像作为参考的图像,一般为图像帧组GOP中除了第一帧图像之外的图像。
图2示例性地示出了帧内图像块解码的依赖关系的示意图。
如图2所示,帧内图像块X若要进行解码,要求与其相邻的左侧和上方的A、B、C、D四个图像块已经基本完全解码,即这4个块应该完成了熵解码、残差计算、预测图像获得和后处理等绝大部分解码步骤方可。顺便说一下,A、B、C与X相邻的边界上像素的环路滤波(后处理中的环节之一)等少量解码操作需要等待图像块X解码之后才能进行。
图3示例性地示出了帧间图像块解码的依赖关系的示意图。
如图3所示,帧间图像块如果要进行解码,要求其参考的帧运动向量所指向位置相关的块已经完全解码(包括环路滤波等所有环节),同时与其相邻的左侧和上方的A、B、C、D四个图像块的熵解码已经完成,且根据编码器的语法规则已经将参考图像列表、运动向量等信息已经计算出来,这部分计算可以由熵解码线程负责完成,或者由其他块解码线程负责完成。上述依赖关系满足的条件下,当前图像块即可进行解码。
基于当前已经经过熵解码和已经进行完全解码的图像块的状态例如分布情况,考虑图像块之间的依赖关系,以及考虑当前能够利用的存储资源(例如,后续介绍的环形缓冲器)和计算资源(例如,可用处理器的数量或者单个处理器的可利用率),能够确定哪些宏块处于能够进行在后解码操作的状态,也即这些宏块在后解码所需的信息和资源都处于可用状态。
可见,所界定的能够彼此并行进行在后解码操作的宏块可以位于不同的帧中,例如能够并行进行在后解码操作的宏块中,宏块A位于帧T,宏块B位于帧P。而且一个帧间解码块所依赖的在先解码的块位于与其所在的帧不同的帧中。
在一个示例中,所述界定能够彼此并行进行在后解码操作的宏块可以在以下两种情况下被触发执行:
(1)在CABAC熵解码线程中具体图像块的CABAC熵解码完成后,确定该具体图像块是否可以进行在后解码操作,如果确定可以,则将该具体图像块加入能够彼此并行进行在后解码操作的宏块的集合中;
(2)在具体图像块的在后解码操作完成后,确定与该具体图像块相关的图像块中是否有新的可进行在后解码操作的图像块出现,如果有,则将出现的新的可进行在后解码操作的图像块加入能够彼此并行进行在后解码操作的宏块的集合中。
在步骤S140中,利用并行的块解码线程,彼此并行地对所界定的宏块进行在后解码操作。
在后解码操作可以包括反量化、反DCT、预测或运动补偿、以及SAO、环路滤波等后处理。
需要说明的是,虽然各个步骤在空间上被顺序列出,但是并不意味着时间上的顺序关系。实际上,在不违反上下文逻辑关系的情况下,各个步骤可以并行进行。虽然当前块的熵解码和当前块的在后解码操作不可能并行执行,但是例如A块的熵解码和B块的在后解码操作是可能并行执行的。此外,在每个图像块的熵解码操作完成和/或每个图像块的在后解码操作完成时,都可以触发步骤S130的界定操作。
上述步骤S120、S130、S140是个循环往复的过程,不断继续,直到当前帧组的所有图像帧的所有图像块都解码完成为止。
图4示出了根据本发明一个实施例的并行编码框架的示意图。
根据图4所示的并行编码框架示例,由一个并行调度器负责生成和协调多个线程的工作。多个线程例如包括并行解码主线程、熵解码线程、1个或多个块解码线程等。所有的线程共享一个公共的环状缓冲区。熵解码线程向环状缓冲区中提供新的可解码块数据;块解码线程则解码这些数据,针对帧内图像的解码和帧间图像的解码的不同特点以一种统一的并行方式实现并行解码。并行解码主线程中包括并行调度器模块,用于根据解码硬件平台所拥有的并行计算能力等因素,对于熵解码线程和块解码线程进行协调和控制,让整个并行解码器达到尽可能高的并行解码加速比。
在图4所示的示例中,利用环状缓冲区来存储宏块进行在后解码操作所需要的上下文内容数据集,缓冲区的存储单位为每个宏块进行在后解码操作所需要的上下文内容数据集,缓冲区的长度大于图像水平方向所包含的编码块的数目,缓冲区中的每个数据集具有可填充标记和可解码标记,可填充标记标识该数据集是否可以被覆盖,可解码标记标识该元素是否有足够的数据进行对应区域的解码工作,具体图像块可解码指的是能够对该具体图像块进行在后解码操作。
下面描述示例性的环状缓冲区的设计和状态变化情况。
每个图像块在经过熵解码后,将解码得到的语法元素结果填写到一定数据结构中,同时把与该图像块进一步解码所需的数据也都获取到,一起组成一个数据块,以该数据块为单位,组成环状缓冲区。
环状缓冲区有一个指定的初始化大小N,在实际系统中N需要大于视频水平方向所包含的图像块的数目,且环状缓冲区的大小N可以是后文将提到的图像块熵解码完成领先数量(B值)预定的最大值。同时缓冲区中的每个数据集都有相应的标志位(flag)以标记该数据集是否可被填充和是否可以解码。可填充标志(flag InUse)标识了该数据集是否已经被解码完毕从而可以被删除并覆盖,可解码标志(flag IsAvailable)标识了该元素是否有完备的数据可以进行对应区域的解码工作。
环状缓冲区初始化时为空,每个数据块的可填充标志为“未填充”,可解码标志为“不可解码”。
当熵解码线程准备解码一个新的图像块时,首先查找环状缓冲区中是否有“未填充”的数据块,如果有则把该数据块的可填充标志修改为“已填充”,然后解码得到该图像块的语法元素等信息,并和其他信息一起填入该数据块中。接着,根据依赖关系判断该块是否可以解码,如果可以解码,将可解码标志修改为“可解码”,否则,可解码标志保持为“不可解码”。如果环状缓冲区中已没有“未填充”数据块,当块解码线程得到执行时,首先执行并行化调度模块,决定是否需要暂停熵解码线程、是否需要增加或减少块解码线程等,然后查找环状缓冲区中是否存在可解码图像块,如果有则解码所找到的第一个图像块。等到该图像块解码完毕,则将可填充标志修改为“未填充”,可解码标志修改为“不可解码”,然后判定由于该图像块解码完成,根据依赖关系环状缓冲区中是否存在其他图像块成为新的可解码块,并将那些数据块的可解码标志修改为“可解码”。然后再进入本过程的起始位置,执行并行化调度模块,循环解码其他可解码图像块。
图4中的主线程可利用并行解码调度器,基于环状缓冲区中可进行在后解码操作的图像块的数量A、图像块熵解码完成领先数量B、当前计算资源的使用率C、当前的并行的块解码线程的数量D,对熵解码线程和并行的块解码线程进行调度。
下面对上述各个数量的含义进行具体说明。
(1)环状缓冲区中可进行在后解码操作的图像块的数量A,或称可解码图像块数量A
即当前依赖关系已经全部满足,随时可以解码的图像块数量,其取值范围可以为从0到环状缓冲区大小。其中,已经被并行的块解码线程占用正在解码的图像块和已解码完成但还未来得及从环状缓冲区中删除的图像块不属于可解码图像块;依赖关系还未满足,暂时还不能被解码的图像块也不属于可解码图像块。
可解码图像块数量A表明了当前可以由并行的块解码线程进行解码的图像块数量,是当前所需块解码线程数量的理论最大值(线程数量再多也没有用,因为没有那么多图像块可以同时解码)。
(2)图像块熵解码完成领先数量B
该值是针对一个图像帧组(GOP)而言的,即从一个GOP的第一个帧内图像的第一个帧内图像块开始计数,并持续累计,某一帧结束时并不重新初始化计数,直到整个帧组结束才结束计数。在一个GOP中,如果没有其他条件的限制,图像块熵解码完成领先数量这个数值应该越大越好,因为熵解码完成得越多,才可以让可并行的图像块数量更多,才可能在计算资源充足的条件下有更大的并行性加速整个解码速度。但是熵解码本身要占用一部分计算资源,会使得其他块解码线程可用的计算资源减小,在“一马当先”的情况下拖累整体的解码速度;同时熵解码输出的解码结果需要占用一定的缓存资源来存储,因此领先数量会受到缓存资源大小的限制。可以根据经验或一定的计算,为某个硬件平台设置该B值的最大上限,并且帧内图像的最大上限与帧间图像由于并行化特点不同,其最大上限值也应有所不同。
假定“熵解码完成数量”这个值从上述GOP的第一个帧内图像的第一个帧内图像块开始初始化为0,熵解码每完成一个图像块的熵解码,“熵解码完成数量”加1。
假定“已解码图像块数量”从上述GOP的第一个帧内图像的第一个帧内图像块开始初始化为0,每当一个图像块完全解码完毕,该数值加1。
图像块熵解码完成领先数量即为上述两个数值之差,即:
图像块熵解码完成领先数量=熵解码完成数量—已解码图像块数量。
(3)当前计算资源的使用率C
可以通过操作系统底层支持获得当前计算资源的使用率。
如果解码器运行环境有计算资源使用率的最大限制,比如为了给解码器以外的其他任务留出计算资源,则计算出解码任务所使用的计算资源占预设的最大限制的百分比即可。
(4)块解码线程数量D
即当前已经生产的块解码线程数量,初始化时有1个块解码线程,随着并行化条件的满足程度和计算资源的可用性,该数值会动态增加或减少。
在一个示例中,对熵解码线程和并行的块解码线程进行调度包括下述项目中的至少一个:暂停熵解码线程、重启熵解码线程、增加并行的块解码线程、减少并行的块解码线程。
并行化调度器可以在每次块解码线程准备开始寻找一个可解码图像块进行解码时进行调度。
并行化调度器可以根据下述规则中的至少一个进行调度:
(1)熵解码线程处于运行状态时,当图像块熵解码完成领先数量等于预定的最大值时,熵解码线程暂停;
(2)熵解码线程处于暂停状态时,并且图像块熵解码完成领先数量小于预定最大值的预定百分比(例如小于预定最大值的三分之二)时,熵解码线程重启;
(3)如果环状缓冲区中可进行在后解码操作的图像块的数量A大于等于2,且当前计算资源的使用率C不大于第一预定阈值(例如,不大于90%),则增加一个块解码线程;
此时表示现在有新的无人认领的图像块需要解码,且计算资源有富余,因此可以再增加一个块解码线程。具体而言,对帧内图像而言,每次解码线程完成一个图像块解码后,一般会使得一个新的图像块成为可解码块,所以A值此时必然为1,当A值为2时,表示有一个新的块可以解码。对于帧间图像而言,由于一般没有本帧的依赖关系,所以不会直接导致新的可解码块,此时A值为2表示有2个独立的图像块可以解码了,因此也可以增加新线程。
(4)如果当前的并行的块解码线程的数量D大于1、当前计算资源的使用率C大于第二预定阈值(例如大于95%)、图像块熵解码完成领先数量B小于预定的最大值,则减少一个块解码线程,例如将当前块的块解码线程暂停。
图4所示的解码主线程可以负责启动熵解码线程和第一个块解码线程,利用并行解码调度器对熵解码线程和块解码线程进行控制和调节,协调各线程的工作,并搜集所有解码线程的输出结果,形成解码图像。
下面给出典型并行解码过程举例。
本例以一个三帧图像的并行解码过程为例介绍并行解码中的一些典型过程和状态,每帧图像由6x4共24个图像块组成,下面图中白色表示图像块尚未进行任何解码,黄色表示已完成熵解码,蓝色表示该图像块处于可块解码状态,绿色表示块解码完成。环状缓冲区大小为6,B值的预定最大值为6。
图5A到5Y说明对帧内图像和帧间图像的图像块进行解码的解码过程的一系列示意图。
1)如图5A所示,初始时,所有的图像块均未进行任何解码,全部为白色。此时环状缓冲区为空。
环状缓冲区:空
环状缓冲区中可解码图像块数量(A值):0
图像块熵解码完成领先数量(B值):0
当前计算资源的使用率(C值):10%
块解码线程数量(D值):1
熵解码线程解码到达的位置:0
1#块解码线程解码过的图像块和达到的位置:空
2)在图5B中,熵解码线程完成第一个图像块的熵解码,将该图像块的相关数据放入环状缓冲区。
环状缓冲区:1
环状缓冲区中可解码图像块数量(A值):1
图像块熵解码完成领先数量(B值):1
当前计算资源的使用率(C值):40%
块解码线程数量(D值):1
熵解码线程解码到达的位置:1
1#块解码线程解码过的图像块和达到的位置:空
3)图5C中,熵解码线程判定1号图像块没有依赖关系,是可以解码的,将1号图像块对应的环状缓冲区数据块可解码标志设置为“可解码”。
环状缓冲区:1
环状缓冲区中可解码图像块数量(A值):1
图像块熵解码完成领先数量(B值):1
当前计算资源的使用率(C值):40%
块解码线程数量(D值):1
熵解码线程解码到达的位置:1
1#块解码线程解码过的图像块和达到的位置:1
4)图5D中,熵解码线程继续向前解码,将2、3两个图像块的熵解码也完成了,加入环状缓冲区。与此同时,块解码线程也完成了1号图像块的解码,将其从环状缓冲区中删除,2号图像块成为可解码。
环状缓冲区:2、3
环状缓冲区中可解码图像块数量(A值):1
图像块熵解码完成领先数量(B值):2
当前计算资源的使用率(C值):60%
块解码线程数量(D值):1
熵解码线程解码到达的位置:3
1#块解码线程解码过的图像块和达到的位置:1、2
5)图5E中,熵解码线程继续向前解码,将4、5、6三个图像块的熵解码也完成了,加入环状缓冲区。与此同时,块解码线程也完成了2号图像块的解码,将其从环状缓冲区中删除,3号图像块成为可解码。
环状缓冲区:3、4、5、6
环状缓冲区中可解码图像块数量(A值):1
图像块熵解码完成领先数量(B值):4
当前计算资源的使用率(C值):60%
块解码线程数量(D值):1
熵解码线程解码到达的位置:6
1#块解码线程解码过的图像块和达到的位置:1、2、3
6)图5F中,熵解码线程继续向前解码,将7、8两个图像块的熵解码也完成了,加入环状缓冲区。熵解码线程也希望解出更多的块,但是受到B值不能大于6的限制,暂停了熵解码线程。与此同时,在7号块熵解码完成时,由于依赖关系满足,7号块成为可解码块,并且生成一个新的2#块解码线程负责解码7号块。然后,块解码线程也完成了3号图像块的解码,将其从环状缓冲区中删除,同时4号图像块成为可解码。此时B值回到5,但仍然大于4,熵解码线程依然暂停。
环状缓冲区:4、5、6、7、8
环状缓冲区中可解码图像块数量(A值):2
图像块熵解码完成领先数量(B值):5
当前计算资源的使用率(C值):75%
块解码线程数量(D值):2
熵解码线程解码到达的位置:8
1#块解码线程解码过的图像块和达到的位置:1、2、3、4
2#块解码线程解码过的图像块和达到的位置:7
7)图5G中,熵解码处于暂停状态。与此同时,2#块解码线程也完成了7号图像块的解码,将其从环状缓冲区中删除,8号块成为新的可解码块,由2#块解码线程负责解码。此时B值回到4,熵解码线程被重新调度启动,并逐步完成9、10、11号块的熵解码后继续暂停。由于4号图像块比较复杂,解码时间较长,1#块解码线程较晚完成了4号图像块的解码,并将5号块变为新的可解码块,由1#块解码线程负责。
环状缓冲区:5、6、8、9、10、11
环状缓冲区中可解码图像块数量(A值):2
图像块熵解码完成领先数量(B值):6
当前计算资源的使用率(C值):76%
块解码线程数量(D值):2
熵解码线程解码到达的位置:11
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5
2#块解码线程解码过的图像块和达到的位置:7、8
8)图5H中,1#块解码线程完成5号块的块解码,2#块解码线程也完成了8号块的块解码,将其从环状缓冲区中删除,6、9号块成为新的可解码块。此时B值回到4,熵解码线程继续向前解码,将12、13相继解码完成加入环状缓冲区。当13号块完成熵解码后,由于依赖关系满足,也成为新的可解码块,此时由于C值没有超过80%,系统生成一个新的3#解码线程负责解码13号块。
环状缓冲区:6、9、10、11、12、13
环状缓冲区中可解码图像块数量(A值):3
图像块熵解码完成领先数量(B值):6
当前计算资源的使用率(C值):92%
块解码线程数量(D值):3
熵解码线程解码到达的位置:13
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6
2#块解码线程解码过的图像块和达到的位置:7、8、9
3#块解码线程解码过的图像块和达到的位置:13
9)图5I中,各线程继续执行各自的工作。
环状缓冲区:10、11、12、14、15
环状缓冲区中可解码图像块数量(A值):2
图像块熵解码完成领先数量(B值):5
当前计算资源的使用率(C值):80%
块解码线程数量(D值):2
熵解码线程解码到达的位置:15
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6
2#块解码线程解码过的图像块和达到的位置:7、8、9、10
3#块解码线程解码过的图像块和达到的位置:13、14
10)图5J中,各线程继续执行各自的工作。
环状缓冲区:11、12、15、16、17、18
环状缓冲区中可解码图像块数量(A值):2
图像块熵解码完成领先数量(B值):6
当前计算资源的使用率(C值):77%
块解码线程数量(D值):2
熵解码线程解码到达的位置:18
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11
3#块解码线程解码过的图像块和达到的位置:13、14、15
11)图5K中,各线程继续执行各自的工作。
环状缓冲区:12、16、17、18、19、20
环状缓冲区中可解码图像块数量(A值):3
图像块熵解码完成领先数量(B值):6
当前计算资源的使用率(C值):95%
块解码线程数量(D值):3
熵解码线程解码到达的位置:20
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6、19
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11、12
3#块解码线程解码过的图像块和达到的位置:13、14、15、16
12)图5L中,各线程继续执行各自的工作。
环状缓冲区:17、18、20、21、22、23
环状缓冲区中可解码图像块数量(A值):2
图像块熵解码完成领先数量(B值):6
当前计算资源的使用率(C值):75%
块解码线程数量(D值):2
熵解码线程解码到达的位置:23
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6、19、20
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11、12
3#块解码线程解码过的图像块和达到的位置:13、14、15、16、17
13)图5M中,各线程继续执行各自的工作。
环状缓冲区:18、20、21、22、23、24
环状缓冲区中可解码图像块数量(A值):2
图像块熵解码完成领先数量(B值):6
当前计算资源的使用率(C值):75%
块解码线程数量(D值):3
熵解码线程解码到达的位置:24
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6、19、20
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11、12
3#块解码线程解码过的图像块和达到的位置:13、14、15、16、17、18
14)图5N中,各线程继续执行各自的工作。
环状缓冲区:21、22、23、24、25、26
环状缓冲区中可解码图像块数量(A值):3
图像块熵解码完成领先数量(B值):6
当前计算资源的使用率(C值):95%
块解码线程数量(D值):3
熵解码线程解码到达的位置:26
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6、19、20、21
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11、12、26
3#块解码线程解码过的图像块和达到的位置:13、14、15、16、17、18、25
15)图5O中,各线程继续执行各自的工作。
环状缓冲区:22、23、24、27、28、29
环状缓冲区中可解码图像块数量(A值):4
图像块熵解码完成领先数量(B值):6
当前计算资源的使用率(C值):95%
块解码线程数量(D值):3
熵解码线程解码到达的位置:29
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6、19、20、21、22
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11、12、26、27
3#块解码线程解码过的图像块和达到的位置:13、14、15、16、17、18、25、28
16)图5P中,各线程继续执行各自的工作。
环状缓冲区:23、24、29、30、31、32
环状缓冲区中可解码图像块数量(A值):5
图像块熵解码完成领先数量(B值):6
当前计算资源的使用率(C值):95%
块解码线程数量(D值):3
熵解码线程解码到达的位置:32
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6、19、20、21、22、23
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11、12、26、27、29
3#块解码线程解码过的图像块和达到的位置:13、14、15、16、17、18、25、28、30
17)图5Q中,各线程继续执行各自的工作。
环状缓冲区:24、33、34、35、36、37
环状缓冲区中可解码图像块数量(A值):5
图像块熵解码完成领先数量(B值):6
当前计算资源的使用率(C值):95%
块解码线程数量(D值):3
熵解码线程解码到达的位置:37
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6、19、20、21、22、23
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11、12、26、27、29、31
3#块解码线程解码过的图像块和达到的位置:13、14、15、16、17、18、25、28、30、32
18)图5R中,各线程继续执行各自的工作。
环状缓冲区:34、38、39、40、41、42
环状缓冲区中可解码图像块数量(A值):6
图像块熵解码完成领先数量(B值):6
当前计算资源的使用率(C值):94%
块解码线程数量(D值):3
熵解码线程解码到达的位置:42
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6、19、20、21、22、23、24
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11、12、26、27、29、31、33、35
3#块解码线程解码过的图像块和达到的位置:13、14、15、16、17、18、25、28、30、32、36、34
19)图5S中,各线程继续执行各自的工作。
环状缓冲区:41、43、44、45、46、47
环状缓冲区中可解码图像块数量(A值):6
图像块熵解码完成领先数量(B值):6
当前计算资源的使用率(C值):97%
块解码线程数量(D值):3
熵解码线程解码到达的位置:47
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6、19、20、21、22、23、24、37、40
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11、12、26、27、29、31、33、35、39、42
3#块解码线程解码过的图像块和达到的位置:13、14、15、16、17、18、25、28、30、32、36、34、38
20)图5T中,各线程继续执行各自的工作。
环状缓冲区:48、49、50、51、52、53
环状缓冲区中可解码图像块数量(A值):6
图像块熵解码完成领先数量(B值):6
当前计算资源的使用率(C值):95%
块解码线程数量(D值):3
熵解码线程解码到达的位置:53
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6、19、20、21、22、23、24、37、40、41、45
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11、12、26、27、29、31、33、35、39、42、43、46
3#块解码线程解码过的图像块和达到的位置:13、14、15、16、17、18、25、28、30、32、36、34、38、44、47
21)图5U中,各线程继续执行各自的工作。
环状缓冲区:54、55、56、57、58
环状缓冲区中可解码图像块数量(A值):5
图像块熵解码完成领先数量(B值):5
当前计算资源的使用率(C值):95%
块解码线程数量(D值):3
熵解码线程解码到达的位置:58
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6、19、20、21、22、23、24、37、40、41、45、48、51
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11、12、26、27、29、31、33、35、39、42、43、46、49、52
3#块解码线程解码过的图像块和达到的位置:13、14、15、16、17、18、25、28、30、32、36、34、38、44、47、50、53
22)图5V中,各线程继续执行各自的工作。
环状缓冲区:58、59、60、61、62、63
环状缓冲区中可解码图像块数量(A值):6
图像块熵解码完成领先数量(B值):6
当前计算资源的使用率(C值):95%
块解码线程数量(D值):3
熵解码线程解码到达的位置:63
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6、19、20、21、22、23、24、37、40、41、45、48、51、54、57
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11、12、26、27、29、31、33、35、39、42、43、46、49、52、55
3#块解码线程解码过的图像块和达到的位置:13、14、15、16、17、18、25、28、30、32、36、34、38、44、47、50、53、56
23)图5W中,各线程继续执行各自的工作。
环状缓冲区:64、65、66、67、68、69
环状缓冲区中可解码图像块数量(A值):6
图像块熵解码完成领先数量(B值):6
当前计算资源的使用率(C值):95%
块解码线程数量(D值):3
熵解码线程解码到达的位置:69
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6、19、20、21、22、23、24、37、40、41、45、48、51、54、57、60、63
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11、12、26、27、29、31、33、35、39、42、43、46、49、52、55、58、61
3#块解码线程解码过的图像块和达到的位置:13、14、15、16、17、18、25、28、30、32、36、34、38、44、47、50、53、56、59、62
24)图5X中,各线程继续执行各自的工作。
环状缓冲区:68、70、71、72
环状缓冲区中可解码图像块数量(A值):4
图像块熵解码完成领先数量(B值):4
当前计算资源的使用率(C值):95%
块解码线程数量(D值):3
熵解码线程解码到达的位置:72
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6、19、20、21、22、23、24、37、40、41、45、48、51、54、57、60、63、64、67
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11、12、26、27、29、31、33、35、39、42、43、46、49、52、55、58、61、65、68
3#块解码线程解码过的图像块和达到的位置:13、14、15、16、17、18、25、28、30、32、36、34、38、44、47、50、53、56、59、62、66、69
25)图5Y中,各线程继续执行各自的工作。
环状缓冲区:
环状缓冲区中可解码图像块数量(A值):0
图像块熵解码完成领先数量(B值):0
当前计算资源的使用率(C值):95%
块解码线程数量(D值):3
熵解码线程解码到达的位置:72
1#块解码线程解码过的图像块和达到的位置:1、2、3、4、5、6、19、20、21、22、23、24、37、40、41、45、48、51、54、57、60、63、64、67、70
2#块解码线程解码过的图像块和达到的位置:7、8、9、10、11、12、26、27、29、31、33、35、39、42、43、46、49、52、55、58、61、65、68、71
3#块解码线程解码过的图像块和达到的位置:13、14、15、16、17、18、25、28、30、32、36、34、38、44、47、50、53、56、59、62、66、69、72
以上参考图5A到图5Y描述了帧内解码块和帧间解码块的熵解码和在后解码(本文中也称之为“块解码”,以及在不引起混淆的情况下,有时也称之为“解码”)操作的过程示意图。此仅为示例,而非用于限制本发明。
前面以CABAC熵解码作为熵解码技术的示例,不过本发明并不局限于此,在编码器侧的熵编码采用了其他技术的情况下,解码器侧相应地应采用对应的熵解码技术。
前面示例中,环状缓冲器长度为6,不过这仅为示例,视情况和需要,环状缓冲器的长度可以更长或者更短。
根据本发明的另一方面,提供了一种针对采用了熵编码技术编码的码流进行的、宏块级别的并行解码装置,对于一个宏块的解码操作包括熵解码操作和除了熵解码操作外的在后解码操作,并行解码装置可以包括:码流接收单元,接收来自编码器侧的码流,该码流是采用了熵编码技术熵编码的;熵解码单元,利用单独的熵解码线程对所接收的码流中的宏块进行熵解码;可解码宏块界定单元,至少部分基于熵解码的结果、帧内宏块和帧间宏块之间的依赖关系、当前能够利用的存储资源和计算资源,界定能够彼此并行进行在后解码操作的宏块;以及在后解码操作执行单元,利用并行的块解码线程,彼此并行地对所界定的宏块进行在后解码操作。
根据本发明的再一方面,提供了一种针对采用了熵编码技术编码的码流进行宏块级别的并行解码的计算装置,对于一个宏块的解码操作包括熵解码操作和除了熵解码操作外的在后解码操作,所述计算装置包括存储器和处理器,存储器中存储有计算机可执行指令集合,当处理器执行所述计算机可执行指令集合时,执行下述操作:接收来自编码器侧的码流,该码流是采用了熵编码技术熵编码的;利用单独的熵解码线程对所接收的码流中的宏块进行熵解码;至少部分基于熵解码的结果、帧内宏块和帧间宏块之间的依赖关系、当前能够利用的存储资源和计算资源,界定能够彼此并行进行在后解码操作的宏块;以及利用并行的块解码线程,彼此并行地对所界定的宏块进行在后解码操作。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。因此,本发明的保护范围应该以权利要求的保护范围为准。

Claims (10)

1.一种计算机执行的、针对采用了CABAC熵编码技术编码的码流进行的、宏块级别的并行解码方法,对于一个宏块的解码操作包括熵解码操作和除了熵解码操作外的在后解码操作,其中包括:
接收来自编码器侧的码流,该码流是采用了CABAC熵编码技术熵编码的;
利用单独的CABAC熵解码线程对所接收的码流中的宏块进行CABAC熵解码;
至少部分基于CABAC熵解码的结果、帧内宏块和帧间宏块之间的依赖关系、当前能够利用的存储资源和计算资源,界定能够彼此并行进行在后解码操作的宏块;以及
利用并行的块解码线程,彼此并行地对所界定的宏块进行在后解码操作。
2.根据权利要求1的并行解码方法,还包括:
利用环状缓冲区来存储宏块进行在后解码操作所需要的上下文内容数据集,缓冲区的存储单位为每个宏块进行在后解码操作所需要的上下文内容数据集,缓冲区的长度大于图像水平方向所包含的编码块的数目,缓冲区中的每个数据集具有可填充标记和可解码标记,可填充标记标识该数据集是否可以被覆盖,可解码标记标识该元素是否有足够的数据进行对应区域的解码工作,具体图像块可解码指的是能够对该具体图像块进行在后解码操作。
3.根据权利要求1或2的并行解码方法,所界定的能够彼此并行进行在后解码操作的宏块包括在不同帧中的宏块。
4.根据权利要求1或2的并行解码方法,所述界定能够彼此并行进行在后解码操作的宏块在以下两种情况下被触发执行:
在CABAC熵解码线程中具体图像块的CABAC熵解码完成后,确定该具体图像块是否可以进行在后解码操作,如果确定可以,则将该具体图像块加入能够彼此并行进行在后解码操作的宏块的集合中;
在具体图像块的在后解码操作完成后,确定与该具体图像块相关的图像块中是否有新的可进行在后解码操作的图像块出现,如果有,则将出现的新的可进行在后解码操作的图像块加入能够彼此并行进行在后解码操作的宏块的集合中。
5.根据权利要求2的的并行解码方法,还包括:
利用并行化调度模块,基于环状缓冲区中可进行在后解码操作的图像块的数量A、图像块熵解码完成领先数量B、当前计算资源的使用率C、当前的并行的块解码线程的数量D,对熵解码线程和并行的块解码线程进行调度。
6.根据权利要求5的并行解码方法,所述对熵解码线程和并行的块解码线程进行调度包括下述项目中的至少一个:
暂停熵解码线程、重启熵解码线程、增加并行的块解码线程、减少并行的块解码线程。
7.根据权利要求5或6的并行解码方法,并行化调度模块在每次块解码线程准备开始寻找一个可解码图像块进行解码时进行调度。
8.根据权利要求7的并行解码方法,所述并行化调度模块根据下述规则中的至少一个进行调度:
熵解码线程处于运行状态时,当图像块熵解码完成领先数量等于预定的最大值时,熵解码线程暂停;
熵解码线程处于暂停状态时,并且图像块熵解码完成领先数量小于预定最大值的预定百分比时,熵解码线程重启;
如果环状缓冲区中可进行在后解码操作的图像块的数量A大于等于2,且当前计算资源的使用率C不大于第一预定阈值,则增加一个块解码线程;
如果当前的并行的块解码线程的数量D大于1、当前计算资源的使用率C大于第二预定阈值、图像块熵解码完成领先数量B小于预定的最大值,则减少一个块解码线程。
9.一种针对采用了熵编码技术编码的码流进行的、宏块级别的并行解码装置,对于一个宏块的解码操作包括熵解码操作和除了熵解码操作外的在后解码操作,并行解码装置包括:
码流接收单元,接收来自编码器侧的码流,该码流是采用了熵编码技术熵编码的;
熵解码单元,利用单独的熵解码线程对所接收的码流中的宏块进行熵解码;
可解码宏块界定单元,至少部分基于熵解码的结果、帧内宏块和帧间宏块之间的依赖关系、当前能够利用的存储资源和计算资源,界定能够彼此并行进行在后解码操作的宏块;以及
在后解码操作执行单元,利用并行的块解码线程,彼此并行地对所界定的宏块进行在后解码操作。
10.一种针对采用了熵编码技术编码的码流进行宏块级别的并行解码的计算装置,对于一个宏块的解码操作包括熵解码操作和除了熵解码操作外的在后解码操作,所述计算装置包括存储器和处理器,存储器中存储有计算机可执行指令集合,当处理器执行所述计算机可执行指令集合时,执行下述操作:
接收来自编码器侧的码流,该码流是采用了熵编码技术熵编码的;
利用单独的熵解码线程对所接收的码流中的宏块进行熵解码;
至少部分基于熵解码的结果、帧内宏块和帧间宏块之间的依赖关系、当前能够利用的存储资源和计算资源,界定能够彼此并行进行在后解码操作的宏块;以及
利用并行的块解码线程,彼此并行地对所界定的宏块进行在后解码操作。
CN201510955169.7A 2015-12-17 2015-12-17 并行解码方法和并行解码装置 Active CN105592314B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510955169.7A CN105592314B (zh) 2015-12-17 2015-12-17 并行解码方法和并行解码装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510955169.7A CN105592314B (zh) 2015-12-17 2015-12-17 并行解码方法和并行解码装置

Publications (2)

Publication Number Publication Date
CN105592314A CN105592314A (zh) 2016-05-18
CN105592314B true CN105592314B (zh) 2018-07-10

Family

ID=55931486

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510955169.7A Active CN105592314B (zh) 2015-12-17 2015-12-17 并行解码方法和并行解码装置

Country Status (1)

Country Link
CN (1) CN105592314B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106095536B (zh) * 2016-06-22 2019-06-11 福建联迪商用设备有限公司 基于多核mpu的多线程解码方法及系统
CN108415922B (zh) * 2017-09-30 2021-10-22 平安科技(深圳)有限公司 数据库修改方法及应用服务器
CN107786890A (zh) * 2017-10-30 2018-03-09 深圳Tcl数字技术有限公司 视频切换方法、装置及存储介质
CN109040653B (zh) * 2018-06-28 2020-09-29 苏州科达科技股份有限公司 数据加解密开销确定方法、装置及电子设备
CN108897876A (zh) * 2018-06-29 2018-11-27 中科鼎富(北京)科技发展有限公司 一种数据接入方法及装置
CN113259675B (zh) * 2021-05-06 2021-10-01 北京中科大洋科技发展股份有限公司 一种超高清晰度视频图像并行处理方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102098503A (zh) * 2009-12-14 2011-06-15 中兴通讯股份有限公司 一种多核处理器并行解码图像的方法和装置
EP2381686A1 (en) * 2010-04-23 2011-10-26 Certicom Corp. Apparatus for parallel entropy encoding and decoding
CN104067619A (zh) * 2012-01-20 2014-09-24 富士通株式会社 视频解码器、视频编码器、视频解码方法以及视频编码方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102098503A (zh) * 2009-12-14 2011-06-15 中兴通讯股份有限公司 一种多核处理器并行解码图像的方法和装置
EP2381686A1 (en) * 2010-04-23 2011-10-26 Certicom Corp. Apparatus for parallel entropy encoding and decoding
CN104067619A (zh) * 2012-01-20 2014-09-24 富士通株式会社 视频解码器、视频编码器、视频解码方法以及视频编码方法

Also Published As

Publication number Publication date
CN105592314A (zh) 2016-05-18

Similar Documents

Publication Publication Date Title
CN105592314B (zh) 并行解码方法和并行解码装置
CN105992008B (zh) 一种在多核处理器平台上的多层次多任务并行解码方法
US8705616B2 (en) Parallel multiple bitrate video encoding to reduce latency and dependences between groups of pictures
KR102144881B1 (ko) 비디오 처리를 위한 송신 장치 및 방법
US8855191B2 (en) Parallelization of high-performance video encoding on a single-chip multiprocessor
CN106454354B (zh) 一种avs2并行编码处理系统及方法
CN105491377A (zh) 一种计算复杂度感知的视频解码宏块级并行调度方法
CN104539972A (zh) 一种多核处理器中视频并行解码的控制方法和装置
CN103188521A (zh) 转码分配方法及装置,转码方法及设备
JPWO2010095358A1 (ja) タスク割当装置、タスク割当方法、及び、タスク割当プログラム
CN109495743A (zh) 一种基于异构多处理平台的并行化视频编码方法
Nogues et al. A DVFS based HEVC decoder for energy-efficient software implementation on embedded processors
Zhang et al. Implementation and improvement of wavefront parallel processing for HEVC encoding on many-core platform
US20090092184A1 (en) Power saving decoder architecture
CN109391816B (zh) 基于cpu+gpu异构平台实现hevc中熵编码环节的并行处理方法
Gudumasu et al. Software-based versatile video coding decoder parallelization
Pal et al. Dynamic core allocation for energy efficient video decoding in homogeneous and heterogeneous multicore architectures
KR101050188B1 (ko) 멀티프로세서를 이용한 동영상 디코딩 장치 및 그 장치에서의 동영상 디코딩 방법
CN116993572A (zh) 图像处理方法、装置、电子设备及存储介质
CN111093078A (zh) 视频解码方法及装置、存储介质、终端
Mastronarde et al. A queuing-theoretic approach to task scheduling and processor selection for video-decoding applications
Pang et al. A framework for heuristic scheduling for parallel processing on multicore architecture: A case study with multiview video coding
Radicke et al. Many-core HEVC encoding based on wavefront parallel processing and GPU-accelerated motion estimation
Liu et al. Fine-grained task-level parallel and low power h. 264 decoding in multi-core systems
Pal et al. Energy efficient dynamic core allocation for video decoding in embedded multicore architectures

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant