CN111093078B - 视频解码方法及装置、存储介质、终端 - Google Patents
视频解码方法及装置、存储介质、终端 Download PDFInfo
- Publication number
- CN111093078B CN111093078B CN201811245732.1A CN201811245732A CN111093078B CN 111093078 B CN111093078 B CN 111093078B CN 201811245732 A CN201811245732 A CN 201811245732A CN 111093078 B CN111093078 B CN 111093078B
- Authority
- CN
- China
- Prior art keywords
- decoded
- frame
- decoding
- macro block
- video
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/17—Methods 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/176—Methods 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/17—Methods 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/172—Methods 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 picture, frame or field
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/42—Methods 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/436—Methods 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
一种视频解码方法及装置、存储介质、终端,视频解码方法包括:确定待解码视频帧中的待解码宏块,并解析所述待解码宏块的宏块头,所述待解码视频帧选自I帧、P帧和B帧;根据所述待解码宏块的宏块头确定所述待解码宏块的类型;如果所述待解码宏块的类型为帧间宏块,则根据所述待解码宏块的宏块头中的运动矢量计算解码所述待解码宏块所参考的参考帧的需求解码进度;如果所述待解码宏块的类型为帧间宏块,则接收解码所述待解码宏块所参考的参考帧的线程广播的广播信息;比较所述当前解码进度与所述需求解码进度,并根据比较结果确定是否对所述待解码宏块进行解码。本发明技术方案能够提升帧级并行解码的效率。
Description
技术领域
本发明涉及图像处理技术领域,尤其涉及一种视频解码方法及装置、存储介质、终端。
背景技术
多核中央处理器(CPU,Central Processing Unit)具有更强的并行处理能力和更高的计算密度。基于多核CPU架构,开发多线程的并行解码程序,在实时视频解码中被广泛的使用。在串行解码时,解码是严格的按照空间上从上到下、时间上从前到后的顺序进行的,而并行解码需要解除这种空间和时间上的依赖性。按照不同级别的数据划分,已有的并行解码算法可分为宏块级(MacroBlock-Level)并行,条级(Slice-Level)并行和帧级(Frame-Level)并行。
对于宏块级并行解码,在同一帧中,可以对最接近的两个独立宏块执行并行解码。对于条级并行解码,在大多数视频编码标准中,每一帧都能分成一个或者多个条。一帧内的各个条的数据是相互独立的,在熵解码、预测等环节,条间解码并不相互依赖,因此同一帧的多个条可以并行解码。对于帧级并行解码,动态图象专家组(Moving Pictures ExpertsGroup,MPEG4)标准的帧类型分为I帧、P帧、B帧,其中I帧和P帧为参考帧,B帧为非参考帧。而最常见的码流形式为IPBBBPBBBP...,码流中连续出现的B帧之间的解码没有依赖关系,因此可以对多个连续的B帧进行帧级的并行解码。
但是,宏块级并行解码在一帧解码的开始与末尾,并行度较低,影响整体的解码速度。帧中的条数由编码器决定,一般不会太多,而大多数视频中每帧只有一个条,这就导致无法进行条级的并行解码。帧级并行解码只在B帧解码有并行性,一般来说P帧间的B帧都会比较少,I帧和P帧的解码依然是串行进行,因此这种简单的帧级并行解码的效率不高。
发明内容
本发明解决的技术问题是如何提升帧级并行解码的效率。
为解决上述技术问题,本发明实施例提供一种视频解码方法,视频解码方法包括:确定待解码视频帧中的待解码宏块,并解析所述待解码宏块的宏块头,所述待解码视频帧选自I帧、P帧和B帧;根据所述待解码宏块的宏块头确定所述待解码宏块的类型;如果所述待解码宏块的类型为帧间宏块,则根据所述待解码宏块的宏块头中的运动矢量计算解码所述待解码宏块所参考的参考帧的需求解码进度;如果所述待解码宏块的类型为帧间宏块,则接收解码所述待解码宏块所参考的参考帧的线程广播的广播信息,所述广播信息包括所述待解码宏块所参考的参考帧的当前解码进度;比较所述当前解码进度与所述需求解码进度,并根据比较结果确定是否对所述待解码宏块进行解码。
可选的,所述根据比较结果确定是否对所述待解码宏块进行解码包括:如果所述比较结果表示所述当前解码进度达到所述需求解码进度,则利用所述待解码宏块所参考的参考帧解码所述待解码宏块;如果所述比较结果表示所述当前解码进度未达到所述需求解码进度,则进入休眠状态。
可选的,所述比较所述当前解码进度与所述需求解码进度包括:如果当前状态为休眠状态,则根据所述广播信息进入唤醒状态;在所述唤醒状态下,比较所述当前解码进度与所述需求解码进度。
可选的,所述视频解码方法还包括:如果所述待解码视频帧为参考帧且对所述待解码宏块所处的当前宏块行解码完成,则广播所述待解码视频帧的解码进度为所述当前宏块行。
可选的,所述视频解码方法还包括:如果所述待解码宏块的类型为帧内宏块,则直接对所述待解码宏块进行解码。
可选的,利用以下公式计算所述需求解码进度:progress=(yMBPos+MVy)/16+1,其中,progress表示所述需求解码进度,yMBPos表示所述待解码宏块在所述待解码视频帧中垂直方向上的位置,MVy表示所述待解码宏块的运动矢量在垂直方向上的分量。
为解决上述技术问题,本发明实施例还公开了一种视频解码方法,视频解码方法包括:逐帧读取待解码的视频,并确定当前的待解码视频帧;按照多个工作线程的预设工作顺序确定待分配工作线程;如果所述待分配工作线程处于空闲状态,则将所述待解码视频帧分配给所述待分配工作线程;启动所述待分配工作线程进行解码,所述待分配工作线程按照前述视频解码方法对所述待解码视频帧进行解码。
可选的,所述将所述待解码视频帧分配给所述待分配工作线程之前还包括:将所述待分配工作线程已解码的视频帧加入解码帧队列。
可选的,所述方法还包括:如果所述已解码的视频帧的类型为非参考帧,则将所述已解码的视频帧移出所述解码帧队列;如果所述已解码的视频帧的类型为参考帧,则判断在所述解码帧队列中,排在所述已解码的视频帧之前的类型为参考帧的视频帧的数量,并在所述数量为两个时,将两个类型为参考帧的视频帧中前一个视频帧移出所述解码帧队列。
可选的,所述方法还包括:如果所述已解码的视频帧的类型为非参考帧,则输出所述已解码的视频帧;如果所述已解码的视频帧的类型为参考帧,则判断在所述解码帧队列中,排在所述已解码的视频帧之后的首个视频帧的类型,并根据所述首个视频帧的类型确定是否输出所述已解码的视频帧。
可选的,所述根据所述首个视频帧的类型确定是否输出所述已解码的视频帧包括:如果所述首个视频帧的类型为参考帧,则输出所述已解码的视频帧;如果所述首个视频帧的类型为非参考帧,则继续判断在所述解码帧队列中,排在所述已解码的视频帧之后的第二个视频帧的类型,直至判断结果为参考帧,并输出所述已解码的视频帧。
为解决上述技术问题,本发明实施例还提供一种视频解码装置,包括:待解码宏块确定模块,适于确定待解码视频帧中的待解码宏块,并解析所述待解码宏块的宏块头,所述待解码视频帧选自I帧、P帧和B帧;类型确定模块,适于根据所述待解码宏块的宏块头确定所述待解码宏块的类型;需求解码进度计算模块,适于在所述待解码宏块的类型为帧间宏块时,根据所述待解码宏块的宏块头中的运动矢量计算解码所述待解码宏块所参考的参考帧的需求解码进度;广播信息接收模块,适于在所述待解码宏块的类型为帧间宏块时,接收解码所述待解码宏块所参考的参考帧的线程广播的广播信息,所述广播信息包括所述待解码宏块所参考的参考帧的当前解码进度;解码模块,适于比较所述当前解码进度与所述需求解码进度,并根据比较结果确定是否对所述待解码宏块进行解码。
为解决上述技术问题,本发明实施例还提供一种视频解码装置,包括:视频读取模块,适于逐帧读取待解码的视频,并确定当前的待解码视频帧;待分配工作线程确定模块,适于按照多个工作线程的预设工作顺序确定待分配工作线程;分配模块,适于在所述待分配工作线程处于空闲状态时,将所述待解码视频帧分配给所述待分配工作线程;解码启动模块,适于启动所述待分配工作线程进行解码,所述待分配工作线程按照前述视频解码方法对所述待解码视频帧进行解码。
本发明实施例还提供一种存储介质,其上存储有计算机指令,所述计算机指令运行时执行所述视频解码方法的步骤。
本发明实施例还提供一种终端,包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的计算机指令,所述处理器运行所述计算机指令时执行所述视频解码方法的步骤。
与现有技术相比,本发明实施例的技术方案具有以下有益效果:
本发明技术方案中,确定待解码视频帧中的待解码宏块,并解析所述待解码宏块的宏块头,所述待解码视频帧选自I帧、P帧和B帧;根据所述待解码宏块的宏块头确定所述待解码宏块的类型;如果所述待解码宏块的类型为帧间宏块,则根据所述待解码宏块的宏块头中的运动矢量计算解码所述待解码宏块所参考的参考帧的需求解码进度;如果所述待解码宏块的类型为帧间宏块,则接收解码所述待解码宏块所参考的参考帧的线程广播的广播信息,所述广播信息包括所述待解码宏块所参考的参考帧的当前解码进度;比较所述当前解码进度与所述需求解码进度,并根据比较结果确定是否对所述待解码宏块进行解码。对于待解码视频帧中需要依赖参考帧才能解码的视频帧,本发明技术方案通过接收解码参考帧的线程广播的广播信息,以确定参考帧的解码情况。由于待解码视频帧与参考帧为连续的帧,连续的帧之间不存在快速的移动,运动矢量较小,因此不必等待参考帧全部解码完成即可进行待解码视频帧中待解码宏块的解码,从而可以实现待解码视频帧与其参考帧的并行解码,避免了现有技术中仅能对非参考帧之间进行并行解码的情况,提升了帧级并行解码的效率。
进一步地,如果所述比较结果表示所述当前解码进度未达到所述需求解码进度,则进入休眠状态。本发明技术方案中,在未能够执行对所述待解码宏块进行解码的情况下,通过进入休眠状态,可以避免占用CPU资源,提升硬件性能,从而进一步提升帧级并行解码的效率。
附图说明
图1是本发明实施例一种视频解码方法的流程图;
图2是本发明实施例另一种视频解码方法的流程图;
图3是本发明实施例一种应用场景的流程示意图;
图4是本发明实施例另一种应用场景的流程示意图;
图5是本发明实施例一种视频解码装置的结构示意图;
图6是本发明实施例一种视频解码装置的结构示意图。
具体实施方式
如背景技术中所述,宏块级并行解码在一帧解码的开始与末尾,并行度较低,影响整体的解码速度。帧中的条数由编码器决定,一般不会太多,而大多数视频中每帧只有一个条,这就导致无法进行条级的并行解码。帧级并行解码只在B帧解码有并行性,一般来说P帧间的B帧都会比较少,I帧和P帧的解码依然是串行进行,因此这种简单的帧级并行解码的效率不高。
对于待解码视频帧中需要依赖参考帧才能解码的视频帧,本发明技术方案通过接收解码参考帧的线程广播的广播信息,以确定参考帧的解码情况。由于待解码视频帧与参考帧为连续的帧,连续的帧之间不存在快速的移动,运动矢量较小,因此不必等待参考帧全部解码完成即可进行待解码视频帧中待解码宏块的解码,从而可以实现待解码视频帧与其参考帧的并行解码,避免了现有技术中仅能对非参考帧之间进行并行解码的情况,提升了帧级并行解码的效率。
为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。
图1是本发明实施例一种视频解码方法的流程图。
本实施例的视频解码方法可以由具备多核CPU的设备执行。具体地,所述视频解码方法可以由线程(Thread)执行。也就是说,多核CPU的设备可以同时运行多个线程,每个线程可以对视频帧进行解码,从而实现视频的帧级并行解码。更具体地,线程的数量与CPU的内核数量正相关。
图1所示视频解码方法可以包括以下步骤:
步骤S101:确定待解码视频帧中的待解码宏块,并解析所述待解码宏块的宏块头,所述待解码视频帧选自I帧、P帧和B帧;
步骤S102:根据所述待解码宏块的宏块头确定所述待解码宏块的类型;
步骤S103:如果所述待解码宏块的类型为帧间宏块,则根据所述待解码宏块的宏块头中的运动矢量计算解码所述待解码宏块所参考的参考帧的需求解码进度;
步骤S104:如果所述待解码宏块的类型为帧间宏块,则接收解码所述待解码宏块所参考的参考帧的线程广播的广播信息,所述广播信息包括所述待解码宏块所参考的参考帧的当前解码进度;
步骤S105:比较所述当前解码进度与所述需求解码进度,并根据比较结果确定是否对所述待解码宏块进行解码。
需要指出的是,本实施例中各个步骤的序号并不代表对各个步骤的执行顺序的限定。
本实施例中所称宏块(Macroblock)是视频编解码的基本单位。宏块的大小可以是16像素×16像素,也可以是其他任意可实施的大小,本发明实施例对此不做限制。具体地,单个视频帧可以包括多个宏块,每一宏块包括宏块头和宏块体,宏块头包含宏块的类型(例如帧内宏块、帧间宏块)等少量信息,宏块体包含残差等宏块的大部分信息。
需要说明的是,本实施例中所称待解码视频帧是指经过视频编码后的视频帧。
在步骤S101的具体实施中,由于待解码视频帧可以包括多个宏块,因此在确定需要进行解码的待解码宏块时,可以逐行确定各个待解码宏块,并按照待解码宏块的确定顺序依次执行解码过程,也即执行步骤S102至步骤S105。
在步骤S102的具体实施中,解析待解码宏块的宏块头,宏块头中包含待解码宏块的类型。待解码宏块的类型选自帧间宏块和帧内宏块。
本领域技术人员应当理解的是,解析宏块头的具体实施方式可参照现有技术,此处不再赘述。
本发明一个非限制性的实施例中,如果所述待解码宏块的类型为帧内宏块,则可以直接对所述待解码宏块进行解码。
具体地,由于类型为帧内宏块的待解码宏块在编码时没有参考参考帧,因此在对类型为帧内宏块的待解码宏块进行解码时,也无需参考参考帧,可以直接进行解码。
相应地,由于类型为帧间宏块的待解码宏块在编码时需要参考参考帧,因此对类型为帧间宏块的待解码宏块进行解码时,也需要参考参考帧,需要了解参考帧的解码情况。
在步骤S103的具体实施中,在待解码宏块的类型为帧间宏块时,解析待解码宏块的宏块头,以得到待解码宏块与所述待解码宏块所参考的参考帧中匹配块的运动矢量。所述匹配块是指参考帧中与所述待解码宏块最相似的宏块。所述运动矢量可以表示待解码宏块与其匹配块的相对位移。
那么根据所述待解码宏块的宏块头中的运动矢量可以计算出需求解码进度,需求解码进度表示所述待解码宏块所参考的参考帧中匹配块的位置。更具体地,需求解码进度可以是匹配块的所处的宏块行。换言之,在对参考帧进行解码达到需求解码进度时,能够执行对待解码宏块的解码。
例如,解码待解码视频帧2的宏块1时,对应于宏块1的待解码视频帧2所参考的参考帧1的需求解码进度为5个宏块行;那么当参考帧1解码完成5个宏块行时,开始对待解码视频帧2的宏块1进行解码。
在步骤S104和步骤S105的具体实施中,通过接收解码所述待解码宏块所参考的参考帧的线程广播的广播信息,可以确定参考帧的当前解码进度。从而可以通过比较当前解码进度与所述需求解码进度,确定是否对待解码宏块进行解码。
本发明一个非限制性的实施例中,如果所述比较结果表示所述当前解码进度达到所述需求解码进度,则利用所述待解码宏块所参考的参考帧解码所述待解码宏块。
本领域技术人员应当理解的是,对宏块进行解码的具体实施过程可参照现有技术以及现有标准协议,此处不再赘述。
可以理解的是,由于待解码视频帧包括多个待解码宏块,因此在步骤S101中可以确定多个待解码宏块,对于每一待解码宏块,分别执行上述步骤S102至步骤S105,直至待解码视频帧全部解码完成。进一步地,待解码视频可以包括多个待解码视频帧,可以参照上述过程对每一视频帧进行解码。
对于待解码视频帧中需要依赖参考帧才能解码的视频帧,本发明实施例通过接收解码参考帧的线程广播的广播信息,以确定参考帧的解码情况。由于待解码视频帧与参考帧为连续的帧,连续的帧之间不存在快速的移动,运动矢量较小,因此不必等待参考帧全部解码完成即可进行待解码视频帧中待解码宏块的解码,从而可以实现待解码视频帧与其参考帧的并行解码,避免了现有技术中仅能对非参考帧之间进行并行解码的情况,提升了帧级并行解码的效率。
在本发明一个具体的应用场景中,可以充分利用多核CPU提供的并行计算能力,实现高清视频的实时解码。
在本发明一个非限制性的实施例中,图1所示步骤S105可以包括以下步骤:如果所述比较结果表示所述当前解码进度未达到所述需求解码进度,则进入休眠状态。
具体地,当前解码进度未达到所述需求解码进度时,不能够对待解码宏块进行解码,在这种情况下,为了避免占用CPU资源,可以使解码待解码宏块的线程进入休眠状态。
本发明实施例中,在未能够执行对所述待解码宏块进行解码的情况下,通过进入休眠状态,可以避免占用CPU资源,提升硬件性能,从而进一步提升帧级并行解码的效率。
在本发明一个非限制性的实施例中,图1所示步骤S105之后可以包括以下步骤:如果所述待解码视频帧为参考帧且对所述待解码宏块所处的当前宏块行解码完成,则广播所述待解码视频帧的解码进度为所述当前宏块行。
本实施例中,在待解码视频帧为参考帧的情况下,由于存在其他待解码视频帧需要参考该视频帧,因此需要将该参考帧的解码进度广播出去,以使得其他线程获得该参考帧的解码进度。
具体地,在广播解码进度时,为了避免浪费CPU资源,不必在每一宏块解码完成就广播解码进度;为了提升并行解码效率,也不必在参考帧全部解码完成再广播解码进度。由此,可以在当前宏块行解码完成后,广播所述待解码视频帧的解码进度为所述当前宏块行,以兼顾解码效率和CPU资源。
在本发明一个具体实施例中,在步骤S103的具体实施中,可以利用以下公式计算所述需求解码进度:progress=(yMBPos+MVy)/16+1,其中,progress表示所述需求解码进度,yMBPos表示所述待解码宏块在所述待解码视频帧中垂直方向上的位置,MVy表示所述待解码宏块的运动矢量在垂直方向上的分量。
具体地,需求解码进度progress可以表示待解码宏块所参考的参考帧中匹配块所处的宏块行。
图2是本发明实施例另一种视频解码方法的流程图。本实施例的视频解码方法可以由具备多核CPU的设备执行。具体地,所述视频解码方法可以由主线程执行。图2所示视频解码方法可以包括以下步骤:
步骤S201:逐帧读取待解码的视频,并确定当前的待解码视频帧;
步骤S202:按照多个工作线程的预设工作顺序确定待分配工作线程;
步骤S203:如果所述待分配工作线程处于空闲状态,则将所述待解码视频帧分配给所述待分配工作线程;
步骤S204:启动所述待分配工作线程进行解码。
其中,所述待分配工作线程按照前述实施例中的视频解码方法对所述待解码视频帧进行解码。
待解码视频可以是码流的形式,例如,I0P1B2B3P4B5B6P7…。在步骤S201的具体实施中,可以先读取待解码视频帧I0,并确定为当前的待解码视频帧,以执行步骤S202至步骤S204。依次类推,读取待解码视频帧P1,并确定为当前的待解码视频帧,以执行步骤S202至步骤S204;读取待解码视频帧B2,并确定为当前的待解码视频帧,以执行步骤S202至步骤S204;…。
多个工作线程具有预设的工作顺序。例如,对于线程1、线程2、线程3和线程4,预设工作顺序可以是线程1、线程2、线程3和线程4;那么,在步骤S202中确定待分配工作线程时,先确定线程1为待分配工作线程,再确定线程2为待分配工作线程,以此类推。
在步骤S203和步骤S204的具体实施中,在待分配工作线程处于空闲状态的情况下,将待解码的视频帧分配给待分配工作线程,并启动所述待分配工作线程进行解码。针对待解码视频帧的具体解码过程可参照前述实施例,此处不再赘述。
本发明一个非限制性的实施例中,在待分配工作线程处于非空闲状态的情况下,进入等待状态,直至待分配工作线程处于空闲状态。
本发明一个非限制性的实施例中,在图2所示步骤S203之前还可以包括以下步骤:将所述待分配工作线程已解码的视频帧加入解码帧队列。
本实施例中,由于视频帧的解码顺序与视频帧的显示顺序可能不一致,因此可以将当前已解码的视频帧加入解码帧队列进行缓存,以在输出视频帧时,可以从解码帧队列中按照显示顺序输出各个已解码的视频帧,保证视频显示的准确性。
例如对于待解码视频帧序列I0P1B2B3P4B5B6P7…,其解码顺序为I0P1B2B3P4B5B6P7…,其显示顺序为I0B2B3P1B5B6P4…。
需要说明的是,具体的解码顺序与显示顺序的确定,可以参照动态图象专家组(Moving Pictures Experts Group,MPEG4)标准,本发明实施例对此不做限制。
本发明一个非限制性的实施例中,图2所示方法还可以包括以下步骤:如果所述已解码的视频帧的类型为非参考帧,则将所述已解码的视频帧移出所述解码帧队列。
本发明实施例的步骤是在将所述待分配工作线程已解码的视频帧加入解码帧队列之后执行的。
具体地,对于类型为非参考帧(如B帧)的已解码的视频帧,由于非参考帧不会作为后续待解码视频帧的参考帧,因此可以直接将非参考帧移出所述解码帧队列。
进一步地,如果所述已解码的视频帧的类型为非参考帧,则输出所述已解码的视频帧。
也就是说,对于类型为非参考帧(如B帧)的已解码的视频帧,可以直接将非参考帧移出所述解码帧队列,并直接输出,以进行显示。
例如对于待解码视频帧序列I0P1B2B3P4B5B6P7…,B2帧解码完成后加入解码帧队列,由于B2帧不会作为后续待解码帧(B3P4B5B6P7)的参考帧,因此直接将B2帧解码帧队列并直接输出。
本发明一个非限制性的实施例中,图2所示方法还可以包括以下步骤:如果所述已解码的视频帧的类型为参考帧,则判断在所述解码帧队列中,排在所述已解码的视频帧之前的类型为参考帧的视频帧的数量,并在所述数量为两个时,将两个类型为参考帧的视频帧中前一个视频帧移出所述解码帧队列。
本实施例中,为了避免解码帧队列太长占用过多的内存资源,可以对解码帧队列的长度进行维护。由于解码待解码视频帧需要参考的参考帧数量最多为两个,因此可以在解码帧队列中参考帧数量大于两个时,将最早加入解码帧队列的参考帧移出队列。同时由于非参考帧在加入解码帧队列后就执行移出队列并输出,因此解码帧队列的长度始终包括两个参考帧,从而节约内存资源,有利于提升解码效率。
例如对于待解码视频帧序列I0P1B2B3P4B5B6P7…,I0帧解码完成并加入解码帧队列,排在I0帧前面的参考帧数量为0,不需移出任意参考帧;P1帧解码完成并加入解码帧队列,排在P1帧前面的参考帧数量为1(也即I0帧),不需移出任意参考帧;P4帧解码完成并加入解码帧队列,排在P4帧前面的参考帧数量为2(也即I0帧和P1帧),则将I0帧移出解码帧队列,此时解码帧队列包括P1帧和P4帧。以此类推,P7帧解码完成并加入解码帧队列,将P1帧移出解码帧队列,此时解码帧队列包括P4帧和P7帧。
本发明一个非限制性的实施例中,图2所示方法还可以包括以下步骤:如果所述已解码的视频帧的类型为参考帧,则判断在所述解码帧队列中,排在所述已解码的视频帧之后的首个视频帧的类型,并根据所述首个视频帧的类型确定是否输出所述已解码的视频帧。
本实施例中,对于新加入解码帧队列的类型为参考帧的已解码的视频帧,暂时不输出该已解码的视频帧。需要等待所述已解码的视频帧之后的首个视频帧加入解码帧队列,并判断该首个视频帧的类型,以确定是否输出该已解码的视频帧。
需要说明的是,如果所述已解码的视频帧的类型为参考帧且所述已解码的视频帧为所述待解码的视频中首个视频帧,则可以直接输出所述已解码的视频帧。
需要注意的是,本实施例是直接输出所述已解码的视频帧,所述已解码的视频帧仍然处于视频帧队列中,也即所述已解码的视频帧未被移出解码帧队列,以供后续的待解码视频帧使用。
例如,对于待解码视频帧序列I0P1B2B3P4B5B6P7…,对于已解码完成并加入解码帧队列的I0帧,由于I0帧是待解码视频帧序列的首个视频帧,因此直接输出I0帧;但I0帧仍位于解码帧队列中,以在解码B2帧时作为B2帧的参考帧。
本发明一个具体实施例中,如果所述首个视频帧的类型为参考帧,则输出所述已解码的视频帧;如果所述首个视频帧的类型为非参考帧,则继续判断在所述解码帧队列中,排在所述已解码的视频帧之后的第二个视频帧的类型,直至判断结果为参考帧,并输出所述已解码的视频帧。
例如,对于待解码视频帧序列I0P1P2P3…,对于已解码完成并加入解码帧队列的P1帧,需要等待P2帧加入解码帧队列后确定是否输出;由于P2帧为参考帧,因此P1帧可以输出。同理,P2帧也可以在P3帧加入解码帧队列后输出。输出的视频帧序列为I0P1P2…。
又例如,对于待解码视频帧序列I0P1B2B3P4B5B6P7…,对于已解码完成并加入解码帧队列的P1帧,需要等待B2帧加入解码帧队列后确定是否输出;由于B2帧为非参考帧,因此P1帧不能输出;再等待B3帧加入解码帧队列,由于B3帧为非参考帧,因此P1帧仍不能输出;再等待P4帧加入解码帧队列,由于P4帧为参考帧,因此P1帧可以输出。此外,由于B2帧和B3帧为非参考帧,因此在加入解码帧队列后可以直接输出。同理,P4帧需要在P7帧加入解码帧队列后输出。输出的视频帧序列为I0B2B3P1B5B6P4…。
请参照图3,图3所示应用场景为主线程的工作流程,具体对应于图2所示方法的实施例。
图3所示的视频解码方法可以包括以下步骤:
步骤S301:读取第i帧,并计算k=i%K,其中K表示工作线程的总数量,k表示待分配工作线程的编号。
步骤S302:判断工作线程k是否处于空闲状态,如果是,则进入步骤S304,否则进入步骤S303。
步骤S303:进入等待状态,直至线程k处于空闲状态。
步骤S304:将工作线程k已解码的视频帧加入解码帧队列。
步骤S305:将第i帧分配给工作线程k,启动工作线程k进行解码。
步骤S306:启动所述待分配工作线程进行解码。
步骤S307:判断已解码的视频帧的类型是否为参考帧,如果是,则进入步骤S310以及步骤S312,否则进入步骤S308。
步骤S308:将所述已解码的视频帧移出所述解码帧队列。
步骤S309:输出所述已解码的视频帧。
步骤S310:在解码帧队列中,判断排在已解码的视频帧之前的类型为参考帧的视频帧的数量是否为2,如果是,则进入步骤S311,否则进入步骤S314。
步骤S311:将两个类型为参考帧的视频帧中前一个视频帧移出所述解码帧队列。
步骤S312:在解码帧队列中,判断排在已解码的视频帧之后的首个视频帧的类型是否为参考帧,如果是,则进入步骤S309,否则进入步骤S313。
步骤S313:继续判断在所述解码帧队列中,排在所述已解码的视频帧之后的第二个视频帧的类型,直至判断结果为参考帧。
步骤S314:判断是否有剩余帧,如果是,则进入步骤S315,否则进入步骤S316。
步骤S315:i=i+1。也即,将i的数值加1。
步骤S316:解码结束。
需要说明的是,步骤S312是在主线程将工作线程k+1的已解码的视频帧加入视频帧队列后执行的。步骤S313是在主线程将工作线程k+2、k+3…的已解码的视频帧加入视频帧队列后执行的。
请参照图4,图4所示应用场景为工作线程的工作流程,具体对应于图1所示方法的实施例。
图4所示的视频解码方法可以包括以下步骤:
步骤S401:获取待解码视频帧,并被主线程启动解码。
步骤S403:确定待解码视频帧中的待解码宏块。
步骤S403:解析宏块头。宏块头包括待解码宏块的类型以及运动矢量。
步骤S404:判断待解码宏块的类型是否为帧间宏块,如果是,则进入步骤S405,否则进入步骤S408。
步骤S405:根据待解码宏块的宏块头中的运动矢量计算解码待解码宏块所参考的参考帧的需求解码进度。
步骤S406:接收解码待解码宏块所参考的参考帧的线程广播的广播信息,所述广播信息包括待解码宏块所参考的参考帧的当前解码进度。
步骤S407:判断当前解码进度是否达到需求解码进度,如果是,则进入步骤S408,否则进入步骤S413。
步骤S408:解码所述待解码宏块。
步骤S409:判断待解码视频帧是否为参考帧且对所述待解码宏块所处的当前宏块行解码是否完成,如果是,则进入步骤S410,否则进入步骤S411。
步骤S410:广播所述待解码视频帧的解码进度为所述当前宏块行。
步骤S411:判断待解码视频帧是否解码完成,如果是,则进入步骤S412,否则进入步骤S402。
步骤S412:进入空闲状态。
步骤S413:进入休眠状态。
需要说明的是,图4所示的视频解码方法仅为单个线程的工作过程。在实际的应用场景中,可以存在多个线程同时执行图4所示方法的各个步骤。
请参照图5,视频解码装置50可以包括待解码宏块确定模块501、类型确定模块502、需求解码进度计算模块503、广播信息接收模块504和解码模块505。
其中,待解码宏块确定模块501适于确定待解码视频帧中的待解码宏块,并解析所述待解码宏块的宏块头,所述待解码视频帧选自I帧、P帧和B帧;类型确定模块502适于根据所述待解码宏块的宏块头确定所述待解码宏块的类型;需求解码进度计算模块503适于在所述待解码宏块的类型为帧间宏块时,根据所述待解码宏块的宏块头中的运动矢量计算解码所述待解码宏块所参考的参考帧的需求解码进度;广播信息接收模块504适于在所述待解码宏块的类型为帧间宏块时,接收解码所述待解码宏块所参考的参考帧的线程广播的广播信息,所述广播信息包括所述待解码宏块所参考的参考帧的当前解码进度;解码模块505适于比较所述当前解码进度与所述需求解码进度,并根据比较结果确定是否对所述待解码宏块进行解码。
在本发明的具体应用场景中,所述视频解码装置50可以是解码器。
关于所述视频解码装置50的工作原理、工作方式的更多内容,可以参照图1至图4中的相关描述,这里不再赘述。
请参照图6,视频解码装置60可以包括视频读取模块601、待分配工作线程确定模块602、分配模块603和解码启动模块604。
其中,视频读取模块601适于逐帧读取待解码的视频,并确定当前的待解码视频帧;待分配工作线程确定模块602适于按照多个工作线程的预设工作顺序确定待分配工作线程;分配模块603适于在所述待分配工作线程处于空闲状态时,将所述待解码视频帧分配给所述待分配工作线程;解码启动模块604适于启动所述待分配工作线程进行解码,所述待分配工作线程按照图1所示所述视频解码方法对所述待解码视频帧进行解码。
关于所述视频解码装置60的工作原理、工作方式的更多内容,可以参照图1至图4中的相关描述,这里不再赘述。
本申请发明人通过实验证明,采用本发明实施例的解码方法的解码器,在四核Cortex-A15ARM架构的CPU上能够流畅地解码分辨率为1080p的高清视频。
本发明实施例还公开了一种存储介质,其上存储有计算机指令,所述计算机指令运行时可以执行图1或图2中所示方法的步骤。所述存储介质可以包括ROM、RAM、磁盘或光盘等。所述存储介质还可以包括非挥发性存储器(non-volatile)或者非瞬态(non-transitory)存储器等。
本发明实施例还公开了一种终端,所述终端可以包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的计算机指令。所述处理器运行所述计算机指令时可以执行图1或图2中所示方法的步骤。所述终端包括但不限于手机、计算机、平板电脑等终端设备。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。
Claims (13)
1.一种视频解码方法,其特征在于,包括:
确定待解码视频帧中的待解码宏块,并解析所述待解码宏块的宏块头,所述待解码视频帧选自I帧、P帧和B帧;
根据所述待解码宏块的宏块头确定所述待解码宏块的类型;
如果所述待解码宏块的类型为帧间宏块,则根据所述待解码宏块的宏块头中的运动矢量计算解码所述待解码宏块所参考的参考帧的需求解码进度,所述需求解码进度表示所述待解码宏块所参考的参考帧中匹配块的位置;
如果所述待解码宏块的类型为帧间宏块,则接收解码所述待解码宏块所参考的参考帧的线程广播的广播信息,所述广播信息包括所述待解码宏块所参考的参考帧的当前解码进度;
比较所述当前解码进度与所述需求解码进度,并根据比较结果确定是否对所述待解码宏块进行解码;
已解码视频帧存放在解码帧队列中,如果所述已解码的视频帧的类型为非参考帧,则输出所述已解码的视频帧;如果所述已解码的视频帧的类型为参考帧,则判断在所述解码帧队列中,排在所述已解码的视频帧之后的首个视频帧的类型,如果所述首个视频帧的类型为参考帧,则输出所述已解码的视频帧,如果所述首个视频帧的类型为非参考帧,则继续判断在所述解码帧队列中,排在所述已解码的视频帧之后的第二个视频帧的类型,直至判断结果为参考帧,并输出所述已解码的视频帧。
2.根据权利要求1所述的视频解码方法,其特征在于,所述根据比较结果确定是否对所述待解码宏块进行解码包括:
如果所述比较结果表示所述当前解码进度达到所述需求解码进度,则利用所述待解码宏块所参考的参考帧解码所述待解码宏块;
如果所述比较结果表示所述当前解码进度未达到所述需求解码进度,则控制解码所述待解码宏块的线程进入休眠状态。
3.根据权利要求1所述的视频解码方法,其特征在于,所述比较所述当前解码进度与所述需求解码进度包括:
如果解码所述待解码宏块的线程的当前状态为休眠状态,则根据所述广播信息控制解码所述待解码宏块的线程进入唤醒状态;
在解码所述待解码宏块的线程处于所述唤醒状态时,比较所述当前解码进度与所述需求解码进度。
4.根据权利要求1所述的视频解码方法,其特征在于,还包括:
如果所述待解码视频帧为参考帧且对所述待解码宏块所处的当前宏块行解码完成,则广播所述待解码视频帧的解码进度为所述当前宏块行。
5.根据权利要求1所述的视频解码方法,其特征在于,还包括:
如果所述待解码宏块的类型为帧内宏块,则直接对所述待解码宏块进行解码。
6.根据权利要求1所述的视频解码方法,其特征在于,利用以下公式计算所述需求解码进度:
progress=(yMBPos+MVy)/16+1,其中,progress表示所述需求解码进度,yMBPos表示所述待解码宏块在所述待解码视频帧中垂直方向上的位置,MVy表示所述待解码宏块的运动矢量在垂直方向上的分量。
7.一种视频解码方法,其特征在于,包括:
逐帧读取待解码的视频,并确定当前的待解码视频帧;
按照多个工作线程的预设工作顺序确定待分配工作线程;
如果所述待分配工作线程处于空闲状态,则将所述待解码视频帧分配给所述待分配工作线程;
启动所述待分配工作线程进行解码,所述待分配工作线程按照权利要求1至6任一项所述视频解码方法对所述待解码视频帧进行解码。
8.根据权利要求7所述的视频解码方法,其特征在于,所述将所述待解码视频帧分配给所述待分配工作线程之前还包括:
将所述待分配工作线程已解码的视频帧加入解码帧队列。
9.根据权利要求8所述的视频解码方法,其特征在于,所述方法还包括:
如果所述已解码的视频帧的类型为非参考帧,则将所述已解码的视频帧移出所述解码帧队列;
如果所述已解码的视频帧的类型为参考帧,则判断在所述解码帧队列中,排在所述已解码的视频帧之前的类型为参考帧的视频帧的数量,并在所述数量为两个时,将两个类型为参考帧的视频帧中前一个视频帧移出所述解码帧队列。
10.一种视频解码装置,其特征在于,包括:
待解码宏块确定模块,适于确定待解码视频帧中的待解码宏块,并解析所述待解码宏块的宏块头,所述待解码视频帧选自I帧、P帧和B帧;
类型确定模块,适于根据所述待解码宏块的宏块头确定所述待解码宏块的类型;
需求解码进度计算模块,适于在所述待解码宏块的类型为帧间宏块时,根据所述待解码宏块的宏块头中的运动矢量计算解码所述待解码宏块所参考的参考帧的需求解码进度,所述需求解码进度表示所述待解码宏块所参考的参考帧中匹配块的位置;
广播信息接收模块,适于在所述待解码宏块的类型为帧间宏块时,接收解码所述待解码宏块所参考的参考帧的线程广播的广播信息,所述广播信息包括所述待解码宏块所参考的参考帧的当前解码进度;
解码模块,适于比较所述当前解码进度与所述需求解码进度,并根据比较结果确定是否对所述待解码宏块进行解码;
已解码视频帧存放在解码帧队列中,如果所述已解码的视频帧的类型为非参考帧,则输出所述已解码的视频帧;如果所述已解码的视频帧的类型为参考帧,则判断在所述解码帧队列中,排在所述已解码的视频帧之后的首个视频帧的类型,如果所述首个视频帧的类型为参考帧,则输出所述已解码的视频帧,如果所述首个视频帧的类型为非参考帧,则继续判断在所述解码帧队列中,排在所述已解码的视频帧之后的第二个视频帧的类型,直至判断结果为参考帧,并输出所述已解码的视频帧。
11.一种视频解码装置,其特征在于,包括:
视频读取模块,适于逐帧读取待解码的视频,并确定当前的待解码视频帧;待分配工作线程确定模块,适于按照多个工作线程的预设工作顺序确定待分配工作线程;
分配模块,适于在所述待分配工作线程处于空闲状态时,将所述待解码视频帧分配给所述待分配工作线程;
解码启动模块,适于启动所述待分配工作线程进行解码,所述待分配工作线程按照权利要求1至6任一项所述视频解码方法对所述待解码视频帧进行解码。
12.一种存储介质,其上存储有计算机指令,其特征在于,所述计算机指令运行时执行权利要求1至6中任一项所述视频解码方法的步骤,或者执行权利要求7至9中任一项所述视频解码方法的步骤。
13.一种终端,包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的计算机指令,其特征在于,所述处理器运行所述计算机指令时执行权利要求1至6中任一项所述视频解码方法的步骤,或者执行权利要求7至9中任一项所述视频解码方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811245732.1A CN111093078B (zh) | 2018-10-23 | 2018-10-23 | 视频解码方法及装置、存储介质、终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811245732.1A CN111093078B (zh) | 2018-10-23 | 2018-10-23 | 视频解码方法及装置、存储介质、终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111093078A CN111093078A (zh) | 2020-05-01 |
CN111093078B true CN111093078B (zh) | 2022-08-19 |
Family
ID=70391724
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811245732.1A Active CN111093078B (zh) | 2018-10-23 | 2018-10-23 | 视频解码方法及装置、存储介质、终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111093078B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113395523B (zh) * | 2021-06-11 | 2023-05-30 | 深圳万兴软件有限公司 | 基于并行线程的图像解码方法、装置、设备及存储介质 |
CN116366864B (zh) * | 2023-03-23 | 2024-04-12 | 格兰菲智能科技有限公司 | 并行编解码方法、装置、计算机设备和存储介质 |
CN118338003B (zh) * | 2024-06-12 | 2024-09-13 | 北京欣博电子科技有限公司 | 视频解码方法、装置、计算机设备、可读存储介质和程序产品 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101584216A (zh) * | 2006-12-27 | 2009-11-18 | 英特尔公司 | 解码和编码视频信息的方法和装置 |
CN102763136A (zh) * | 2010-02-11 | 2012-10-31 | 诺基亚公司 | 用于提供多线程视频解码的方法和设备 |
CN104038766A (zh) * | 2014-05-14 | 2014-09-10 | 三星电子(中国)研发中心 | 用于以图像帧为基础执行并行视频编码的装置及其方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9648325B2 (en) * | 2007-06-30 | 2017-05-09 | Microsoft Technology Licensing, Llc | Video decoding implementations for a graphics processing unit |
US9161056B2 (en) * | 2010-11-24 | 2015-10-13 | Texas Instruments Incorporated | Method for low memory footprint compressed video decoding |
GB2498595B (en) * | 2012-02-16 | 2015-03-04 | Imagination Tech Ltd | Methods and apparatus for decoding video images |
-
2018
- 2018-10-23 CN CN201811245732.1A patent/CN111093078B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101584216A (zh) * | 2006-12-27 | 2009-11-18 | 英特尔公司 | 解码和编码视频信息的方法和装置 |
CN102763136A (zh) * | 2010-02-11 | 2012-10-31 | 诺基亚公司 | 用于提供多线程视频解码的方法和设备 |
CN104038766A (zh) * | 2014-05-14 | 2014-09-10 | 三星电子(中国)研发中心 | 用于以图像帧为基础执行并行视频编码的装置及其方法 |
Non-Patent Citations (1)
Title |
---|
Advanced video coding for generic audiovisual services;ITU-T;《SERIES H: AUDIOVISUAL AND MULTIMEDIA SYSTEMS Infrastructure of audiovisual services – Coding of moving video》;20170802;正文第77页第5-8段、正文第112-116页第8.2.1章节、正文第128页第8.2.5.3章节、正文第291-293页附录A3.1、正文第310页第1-3段附录C、正文第315页附录C2.1和表A-1 * |
Also Published As
Publication number | Publication date |
---|---|
CN111093078A (zh) | 2020-05-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111093078B (zh) | 视频解码方法及装置、存储介质、终端 | |
US9020286B2 (en) | Apparatus for dividing image data and encoding and decoding image data in parallel, and operating method of the same | |
US9210421B2 (en) | Memory management for video decoding | |
US20160080762A1 (en) | Encoding system using motion estimation and encoding method using motion estimation | |
JP2009540680A (ja) | ビデオブロックの並列バッチ復号 | |
JP2012124896A (ja) | 低遅延階層のbグループを有するピクチャ構造を用いた動画像符号化の方法及び装置 | |
US20100020877A1 (en) | Multiple reference frame motion estimation in video coding | |
EP3202145B1 (en) | Encoding and decoding a video frame in separate processing units | |
GB2492778A (en) | Motion compensated image coding by combining motion information predictors | |
WO2016210177A1 (en) | Parallel intra-prediction | |
CN107277519B (zh) | 一种判断视频帧的帧类型的方法及电子设备 | |
KR101292668B1 (ko) | 멀티프로세서기반의 영상 복호화 장치 및 방법 | |
US10142633B2 (en) | Flexible coding unit ordering and block sizing | |
CN112422983B (zh) | 通用多核并行解码器系统及其应用 | |
US10051270B2 (en) | Video encoding method using at least two encoding methods, device and computer program | |
Baaklini et al. | H. 264 parallel optimization on graphics processors | |
KR101756582B1 (ko) | 병렬 프로세싱을 위한 적응적 타일 분할 방법 및 이를 이용한 비디오 부호화/복호화 방법 | |
KR101364086B1 (ko) | 영상 복호 방법 및 장치 | |
Zhang et al. | Parallel Acceleration Scheme of HEVC Decoder Based on Multicore Platform | |
CN115580723A (zh) | 一种屏幕内容图像的编码优化方法、系统、设备及介质 | |
CN116437083A (zh) | 视频处理方法和视频处理装置 | |
JP2014179918A (ja) | 動画像符号化装置、その制御方法、及び撮像装置 | |
CN113115043A (zh) | 视频编码器、视频编码系统和视频编码方法 | |
JP2013062656A (ja) | 映像符号化方式 |
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 |