一种基于Intel、AMD和Nvidia三平台的H264硬件解码系统的制作方法

文档序号:9671200阅读:1646来源:国知局
一种基于Intel、AMD和Nvidia三平台的H264硬件解码系统的制作方法
【技术领域】
[0001 ] 本发明属于图形图像技术领域,更具体地,涉及一种基于Intel、AMD和Nvidia三平台的H264硬件解码系统。
【背景技术】
[0002]Η.264是国际标准化组织(IS0)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式。H.264是ITU-T以H.26x系列为名称命名的视频编解码技术标准之一。Η.264是ITU-T的VCEG (视频解码专家组)和IS0/IEC的MPEG (活动图像解码专家组)的联合视频组(JVT: joint video team)开发的一个数字视频解码标准。该标准最早来自于ITU-T的称之为H.26L的项目的开发。H.26L这个名称虽然不太常见,但是一直被使用着。
H.264是ITU-T以H.26x系列为名称命名的标准之一,AVC是IS0/IEC MPEG—方的称呼。
[0003]目前大部分的H264解码使用的是libx264的软件解码,这样在计算机的CPU性能比较差的情况下,会严重消耗中央处理器(Central Processing Unit,CPU)资源,导致计算机系统系统性能下降;即使有些计算机使用了硬件解码,但是仅仅是支持Intel平台的集成显卡或者Nvidia平台,并不能对Intel、AMD、Nvidia这几大平台进行统一的支持。

【发明内容】

[0004]针对现有技术的以上缺陷或改进需求,本发明提供了一种基于Intel、AMD和Nvidia三平台的H264硬件解码系统,其目的在于能够针对不同硬件平台的计算机平台无感知的提供相应的硬件解码方案,由此解决现有技术下部分计算机系统无法进行H264硬件解码的技术问题。
[0005]为实现上述目的,本发明提供了一种基于Intel、AMD和Nvidia三平台的H264硬件解码系统,包括通用解码模块、Intel硬件解码器、AMD硬件解码器以及Nvidia硬件解码器,其中:
[0006]所述通用解码模块,用于创建通用解码接口,判断计算机系统所支持的硬件解码器类型,根据计算机系统所支持的硬件解码器类型选择调用Intel硬件解码器、AMD硬件解码器或Nvidia硬件解码器中的任一种进行H264视频解码;
[0007]所述Intel硬件解码器,用于对支持Intel硬件解码的计算机系统进行H264视频解码;
[0008]所述AMD硬件解码器,用于对支持AMD硬件解码的计算机系统进行H264视频解码;
[0009]所述Nvidia硬件解码器,用于对支持Nvidia硬件解码的计算机系统进行H264视频解码。
[0010]本发明的一个实施例中,所述通用解码模块包括通用解码器接口子模块和解码器执行子模块,其中:
[0011 ]所述通用解码器接口子模块用于实现对解码器接口的定义,所述解码器接口包括文件打开接口、解码器类型获取接口和解码器创建接口,其中:
[0012]所述文件打开接口用于打开欲写入解码结果的文件,或者建立RTMP协议连接或者RTSP协议连接,所述文件打开接口的输入参数包括文件路径和读写文件参数;
[0013]所述解码器类型获取接口用于获取计算机系统所支持的解码器类型,以使所述解码器创建接口根据所述计算机系统所支持的解码器类型创建相应类型的硬件解码器;
[0014]所述解码器创建接口用于根据所述解码器类型获取接口返回的解码器类型创建相应类型的解码器,其输入参数为解码器类型,输出为相应类型解码器,所述解码器类型为Intel硬件解码器,或者AMD硬件解码器,或者Nvidia硬件解码器;
[0015]所述解码器执行子模块用于根据上述通用解码器接口子模块对解码器接口的定义创建解码器接口,利用创建的解码器接口判断计算机系统所支持的硬件解码器,选择调用Intel硬件解码器、AMD硬件解码器或Nvidia硬件解码器中的任一种对视频进行H264解码。
[0016]本发明的一个实施例中,所述解码器接口还包括读文件头接口,所述读文件头接口用于读文件头,所述文件头中包括了视频解码器的H264序列集参数和PPSH264图像集参数。
[0017]本发明的一个实施例中,所述解码器接口还包括元数据信息读取接口,用于读取文件中的元数据信息,包括元数据的个数,元数据中的键信息以及元数据中的值信息。
[0018]本发明的一个实施例中,所述解码器创建接口包括解码器打开接口、解码器关闭接口以及图像解码接口,其中:
[0019]所述解码器打开接口用于打开解码器,输入参数包括待解码视频的宽和待解码视频的尚;
[0020]所述图像解码接口用于在上述解码器打开后,利用解码器解码图像,输入参数为待解码的视屏字节流以及解码后视屏的显示时间戳,输出为解码后的图像;
[0021]所述解码器关闭接口用于在解码结束后,关闭上述打开的解码器。
[0022]本发明的一个实施例中,所述解码器类型获取接口获取计算机系统所支持的解码器类型具体为:
[0023]若返回CT_QSV264,表示计算机系统支持Intel硬件解码;
[0024]若返回CT_AMD264,表示计算机系统支持AMD硬件解码;
[0025]若返回CT_NV264,表示计算机系统支持Nvidia硬件解码;
[0026]若返回CT_X264,表示计算机系统不支持任何硬件解码。
[0027]本发明的一个实施例中,所述图像解码接口具体包括字节流缓冲区建立子模块、图像高度设置子模块、图像宽度设置子模块、行像素大小获取子模块以及视频帧显示时间戳获取子模块,其中:
[0028]所述字节流缓冲区建立子模块,用于建立用于解码器解码的H264字节流缓冲区,
[0029]所述图像高度设置子模块,用于设置返回图像的高度;
[0030]所述图像宽度设置子模块,用于设置返回图像的宽度;
[0031]所述行像素大小获取子模块,用于获取返回图像一行像素占用的字节大小;
[0032]所述视频帧显示时间戳获取子模块,用于获取视频帧显示时间戳。
[0033]本发明的一个实施例中,所述Intel硬件解码器包括Intel硬件解码器初始化子模块、Intel硬件解码器解码子模块以及Intel硬件解码器关闭子模块,其中:
[0034]所述Intel硬件解码器初始化子模块用于初始化Intel硬件解码器,具体包括SDK初始化子模块、解码初始化子模块和显存分配子模块,其中:
[0035]所述SDK初始化子模块用于调用MFXInit初始化Intel官方的MediaSDK;
[0036]所述解码初始化子模块用于调用MFXVideoDECODE_Init来初始化解码器;
[0037]所述显存分配子模块,用于分配用来接收解码后图像的显存表面;
[0038]所述Intel硬件解码器解码子模块用于对视频进行H264解码,具体包括图像解码子模块和同步子模块,其中:
[0039]所述图像解码子模块,用于调用MFXVideoDE⑶DE_DecodeFrameAsync对编码后的H264视频流进行解码;
[0040]所述同步子模块用于调用MFXVideo⑶RE_SyncOperat1n来进行CPU和GPU之间的同步,获取硬件解码返回的数据流;
[0041 ] 所述Intel硬件解码器关闭子模块用于在停止解码时调用MFXVideoDECODE_Close来关闭解码器,进行资源的释放,并调用MFXClose来关闭Intel MediaSDK。
[0042]本发明的一个实施例中,所述AMD硬件解码器包括AMD硬件解码器初始化子模块、AMD硬件解码器解码子模块以及AMD硬件解码器关闭子模块,其中:
[0043]所述AMD硬件解码器初始化子模块用于初始化AMD硬件解码器,具体包括DLL加载子模块、接口创建子模块以及参数设置子模块,其中:
[0044]所述DLL加载子模块用于加载amf-core_windesktop32.dl 1 和amf-component-vce-windesktop32.dll ;
[0045]所述接口创建子模块用于调用AMFCreateContext创建AMFContext接口,以及调用AMFCreateComponent创建AMFComponent接口 ;
[0046]所述参数设置子模块用于调用AMFComponent接口的SetProperty设置相关的解码参数,所述解码参数包括分辨率;并调用AMFComponent接口的Ini t方法完成解码器的初始化;
[0047]所述AMD硬件解码器解码子模块用于对视频进行H264解码,具体包括AMD内存分配子模块、内存数据提交子模块以及图像获取子模块,其中:
[0048]所述AMD内存分配子模块用于调用AMFContext接口的AllocBuffer方法分配用来接收待解码的H264字节流的内存空间;
[0049]所述内存数据提交子模块用于调用AMFComponent接口的SubmitInput方法,将生成的内存数据提交到解码器中;
[°°50] 所述图像获取子模块用于调用AMFComponent接口的QueryOutput方法,获取解码器解码后生成的图像;
[°°51 ] 所述AMD硬件解码器关闭子模块,用于在停止解码时调用AMFComponent接口的Terminate方法关闭解码器,进行资源的释放。
[0052]本发明的一个实施例中,所述Nvidia硬件解码器包括Nvidia硬件解码器初始化子模块、Nvidia硬件解码器解码子模块以及Nvidia硬件解码器关闭子模块,其中:
[0053]所述Nvidia硬件解码器初始化子模块用于初始化Nvidia硬件解码器,具体包括解码环境初始化子模块、H264流分析器生成子模块、Nvidia内存生成子模块,其中:
[°°54] 所述解码环境初始化子模块用于加载nvcuda.dll和nvcuvid.dll,初始化必要的环境;并调用cuCtxCreate_v2接口创建上下文环境;
[°°55] 所述H264流分析器生成子模块用于调用cuvidCreateDecoder创建硬件解码器;并调用cuvidCreateVideoParser 创建 H264流分析器;
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1