基于SIMD指令加速的视频码流NALU起始码搜索方法及装置与流程

文档序号:35964813发布日期:2023-11-09 04:03阅读:68来源:国知局
基于SIMD指令加速的视频码流NALU起始码搜索方法及装置与流程

本申请属于音视频编解码,尤其涉及一种基于simd指令加速的视频码流nalu起始码搜索方法及装置。


背景技术:

1、在基于h.264/h.265编码音视频的解码过程中,对于采用annex-b的码流格式,经常需要在码流中拆分出nalu单元,然后再对nalu单元进行视频解码。根据h.264/h.265的规范,nalu是以start code起始码来对不同的nalu进行分隔的,因此,想要在码流中拆分出nalu单元,只需要在码流中识别出各个起始码,就可以顺利地将nalu拆分出来了。

2、按照h.264/h.265annex-b的定义,每个nalu是以三个字节(0x000x00 0x01)或者四个字节(0x00 0x00 0x00 0x01)作为start code起始码标识。因为三字节的起始码正好是四字节起始码的后缀,所以在代码中只需要搜索三字节起始码就可以了,如果找到了0x00 0x00 0x01的字节序列,再判断前一个字节是否为0x00就可以知道是三字节起始码还是四字节起始码了。

3、对于单路播放器来说,起始码搜索的效率高低可能并不会对系统整体性能产生太大的影响,但是对于流媒体服务器来说,面对成百上千的并发请求,起始码搜索的效率高低就不容小觑了。对于流媒体服务器来说,经常需要对输入的码流实时转换为另外一种格式的码流,譬如将以h.264annex-b封装nalu的ps/ts输入码流转换成以avcc格式进行封装的flv或者mp4格式的码流。由于一台流媒体服务器经常需要并发处理成百上千路的视频推流,在对流媒体服务器的性能调优过程中,起始码的查找对于服务器的cpu的消耗占到了整体的20%以上,所以,对nalu起始码的查找性能进行优化变得非常必要,也必然能够为流媒体服务器的整体性能提升起到很好的效果。


技术实现思路

1、有鉴于此,本申请旨在提出一种基于simd指令加速的视频码流nalu起始码搜索方法及装置,以解决起始码搜索的效率严重影响流媒体服务器的cpu消耗的问题。

2、为达到上述目的,本申请的技术方案是这样实现的:

3、第一部分,本申请提供了一种基于simd指令加速的视频码流nalu起始码搜索方法,所述方法包括:

4、预先设定输入的包含有多个h.264或h.265视频nalu的连续存储的内存块nalu_data,其起始地址为p_head,对应的内存块长度为nalu_data_size;并设定输出的存储有每个nalu起始码在nalu_data中的偏移位置信息的数组nalu_pos;

5、基于simd指令读取内存块nalu_data,所述内存块nalu_data包括头部部分、中间部分和尾部部分;

6、响应于头部和尾部未按照16字节对齐的部分,通过第一搜索算法对nalu_data的头部部分和尾部部分进行搜索;

7、响应于按照16字节对齐的nalu_data中间部分,通过simd搜索算法对nalu_data的中间部分进行搜索。

8、第二方面,基于同一发明构思,本申请还提供了一种基于simd指令加速的视频码流nalu起始码搜索装置,所述装置包括:

9、预设模块,被配置为预先设定输入的包含有多个h.264或h.265视频nalu的连续存储的内存块nalu_data,其起始地址为p_head,对应的内存块长度为nalu_data_size;并设定输出的存储有每个nalu起始码在nalu_data中的偏移位置信息的数组nalu_pos;

10、阶段划分模块,被配置为基于simd指令读取内存块nalu_data,所述内存块nalu_data包括头部部分、中间部分和尾部部分;

11、第一响应模块,被配置为响应于头部和尾部未按照16字节对齐的部分,通过第一搜索算法对nalu_data的头部部分和尾部部分进行搜索;

12、第二响应模块,被配置为响应于按照16字节对齐的nalu_data中间部分,通过simd搜索算法对nalu_data的中间部分进行搜索。

13、第三方面,基于同一发明构思,本申请还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所述的基于simd指令加速的视频码流nalu起始码搜索方法。

14、第四方面,基于同一发明构思,本申请还提供了一种非暂态计算机可读存储介质,其中,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如第一方面所述的基于simd指令加速的视频码流nalu起始码搜索方法。

15、相对于现有技术,本申请所述的基于simd指令加速的视频码流nalu起始码搜索方法及装置具有以下有益效果:

16、本申请所述的基于simd指令加速的视频码流nalu起始码搜索方法及装置,所述方法通过simd指令来加速h.264/h.265nalu起始码的查找,从而大幅度提升nalu搜索过程的性能,区别于传统的cpu指令,simd指令能够在一个指令中对多个数据并行地进行处理,这样能够在单个机器指令周期内处理更多的数据,从而达到加速的效果,本申请基于x86-64cpu的sse2 simd指令集,通过优化查找算法,来实现naul起始码搜索的加速效果。



技术特征:

1.一种基于simd指令加速的视频码流nalu起始码搜索方法,其特征在于,所述方法包括:

2.根据权利要求1所述的基于simd指令加速的视频码流nalu起始码搜索方法,其特征在于,所述响应于头部和尾部未按照16字节对齐的部分,通过第一搜索算法对nalu_data的头部部分进行搜索,包括:

3.根据权利要求1所述的基于simd指令加速的视频码流nalu起始码搜索方法,其特征在于,所述响应于按照16字节对齐的nalu_data中间部分,通过simd搜索算法对nalu_data的中间部分进行搜索,包括:

4.根据权利要求3所述的基于simd指令加速的视频码流nalu起始码搜索方法,其特征在于,所述步骤s204、对[p,p+16)区间内的16字节的视频数据执行simd快速搜索,包括:

5.根据权利要求1所述的基于simd指令加速的视频码流nalu起始码搜索方法,其特征在于,还包括:

6.一种基于simd指令加速的视频码流nalu起始码搜索装置,其特征在于,所述装置包括:

7.根据权利要求6所述的基于simd指令加速的视频码流nalu起始码搜索装置,其特征在于,还包括:

8.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1-5任一项所述的基于simd指令加速的视频码流nalu起始码搜索方法。

9.一种非暂态计算机可读存储介质,其特征在于,其中,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行权利要求1-5任一项所述的基于simd指令加速的视频码流nalu起始码搜索方法。


技术总结
本申请提供了一种基于SIMD指令加速的视频码流NALU起始码搜索方法及装置,所述方法包括:预先设定输入的包含有多个H.264或H.265视频NALU的连续存储的内存块nalu_data;并设定输出的存储有每个NALU起始码在nalu_data中的偏移位置信息的数组nalu_pos;基于SIMD指令读取内存块nalu_data,所述内存块nalu_data包括头部部分、中间部分和尾部部分;响应于头部和尾部未按照16字节对齐的部分,通过第一搜索算法对nalu_data的头部部分和尾部部分进行搜索;响应于按照16字节对齐的nalu‑_data中间部分,通过SIMD搜索算法对nalu_data的中间部分进行搜索。本申请实现了一次循环检测16个字节的视频数据从而提升搜索的效率,并通过优化减少代码分支来降低CPU因为分支预测错误带来的性能影响,从而更进一步提升搜索效率。

技术研发人员:王磊
受保护的技术使用者:紫光云技术有限公司
技术研发日:
技术公布日:2024/1/16
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1