前面介绍利用NVIDIA公司提供的CUVID库进行视频硬解码,下面将介绍利用DXVA进行硬解码。 一、DXVA介绍 DXVA是微软公司专门定制的视频加速规范,是一种接口规范。DXVA规范制定硬件加速解码可分四级:VLD,控制BitStream;IDCT,反余弦变换;Mocomp,运动补偿,Pixel Prediction;PostProc,显示后处理。其中,VLD加速等级最高,所以其包含IDCT、MoCoopm和PostProc;IDCT加速次之,包含MoCoopm和PostProc;最后MoComp加速仅包含PostProc。一款显卡芯片在硬件支持DXVA规范,并不代表它就实现了DXVA所有功能。DXVA_Checker可用于检测硬件所支持的等级,DXVA_Checker运行示意图如下所示。 二、使用FFmpeg中DXVA技术硬解码 基本思路: 1.根据FFmpeg对编码器的描述,实现自定义的硬解码器。 2.通过REGISTER_ENCODEC(X,x)将自定义的视频编码器添加到视频编解码器。 3.在视频解码,根据编码器ID或编码器名称找到视频编解码器中自定义的视频解码器。 4.利用自定义的视频解码器,解码视频。 其关键步骤是:自定义解码器的实现,需要参考FFmpeg源码中,解码器的定义和接口设计。 基于DXVA的自定义解码器实现 1.熟悉FFmpeg中编解码的组织方式 下图是ffmpeg编解码组织的简单示意图。 由示意图可知,编解码器由全局链表组织,可根据编码器的名称或ID,获取编解码器。 编解码器的具体编解码的具体工作,由编解码器定义的函数指针完成。 自定义解码器时,需要按照AVCodec结构体,定义解码器的属性,然后注册到全局编解码器链表中。 2.基于DXVA解码器的定义实现 ff_h264_dxva2_decoder的定义如下:
ff_h264_dxva2_decoder的函数指针对应的函数定义如下:
|
【GPU编解码】GPU硬解码---DXVA
最新推荐文章于 2025-02-07 09:26:07 发布