视频解码优化方法

文档序号:9380972阅读:585来源:国知局
视频解码优化方法
【技术领域】
[0001] 本申请涉及视频编解码领域,更具体地,涉及一种视频解码优化方法。
【背景技术】
[0002] 首先,现有的多媒体播放器通常使用硬件解码器来流畅播放高清(HD)及以上分 辨率的视频文件,但是硬件解码器的兼容性和扩展性都较差,而目前的软件解码器通常无 法支持高清(HD)及以上分辨率视频文件的实时解码和流畅播放。此外,现有的软件解码器 的并行优化方法多是针对解码器的特定算法并行,即使有些并行优化方法涉及整个解码流 程也未能充分发挥多核平台的硬件优势。
[0003] 其次,现有的解码算法为提高解码的准确度从而使用复杂度较高的算法,在不降 低解码准确度的情况下,需要降低解码算法本身的时间复杂度,使数字信号处理器(DSP) 的计算能力和图像质量之间的矛盾不断增加。
[0004] 再次,现有的显示引擎通常要求输入图像是YUV420半平面(Semi-planar)格式, 而软件解码器的输出通常是YUV420平面(Planar)格式。YUV420Planar格式的存储方式 是将YUV三个分量分开存储,而YUV420Semi-planar格式的存储方式是将Y分量单独存储, 再将UV分量交叉打包存储。现有的YUV420Planar到YUV420Semi-planar色彩格式转换的 实现方法是在C语言级别上实现的,对UV分量的处理是通过从源端依次取一个U分量和一 个V分量,再将这一对UV分量打包存储在目的端来实现的,因此未能有效利用CPU内部总 线带宽,并且也未能有效利用多核平台的并行处理能力,导致转换速度很慢,严重影响高清 视频甚至是标清视频的流畅播放。

【发明内容】

[0005] 本发明的目的在于提供一种视频解码优化方法,包括:创建和初始化多个解码线 程;在主线程中将视频负载包分别发送给多个解码线程;由多个解码线程并行地对视频负 载包的视频数据进行解码;在对所有视频负载包的视频数据完成解码时,由主线程将对所 有视频负载包的视频数据完成解码的解码线程释放。
[0006] 创建和初始化多个解码线程的步骤可包括:创建第一个解码线程,并对第一个解 码线程进行上下文信息的初始化操作和上下文内存分配操作;创建所述多个解码线程中其 余的解码线程,对其余的解码线程分别分配上下文内存并拷贝第一个解码线程的初始化的 上下文信息,并且状态机进入等待输入负载包状态。
[0007] 在主线程中将视频负载包分别发送给多个解码线程的步骤可包括针对每个解码 线程进行以下步骤:(a)确定当前解码线程是否是接收视频负载包的第一个解码线程;(b) 如果当前解码线程不是第一个解码线程,则等待前一个解码线程的状态改变为解码准备完 成状态,随后执行步骤(C),如果当前解码线程是第一个解码线程,则直接执行步骤(C); (C)将视频负载包发送给当前解码线程,将当前解码线程的状态设置为视频负载包准备完 成状态,并为当前解码线程分配输出帧存储内存。
[0008] 为当前解码线程分配输出帧存储内存的步骤可包括:如果获取帧存储内存的操作 是线程安全的,则不将当前解码线程的状态设置为获取帧内存状态,而直接获取主线程分 配的帧存储内存;如果获取帧存储内存的操作是非线程安全的,则将当前解码线程的状态 设置为获取帧内存状态,并返回主线程,等待当前解码线程完成解码后,再获取主线程分配 的帧存储内存。
[0009] 由多个解码线程并行地对视频负载包的视频数据进行解码的步骤可包括针对每 个解码线程并行地进行以下步骤:(d)确定当前解码线程的状态是否为等待输入负载包状 态,如果当前解码线程的状态是等待输入负载包状态,则等待直到当前解码线程的状态变 成非等待输入负载包状态,随后执行步骤(e),如果当前解码线程的状态不是等待输入负 载包状态,则直接执行步骤(e) ;(e)对当前解码线程的上下文信息进行更新,并将当前解 码线程的状态设置为解码准备完成状态;(f)由当前解码线程对视频负载包进行解码;(g) 将视频负载包完成解码的当前解码线程的状态恢复为等待输入负载包状态,重复执行步骤 (e)、(f),并在所有视频负载包完成解码时由主线程将所有视频负载包完成解码的当前解 码线程释放。
[0010] 由多个解码线程并行地对视频负载包的视频数据进行解码的步骤可包括:如果视 频数据的当前帧的宏块行η未完成解码且需要参考其它帧,则可对当前帧的宏块行η进行 加锁并等待参考帧的完成解码,如果宏块行η已经解锁并完成解码,则宏块行η前面的宏块 行均已完成解码;如果视频数据的当前帧的宏块行k的宏块1参考了参考帧的宏块行j的 宏块m,并且参考帧的宏块行j还未完成解码,则使用互斥锁使当前帧的宏块行k的解码处 于等待状态,直到参考帧的宏块行j完成解码,其中,n、k、1、j、m均为正整数。
[0011] 对视频数据进行相同类型的操作的标量运算可被转换为能够进行并行处理的矢 量运算。
[0012] 所述视频解码优化方法还可包括:将解码后的视频数据从YUV420平面格式转换 为YUV420半平面格式。
[0013] 可基于Neon协处理器将解码后的视频数据从YUV420平面格式转换为YUV420半 平面格式,所述转换步骤可包括:如果Neon协处理器的源端的未转换的U分量和V分量均 不小于第一预定数量,则从源端的U分量提取第一预定数量的U分量并存储到第一寄存器, 从源端的V分量提取第一预定数量的V分量并存储到第二寄存器,并使用交叉存储指令将 第一寄存器中的U分量和第二寄存器中的V分量交叉存储到目的端,重复执行上述步骤,直 到Neon协处理器的源端的未转换的U分量和V分量均小于第一预定数量;如果Neon协处 理器的源端的未转换的U分量和V分量均小于第一预定数量,则从源端的U分量提取第二 预定数量的U分量并存储到第一寄存器,从源端的V分量提取第二预定数量的V分量并存 储到第一寄存器,并使用交叉存储指令将第一寄存器中的U分量和V分量交叉存储到目的 端,重复执行上述步骤,直到所有U分量和V分量的转换完成,其中,第二预定数量小于第一 预定数量。
[0014] 可基于多核平台将解码后的视频数据从YUV420平面格式转换为YUV420半平面格 式,所述转换步骤可包括:将宽度为width、高度为height的YUV数据块分割成N个YUV子 数据块,每个YUV子数据块的宽度为width,高度为height/N ;创建N个子线程,并初始化每 个子线程对应的数据结构体,在所述数据结构体中包含子线程所要处理的YUV子数据块的 起始地址;针对每个子线程,创建数据更新条件变量和转换完成条件变量用于子线程之间 以及子线程和主线程之间的同步,并放到相应的数据结构体中;当更新条件变量被触发时, 每个子线程根据YUV子数据块的起始地址将解码后的视频数据从YUV420平面格式转换为 YUV420半平面格式,转换完成后设置相应的完成条件变量;当获得所有子线程的完成条件 变量时,释放所有子线程,其中,当解码线程完成一帧视频数据的解码时,分别触发每个子 线程的更新条件变量一次。
[0015] 将在接下来的描述中部分阐述本发明另外的方面和/或优点,还有一部分通过描 述将是清楚的,或者可以经过本发明的实施而得知。
【附图说明】
[0016] 通过下面结合附图进行的描述,本发明的上述和其它目的和特点将会变得更加清 楚,其中:
[0017] 图1是示出根据本发明示例性实施例的基于流水线的多线程并行视频解码方法 的流程图;
[0018] 图2是示出根据本发明示例性实施例的基于Neon协处理器的YUV420Planar到 YUV420Semi-planar色彩格式转换方法的流程图;
[0019] 图3是示出根据本发明示例性实施例的基于多核平台的YUV420Planar到 YUV420Semi-planar色彩格式转换方法的流程图。
【具体实施方式】
[0020] 现在,详细描述本发明的示例性实施例,其示例在附图中表示,其中,相同的标号 始终表示相同的部件。
[0021] 图1是示出根据本发明示例性实施例的基于多核平台的基于流水线的多线程并 行视频解码方法的流程图。
[0022] 如图1所示,在步骤S110,开启状态机,创建和初始化多个解码线程。
[0023] 更具体地,根据预定线程数N对多个解码线程中的每一个分配上下文内存,该上 下文内存由各自的解码线程本身维护。即,在创建第一个解码线程之后,对第一个解码线程 进行上下文信息的初始化操作和上下文内存分配操作,初始化具体内容由当前视频格式决 定,在第一个解码线程初始化之后
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1