CN104038766A - 用于以图像帧为基础执行并行视频编码的装置及其方法 - Google Patents
用于以图像帧为基础执行并行视频编码的装置及其方法 Download PDFInfo
- Publication number
- CN104038766A CN104038766A CN201410204598.6A CN201410204598A CN104038766A CN 104038766 A CN104038766 A CN 104038766A CN 201410204598 A CN201410204598 A CN 201410204598A CN 104038766 A CN104038766 A CN 104038766A
- Authority
- CN
- China
- Prior art keywords
- predictive coding
- coding
- picture frame
- thread
- macro
- 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.)
- Pending
Links
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明提供了一种用于以图像帧为基础执行并行视频编码的装置及其方法,所述装置包括:接收单元,用于接收构成视频的图像帧序列;预处理单元,用于通过预处理线程对接收的图像帧序列中的各个图像帧执行针对预测编码的预处理,以获得预测编码信息;预测编码单元,用于通过预测编码线程池根据预测编码信息对预处理后的各个图像帧执行预测编码,其中,预测编码线程池与预处理线程并行地执行处理。根据所述方法和装置,能够通过并行处理达到对视频进行快速编码的目的,并提高资源的利用率。
Description
技术领域
本发明涉及视频编码技术,更具体地讲,涉及一种用于执行并行视频编码的装置和方法。
背景技术
随着多媒体信号处理技术的不断发展,出现了很多用于对视频进行编码和解码的方法和设备。现有的视频编码方案为了提高编码的准确度而普遍使用复杂度较高的算法,并且,随着对视频图像分辨率的要求越来越高,数字信号处理器的计算能力与视频的图像质量之间的矛盾不断深化。
现有的视频编码方案在编码过程中普遍存在以下问题。首先,在对视频中的各个图像帧进行预测编码时,为了进行预测编码而预先执行的预处理与预测编码处理本身需要按照串行的方式来进行,因此,不仅很难达到实时编码的要求,而且导致CPU资源的利用也不够充分。
相应地,提出了将图像帧划分为不存在依赖关系的多个条带(slice),并基于划分的条带来并行地执行预测编码的技术方案。然而,在上述方案中,所划分出的条带的数量对编码的图像质量和编码性能有很大影响,例如,条带数量多时编码的图像质量较差且会增加解码时的内存消耗,而条带数量少时对编码性能的提升很小。
由此可见,现有的视频编码方案很难满足实时编码时对编码性能和图像质量等各方面的需求。
发明内容
本发明的示例性实施例在于提供一种用于以图像帧为基础执行并行视频编码的装置和方法,以提高编码速度。
根据本发明的一方面,提供一种用于以图像帧为基础执行并行视频编码的装置,包括:接收单元,用于接收构成视频的图像帧序列;预处理单元,用于通过预处理线程对接收的图像帧序列中的各个图像帧执行针对预测编码的预处理,以获得预测编码信息;预测编码单元,用于通过预测编码线程池根据预测编码信息对预处理后的各个图像帧执行预测编码,其中,预测编码线程池与预处理线程并行地执行处理。
在所述装置中,预测编码信息可包括以下项中的至少一个:图像帧的预测类型、图像帧的量化参数、图像帧的序号、图像帧的参考帧队列。
在所述装置中,预测编码线程池可利用至少一个预测编码句柄对预处理后的各个图像帧执行预测编码,其中,每个预测编码句柄对应于一个图像帧的预测编码处理,并通过与所述图像帧的预测编码信息结合来用于对所述图像帧执行预测编码。
在所述装置中,预测编码线程池可包括:待编码线程池,包括至少一个待编码线程,用于缓存预测编码句柄;编码执行线程池,包括至少一个编码执行线程,用于利用预测编码句柄对预处理后的图像帧执行预测编码;以及已编码线程池,包括至少一个已编码线程,用于保存执行了预测编码后的预测编码句柄。
在所述装置中,可按如下方式来调度所述预测编码句柄:当待编码线程处于空闲状态时,所述待编码线程接收来自预处理单元的预处理后的图像帧以及与所述预测编码信息和预处理后的图像帧进行同步后的预测编码句柄,并将所述预测编码句柄和预处理后的图像帧压入空闲的编码执行线程;在所述编码执行线程利用预测编码句柄对预处理后的图像帧执行预测编码之后,将执行了预测编码后的预测编码句柄和图像帧对应的编码后数据压入空闲的已编码线程;在所述已编码线程针对执行了预测编码后的预测编码句柄和图像帧对应的编码后数据执行图像后处理之后,所述已编码线程将预测编码句柄释放。
在所述装置中,编码执行线程可将图像帧划分为至少一个宏块行,其中,每个宏块行包括至少一个宏块,编码执行线程在完成每个宏块行的预测编码之后,将相应宏块行的重构完成消息广播给等待参考该宏块行来进行预测编码的图像帧。
在所述装置中,每当将对宏块行的第一宏块执行预测编码时,编码执行线程可确定该宏块行所参考的参考帧中的各个参考宏块行,并在图像帧接收到所述各个参考宏块行的重构完成消息之后立即从所述第一宏块开始对宏块行执行预测编码。
在所述装置中,编码执行线程可基于宏块行的运动向量范围来确定该宏块行所参考的参考帧中的各个参考宏块行。
在所述装置中,预测编码单元可采用基于NEON协处理器的NEON指令集对预测编码过程中执行的运算进行优化处理。
根据本发明的另一方面,提供一种用于以图像帧为基础执行并行视频编码的方法,包括以下步骤:接收构成视频的图像帧序列;通过预处理线程对接收的图像帧序列中的各个图像帧执行针对预测编码的预处理,以获得预测编码信息;通过预测编码线程池根据预测编码信息对预处理后的各个图像帧执行预测编码,其中,预测编码线程池与预处理线程并行地执行处理。
在所述方法中,预测编码信息可包括以下项中的至少一个:图像帧的预测类型、图像帧的量化参数、图像帧的序号、图像帧的参考帧队列。
在所述方法中,通过预测编码线程池根据预测编码信息对预处理后的各个图像帧执行预测编码的步骤可包括:通过预测编码线程池利用至少一个预测编码句柄对预处理后的各个图像帧执行预测编码,其中,每个预测编码句柄对应于一个图像帧的预测编码处理,并通过与所述图像帧的预测编码信息结合来用于对所述图像帧执行预测编码。
在所述方法中,通过预测编码线程池利用至少一个预测编码句柄对预处理后的各个图像帧执行预测编码的步骤可包括:通过待编码线程池对预测编码句柄进行缓存,其中,待编码线程池包括至少一个待编码线程;通过编码执行线程池利用预测编码句柄对预处理后的图像帧执行预测编码,其中,编码执行线程池包括至少一个编码执行线程;以及通过已编码线程池保存执行了预测编码后的预测编码句柄,其中,已编码线程池包括至少一个已编码线程。
在所述方法中,可按如下方式来调度所述预测编码句柄:当待编码线程处于空闲状态时,所述待编码线程接收预处理后的图像帧以及与所述预测编码信息和预处理后的图像帧进行同步后的预测编码句柄,并将所述预测编码句柄和预处理后的图像帧压入空闲的编码执行线程;在所述编码执行线程利用预测编码句柄对预处理后的图像帧执行预测编码之后,将执行了预测编码后的预测编码句柄和图像帧对应的编码后数据压入空闲的已编码线程;在所述已编码线程针对执行了预测编码后的预测编码句柄和图像帧对应的编码后数据执行图像后处理之后,将预测编码句柄释放。
在所述方法中,通过编码执行线程池利用预测编码句柄对预处理后的图像帧执行预测编码的步骤可包括:通过编码执行线程将图像帧划分为至少一个宏块行,其中,每个宏块行包括至少一个宏块,在通过编码执行线程完成每个宏块行的预测编码之后,将相应宏块行的重构完成消息广播给等待参考该宏块行来进行预测编码的图像帧。
在所述方法中,通过编码执行线程池利用预测编码句柄对预处理后的图像帧执行预测编码的步骤可包括:每当将对宏块行的第一宏块执行预测编码时,通过编码执行线程确定该宏块行所参考的参考帧中的各个参考宏块行,并在图像帧接收到所述各个参考宏块行的重构完成消息之后立即从所述第一宏块开始对宏块行执行预测编码。
在所述方法中,通过编码执行线程确定该宏块行所参考的参考帧中的各个参考宏块行的步骤可包括:通过编码执行线程基于宏块行的运动向量范围来确定该宏块行所参考的参考帧中的各个参考宏块行。
在所述方法中,通过编码执行线程池利用预测编码句柄对预处理后的图像帧执行预测编码的步骤可包括:采用基于NEON协处理器的NEON指令集对预测编码过程中执行的运算进行优化处理。
上述用于以图像帧为基础执行并行视频编码的方法和装置,能够通过并行处理达到对视频进行快速编码的目的,并提高资源的利用率。
附图说明
通过下面结合附图对本发明的示例性实施例进行的描述,本发明的上述和其他目的和特点将会变得更加清楚,其中:
图1示出根据本发明示例性实施例的用于以图像帧为基础执行并行视频编码的装置的框图;
图2示出根据本发明示例性实施例的预测编码线程池的结构的框图;
图3示出根据本发明示例性实施例的用于以图像帧为基础执行并行视频编码的方法的流程图;
图4示出根据本发明示例性实施例的在预测编码线程池中执行预测编码的流程图;
图5示出根据本发明示例性实施例的在编码执行线程池中对图像帧的各个宏块行进行预测编码的流程图。
具体实施方式
现将详细参照本发明的实施例,所述实施例的示例在附图中示出,其中,相同的标号始终指的是相同的部件。
图1示出根据本发明示例性实施例的用于以图像帧为基础执行并行视频编码的装置的框图。
如图1所示,根据本发明示例性实施例的用于以图像帧为基础执行并行视频编码的装置可包括:接收单元10、预处理单元20和预测编码单元30。这些单元可由数字信号处理器、现场可编程门阵列等通用硬件处理器来实现,也可通过专用芯片等专用硬件处理器来实现,还可完全通过计算机程序来以软件方式实现,例如,被实现为安装在多媒体编码设备中用于以图像帧为基础执行并行视频编码的各个模块。这里,以图像帧为基础执行并行视频编码时所遵循的视频编码标准可以是基于帧内或帧间预测的视频编码标准,例如,H.264视频编码标准。
具体说来,接收单元10用于接收构成视频的图像帧序列。这里,作为示例,图像帧序列中的各个图像帧可包括YUV(即,亮度和色度)格式的图像数据。
预处理单元20用于通过预处理线程对接收的图像帧序列中的各个图像帧执行针对预测编码的预处理,以获得预测编码信息。具体说来,预测编码信息可包括以下项中的至少一个:图像帧的预测类型、图像帧的量化参数、图像帧的序号、图像帧的参考帧队列。
作为优选方式,预处理单元20可包括码率控制单元和上下文同步单元,以分别用于执行码率控制和上下文同步。相应地,预处理线程可包括码率控制线程和上下文同步线程。
码率控制单元用于判断图像帧的预测类型和为图像帧分配量化参数,并将预测类型和量化参数提供给上下文同步单元。
进一步地,码率控制单元可通过码率控制线程计算预测代价值来判断图像帧的预测类型(即,前向预测类型、双向预测类型或帧内预测类型),相应地,可确定图像帧为前向预测帧(P帧)、双向预测帧(B帧)或帧内预测帧(I帧)。
具体说来,码率控制单元通过码率控制线程调用帧类型判断函数,利用帧类型判断函数对图像帧进行下采样得到下采样后的数据,利用下采样后的数据进行帧内或帧间预测并计算得到相应的预测代价值,通过比较计算的预测代价值来判断图像帧的预测类型。
为了更为有效地确定图像帧的预测类型,可执行场景切换判断以确定图像帧是否涉及场景切换,如果确定图像帧中涉及场景的切换,则强制判断发生场景切换的图像帧为I帧,并在后续的预测编码过程中对此I帧进行帧内预测编码。
此外,码率控制单元还可通过码率控制线程为图像帧分配量化参数,以保证视频输出时的平均码率在预定的范围内。量化步长越大则表明量化越粗糙,视频输出时的图像质量越差,相反地,量化步长越小则表明量化越精细,视频输出时的图像质量越好。
上下文同步单元用于为图像帧分配图像帧的序号,并且为图像帧分配图像帧的参考帧队列。这里,上下文同步单元可基于图像帧的预测类型为图像帧分配图像帧的序号和相应的参考帧队列。
这里,图像帧的参考帧队列为图像帧在后续的预测编码过程中需要参考的参考帧的集合。当预处理后的图像帧为P帧时,参考帧队列包括P帧的前一个或多个图像帧所对应的重构帧,后续的预测编码过程中采用的预测编码为前向预测编码。这里,重构帧为对编码后的图像帧执行扩边、半像素差值、滤波等处理后得到的与图像帧的序号相同的帧。
同样,当预处理后的图像帧为B帧时,参考帧队列包括B帧的前一个或多个图像帧以及后一个或多个图像帧所对应的重构帧,后续的预测编码过程中采用的预测编码为双向预测编码。当预处理后的图像帧为I帧时,后续的预测编码过程中采用的预测编码为帧内预测编码。
进一步地,上下文同步单元可通过上下文同步线程将预测编码句柄与预处理后的图像帧及其预测编码信息进行同步处理。这里,每个预测编码句柄对应于一个图像帧的预测编码处理,并通过与图像帧的预测编码信息结合来用于对所述图像帧执行预测编码。具体说来,同步处理是指将预处理后的图像帧及其预测编码信息与预测编码句柄进行关联,即,预测编码句柄在执行预测编码的过程中可调用图像帧及其预测编码信息,以便于利用预测编码信息对图像帧进行预测编码。
可以看出,本发明通过在预测编码之前采用预处理单元对各个图像帧进行针对预测编码的预处理,使得执行预测编码所需要的预测编码信息能够在对图像帧进行预测编码之前准备完毕,从而可在对一个图像帧进行预测编码的同时,对另一个图像帧进行预处理,这种并行的处理方式提高了对各个图像帧预测编码的速度。
应该理解,预测编码句柄可在整个装置的初始化过程中生成,并具有各自的地址,根据本发明的示例性实施例,涉及预测编码句柄的操作是指根据预测编码句柄的地址来调用相应的预测编码句柄,以通过预测编码句柄进行相应的处理,并且在根据本发明的示例性实施例中,至少生成一个预测编码句柄。
预测编码单元30用于通过预测编码线程池根据预测编码信息对预处理后的各个图像帧执行预测编码,其中,预测编码线程池与预处理线程并行地执行处理。
进一步地,预测编码线程池可利用至少一个预测编码句柄对预处理后的各个图像帧执行预测编码,其中,每个预测编码句柄对应于一个图像帧的预测编码处理,并通过与图像帧的预测编码信息结合来用于对所述图像帧执行预测编码。
作为优选方式,以下参照图2来描述根据本发明示例性实施例的预测编码线程池的示例性结构,并对利用预测编码线程池进行预测编码的过程进行详细的说明。
图2示出根据本发明示例性实施例的预测编码线程池的结构的框图。参照图2,根据本发明示例性实施例的预测编码线程池可包括:待编码线程池310、编码执行线程池320和已编码线程池330。
具体来说,待编码线程池310包括至少一个待编码线程,用于缓存预测编码句柄。编码执行线程池320包括至少一个编码执行线程,用于利用预测编码句柄对预处理后的图像帧执行预测编码。已编码线程池330包括至少一个已编码线程,用于保存执行了预测编码后的预测编码句柄。
作为优选方式,在预测编码线程池中可按照如下方式来调度预测编码句柄。当待编码线程并非处于空闲状态时,表明待编码线程中已经缓存了其他图像帧的预测编码句柄,此时需要等待所述待编码执行线程变为空闲状态。当待编码线程处于空闲状态时,待编码线程被压入相应的预处理后的图像帧和同步后的预测编码句柄(预测编码句柄关联有预测编码信息和预处理后的图像帧),并将预处理后的图像帧和同步后的预测编码句柄压入空闲的编码执行线程。当编码执行线程并非处于空闲状态时,表示编码执行线程正在执行预测编码的操作,此时需要等待编码执行线程变为空闲状态,再将上述缓存的预处理后的图像帧和同步后的预测编码句柄压入空闲的编码执行线程。在编码执行线程利用同步后的预测编码句柄对预处理后的图像帧执行预测编码之后,将执行了预测编码后的预测编码句柄和图像帧对应的编码后数据压入空闲的已编码线程。这里,当已编码线程并非处于空闲状态时,需要等待已编码线程变为空闲状态再将执行了预测编码后的预测编码句柄和图像帧对应的编码后数据压入空闲的已编码线程。在已编码线程针对执行了预测编码后的预测编码句柄和图像帧对应的编码后数据执行图像后处理之后,已编码线程将执行了预测编码后的预测编码句柄占用的内存空间释放。
具体说来,编码执行线程将图像帧划分为至少一个宏块行,其中,每个宏块行包括至少一个宏块,编码执行线程在完成每个宏块行的预测编码之后,将相应宏块行的重构完成消息广播给等待参考该宏块行来进行预测编码的图像帧。这里,具体说来,当前进行预测编码的宏块行所占用的编码执行线程中包含特定条件变量,该特定条件变量用来阻止依赖所述宏块行进行预测编码的图像帧所占用的编码执行线程的执行。只有当宏块行的重构完成消息被广播出去时,所述特定条件变量才发生改变从而解除阻止,使得依赖该宏块行进行预测编码的图像帧所占用的编码执行线程可以立即执行。
每当将对宏块行的第一宏块执行预测编码时,编码执行线程确定该宏块行所参考的参考帧中的各个参考宏块行,并在图像帧接收到各个参考宏块行的重构完成消息之后立即从第一宏块开始对宏块行执行预测编码。作为优选方式,编码执行线程可基于宏块行的运动向量范围来确定该宏块行所参考的参考帧中的各个参考宏块行。例如,假设当前准备编码的第b个宏块行所参考的参考帧中的宏块行的数量为d,这表示当前准备编码的第b个宏块行需要参考参考帧中的第b±c个宏块行进行预测编码,其中,d=2c,c=(a+e)/e,这里,a为运动向量范围的最大值,e为宏块行中的各个宏块所包含的像素高度(即,宏块中每列像素的个数,也即,宏块中包含的像素的行数)。例如,对于16×16像素的宏块而言,e即为16。
可以看出,由于执行完预测编码的宏块行将重构完成消息广播给等待参考该宏块行来进行预测编码的图像帧,因此,等待参考该宏块行来进行预测编码的图像帧能够在接收到重构完成消息后立即进行预测编码,而不需要等待整个图像帧重构完毕,很大程度上减少了等待时间,实现了图像帧之间的并行编码,进一步提高了编码速度和效率。
以下,将结合图3到图5来描述根据本发明示例性实施例的用于以图像帧为基础执行并行视频编码的方法。所述方法可以由图1到图2所示的装置来完成,也可通过计算机程序来实现。
图3示出根据本发明示例性实施例的用于以图像帧为基础执行并行视频编码的方法的流程图。
在步骤S10,接收构成视频的图像帧序列。这里,作为示例,图像帧序列中的各个图像帧可包括YUV(即,亮度和色度)格式的图像数据。
在步骤S20,通过预处理线程对接收的图像帧序列中的各个图像帧执行针对预测编码的预处理,以获得预测编码信息。具体说来,预测编码信息可包括以下项中的至少一个:图像帧的预测类型、图像帧的量化参数、图像帧的序号、图像帧的参考帧队列。
作为优选方式,预处理可包括码率控制和上下文同步。相应地,预处理线程可包括码率控制线程和上下文同步线程。
码率控制包括判断图像帧的预测类型和为图像帧分配量化参数。
进一步地,可通过码率控制线程计算预测代价值来判断图像帧的预测类型(即,前向预测类型、双向预测类型或帧内预测类型),相应地,可确定图像帧为前向预测帧(P帧)、双向预测帧(B帧)或帧内预测帧(I帧)。
具体说来,首先,通过码率控制线程调用帧类型判断函数,利用帧类型判断函数对图像帧进行下采样得到下采样后的数据,然后,利用下采样后的数据进行帧内或帧间预测并计算得到相应的预测代价值,通过比较计算的预测代价值来判断图像帧的预测类型。
为了更为有效地确定图像帧的预测类型,可执行场景切换判断以确定图像帧是否涉及场景切换,如果确定图像帧中涉及场景的切换,则强制判断发生场景切换的图像帧为I帧,并在后续的预测编码过程中对此I帧进行帧内预测编码。
此外,还可通过码率控制线程为图像帧分配量化参数,以保证视频输出时的平均码率在预定的范围内。量化步长越大则表明量化越粗糙,视频输出时的图像质量越差,相反地,量化步长越小则表明量化越精细,视频输出时的图像质量越好。
优选地,可通过上下文同步线程为图像帧分配图像帧的序号,并且为图像帧分配图像帧的参考帧队列。这里,可基于图像帧的预测类型为图像帧分配图像帧的序号和相应的参考帧队列。
这里,图像帧的参考帧队列为图像帧在后续的预测编码过程中需要参考的参考帧的集合。当预处理后的图像帧为P帧时,参考帧队列包括P帧的前一个或多个图像帧所对应的重构帧,后续的预测编码过程中采用的预测编码为前向预测编码。这里,重构帧为对编码后的图像帧执行扩边、半像素差值、滤波等处理后得到的与图像帧的序号相同的帧。
同样,当预处理后的图像帧为B帧时,参考帧队列包括B帧的前一个或多个图像帧以及后一个或多个图像帧所对应的重构帧,后续的预测编码过程中采用的预测编码为双向预测编码。当预处理后的图像帧为I帧时,后续的预测编码过程中采用的预测编码为帧内预测编码。
进一步地,可通过上下文同步线程将预测编码句柄与预处理后的图像帧及其预测编码信息进行同步处理。这里,每个预测编码句柄对应于一个图像帧的预测编码处理,并通过与图像帧的预测编码信息结合来用于对所述图像帧执行预测编码。同步处理是指将预处理后的图像帧及其预测编码信息与预测编码句柄进行关联,即,预测编码句柄在执行预测编码的过程中可调用图像帧及其预测编码信息,以便于利用预测编码信息对图像帧进行预测编码。
在步骤S30,通过预测编码线程池根据预测编码信息对预处理后的各个图像帧执行预测编码。这里应注意,对于图像帧序列中的全部图像帧而言,步骤S20与步骤S30并非顺序执行,而是并行处理,也就是说,预测编码线程池与预处理线程并行地执行处理,在预处理线程对图像帧执行预处理的同时,预测编码线程池可针对之前已经预处理过的图像帧执行预测编码。
进一步地,预测编码线程池可利用至少一个预测编码句柄对预处理后的各个图像帧执行预测编码,其中,每个预测编码句柄对应于一个图像帧的预测编码处理,并通过与图像帧的预测编码信息结合来用于对所述图像帧执行预测编码。
作为优选方式,预测编码线程池可包括待编码线程池、编码执行线程池和已编码线程池。具体来说,待编码线程池包括至少一个待编码线程,用于缓存预测编码句柄。编码执行线程池包括至少一个编码执行线程,用于利用预测编码句柄对预处理后的图像帧执行预测编码。已编码线程池包括至少一个已编码线程,用于保存执行了预测编码后的预测编码句柄。
图4示出根据本发明示例性实施例的在预测编码线程池中执行预测编码的流程图。
在步骤S301,准备将预处理后的图像帧和同步后的预测编码句柄压入预测编码线程池。
在步骤S302,查询待编码线程池的状态,判断待编码线程池中的待编码线程是否处于空闲状态。如果并未处于空闲状态,表明待编码线程池中已经缓存了其他图像帧的预测编码句柄,此时需要等待所述待编码线程变为空闲状态。
如果待编码线程处于空闲状态,则在步骤S303,将预处理后的图像帧和同步后的预测编码句柄压入待编码线程池。
然后,在步骤S304,查询编码执行线程池的状态,判断编码执行线程池中的编码执行线程是否处于空闲状态。如果编码执行线程并未处于空闲状态,则表明编码执行线程正在执行对其他图像帧的预测编码,此时需要等待编码执行线程变为空闲状态。
如果编码执行线程处于空闲状态,则在步骤S305,将预处理后的图像帧和同步后的预测编码句柄从待编码线程池压入编码执行线程池。
然后,在步骤S306,在编码执行线程池利用同步后的预测编码句柄对预处理后的图像帧进行预测编码。具体说来,利用同步后的预测编码句柄与预测编码信息结合对预处理后的图像帧进行预测编码。
在步骤S307,查询已编码线程池的状态,判断已编码线程池中的已编码线程是否处于空闲状态。如果已编码线程并未处于空闲状态,则表明已编码线程池中已经保存了预测编码后的其他图像帧的预测编码句柄,此时需要等待已编码线程变为空闲状态。
如果已编码线程处于空闲状态,则在步骤S308,将执行了预测编码后的预测编码句柄和图像帧对应的编码后数据压入已编码线程池。
在步骤S309,在已编码线程池中对执行了预测编码后的预测编码句柄和图像帧对应的编码后数据进行图像后处理。具体地讲,图像后处理可包括:为等待依赖此预测编码后的图像帧的重构帧作为参考帧的图像帧提供参考,以及将预测编码后的图像帧对应的编码后数据导出到预定文件中的操作等后续处理。此外,已编码线程针对执行了预测编码后的预测编码句柄执行图像后处理之后,已编码线程将执行了预测编码后的预测编码句柄占用的内存空间进行释放,为未执行预测编码的图像帧提供可用的预测编码句柄,即,此时在对未执行预测编码的图像帧进行预处理时可以调用上述预测编码句柄进行相应的预处理和后续的预测编码。
图5示出根据本发明示例性实施例的在编码执行线程池中对图像帧的各个宏块行进行预测编码的流程图。图5是对图4中的步骤S306执行预测编码过程的具体阐述说明。
在步骤S3061,准备开始对图像帧的各个宏块行进行编码。
在步骤S3062,查询当前准备编码的宏块行所依赖的参考帧的宏块行的准备状态,判断所依赖的参考帧的宏块行是否已经完成预测编码。如果所依赖的参考帧的宏块行尚未完成预测编码,则等待所依赖的参考帧的宏块行完成预测编码(步骤S3063)。
如果所依赖的参考帧的宏块行已经完成预测编码,则在步骤S3064,对当前准备编码的宏块行进行预测编码。这里,当前准备编码的宏块行所依赖的参考帧的宏块行完成预测编码时,当前准备编码的宏块行可立即开始执行预测编码。
这里,作为优选方式,每当将对宏块行的第一宏块执行预测编码时,编码执行线程确定该宏块行所参考的参考帧中的各个参考宏块行,并在图像帧接收到各个参考宏块行的重构完成消息之后立即从第一宏块开始对宏块行执行预测编码。优选地,编码执行线程可基于宏块行的运动向量范围来确定该宏块行所参考的参考帧中的各个参考宏块行。例如,假设当前准备编码的第b个宏块行所参考的参考帧中的宏块行的数量为d,这表示当前准备编码的第b个宏块行需要参考参考帧中的第b±c个宏块行进行预测编码,其中,d=2c,c=(a+e)/e,这里,a为运动向量范围的最大值,e为宏块行中的各个宏块所包含的像素高度(即,宏块中每列像素的个数,也即,宏块中包含的像素的行数)。例如,对于16×16像素的宏块而言,e即为16。
最后,在步骤S3065,对完成预测编码的宏块行的重构完成消息进行广播。具体说来,当前进行预测编码的宏块行所占用的编码执行线程中包含特定条件变量,该特定条件变量用来阻止依赖所述宏块行进行预测编码的图像帧所占用的编码执行线程的执行。只有当宏块行的重构完成消息被广播出去时,所述特定条件变量才发生改变从而解除阻止,使得依赖该宏块行进行预测编码的图像帧所占用的编码执行线程可以立即执行。
作为优选方式,根据本发明示例性实施例的用于以图像帧为基础执行并行视频编码的装置和方法中对预测编码过程中执行的运算均可采用NEON协处理器通过NEON指令集进行优化处理。
具体说来,预测编码执行过程中需要执行很多运算,例如离散余弦变换、量化、运动补偿、环路滤波等,在对图像帧的重构过程中也需要执行例如扩边、半像素差值、滤波等的运算操作。如果通过串行方式来执行上述操作是非常耗时且浪费资源的,因此,可采用NEON指令集来进行并行计算。下面以运动补偿中的1/4像素精度插值为例来对NEON指令集的并行优化进行具体说明。然而,上述示例并非作为限制,应该理解,其他指令集也可对预测编码过程中的运算进行优化处理。
一般说来,在进行预测编码之前划分宏块时,宏块的像素宽度(即,宏块中每行像素的个数,也即,宏块中包含的像素的列数)和像素高度一般情况下是相等的,宏块的像素宽度和像素高度一般为16×16。在预测编码的过程中,为了方便处理,又可将宏块划分为16×8像素块、8×16像素块、8×8像素块和4×4像素块等。
下面以含16×16像素块的两个连续的宏块(以下称为第二宏块和第三宏块)的1/4像素精度插值为例来说明NEON指令集的并行处理,具体运算步骤如下:
第一步,将两个宏块分别划分为两个16×8的像素块,第二宏块的两个像素块分别称为第一像素块和第二像素块,第三宏块的两个像素块分别称为第三像素块和第四像素块。此时两个宏块中的所有像素数据均为1/2像素插值后的半像素值,这里,所有半像素值均为已知量。
第二步,从内存中分别读取第一像素块和第三像素块的第一行像素数据,并存入两个不同的NEON寄存器(分别为第一NEON寄存器和第二NEON寄存器)中。
第三步,参考当前第一NEON寄存器和第二NEON寄存器的使用情况,可分别读取第一像素块和第三像素块的预定行,以存入第一NEON寄存器和第二NEON寄存器。这里,预定行小于等于7行,读取的第一像素块和第三像素块的预定行是相对应的,例如,读取的第一像素块和第三像素块的像素数据均为第2行到第5行的像素数据。
第四步,使用vld1.8指令对第二步中的第一NEON寄存器和第二NEON寄存器中的像素数据进行插值运算,两个NEON寄存器中的插值运算是同时并行执行的,将插值运算的结果保存到可用的第三NEON寄存器中。
重复第二到第四步直到两个宏块的所有像素数据都插值完毕。
进一步地,将所有的图像帧中像素数据均采用以上步骤进行插值处理,调用vst1.8指令将保存所有插值处理的结果的寄存器中的插值处理的结果写入内存中。
应该理解,由于一个NEON寄存器可以处理一个图像帧中的所有像素数据,则NEON寄存器的个数越多,能够并行处理的图像帧就越多,插值运算的效率就越高。
因此,采用基于NEON协处理器的NEON指令集对预测编码过程中执行的运算进行优化处理将明显提高执行预测编码的速度。但本发明不限于此,也可采用其他优化方法对预测编码过程中的运算进行优化。
作为示例,可在嵌入式片上***中实现根据本发明示例性实施例的用于以图像帧为基础执行并行视频编码的方法。例如,以基于ARMv7Cortex A15、1.2GHz四核CPU、1.5GB内存的嵌入式片上***为例,根据本发明示例性实施例的多线程并行视频编码方案与单线程视频编码方案在性能上的对比如表1所示。
表1
由表1可以看出,根据本发明示例性实施例的多线程并行视频编码方案在上述嵌入式片上***中充分利用了四核CPU资源和ARMv7中的NEON指令集,能够使得绝大部分分辨率为1280×720的高清视频达到实时编码的目的,且对比于单线程视频编码时的编码速度均提高了近三倍左右。
应该理解,在根据本发明示例性实施例的用于以图像帧为基础执行并行视频编码的装置和方法中,预测编码线程池与预处理线程并行地执行处理。具体说来,在某一图像帧在经过预处理之后进行预测编码的同时,可对后续的其他图像帧进行预处理,以此类推。此外,在对各个图像帧进行预测编码的过程中,当各个图像帧中的宏块行进行预测编码所需要的参考帧中的参考宏块行完成预测编码时,各个图像中的宏块行即可立即开始进行预测编码,所以不同图像帧中的宏块行的预测编码也可以是并行执行的。
综上所述,在根据本发明示例性实施例的用于以图像帧为基础执行并行视频编码的方法和装置,利用多线程码率控制与多线程预测编码之间同时并行处理,能够通过并行处理达到对视频进行快速编码的目的,并提高资源的利用率。
上面已经结合具体示例性实施例描述了本发明,但是本发明的实施不限于此。在本发明的精神和范围内,本领域技术人员可以进行各种修改和变型,这些修改和变型将落入权利要求限定的保护范围之内。
Claims (18)
1.一种用于以图像帧为基础执行并行视频编码的装置,包括:
接收单元,用于接收构成视频的图像帧序列;
预处理单元,用于通过预处理线程对接收的图像帧序列中的各个图像帧执行针对预测编码的预处理,以获得预测编码信息;
预测编码单元,用于通过预测编码线程池根据预测编码信息对预处理后的各个图像帧执行预测编码,
其中,预测编码线程池与预处理线程并行地执行处理。
2.如权利要求1所述的装置,其中,预测编码信息包括以下项中的至少一个:图像帧的预测类型、图像帧的量化参数、图像帧的序号、图像帧的参考帧队列。
3.如权利要求1所述的装置,其中,预测编码线程池利用至少一个预测编码句柄对预处理后的各个图像帧执行预测编码,其中,每个预测编码句柄对应于一个图像帧的预测编码处理,并通过与所述图像帧的预测编码信息结合来用于对所述图像帧执行预测编码。
4.如权利要求3所述的装置,其中,预测编码线程池包括:
待编码线程池,包括至少一个待编码线程,用于缓存预测编码句柄;
编码执行线程池,包括至少一个编码执行线程,用于利用预测编码句柄对预处理后的图像帧执行预测编码;以及
已编码线程池,包括至少一个已编码线程,用于保存执行了预测编码后的预测编码句柄。
5.如权利要求4所述的装置,其中,按如下方式来调度所述预测编码句柄:当待编码线程处于空闲状态时,所述待编码线程接收来自预处理单元的预处理后的图像帧以及与所述预测编码信息和预处理后的图像帧进行同步后的预测编码句柄,并将所述预测编码句柄和预处理后的图像帧压入空闲的编码执行线程;在所述编码执行线程利用预测编码句柄对预处理后的图像帧执行预测编码之后,将执行了预测编码后的预测编码句柄和图像帧对应的编码后数据压入空闲的已编码线程;在所述已编码线程针对执行了预测编码后的预测编码句柄和图像帧对应的编码后数据执行图像后处理之后,所述已编码线程将预测编码句柄释放。
6.如权利要求4所述的装置,其中,编码执行线程将图像帧划分为至少一个宏块行,其中,每个宏块行包括至少一个宏块,编码执行线程在完成每个宏块行的预测编码之后,将相应宏块行的重构完成消息广播给等待参考该宏块行来进行预测编码的图像帧。
7.如权利要求6所述的装置,其中,每当将对宏块行的第一宏块执行预测编码时,编码执行线程确定该宏块行所参考的参考帧中的各个参考宏块行,并在图像帧接收到所述各个参考宏块行的重构完成消息之后立即从所述第一宏块开始对宏块行执行预测编码。
8.如权利要求7所述的装置,其中,编码执行线程基于宏块行的运动向量范围来确定该宏块行所参考的参考帧中的各个参考宏块行。
9.如权利要求1所述的装置,其中,预测编码单元采用基于NEON协处理器的NEON指令集对预测编码过程中执行的运算进行优化处理。
10.一种用于以图像帧为基础执行并行视频编码的方法,包括:
接收构成视频的图像帧序列;
通过预处理线程对接收的图像帧序列中的各个图像帧执行针对预测编码的预处理,以获得预测编码信息;
通过预测编码线程池根据预测编码信息对预处理后的各个图像帧执行预测编码,
其中,预测编码线程池与预处理线程并行地执行处理。
11.如权利要求10所述的方法,其中,预测编码信息包括以下项中的至少一个:图像帧的预测类型、图像帧的量化参数、图像帧的序号、图像帧的参考帧队列。
12.如权利要求10所述的方法,其中,通过预测编码线程池根据预测编码信息对预处理后的各个图像帧执行预测编码的步骤包括:通过预测编码线程池利用至少一个预测编码句柄对预处理后的各个图像帧执行预测编码,其中,每个预测编码句柄对应于一个图像帧的预测编码处理,并通过与所述图像帧的预测编码信息结合来用于对所述图像帧执行预测编码。
13.如权利要求12所述的方法,其中,通过预测编码线程池利用至少一个预测编码句柄对预处理后的各个图像帧执行预测编码的步骤包括:
通过待编码线程池对预测编码句柄进行缓存,其中,待编码线程池包括至少一个待编码线程;
通过编码执行线程池利用预测编码句柄对预处理后的图像帧执行预测编码,其中,编码执行线程池包括至少一个编码执行线程;以及
通过已编码线程池保存执行了预测编码后的预测编码句柄,其中,已编码线程池包括至少一个已编码线程。
14.如权利要求13所述的方法,其中,按如下方式来调度所述预测编码句柄:当待编码线程处于空闲状态时,所述待编码线程接收预处理后的图像帧以及与所述预测编码信息和预处理后的图像帧进行同步后的预测编码句柄,并将所述预测编码句柄和预处理后的图像帧压入空闲的编码执行线程;在所述编码执行线程利用预测编码句柄对预处理后的图像帧执行预测编码之后,将执行了预测编码后的预测编码句柄和图像帧对应的编码后数据压入空闲的已编码线程;在所述已编码线程针对执行了预测编码后的预测编码句柄和图像帧对应的编码后数据执行图像后处理之后,将预测编码句柄释放。
15.如权利要求13所述的方法,其中,通过编码执行线程池利用预测编码句柄对预处理后的图像帧执行预测编码的步骤包括:通过编码执行线程将图像帧划分为至少一个宏块行,其中,每个宏块行包括至少一个宏块,在通过编码执行线程完成每个宏块行的预测编码之后,将相应宏块行的重构完成消息广播给等待参考该宏块行来进行预测编码的图像帧。
16.如权利要求15所述的方法,其中,通过编码执行线程池利用预测编码句柄对预处理后的图像帧执行预测编码的步骤包括:每当将对宏块行的第一宏块执行预测编码时,通过编码执行线程确定该宏块行所参考的参考帧中的各个参考宏块行,并在图像帧接收到所述各个参考宏块行的重构完成消息之后立即从所述第一宏块开始对宏块行执行预测编码。
17.如权利要求16所述的方法,其中,通过编码执行线程确定该宏块行所参考的参考帧中的各个参考宏块行的步骤包括:通过编码执行线程基于宏块行的运动向量范围来确定该宏块行所参考的参考帧中的各个参考宏块行。
18.如权利要求10所述的方法,其中,通过编码执行线程池利用预测编码句柄对预处理后的图像帧执行预测编码的步骤包括:采用基于NEON协处理器的NEON指令集对预测编码过程中执行的运算进行优化处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410204598.6A CN104038766A (zh) | 2014-05-14 | 2014-05-14 | 用于以图像帧为基础执行并行视频编码的装置及其方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410204598.6A CN104038766A (zh) | 2014-05-14 | 2014-05-14 | 用于以图像帧为基础执行并行视频编码的装置及其方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104038766A true CN104038766A (zh) | 2014-09-10 |
Family
ID=51469337
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410204598.6A Pending CN104038766A (zh) | 2014-05-14 | 2014-05-14 | 用于以图像帧为基础执行并行视频编码的装置及其方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104038766A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106358042A (zh) * | 2015-07-17 | 2017-01-25 | 飞思卡尔半导体公司 | 使用视频图像的帧间预测的并行解码器 |
CN106454354A (zh) * | 2016-09-07 | 2017-02-22 | 中山大学 | 一种avs2并行编码处理***及方法 |
CN110798702A (zh) * | 2019-10-15 | 2020-02-14 | 平安科技(深圳)有限公司 | 视频解码方法、装置、设备及计算机可读存储介质 |
CN111093078A (zh) * | 2018-10-23 | 2020-05-01 | 展讯通信(天津)有限公司 | 视频解码方法及装置、存储介质、终端 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1722836A (zh) * | 2004-07-07 | 2006-01-18 | 三星电子株式会社 | 视频编码和解码方法以及视频编码器和解码器 |
US20080031329A1 (en) * | 2006-08-07 | 2008-02-07 | Kenichi Iwata | Data processing circuit |
CN101137062A (zh) * | 2007-09-20 | 2008-03-05 | 四川长虹电器股份有限公司 | 具有双核处理器的视频编码***双核协同编码方法 |
CN101150719A (zh) * | 2006-09-20 | 2008-03-26 | 华为技术有限公司 | 并行视频编码的方法及装置 |
JP2010098633A (ja) * | 2008-10-20 | 2010-04-30 | Panasonic Corp | 予測符号化装置および予測符号化方法 |
CN101969560A (zh) * | 2010-11-01 | 2011-02-09 | 北京中科大洋科技发展股份有限公司 | 一种多核平台下Mpeg2高清编码器的Slice码率分配方法 |
CN102300087A (zh) * | 2010-06-24 | 2011-12-28 | 北京大学 | 一种svc编码方法和编码器 |
CN102769753A (zh) * | 2012-08-02 | 2012-11-07 | 豪威科技(上海)有限公司 | H264编码器及编码方法 |
-
2014
- 2014-05-14 CN CN201410204598.6A patent/CN104038766A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1722836A (zh) * | 2004-07-07 | 2006-01-18 | 三星电子株式会社 | 视频编码和解码方法以及视频编码器和解码器 |
US20080031329A1 (en) * | 2006-08-07 | 2008-02-07 | Kenichi Iwata | Data processing circuit |
CN101150719A (zh) * | 2006-09-20 | 2008-03-26 | 华为技术有限公司 | 并行视频编码的方法及装置 |
CN101137062A (zh) * | 2007-09-20 | 2008-03-05 | 四川长虹电器股份有限公司 | 具有双核处理器的视频编码***双核协同编码方法 |
JP2010098633A (ja) * | 2008-10-20 | 2010-04-30 | Panasonic Corp | 予測符号化装置および予測符号化方法 |
CN102300087A (zh) * | 2010-06-24 | 2011-12-28 | 北京大学 | 一种svc编码方法和编码器 |
CN101969560A (zh) * | 2010-11-01 | 2011-02-09 | 北京中科大洋科技发展股份有限公司 | 一种多核平台下Mpeg2高清编码器的Slice码率分配方法 |
CN102769753A (zh) * | 2012-08-02 | 2012-11-07 | 豪威科技(上海)有限公司 | H264编码器及编码方法 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106358042A (zh) * | 2015-07-17 | 2017-01-25 | 飞思卡尔半导体公司 | 使用视频图像的帧间预测的并行解码器 |
CN106358042B (zh) * | 2015-07-17 | 2020-10-09 | 恩智浦美国有限公司 | 使用视频图像的帧间预测的并行解码器 |
CN106454354A (zh) * | 2016-09-07 | 2017-02-22 | 中山大学 | 一种avs2并行编码处理***及方法 |
CN106454354B (zh) * | 2016-09-07 | 2019-10-18 | 中山大学 | 一种avs2并行编码处理***及方法 |
CN111093078A (zh) * | 2018-10-23 | 2020-05-01 | 展讯通信(天津)有限公司 | 视频解码方法及装置、存储介质、终端 |
CN111093078B (zh) * | 2018-10-23 | 2022-08-19 | 展讯通信(天津)有限公司 | 视频解码方法及装置、存储介质、终端 |
CN110798702A (zh) * | 2019-10-15 | 2020-02-14 | 平安科技(深圳)有限公司 | 视频解码方法、装置、设备及计算机可读存储介质 |
CN110798702B (zh) * | 2019-10-15 | 2022-04-15 | 平安科技(深圳)有限公司 | 视频解码方法、装置、设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Chen et al. | Implementation of H. 264 encoder and decoder on personal computers | |
US8218640B2 (en) | Picture decoding using same-picture reference for pixel reconstruction | |
US8218641B2 (en) | Picture encoding using same-picture reference for pixel reconstruction | |
US8213518B1 (en) | Multi-threaded streaming data decoding | |
US20140153635A1 (en) | Method, computer program product, and system for multi-threaded video encoding | |
US8660191B2 (en) | Software video decoder display buffer underflow prediction and recovery | |
KR20090096143A (ko) | 움직임 예측을 통한 부호화 시스템 및 움직임 예측을 통한부호화 방법 | |
CN103297767A (zh) | 一种适用于多核嵌入式平台的jpeg图像解码方法及解码器 | |
CN104038766A (zh) | 用于以图像帧为基础执行并行视频编码的装置及其方法 | |
US10602185B2 (en) | Systems, methods, and computer program products for a video encoding pipeline | |
US10924753B2 (en) | Modular motion estimation and mode decision engine | |
CN105245896A (zh) | Hevc并行运动补偿方法及装置 | |
Sankaraiah et al. | GOP level parallelism on H. 264 video encoder for multicore architecture | |
Park et al. | Programmable multimedia platform based on reconfigurable processor for 8K UHD TV | |
US10237561B2 (en) | Video coding apparatus and video coding method | |
KR20090020460A (ko) | 비디오 디코딩 방법 및 장치 | |
US10440359B2 (en) | Hybrid video encoder apparatus and methods | |
De Souza et al. | OpenCL parallelization of the HEVC de-quantization and inverse transform for heterogeneous platforms | |
JP6412589B2 (ja) | 装置、コンピュータプログラムおよびコンピュータ実装方法 | |
Asif et al. | Exploiting MB level parallelism in H. 264/AVC encoder for multi-core platform | |
CN104956677A (zh) | 组合的并行流水线视频编码器 | |
US11375225B1 (en) | Interleaved video coding pipeline | |
US9330060B1 (en) | Method and device for encoding and decoding video image data | |
Meng et al. | Highly optimized implementation of HEVC decoder for general processors | |
Deng et al. | GPU-based real-time decoding technique for high-definition videos |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140910 |