视频解码优化方法_3

文档序号:9380972阅读:来源:国知局
转换方法进行 转换,转换完成后设置相应的转换完成finish条件变量。具体转换公式如下等式组2所示。
[0058] yPtr = dataO+width*start_Y
[0059] uPtr = datal+width*start_Y/2
[0060] vPtr = data2+width*start_Y/2
[0061] out_Y = data3+width*start_Y
[0062] out_UV = data3+width*height+width*start_Y/2 等式组 2
[0063] 其中,yPtr、uPtr、vPtr分别表示子线程所要处理的Y、U、V子数据块的起始地址, data0、datal、data2分别表示原始Y、U、V数据的起始地址,out_Y、out_UV分别表示子线程 处理后的Y、UV数据的起始地址,data3表示处理后的Y、UV数据的起始地址。
[0064] 这里,在解码线程中,当完成一帧视频数据的解码时,会分别触发每个子线程的数 据更新(update)条件变量一次,然后等待每个子线程的转换完成(finish)条件变量。当获 得所有子线程的转换完成(finish)条件变量时,YUV420Planar到YUV420Semi-planar色彩 格式转换过程结束,并释放所有子线程及相应的资源。
[0065] 根据本发明的示例性实施例,通过基于多核平台的基于流水线的多线程并行视频 解码以及基于Neon协处理器和多核平台的YUV420Planar到YUV420Semi-planar色彩格式 转换,提高了视频解码速度,WMV、VP-x和MPEG-x等标准的视频解码速率相对于未经优化的 原始解码方法提高了 60%以上,在多核平台以及Neon协处理器上真正实现了支持高清及 以上分辨率的无延迟播放的软件解码器,并具有扩展性好、兼容性强的优点。
[0066] 虽然已经参照特定示例性实施例示出和描述了本发明,但是本领域的技术人员将 理解,在不脱离范围由权利要求及其等同物限定的本发明的精神和范围的情况下可作出形 式和细节上的各种改变。
【主权项】
1. 一种视频解码优化方法,包括: 创建和初始化多个解码线程; 在主线程中将视频负载包分别发送给多个解码线程; 由多个解码线程并行地对视频负载包的视频数据进行解码; 在对所有视频负载包的视频数据完成解码时,由主线程将对所有视频负载包的视频数 据完成解码的解码线程释放。2. 如权利要求1所述的视频解码优化方法,其中,创建和初始化多个解码线程的步骤 包括: 创建第一个解码线程,并对第一个解码线程进行上下文信息的初始化操作和上下文内 存分配操作; 创建所述多个解码线程中其余的解码线程,对其余的解码线程分别分配上下文内存并 拷贝第一个解码线程的初始化的上下文信息,并且状态机进入等待输入负载包状态。3. 如权利要求2所述的视频解码优化方法,其中,在主线程中将视频负载包分别发送 给多个解码线程的步骤包括针对每个解码线程进行以下步骤: (a) 确定当前解码线程是否是接收视频负载包的第一个解码线程; (b) 如果当前解码线程不是第一个解码线程,则等待前一个解码线程的状态改变为解 码准备完成状态,随后执行步骤(c),如果当前解码线程是第一个解码线程,则直接执行步 骤(c); (c) 将视频负载包发送给当前解码线程,将当前解码线程的状态设置为视频负载包准 备完成状态,并为当前解码线程分配输出帧存储内存。4. 如权利要求3所述的视频解码优化方法,其中,为当前解码线程分配输出帧存储内 存的步骤包括: 如果获取帧存储内存的操作是线程安全的,则不将当前解码线程的状态设置为获取帧 内存状态,而直接获取主线程分配的帧存储内存; 如果获取帧存储内存的操作是非线程安全的,则将当前解码线程的状态设置为获取 帧内存状态,并返回主线程,等待当前解码线程完成解码后,再获取主线程分配的帧存储内 存。5. 如权利要求4所述的视频解码优化方法,其中,由多个解码线程并行地对视频负载 包的视频数据进行解码的步骤包括针对每个解码线程并行地进行以下步骤: (d) 确定当前解码线程的状态是否为等待输入负载包状态,如果当前解码线程的状 态是等待输入负载包状态,则等待直到当前解码线程的状态变成非等待输入负载包状态, 随后执行步骤(e),如果当前解码线程的状态不是等待输入负载包状态,则直接执行步骤 (e); (e) 对当前解码线程的上下文信息进行更新,并将当前解码线程的状态设置为解码准 备完成状态; (f) 由当前解码线程对视频负载包进行解码; (g) 将视频负载包完成解码的当前解码线程的状态恢复为等待输入负载包状态,重复 执行步骤(e)、(f),并在所有视频负载包完成解码时由主线程将所有视频负载包完成解码 的当前解码线程释放。6. 如权利要求1所述的视频解码优化方法,其中,由多个解码线程并行地对视频负载 包的视频数据进行解码的步骤包括: 如果视频数据的当前帧的宏块行n未完成解码且需要参考其它帧,则可对当前帧的宏 块行n进行加锁并等待参考帧的完成解码,如果宏块行n已经解锁并完成解码,则宏块行n 前面的宏块行均已完成解码; 如果视频数据的当前帧的宏块行k的宏块1参考了参考帧的宏块行j的宏块m,并且参 考帧的宏块行j还未完成解码,则使用互斥锁使当前帧的宏块行k的解码处于等待状态,直 到参考帧的宏块行j完成解码, 其中,n、k、l、j、m均为正整数。7. 如权利要求1所述的视频解码优化方法,其中,对视频数据进行相同类型的操作的 标量运算被转换为能够进行并行处理的矢量运算。8. 如权利要求1所述的视频解码优化方法,还包括: 将解码后的视频数据从YUV420平面格式转换为YUV420半平面格式。9. 如权利要求8所述的视频解码优化方法,其中,基于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分量的转换完成, 其中,第二预定数量小于第一预定数量。10. 如权利要求8所述的视频解码优化方法,其中,基于多核平台将解码后的视频数据 从YUV420平面格式转换为YUV420半平面格式,所述转换步骤包括 : 将宽度为width、高度为height的YUV数据块分割成N个YUV子数据块,每个YUV子数 据块的宽度为width,高度为height/N ; 创建N个子线程,并初始化每个子线程对应的数据结构体,在所述数据结构体中包含 子线程所要处理的YUV子数据块的起始地址; 针对每个子线程,创建数据更新条件变量和转换完成条件变量用于子线程之间以及子 线程和主线程之间的同步,并放到相应的数据结构体中; 当更新条件变量被触发时,每个子线程根据YUV子数据块的起始地址将解码后的视 频数据从YUV420平面格式转换为YUV420半平面格式,转换完成后设置相应的完成条件变 量; 当获得所有子线程的完成条件变量时,释放所有子线程, 其中,当解码线程完成一帧视频数据的解码时,分别触发每个子线程的更新条件变量 一次。
【专利摘要】提供了一种视频解码优化方法,所述方法包括:创建和初始化多个解码线程;在主线程中将视频负载包分别发送给多个解码线程;由多个解码线程并行地对视频负载包的视频数据进行解码;在对所有视频负载包的视频数据完成解码时,由主线程将对所有视频负载包的视频数据完成解码的解码线程释放。
【IPC分类】H04N19/44, H04N19/186, H04N19/436, H04N19/40
【公开号】CN105100803
【申请号】CN201410179194
【发明人】王左龙, 吴迪, 陈亮, 朱春波, 常江龙
【申请人】三星电子(中国)研发中心, 三星电子株式会社
【公开日】2015年11月25日
【申请日】2014年4月29日
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1