CN107197296A - 一种基于COStream的HEVC并行编码方法和*** - Google Patents

一种基于COStream的HEVC并行编码方法和*** Download PDF

Info

Publication number
CN107197296A
CN107197296A CN201710477885.8A CN201710477885A CN107197296A CN 107197296 A CN107197296 A CN 107197296A CN 201710477885 A CN201710477885 A CN 201710477885A CN 107197296 A CN107197296 A CN 107197296A
Authority
CN
China
Prior art keywords
image sets
ctu
parallel
entropy code
costream
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
Application number
CN201710477885.8A
Other languages
English (en)
Other versions
CN107197296B (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.)
Huazhong University of Science and Technology
Original Assignee
Huazhong University of Science and Technology
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 Huazhong University of Science and Technology filed Critical Huazhong University of Science and Technology
Priority to CN201710477885.8A priority Critical patent/CN107197296B/zh
Publication of CN107197296A publication Critical patent/CN107197296A/zh
Application granted granted Critical
Publication of CN107197296B publication Critical patent/CN107197296B/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/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
    • 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/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding

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

本发明公开了一种基于COStream的HEVC并行编码方法和***,其中方法的实现包括:将视频序列划分成若干图像组,通过在COStream中调用C++封装的函数进行图像组并行编码;按照HEVC标准将图像组中每一帧图像划分为若干个CTU,使用COStream的splitjoin结构进行图像并行编码;每个CTU包含若干个语法元素,每个语法元素对应一个熵编码函数,每个语法元素利用COStream的pipeline调用每个语法元素的熵编码函数,得到熵编码流水线,使用熵编码流水线对语法元素进行并行熵编码;得到压缩后的视频。本发明解决了互联网环境下海量多媒体视频数据快速编码的需求,减少了视频数据的压缩时间,为视频服务提供商快速响应客户请求提供了便利,同时减少用户请求视频服务的时间,提高了效率。

Description

一种基于COStream的HEVC并行编码方法和***
技术领域
本发明属于计算机应用技术领域,更具体地,涉及一种基于COStream的HEVC并行编码方法和***。
背景技术
随着互联网的普及和手持设备的广泛应用,互联网上的数据呈现出***性的增长,其中视频和图像等多媒体数据占了很大比例。这些海量的多媒体数据对存储和网络传输都提出了很高的要求,单纯的靠增加存储设备和提高网络带宽来满足日益增长的多媒体数据是不现实的,必须依靠别的方法来解决这个问题。
传统的编程语言如C++和Java等都是上个世纪八九十年代提出的以单指令流为特征的编程语言,它们不能很好应用于当前的普遍存在的多核架构。为了利用多核的计算资源,pthread、MPI、OpenMP等并行框架被提出,但是它们的学习成本高、用户接口不友好,对程序员的要求非常高。
视频编解码领域最新的编码标准是HEVC,它的编码框架和H.264类似,仍然采用基于像素块的混合编码框架。为了应对当前互联网环境下视频数据量大、视频分辨率高的特点,HEVC提出了一系列新的编码技术。虽然在在HEVC视频编码的优化处理方面国内外学者已经进行了大量的研究,但是在当前互联网多媒体数据***增长的情况下,HEVC视频编码仍然面临下面几个问题:没有解决互联网环境下海量多媒体视频数据快速编码的需求,视频数据的压缩时间较长,用户请求视频服务的时间较长,效率较低。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于COStream的HEVC并行编码方法和***,由此解决现有技术没有解决互联网环境下海量多媒体视频数据快速编码的需求,视频数据的压缩时间较长,用户请求视频服务的时间较长,效率较低的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种基于COStream的HEVC并行编码方法,包括:
(1)图像组并行编码:将视频序列划分成若干图像组,得到每个图像组的信息,将每个图像组的信息输入对应的图像组编码器,通过在COStream中调用C++封装的函数进行并行编码;
(2)图像并行编码:按照HEVC标准将图像组中每一帧图像划分为若干个CTU,收集CTU行的信息,将每行CTU行的信息输入一个波前并行编码器,使用COStream的splitjoin结构进行并行编码;
(3)语法元素并行熵编码:每个CTU包含若干个语法元素,每个语法元素对应一个熵编码函数,每个语法元素利用COStream的pipeline调用每个语法元素的熵编码函数,得到熵编码流水线,使用熵编码流水线对语法元素进行并行熵编码;
(4)压缩视频序列:对视频序列进行图像组并行编码、图像并行编码和语法元素并行熵编码后,得到压缩后的视频。
进一步的,步骤(1)包括:
(1-1)将视频序列划分成若干图像组,得到每个图像组的信息,所述图像组的信息包括图像组的ID、图像组中图像的数量、图像组中每一帧图像的大小、图像组的起始帧和结束帧;
(1-2)将每个图像组的信息输入对应的图像组编码器,当图像组为开放式图像组时,对应的图像组编码器在编码的时候周期性的***IDR帧;
(1-3)在图像组编码器中,通过在COStream中调用C++封装的函数进行并行编码。
进一步的,步骤(2)包括:
(2-1)按照HEVC标准将图像组中每一帧图像划分为若干个CTU,收集CTU行的信息,所述CTU行的信息包括CTU行的索引、CTU行的行数和CTU行中CTU的个数;
(2-2)将每行CTU行的信息输入一个波前并行编码器,使用COStream的splitjoin结构进行并行编码;除了第一行CTU行之外,其余的CTU行均要进行等待,直到收到上一个CTU行的通知,才能继续执行;当前的波前编码器每编码完成一个CTU就向下一个CTU行发送通知。
进一步的,步骤(3)包括:
(3-1)每个CTU包含若干个语法元素,语法元素转换成二进制比特串后进行算术编码,每个语法元素对应一个上下文概率模型,熵编码函数使用算术编码和上下文概率模型;
(3-2)每个语法元素利用COStream的pipeline调用每个语法元素的熵编码函数,得到熵编码流水线,使用熵编码流水线对语法元素进行并行熵编码。
按照本发明的另一方面,提供了一种基于COStream的HEVC并行编码***,包括:
图像组并行编码模块,用于将视频序列划分成若干图像组,得到每个图像组的信息,将每个图像组的信息输入对应的图像组编码器,通过在COStream中调用C++封装的函数进行并行编码;
图像并行编码模块,用于按照HEVC标准将图像组中每一帧图像划分为若干个CTU,收集CTU行的信息,将每行CTU行的信息输入一个波前并行编码器,使用COStream的splitjoin结构进行并行编码;
语法元素并行熵编码模块,用于每个CTU包含若干个语法元素,每个语法元素对应一个熵编码函数,每个语法元素利用COStream的pipeline调用每个语法元素的熵编码函数,得到熵编码流水线,使用熵编码流水线对语法元素进行并行熵编码;
压缩视频序列模块,用于对视频序列进行图像组并行编码、图像并行编码和语法元素并行熵编码后,得到压缩后的视频。
进一步的,图像组并行编码模块包括:
第一子模块,用于将视频序列划分成若干图像组,得到每个图像组的信息,所述图像组的信息包括图像组的ID、图像组中图像的数量、图像组中每一帧图像的大小、图像组的起始帧和结束帧;
第二子模块,用于将每个图像组的信息输入对应的图像组编码器,当图像组为开放式图像组时,对应的图像组编码器在编码的时候周期性的***IDR帧;
第三子模块,用于在图像组编码器中,通过在COStream中调用C++封装的函数进行并行编码。
进一步的,图像并行编码模块包括:
CTU行的信息子模块,用于按照HEVC标准将图像组中每一帧图像划分为若干个CTU,收集CTU行的信息,所述CTU行的信息包括CTU行的索引、CTU行的行数和CTU行中CTU的个数;
图像并行编码子模块,用于将每行CTU行的信息输入一个波前并行编码器,使用COStream的splitjoin结构进行并行编码;除了第一行CTU行之外,其余的CTU行均要进行等待,直到收到上一个CTU行的通知,才能继续执行;当前的波前编码器每编码完成一个CTU就向下一个CTU行发送通知。
进一步的,语法元素并行熵编码模块包括:
熵编码函数子模块,用于每个CTU包含若干个语法元素,语法元素转换成二进制比特串后进行算术编码,每个语法元素对应一个上下文概率模型,熵编码函数使用算术编码和上下文概率模型;
并行熵编码子模块,用于每个语法元素利用COStream的pipeline调用每个语法元素的熵编码函数,得到熵编码流水线,使用熵编码流水线对语法元素进行并行熵编码。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:
(1)本发明利用图像组可以并行化处理的特点,对图像组进行并行编码,加快编码速度,利用图像中CTU行可以并行处理的特点,对CTU行进行并行编码,加快编码速度,利用CTU的语法元素可以进行流水线处理的特点,实现熵编码并行处理,加快编码速度,结合各个层次的并行编码特性,实现HEVC并行编码,加快编码速度。减少了HEVC的编码时间,解决了互联网环境下海量多媒体视频数据快速编码的需求,减少了视频数据的压缩时间,为视频服务提供商快速响应客户请求提供了便利,同时减少用户请求视频服务的时间,提高了效率。
(2)优选的,在开放式图像组中,一个图像组内的帧可以参考前面一个图像组中的帧,对于开放式图像组来说,图像组之间存在数据依赖关系。在这种类型的图像组中,只有第一个图像组的第一个帧是IDR帧。由于视频编码是一种有损编码,因此,编码的过程中难免会引入错误,由于帧间预测的原因,错误引入之后会不断的扩散,为了避免这种情况的发生,编码器在编码的时候会周期性的***IDR帧,IDR帧会使编码器清空参考帧列表,可以避免编码错误的持续扩散。
附图说明
图1是本发明实施例提供的一种基于COStream的HEVC并行编码方法的流程图;
图2是本发明实施例1提供的基于COStream的HEVC并行编码方法的总体设计框图;
图3是本发明实施例1提供的图像组并行编码的流程图;
图4是本发明实施例1提供的单幅图像编码的流程图;
图5是本发明实施例1提供的波前并行编码示意图;
图6是本发明实施例1提供的波前并行编码框架的流程图;
图7是本发明实施例1提供的波前并行编码细节的流程图;
图8是本发明实施例1提供的熵编码流水线示意图;
图9是本发明实施例1提供的熵编码并行处理流程图;
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
如图1所示,一种基于COStream的HEVC并行编码方法,包括:
(1)图像组并行编码:将视频序列划分成若干图像组,得到每个图像组的信息,将每个图像组的信息输入对应的图像组编码器,通过在COStream中调用C++封装的函数进行并行编码;
(2)图像并行编码:按照HEVC标准将图像组中每一帧图像划分为若干个CTU,收集CTU行的信息,将每行CTU行的信息输入一个波前并行编码器,使用COStream的splitjoin结构进行并行编码;
(3)语法元素并行熵编码:每个CTU包含若干个语法元素,每个语法元素对应一个熵编码函数,每个语法元素利用COStream的pipeline调用每个语法元素的熵编码函数,得到熵编码流水线,使用熵编码流水线对语法元素进行并行熵编码;
(4)压缩视频序列:对视频序列进行图像组并行编码、图像并行编码和语法元素并行熵编码后,得到压缩后的视频。
实施例1
如图2所示,HEVC并行编码由图像组并行编码、波前并行编码、熵编码并行处理构成,原始的视频序列经过HEVC并行编码之后,生成比特流文件,完成编码。
(1)划分图像组,进行图像组并行编码
图像组是HEVC中粒度最粗的处理单位,图像组分为两种类型,一种是闭合式图像组,另一种是开放式图像组。对于闭合式图像组来说,一个图像组中的帧不会参考另一个图像组中的帧,图像组之间相互独立,没有数据依赖关系,帧与帧之间的参考关系只存在于图像组的内部。开放式图像组和闭合式图像组不同,在开放式图像组中,一个图像组内的帧可以参考前面一个图像组中的帧,对于开放式图像组来说,图像组之间存在数据依赖关系。在这种类型的图像组中,只有第一个图像组的第一个帧是IDR帧。由于视频编码是一种有损编码,因此,编码的过程中难免会引入错误,由于帧间预测的原因,错误引入之后会不断的扩散,为了避免这种情况的发生,图像组编码器在编码的时候会周期性的***IDR帧,IDR帧会使编码器清空参考帧列表,可以避免编码错误的持续扩散。IDR帧的间距是图像组大小的整数倍,而且必须大于等于图像组的大小。如图3所示该步骤包括两个子步骤:
(1-1)预处理阶段:主要的功能是解析输入的参数,对图像组编码器进行整体的配置。设置图像组的ID、图像组中图像的数量、计算每一帧的大小、计算图像组的起始帧和结束帧等。初始化完成之后,需要图像组的信息分配到各个不同的图像组编码器中,图像组编码器获得图像组的信息之后,对其进行解析,然后读取图像组,然后依次对图像组进行编码。
(1-2)并行处理阶段:预处理阶段完成之后,进入并行处理阶段。并行处理阶段使用COStream与C++混合实现,splitjoin是COStream语言中的一个数据流处理结构,主要用于处理数据级的并行任务。整个并行框架使用COStream搭建,内部具体的编码步骤使用C++实现,并封装成函数,提供给COStream进行调用。并行处理阶段包含三个步骤:输入处理、并行处理以及输出处理。
(1-2-1)输入处理:输入处理模块的主要功能是根据图像组的信息读取图像组,然后把图像组放入队列中,由于输入模块和多个图像组编码器都需要对图像组队列进行操作,因此需要互斥锁对输入队列进行保护,在读取数据之前需要对输入锁进行加锁操作,读取完毕之后释放输入锁。在每次读取完毕一个图像组就激活一个图像组编码器,让图像组编码器进行处理。
(1-2-2)并行处理:并行操作模块是图像组并行化处理的核心模块,它由N个图像组编码器构成,N是并行度,取决于开发者的设置,理论上并行度越高加速比越高,但是具体实现时需要考虑处理平台的环境,因为CPU的数量以及内存是有限制的。每个图像组编码器用一个GOPEncoder节点来表示。在编码一个图像组之前,先对输入锁进行加锁操作,等待图像组就绪,如果输入模块已经读取图像组,那么将会释放输入锁,表示图像组已经就绪,那么继续执行,图像组编码器从队列中取出一个图像组进行处理。在实现的时候,不会先将图像组读取出来之后再传给GOPEncoder,因为图像组数据量非常大,传输的过程中涉及了图像组的复制和移动,会产生巨大的开销。因此数据流中的数据不是图像组,而是一个个的图像组的信息。GOPEncoder得到图像组之后遍历图像组,对图像组中的每一个图像进行编码,这部分主要通过在COStream中调用C++封装的函数进行实现,具体的编码操作如图4所示。
(1-2-2)输出处理:对一个图像组编码完成之后,产生比特流,由于在COStream中,图像组是被并行处理的,多个图像组编码器同时运行,因此比特流的产生的随机的,为了避免多个同时写造成脏数据,在写入比特流文件之前需要对输出锁加锁,然后把比特流写入文件中,写完之后释放输出锁。
(2)划分CTU行,实现波前并行编码
CTU是为了更加适应图像纹理特征的变化,以取得更好的编码效果而提出的一种新的编码结构。一个CTU包含一个亮度编码树块(Coding Tree Block,CTB)和两个色度编码树块。CTU常见的大小是64×64。CTU可以按照四叉树的形式继续划分成为编码单元(CodingUnit,CU),每一个CU包含一个亮度编码块(Coding Block,CB)和两个色度编码块,CU还可以可以继续向下划分为子CU,因此CU的大小可以从8×8到64×64。CTU的这种灵活的划分方式增加了计算的复杂度。为了加快对CTU的处理速度,HEVC提出了波前并行编码,它可以同时处理多个CTU行,实现对CTU行的并行编码。波前并行编码如图5所示。除了第一个CTU行之外,其余的每一个CTU行都要比上一个CTU行落后两个CTU的进度,这是因为HEVC中存在帧内预测,CTU需要参考它正上方和右上方的CTU才能进行帧内预测,因此每个CTU行都要落后上一个CTU行两个CTU的进度。波前并行编码的流程如图6所示,包含了两大步骤。
(2-1)初始化
初始化模块的主要功能是初始化编码器上下文,定义存放CTU行的信息的结构体,计算CTU行的数量,初始化相关的结构体等,这部分使用C++实现。
(2-1-1)定义CTURow数据结构:为了能够对CTU行进行并行化处理,首先定义结构体存储与CTU行有关的信息,使用CTURow来表示每一个CTU,它包含下面信息:row_index表示CTU行是图像的第几行,指明了当前要处理的CTU在图像中的横坐标,current_col表示当前准备要处理CTU的列号,指明了当前要处理的CTU在图像中的纵坐标,由于图像可以由多个CTU构成,如果把整个图像可看作CTU的二维数组,通过row_index和current_col可以唯一确定CTU在图像中的位置;is_active表示当前的CTU行是否活跃,如果当前的CTURow在等待上一个CTURow的通知,那么它等于false,否则等于true;semaphore是用于事件通知的的信号量,在处理一个CTU之前需要需要等待上一个CTURow的通知信号,如果没有收到,就那么进入阻塞状态直到收到通知事件才继续执行;entropy是熵编码对象,用于熵编码操作,为了能够让CTU行并行处理,必须要让有上下文依赖的熵编码操作在CTU行之间相互独立,因此,每一个CTU行都配备一个熵编码器;entropy_buffer用于是熵编码对象的备份,让每个CTU行都拥有一个熵编码器虽然可以上CTU行之间的熵编码操作相互独立,但是也导致了熵编码操作不能够充分利用已有的上下文统计信息,为了能够充分利用已有的上下文统计信息,每个CTU行在开始之前需要复制上一个CTU行的熵编码上下文,entropy_buffer的作用是每编码完成一个CTU之后保存熵编码上下文,以方便后面CTU行的使用。
(2-1-2)计算CTU行的数量:根据帧的高度和CTU的大小计算CTU行的数量,CTURowNum=PictHeight÷CTUHeight。
(2-1-3)初始化每一个CTU行对应的CTURow对象:row_index初始化为当前CTU行的行编号;current_col初始化为0;除了第一个CTU行之外其余的is_active初始化为false;对于第一个CTU行,semaphore初始化为有信号的状态,其他的CTU行对应的semaphore初始化为无信号状态。
(2-2)并行化处理:并行处理模块使用COStream的splitjoin结构进行实现,splitjoin数据流结构专门用于数据级并行的处理,它的每一个节点都是一个波前并行编码器WPPEncoder,节点的个数表示了并行度。WPPEncoder处理的单位是CTU行,它遍历CTU行中的每一个CTU,对每个CTU进行完整的编码操作,直到所有的CTU处理完毕。由于多个WPPEncoder之间可以并行执行,因此实现了CTU行的并行化处理,WPPEncoder的并行度N由可以根据需要进行配置。每个WPPEncoder的对CTU行的处理如图7所示。
(2-2-1)启动WPPEncoder:根据前面对CTURow的设置,除了第一个WPPEncoder之外,其他的WPPEncoder都被阻塞等待,因为除了第一个CTURow之外,其他的CTURow的信号量都是无信号状态的。
(2-2-2)等待通知事件:除了第一行CTU,其他的每一行CTU在处理一个CTU之前,上一个CTU行的处理进度必须比当前CTU行多两个CTU。如果把图像看成CTU的二维数组,frame[x][y]表示第x行第y列的CTU,那么frame[x][y]处理之前必须要等待frame[x-1][y+2]处理完成,否则不能处理。通过信号量可以实现事件的通知,但是COStream没有信号量的支持,因此需要使用C++实现对信号量操作的封装,提供接口给COStream调用,COStream支持与C++的混合编程。如果WPPEncoder收到了信号的通知,那么继续向下执行。
(2-2-3)复制上一个CTU行的熵编码上下文:复制熵编码上下文的目的是为了有效的利用已存在的上下文概率信息。只需要在CTU行开始之前复制一次,后面对该CTU行的所有熵编码操作都基于这个熵编码上下文,不再需要复制。
(2-2-4)CTU编码:这个步骤包含了完整的预测、变换、量化、熵编码等操作。这部分直接调用C++函数实现。
(2-2-5)统计当前CTU行中已经处理完成的CTU的个数:统计已经处理完的CTU的个数的原因是为了计算下一行CTU和当前CTU行之间的处理“间距”,即当前行比下一行多处理的CTU的个数,用来决定是否对下一行的CTU发出事件通知。
(2-2-6)判断是否需要发出事件通知:计算当前CTU行已完成的CTU的个数与下一个CTU行已完成的CTU的个数之差,如果差值大于等于2,那么就对下一行CTU发出事件通知,告诉下一行可以继续处理CTU了。由于图像各个部分的纹理的复杂程度不同,CTU行之间的处理进度会出现不一致的情况,为了满足帧内预测数据依赖的要求,有必要判断是否已经满足指定的条件,如果满足就发送事件通知,否则不发送。另外,如果经过判断可以发送事件通知,需要将下一个CTURow的is_active字段设置为true,表示下一个CTU行处于活跃状态。
(2-2-7)设置当前CTU行的状态:计算上一个CTU行已完成的CTU的个数与当前CTU行已完成的CTU的个数的差值,如果差值小于2,那么表示当前CTU行的下一个CTU即将不满足帧内预测的数据依赖关系,需要设置当前CTURow的is_active为false,表示当前CTU行将进入阻塞状态。
(2-2-8)判断当前CTU行是否已经处理完成:如果已经处理完成那么退出WPPEncoder编码器,否则继续循环执行。
(3)构造熵编码流水线,实现熵编码并行处理
HEVC中主要使用上下文自适应的二进制算术编码(Context-based AdaptiveBinary Arithmetic Coding,CABAC)作为熵编码算法。CABAC基于算术编码实现的,除了参数集与slice头部信息之外,其余的语法元素和变换系数的熵编码都使用CABAC来处理。它利用算术编码和上下文概率模型进行结合,给出了一个高效的熵编码方法。上下文概率模型是经过精心设计的,符号的概率通过查表得到,对符号编码完成之后需要对概率模型进行更新,因此,当前符号的概率依赖于前面熵编码的结果。CABAC充分利用了符号的统计特性和上下文结果。
CABAC是上下文依赖的,进行算术编码的时候,符号的概率来自于上下文模型,编码完一个符号需要更新上下文模型,因此,CABAC存在数据依赖关系。CABAC的上下文模型与语法元素相关,一个语法元素对应一个上下文概率模型,上下文模型初始化完成之后,就对CTU中所有的语法元素进行处理,直到slice中所有的CTU都处理完毕,然后在下一个slice的起始位置对熵编码器进行重置,重置的主要作用是重新构建并初始化上下文概率模型。对一个slice进行熵编码时,需要按照顺序编码slice内所有的CTU,对于单个CTU,它内部的语法元素也需要按照顺序进行编码,因此,对于slice内部而言不存在数据级的并行特性。根据对上下文概率模型的特点进行分析,发现在同一个slice中,上下文概率模型的更新以语法元素为基础,相同的语法元素使用同一个上下文模,不同的语法元素使用不同的上下文概率模型,也就是说,对于不同语法元素,它们的上下文概率模型是独立,在CTU不同的前提下,不同的语法元素可以同时进行编码。因此,CTU的熵编码虽然没有数据级的并行特性,但是拥有任务级的并行特性,任务级的并行特性也叫流水线。把CTU的熵编码流程按照语法元素的编码顺序分成多个步骤,形成一条流水线,每一个步骤对应于流水线的一个阶段,通过流水线的方式实现可以对熵编码的并行化处理。Slice的熵编码流水线如图8所示,CTU按照语法元素的编码顺序执行完所有的编码流程,不同的CTU可以同时进行处理,以CTU1和CTU2为例,CTU1的skip_flag和CTU2的split_flag可以同时进行编码,因为这两个语法元素的上下文概率模型相互独立,没有数据依赖,而且不在同一个CTU内,所以可以同时编码。熵编码并行处理的流程如图9所示。
(3-1)预处理模块:通过定义一个递归函数处理TU,使用TUInfo对象来记录当前TU的信息,判断TU是否会继续向下按照四叉树的方式划分为子TU,如果当前TU继续向下划分,那么表示当前TU不需要编码变换系数以及其他和变换系数相关的语法元素,TUInfo的is_split设置为true,如果TU不再继续向下进行划分,那么需要编码包括变换系数在内的所有语法元素,TUInfo的is_split字段设置为false,然后记录当前TU在CTU中的相对索引以及在CTU中的深度,然后把它添加到队列中,队列直接使用C++标准模版库中的双向队列。由于TUInfo在队列中的顺序就是TU被编码的顺序,因此熵编码模块对TUInfo的顺序处理和递归方式下处理TU的顺序相同,不会造成混乱。
(3-2)熵编码并行化模块:COStream的pipeline数据流结构专门用于处理流水线,支持任务级的并行。把TU中的每一个语法元素的编码当作流水线的一个阶段,把每一个语法的编码操作封装成pipeline中的计算节点actor,TU每经过一个计算节点就编码一个语法元素,当TU通过pipeline之后,对该TU的熵编码就完成了。一个TUInfo队列包含多个TUInfo的对象,每个对象代表一个TU,对于任意一个TUInfo对象,pipeline中的计算节点都要判断is_split属性的值,如果是true,表示该TUInfo代表的TU会继续向下划分成为子TU,那么只需要编码split_flag语法元素,其他的语法元素包括变换系数不需要进行编码,如果is_split是false,表示TUInfo代表的TU不再继续向下划分,那么需要编码包括split_flag在内的所有的语法元素。在HEVC中各种语法元素的熵编码主要使用CABAC作为实现,主要包含三个步骤:二进制化、上下文建模、二进制算术编码。
(3-2-1)二进制化:CABAC的算术编码处理的对象是二进制的比特串,因此,在算术编码之前需要把HEVC中的语法元素转换成二进制比特串。常见的二进制化方法有:一元码、截断一元码、截断莱斯码、k阶指数哥伦布码、定长码等。各个语法元素的二进制化方法不尽相同,具体的语法元素对应的二进制化方法可以查看HEVC标准文档。
(3-2-2)上下文建模:在HEVC中,语法元素之间是有相关性的,当前符号的概率依赖于前面熵编码的结果,利用前面已经编码的符号的信息可以更加准确的估计当前符号的概率,这些已经编码的信息就被称为上下文。一般来说,符号的概率随着视频的内容而变化。为语法元素选择一个合适的上下文信息就是上下文建模。HEVC的标准文档给出了所有的语法元素的初始上下文,不同的语法元素的上下文一般不同。
(3-2-3)二进制算术编码:语法元素对应的上下文模型初始化完成之后,开始进行二进制算术编码。二进制算术编码是对语法元素对应的二进制比特串进行算术编码。二进制算术编码包含两种方式:旁路方式和常规方式。在旁路编码方式中,二进制串的符号的概率是相同的,也不需要更新上下文概率模型;在常规方式中,二进制串中符号的概率可以由上下文模型中得到,对每一个符号编码完成之后都需要对上下文模型进行更新。使用常规方式还是旁路方式是由语法元素决定的,HEVC文档指明了哪些语法元素使用旁路方式哪些语法元素使用常规方式。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种基于COStream的HEVC并行编码方法,其特征在于,包括:
(1)图像组并行编码:将视频序列划分成若干图像组,得到每个图像组的信息,将每个图像组的信息输入对应的图像组编码器,通过在COStream中调用C++封装的函数进行并行编码;
(2)图像并行编码:按照HEVC标准将图像组中每一帧图像划分为若干个CTU,收集CTU行的信息,将每行CTU行的信息输入一个波前并行编码器,使用COStream的splitjoin结构进行并行编码;
(3)语法元素并行熵编码:每个CTU包含若干个语法元素,每个语法元素对应一个熵编码函数,每个语法元素利用COStream的pipeline调用每个语法元素的熵编码函数,得到熵编码流水线,使用熵编码流水线对语法元素进行并行熵编码;
(4)压缩视频序列:对视频序列进行图像组并行编码、图像并行编码和语法元素并行熵编码后,得到压缩后的视频。
2.根据权利要求1所述的一种基于COStream的HEVC并行编码方法,其特征在于,所述步骤(1)包括:
(1-1)将视频序列划分成若干图像组,得到每个图像组的信息,所述图像组的信息包括图像组的ID、图像组中图像的数量、图像组中每一帧图像的大小、图像组的起始帧和结束帧;
(1-2)将每个图像组的信息输入对应的图像组编码器,当图像组为开放式图像组时,对应的图像组编码器在编码的时候周期性的***IDR帧;
(1-3)在图像组编码器中,通过在COStream中调用C++封装的函数进行并行编码。
3.根据权利要求1所述的一种基于COStream的HEVC并行编码方法,其特征在于,所述步骤(2)包括:
(2-1)按照HEVC标准将图像组中每一帧图像划分为若干个CTU,收集CTU行的信息,所述CTU行的信息包括CTU行的索引、CTU行的行数和CTU行中CTU的个数;
(2-2)将每行CTU行的信息输入一个波前并行编码器,使用COStream的splitjoin结构进行并行编码;除了第一行CTU行之外,其余的CTU行均要进行等待,直到收到上一个CTU行的通知,才能继续执行;当前的波前编码器每编码完成一个CTU就向下一个CTU行发送通知。
4.根据权利要求1所述的基于COStream的HEVC并行编码方法,其特征在于,所述步骤(3)包括:
(3-1)每个CTU包含若干个语法元素,语法元素转换成二进制比特串后进行算术编码,每个语法元素对应一个上下文概率模型,熵编码函数使用算术编码和上下文概率模型;
(3-2)每个语法元素利用COStream的pipeline调用每个语法元素的熵编码函数,得到熵编码流水线,使用熵编码流水线对语法元素进行并行熵编码。
5.一种基于COStream的HEVC并行编码***,其特征在于,包括:
图像组并行编码模块,用于将视频序列划分成若干图像组,得到每个图像组的信息,将每个图像组的信息输入对应的图像组编码器,通过在COStream中调用C++封装的函数进行并行编码;
图像并行编码模块,用于按照HEVC标准将图像组中每一帧图像划分为若干个CTU,收集CTU行的信息,将每行CTU行的信息输入一个波前并行编码器,使用COStream的splitjoin结构进行并行编码;
语法元素并行熵编码模块,用于每个CTU包含若干个语法元素,每个语法元素对应一个熵编码函数,每个语法元素利用COStream的pipeline调用每个语法元素的熵编码函数,得到熵编码流水线,使用熵编码流水线对语法元素进行并行熵编码;
压缩视频序列模块,用于对视频序列进行图像组并行编码、图像并行编码和语法元素并行熵编码后,得到压缩后的视频。
6.根据权利要求5所述的一种基于COStream的HEVC并行编码***,其特征在于,所述图像组并行编码模块包括:
第一子模块,用于将视频序列划分成若干图像组,得到每个图像组的信息,所述图像组的信息包括图像组的ID、图像组中图像的数量、图像组中每一帧图像的大小、图像组的起始帧和结束帧;
第二子模块,用于将每个图像组的信息输入对应的图像组编码器,当图像组为开放式图像组时,对应的图像组编码器在编码的时候周期性的***IDR帧;
第三子模块,用于在图像组编码器中,通过在COStream中调用C++封装的函数进行并行编码。
7.根据权利要求5所述的一种基于COStream的HEVC并行编码***,其特征在于,所述图像并行编码模块包括:
CTU行的信息子模块,用于按照HEVC标准将图像组中每一帧图像划分为若干个CTU,收集CTU行的信息,所述CTU行的信息包括CTU行的索引、CTU行的行数和CTU行中CTU的个数;
图像并行编码子模块,用于将每行CTU行的信息输入一个波前并行编码器,使用COStream的splitjoin结构进行并行编码;除了第一行CTU行之外,其余的CTU行均要进行等待,直到收到上一个CTU行的通知,才能继续执行;当前的波前编码器每编码完成一个CTU就向下一个CTU行发送通知。
8.根据权利要求5所述的基于COStream的HEVC并行编码***,其特征在于,所述语法元素并行熵编码模块包括:
熵编码函数子模块,用于每个CTU包含若干个语法元素,语法元素转换成二进制比特串后进行算术编码,每个语法元素对应一个上下文概率模型,熵编码函数使用算术编码和上下文概率模型;
并行熵编码子模块,用于每个语法元素利用COStream的pipeline调用每个语法元素的熵编码函数,得到熵编码流水线,使用熵编码流水线对语法元素进行并行熵编码。
CN201710477885.8A 2017-06-22 2017-06-22 一种基于COStream的HEVC并行编码方法和*** Active CN107197296B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710477885.8A CN107197296B (zh) 2017-06-22 2017-06-22 一种基于COStream的HEVC并行编码方法和***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710477885.8A CN107197296B (zh) 2017-06-22 2017-06-22 一种基于COStream的HEVC并行编码方法和***

Publications (2)

Publication Number Publication Date
CN107197296A true CN107197296A (zh) 2017-09-22
CN107197296B CN107197296B (zh) 2019-08-13

Family

ID=59879428

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710477885.8A Active CN107197296B (zh) 2017-06-22 2017-06-22 一种基于COStream的HEVC并行编码方法和***

Country Status (1)

Country Link
CN (1) CN107197296B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113196768A (zh) * 2018-12-21 2021-07-30 索尼集团公司 图像处理装置和方法
CN113557731A (zh) * 2019-03-11 2021-10-26 佳能株式会社 用于编码和解码视频样本的块树的方法、设备和***
CN114257839A (zh) * 2020-09-23 2022-03-29 京东方科技集团股份有限公司 视频编码装置及解码装置、播放***及方法
WO2024021772A1 (zh) * 2022-07-29 2024-02-01 腾讯科技(深圳)有限公司 直播流媒体数据处理方法、***、装置和计算机设备

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103974081A (zh) * 2014-05-08 2014-08-06 杭州同尊信息技术有限公司 一种基于多核处理器Tilera的HEVC编码方法
CN104221381A (zh) * 2012-04-11 2014-12-17 高通股份有限公司 用于视频译码的波前并行处理
CN104488267A (zh) * 2012-06-29 2015-04-01 高通股份有限公司 平铺块及波前并行处理
CN104811696A (zh) * 2015-04-17 2015-07-29 北京奇艺世纪科技有限公司 一种视频数据的编码方法和装置
CN104869398A (zh) * 2015-05-21 2015-08-26 大连理工大学 一种基于cpu+gpu异构平台实现hevc中的cabac的并行方法
CN104980764A (zh) * 2014-04-14 2015-10-14 深圳中兴力维技术有限公司 基于复杂度均衡的并行编解码方法、装置及***
CN105516728A (zh) * 2015-12-15 2016-04-20 华中科技大学 一种H.265/HEVC中8x8子宏块的并行帧内预测方法
US20160323586A1 (en) * 2012-09-26 2016-11-03 Sun Patent Trust Image decoding method, image coding method, image decoding apparatus, image coding apparatus, and image coding and decoding apparatus
US20160381365A1 (en) * 2015-06-23 2016-12-29 Magnum Semiconductor, Inc. Apparatuses and methods for performing information extraction and insertion on bitstreams
CN106788467A (zh) * 2016-11-28 2017-05-31 华中科技大学 一种基于CUDA的Raptor Code编码方法、译码方法及***

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104221381A (zh) * 2012-04-11 2014-12-17 高通股份有限公司 用于视频译码的波前并行处理
CN104488267A (zh) * 2012-06-29 2015-04-01 高通股份有限公司 平铺块及波前并行处理
US20160323586A1 (en) * 2012-09-26 2016-11-03 Sun Patent Trust Image decoding method, image coding method, image decoding apparatus, image coding apparatus, and image coding and decoding apparatus
CN104980764A (zh) * 2014-04-14 2015-10-14 深圳中兴力维技术有限公司 基于复杂度均衡的并行编解码方法、装置及***
CN103974081A (zh) * 2014-05-08 2014-08-06 杭州同尊信息技术有限公司 一种基于多核处理器Tilera的HEVC编码方法
CN104811696A (zh) * 2015-04-17 2015-07-29 北京奇艺世纪科技有限公司 一种视频数据的编码方法和装置
CN104869398A (zh) * 2015-05-21 2015-08-26 大连理工大学 一种基于cpu+gpu异构平台实现hevc中的cabac的并行方法
US20160381365A1 (en) * 2015-06-23 2016-12-29 Magnum Semiconductor, Inc. Apparatuses and methods for performing information extraction and insertion on bitstreams
CN105516728A (zh) * 2015-12-15 2016-04-20 华中科技大学 一种H.265/HEVC中8x8子宏块的并行帧内预测方法
CN106788467A (zh) * 2016-11-28 2017-05-31 华中科技大学 一种基于CUDA的Raptor Code编码方法、译码方法及***

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
YU-HSIN CHEN,ET AL.: "A Deeply Pipelined CABAC Decoder for HEVC Supporting Level 6.2 High-Tier Applications", 《IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS FOR VIDEO TECHNOLOGY》 *
张维维,等.: "COStream:一种面向数据流的编程语言和编译器实现", 《计算机学报》 *
杨秋吉,等.: "面向Storm的数据流编程模型与编译优化方法研究", 《计算机工程与科学》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113196768A (zh) * 2018-12-21 2021-07-30 索尼集团公司 图像处理装置和方法
CN113557731A (zh) * 2019-03-11 2021-10-26 佳能株式会社 用于编码和解码视频样本的块树的方法、设备和***
US11949857B2 (en) 2019-03-11 2024-04-02 Canon Kabushiki Kaisha Method, apparatus and system for encoding and decoding a tree of blocks of video samples
CN113557731B (zh) * 2019-03-11 2024-04-02 佳能株式会社 用于编码和解码视频样本的块树的方法、设备和***
CN114257839A (zh) * 2020-09-23 2022-03-29 京东方科技集团股份有限公司 视频编码装置及解码装置、播放***及方法
WO2024021772A1 (zh) * 2022-07-29 2024-02-01 腾讯科技(深圳)有限公司 直播流媒体数据处理方法、***、装置和计算机设备

Also Published As

Publication number Publication date
CN107197296B (zh) 2019-08-13

Similar Documents

Publication Publication Date Title
USRE49727E1 (en) System and method for decoding using parallel processing
JP7098805B2 (ja) ニューラルネットワークを利用したコーデック
CN107197296B (zh) 一种基于COStream的HEVC并行编码方法和***
TWI239207B (en) Method and device for coding digital images using intra-mode block prediction
CN102150428B (zh) 用于使用自适应分段的视频编码的***和方法
CN103918273B (zh) 确定用于变换系数的二进制码字的方法
CN101616323B (zh) 对视频编码数据流进行解码的***和方法
CN105453570A (zh) 用于下一代视频的对分区数据的内容自适应熵编码
CN103931197A (zh) 确定用于变换系数的二进制码字的方法
US9380314B2 (en) Pixel retrieval for frame reconstruction
CN105120277A (zh) 图像编码和解码的方法、编码和解码设备以及计算机程序
US10455244B2 (en) Method and device for entropy encoding or entropy decoding video signal for high-capacity parallel processing
CN110337002B (zh) 一种在多核处理器平台上hevc多层次并行解码方法
CN106358043A (zh) 混合视频解码装置和相关的混合视频解码方法
CN103947211A (zh) 具有已分区比特流的视频编码装置及方法
US9706201B2 (en) Region-based processing of predicted pixels
Jilani et al. JPEG image compression using FPGA with Artificial Neural Networks
CN115866245A (zh) 视频编码方法、装置、计算机设备和存储介质
CN116016951A (zh) 点云处理方法、装置、设备及存储介质
US20180316920A1 (en) Video image encoding device, video image encoding method and program recording medium
CN112437303B (zh) 一种jpeg解码方法及装置
CN109672889A (zh) 约束的序列数据头的方法及装置
EP4391538A1 (en) Point cloud coding method and apparatus, point cloud decoding method and apparatus, and computer and storage medium
CN113259675B (zh) 一种超高清晰度视频图像并行处理方法
EP4354868A1 (en) Media data processing method and related device

Legal Events

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