NIVIDIA 硬解码学习

姓名:王一帆

学号:20011110225

转载自https://blog.csdn.net/qjh5606/article/details/82658606

【嵌牛导读】为了在项目中能够利用nvidia的硬件解码和编码能力,提高单机的编解码并行能力,本文简单介绍了nvidia硬件解码的部分内容。

【嵌牛正文】

https://blog.csdn.net/poweroranger/article/details/77845238

https://blog.csdn.net/LG1259156776/article/details/73274226

https://www.cnblogs.com/betterwgo/p/6613641.html

1. 前言

官方提供的资料比较少,只包括一页的视频解码器介绍和示例代码

2. 例程介绍

nvidia提供了source, parser, decoder三个基本模块。

source是用来解析视频文件(例如:纯h.264文件)

parser是用来解析视频并得到一帧帧的数据

decoder就是解码

VideoSource

VideoSourceData中包含了CUvideoparser和FrameQueue,通过上图可以看出,CUvideoparser是在VideoDecoder基础上实现了接口的封装,而VideoSource则是通过CUvideoparser进行解码。FrameQueue是存储硬件解码后图像的队列,注意硬件解码完的图像是存放在GPU显存里面了,而VideoDecoder中函数mapFrame,可完成从显存到内存的映射。

VideoParser

VideoParser中最重要的是三个回调函数,static int CUDAAPI HandleVideoSequence(void *pUserData, CUVIDEOFORMAT *pFormat), HandlePictureDecode(void *pUserData, CUVIDPICPARAMS *pPicParams),HandlePictureDisplay(void *pUserData, CUVIDPARSERDISPINFO *pPicParams),实现对视频格式变换、视频解码、解码后显示等处理功能。HandleVideoSequence主要负责视频格式进行校验,没有实现其他功能,解码函数HandlePictureDecode调用的就是VideoDecoder的解码函数(CUDA的接口),显示函数HandlePictureDisplay完成了解码后GPU图像进入FrameQueue。

VideoDecoder

该类是最核心的硬件解码功能类,CUVIDDECODECREATEINFO oVideoDecodeCreateInfo_是创建解码信息结构体,CUvideodecoder oDecoder_是最内核的CUDA硬件解码器,VideoParser的解码功能实际上是在CUvideodecoder解码内核上封装实现的(层层封装导致源码有点复杂,所以想看懂实现机制需要有点耐心)。

你可能感兴趣的:(NIVIDIA 硬解码学习)