基于FFmpeg的Dxva2硬解码及Direct3D显示(一)

前言

关于视频软解码的资料网上比较多了,但是关于硬解可供参考的资料非常之有限,虽然总得来说软解和硬解的基本逻辑一样,但是实现细节上的差别还是比较多的。虽然目前功能已实现,但是理解不到位的地方还是有的,文中我会抛出来,希望大神们不吝赐教。

上图大致说明了软解和硬解的流程,其中红色箭头表示需要在系统内存与显存之前进行IO,比较费时。

名词解释

FFmpeg:通俗理解就是一套包含视音频编解码、采集、转码及处理等功能的开源库,源码由C语言编写。

Dxva2:就是DirectX Video Acceleration 2.0规范,即利用DirectX 的视频加速规范的2.0版本。值得注意的是这个规范是一个分级的标准,支持该标准的前提下还得看看当前实现了该标准下的哪几种解码能力。比如针对H.264的解码能力从高到低依次分为 A~F 6个等级。

DirectX :微软开发的多媒体编程接口,由C++语言实现,用于加强3D图形和声音效果,字面意思Direct代表直接操作硬件,X代表可以获取各种硬件服务。

Direct3D:DirectX 的一部分,渲染方式和GDI不一样,可以加速渲染,对标(OpenGL)。

小结:Dxva2 是规范,具体功能实现通过调用 DirectX 提供的API。

代码实现逻辑

实现逻辑还是比较简单的,分为四大块:

  1. 解析视频源
  2. 初始化D3D
  3. 初始化硬件解码器
  4. 解码显示

接下来将分成四篇博文依次进行介绍。

原文地址:https://www.cnblogs.com/huluwa508/p/10298210.html