一种采用FPGA实现的H264/AVC视频辅助增强信息封装电路的制作方法

文档序号:17376907发布日期:2019-04-12 23:24阅读:688来源:国知局
一种采用FPGA实现的H264/AVC视频辅助增强信息封装电路的制作方法

本发明涉及机载视频压缩技术领域,尤其是一种视频辅助增强信息封装电路。



背景技术:

h.264/avc(以下简称h.264)是国际标准化组织和国际电信联盟共同提出的视频编解码技术标准之一,具有高压缩比、低码率和较高的压缩视频质量。辅助增强信息(supplementalenhancementinformation,sei)是h.264标准的一部分,用于辅助处理视频解码和显示环节等。

随着视频编码技术和fpga技术的快速发展,越来越多的h.264视频编码采用fpga进行实现,具有很高的性能和灵活度。

sei是视频码流结构中的概念,提供了向视频码流中加入辅助信息的方法,是h.264视频压缩标准的特性之一。sei集成在视频码流中,对视频解码过程(容错、纠错等)有帮助,但并不是视频解码过程的必须项。sei的特点意味着视频编码器在输出视频码流的时候,可以不提供sei信息。

目前h.264视频压缩领域中,很多h.264编码器不产生sei,或采用软件的方法产生sei,然后插入到视频码流中。本文所述采用fpga实现的sei封装电路,由fpga实现h.264视频码流解析、sei的产生和封装,与软件产生sei的方法相比,具有快捷、灵活、通用性强的特点。



技术实现要素:

为了克服现有技术的不足,本发明提供一种快捷、灵活、通用性强的h.264视频辅助增强信息封装电路。

本发明解决其技术问题所采用的技术方案是:

本发明所述采用fpga实现的h.264/avc视频辅助增强信息封装电路包括视频解析单元、sei产生单元、视频填充单元和视频输出单元。

所述的视频解析单元的功能是解析h.264视频码流,识别h.264码流中一帧的开始和结束,识别帧类型,帧类型为i帧和p帧,并统计视频帧的实际长度;在解析视频码流的同时,将视频原始码流发送给视频输出单元,并将包含帧起始信号、帧结束信号、i帧类型信号、帧长度的视频解析结果发送给sei产生单元、视频填充单元和视频输出单元,根据h.264标准中码流结构的定义,h.264码流的基本单元为网络抽象层单元(networkabstractionlayerunits,nalu),nalu包括nalu起始码、nalu类型以及nalu负载数据,其中nalu起始码为0x00000001,nalu类型为起始码后的一个字节,nalu类型共8位,第1位为禁止位,始终为0,为1则表示码流出错,第2~3位为参考级别,第4~8位是nalu单元类型,h.264码流中视频帧由访问单元分隔符(accessunitdelimiter,aud)进行分割,aud是一种nalu,其中nalu单元类型为0x09,视频解析单元接收到视频码流后,寻找nalu起始码,然后根据nalu类型判断该nalu是否为aud,即可识别一帧的开始和结束,nalu类型表征该nalu是否为i帧数据,nalu单元类型为0x5,表示该nalu为i帧数据,视频解析单元接收到原始视频码流后,寻找nalu起始码,然后根据nalu类型即可识别nalu是否为i帧。

所述的sei产生单元的功能是接收用户自定义信息,产生符合h.264视频标准的辅助增强信息,并发送给视频输出单元,sei是一种nalu,其中nalu单元类型为0x06,负载长度由用户定义;sei产生单元收到视频解析单元的帧起始信号后,开始产生该帧的sei,sei包括起始码0x00000001、nalu单元类型0x06、sei负载长度、i帧标志、用户自定义信息和结束码0x80,所述的sei负载长度包含单位字节,该帧sei总长度减去起始码、nalu单元类型和结束码长度,用户自定义信息包含时间、帧长度、特殊帧标志;

所述视频填充单元按照用户要求的视频帧对齐长度,将h.264视频码流中的每帧填充至视频帧对齐长度的整数倍,并发送给视频输出单元,视频填充单元收到视频解析单元发送的帧结束信号后,根据用户要求的视频帧对齐长度、sei长度和当前视频帧长度,计算需要填充的数据长度,如用户要求按a字节对齐,sei长度为b字节,当前视频帧长度为c字节,则填充长度d=a-(b+c)%a,其中%表示取余数,并按照填充长度d输出填充数据至视频输出单元。

所述的视频输出单元实现辅助增强信息、原始视频码流和填充内容的分时输出,视频输出单元收到帧起始信号后开始输出数据,首先接收当前帧sei并输出,然后接收当前帧数据并输出,收到帧结束信号后,接收填充数据并输出。

所述的sei封装原始视频码流包含aud、sps(序列参数集,sequenceparameterset)、pps(图像参数集,pictureparameterset)和cu(编码块,codeslice),其中sps和pps仅i帧;

sei封装时,在视频帧每个aud前添加sei;视频填充过程,在cu后进行数据填充,按用户定义的对齐长度进行数据填充,最终输出的视频码流结构为[fn_block0,fn_block1,…fn_block(m-1),fn_blockmwithpadding_data],其中fn_block(m-1)表示第n帧视频的第m-1块,每块长度即对齐长度,fn_blockmwithpadding_data表示第n帧的最后一块,最后一块中包含了填充数据。

本发明的有益效果由于采用fpga实现的h.264视频辅助增强信息封装电路,为h.264视频辅助增强信息封装提供了一种有效的解决方案,并具有如下优点:

1)采用fpga实现sei封装和数据填充,相比软件实现的方法,速度更快,稳定性好,可靠性高;

2)采用本发明所述sei封装电路,将视频帧按照用户要求的长度对齐,可以保证后续视频传输环节中每帧数据都可以及时发送出去,不会因为单次传输长度的限制引起视频帧数据残留,有利于降低视频传输延时;

3)本发明所述sei封装电路中,sei内容和填充长度均可由用户自定义,灵活性强:

4)本发明所述sei封装电路,采用通用veriloghdl语言实现,易于在不同fpga之间移植,通用性强。

附图说明

图1为本发明h.264视频辅助增强信息封装电路示意图。

图2为本发明sei封装前后视频帧结构。

图3为本发明sei封装和视频填充状态流程图。

具体实施方式

下面结合附图和实施例对本发明进一步说明。

本发明所述h.264视频辅助增强信息封装电路包括视频解析单元、sei产生单元、视频填充单元和视频输出单元,如图1所示。

所述的视频解析单元的功能是解析h.264视频码流,识别h.264码流中一帧的开始和结束,识别帧类型,帧类型为i帧和p帧,并统计视频帧的实际长度;在解析视频码流的同时,将视频原始码流发送给视频输出单元,并将包含帧起始信号、帧结束信号、i帧类型信号、帧长度的视频解析结果发送给sei产生单元、视频填充单元和视频输出单元,根据h.264标准中码流结构的定义,h.264码流的基本单元为网络抽象层单元(networkabstractionlayerunits,nalu),nalu包括nalu起始码、nalu类型以及nalu负载数据,其中nalu起始码为0x00000001,nalu类型为起始码后的一个字节,nalu类型共8位,第1位为禁止位,始终为0,为1则表示码流出错,第2~3位为参考级别,第4~8位是nalu单元类型,h.264码流中视频帧由访问单元分隔符(accessunitdelimiter,aud)进行分割,aud是一种nalu,其中nalu单元类型为0x09,视频解析单元接收到视频码流后,寻找nalu起始码,然后根据nalu类型判断该nalu是否为aud,即可识别一帧的开始和结束,nalu类型表征该nalu是否为i帧数据,nalu单元类型为0x5,表示该nalu为i帧数据,视频解析单元接收到原始视频码流后,寻找nalu起始码,然后根据nalu类型即可识别nalu是否为i帧。

所述的sei产生单元的功能是接收用户自定义信息,产生符合h.264视频标准的辅助增强信息,并发送给视频输出单元,sei是一种nalu,其中nalu单元类型为0x06,负载长度由用户定义;sei产生单元收到视频解析单元的帧起始信号后,开始产生该帧的sei,sei包括起始码0x00000001、nalu单元类型0x06、sei负载长度、i帧标志、用户自定义信息和结束码0x80,所述的sei负载长度包含单位字节,该帧sei总长度减去起始码、nalu单元类型和结束码长度,用户自定义信息包含时间、帧长度、特殊帧标志;

所述视频填充单元按照用户要求的视频帧对齐长度,将h.264视频码流中的每帧填充至视频帧对齐长度的整数倍,并发送给视频输出单元,视频填充单元收到视频解析单元发送的帧结束信号后,根据用户要求的视频帧对齐长度、sei长度和当前视频帧长度,计算需要填充的数据长度,如用户要求按a字节对齐,sei长度为b字节,当前视频帧长度为c字节,则填充长度d=a-(b+c)%a,其中%表示取余数,并按照填充长度d输出填充数据至视频输出单元。

所述的视频输出单元实现辅助增强信息、原始视频码流和填充内容的分时输出,视频输出单元收到帧起始信号后开始输出数据,首先接收当前帧sei并输出,然后接收当前帧数据并输出,收到帧结束信号后,接收填充数据并输出。

所述的sei封装前后视频帧结构如图2所示,原始视频码流包含aud、sps(序列参数集,sequenceparameterset)、pps(图像参数集,pictureparameterset)和cu(编码块,codeslice),其中sps和pps仅i帧;

sei封装时,在视频帧每个aud前添加sei;视频填充过程,在cu后进行数据填充,按用户定义的对齐长度进行数据填充,最终输出的视频码流结构如图2最右侧所示,即[fn_block0,fn_block1,…fn_block(m-1),fn_blockmwithpadding_data],其中fn_block(m-1)表示第n帧视频的第m-1块,每块长度即对齐长度,fn_blockmwithpadding_data表示第n帧的最后一块,最后一块中包含了填充数据。

本发明设计一种在fpga中实现的h.264视频辅助增强信息封装电路,如图1所示,在fpga内的h.264编码ip完成视频压缩后,完成h.264视频码流的解析,添加sei信息,并将视频填充成用户要求对齐长度的整数倍。整个sei封装环节不再需要传统实现方式上的软件参与,并有利于降低视频码流的传输延时,为视频接收端的视频解码和显示提供帮助。

h.264视频辅助增强信息封装流程如图3所示,具体流程如下。

1、视频解析单元接收、解析h.264原始视频码流,识别视频中的一帧的开始并发送frame_start(帧起始)信号给sei产生单元;

2、sei产生单元接收到frame_start信号后,根据用户自定义信息,产生符合avc标准的辅助增强信息,并发送给视频输出单元;辅助增强信息发送完毕后产生sei_done(sei发送完毕)信号给视频解析单元;

3、视频解析单元接收到sei_done信号后,向视频输出单元发送原始视频码流,识别达到视频帧结束后发送frame_done(帧结束)信号给视频填充单元;

4、视频填充单元根据用户要求的视频帧对齐长度,在视频解析单元和sei产生单元发送数据时计算需要填充的数据长度,在收到frame_done信号后,向选择器发送填充内容;填充内容发送完毕后发送padding_done(填充完毕)信号给视频解析单元。

5、视频输出单元负责向外发送辅助增强信息、原始视频信息和填充内容。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1