视频编解码相关资料汇总
相关概念
window图形和显示相关概念
Graphics APIs in Windows
自Windows早期以来,图形编程的主要API就是图形设备接口(GDI)。此API设计用于处理大量2D输出设备,它构成了Windows用户界面体验的基础。DirectDraw和Direct3D作为替代API引入,以支持全屏游戏和3D渲染,作为当时现有硬件的扩展。与GDI的相互作用是复杂的。这种设计限制了传统GDI元素与Direct3D元素的有效混合。WDM的WindowsXP版本称为XPDM,反映了GDI和Direct3D的并行特性。
多年来,3D 视频卡的功能急剧增长,绝大多数硬件都专用于此功能。 新的驱动程序模型,Windows 显示驱动程序模型 (WDDM),将 GPU 和 Direct3D 带到了最前沿,允许创建全新的体验,即 3D 桌面,将 GDI 的 2D 世界与现代可编程 GPU 的功能无缝融合 . 使用 WDDM,视频硬件完全由 Direct3D 驱动,所有其他图形接口通过新的以 Direct3D 为中心的驱动程序模型与视频硬件通信。
Microsoft Windows graphics device interface (GDI)
Microsoft Windows图形设备界面(GDI)使应用程序能够在视频显示器和打印机上使用图形和格式化文本。基于Windows的应用程序不直接访问图形硬件。相反,GDI代表应用程序与设备驱动程序交互。
DirectX
Microsoft DirectX 图形提供了一组 API,可用于创建游戏和其他高性能多媒体应用程序。 DirectX 图形包括对高性能 2-D 和 3-D 图形的支持。
DirectX 是:Direct3D, DirectDraw, DirectMusic, DirectPlay, DirectSound等 API 集合的名称(X 代表特定的 API 名称)。
Windows 显示驱动
XDDM/XPDM
在 Windows Vista 上运行的显示适配器驱动程序可以遵循以下两种模型之一:Windows 显示驱动程序模型 (WDDM) 或 Windows 2000 显示驱动程序模型 (XDDM)。 符合 Windows 显示驱动程序模型 (WDDM) 的驱动程序只能在 Windows Vista 和更高版本上运行。 遵守 XDDM 的驱动程序可在 Windows 2000 到 Windows 7 上运行)。
-
Display Driver:
显示驱动程序是一个内核模式 DLL,其主要职责是呈现。 当应用程序使用独立于设备的图形请求调用 Win32 函数时,图形设备接口 (GDI) 会解释这些指令并调用显示驱动程序。 然后,显示驱动程序将这些请求转换为视频硬件在屏幕上绘制图形的命令。
显示驱动程序可以直接访问硬件。 这是因为图形硬件功能多种多样,而且显示是任何系统中对时间要求最高的部分之一。 GDI 中的这种可访问性和广泛的功能在实现显示驱动程序时提供了相当大的灵活性。 -
video miniport driver:
处理必须与其他 NT 内核组件交互的操作。 例如,硬件初始化和内存映射等操作需要 NT I/O 子系统的操作。 视频微型端口驱动程序的职责包括资源管理,例如硬件配置和物理设备内存映射。 视频微型端口驱动程序必须特定于视频硬件。
显示驱动程序使用视频微型端口驱动程序执行不经常请求的操作;例如,若要管理资源、执行物理设备内存映射、确保寄存器输出在邻近的位置出现或响应中断。
它是 Microsoft Windows 2000 显示驱动程序模型的一部分。 视频微型端口驱动程序不是 Windows Vista 显示驱动程序模型的一部分。
更多请访问:https://docs.microsoft.com/en-us/windows-hardware/drivers/display/video-miniport-drivers-in-the-windows-2000-display-driver-model
WDDM
Windows 显示器驱动程序模型 (wddm) 是 Windows Vista (WDDM v1.0) 中引入的图形显示驱动程序体系结构。 从 Windows 8 (wddm v1.0) 开始需要 wddm。
图形硬件供应商必须提供用户模式显示驱动程序和显示微型端口驱动程序。 用户模式显示驱动程序是由 Microsoft Direct3D 运行时加载的动态链接库 (DLL)。 显示微型端口驱动程序与 Microsoft DirectX 图形内核子系统通信。
其它资料:
https://docs.microsoft.com/en-us/windows-hardware/drivers/display/roadmap-for-developing-drivers-for-the-windows-vista-display-driver-mo
其它图形接口
OpenGL® 是业界采用最广泛的 2D 和 3D 图形 API,为各种计算机平台带来了数以千计的应用程序。 它独立于窗口系统和操作系统,并且是网络透明的。 OpenGL 使 PC、工作站和超级计算硬件的软件开发人员能够在 CAD、内容创建、能源、娱乐、游戏开发、制造、医疗和虚拟现实等市场中创建高性能、视觉上引人注目的图形软件应用程序。 OpenGL 公开了最新图形硬件的所有功能。
Intel® Quick Sync Video(QSV)
Quick Sync Video 使用英特尔® 图形技术的专用媒体处理功能进行快速解码和编码,使处理器能够完成其他任务并提高系统响应能力。
通俗理解,是其GPU支持硬件加速功能特性的统称。
Intel® Quick Sync Video

Media SDK软件组件概述,源自 An Operation Guide to Build and Debug Open Source Media SDK Software…

图片源自:OneVPL与FFmpeg/GStreamer硬件编解码器_LiveVideoStack-CSDN博客
Intel® Media SDK
提供了一个 API,用于访问带有集成显卡的英特尔® 平台上的硬件加速视频解码、编码和过滤。
Intel® Media SDK
源码:Intel-Media-SDK/MediaSDK: The Intel® Media SDK
特别注意:
所有未来的开发都计划在 oneVPL 库及其运行时实现中进行,它们是英特尔®Media SDK 的直接继承者。 oneVPL 引入了与 API 1.x 系列不向后兼容的 API 2.x 系列(一些特性被删除)。 Gen Graphics 的新 VPL 运行时 (libmfx-gen.so.1.2) 支持新的 Gen 平台。
- libmfx
作为英特尔Media SDK的一部分安装,并支持编码和解码案例的子集。
oneVPL
英特尔® oneAPI 视频处理库 (oneVPL) 提供了用于编码、解码和视频处理的单一视频处理 API,适用于各种加速器。
- libvpl
作为英特尔 oneAPI 视频处理库 (OneVPL) 的一部分进行安装。 OneVPL 是 MSDK 的继承者,将支持更多的编解码案例。
Get Started with the oneAPI Video Processing Library
oneapi-src/oneVPL: oneAPI Video Processing Library (oneVPL) dispatcher, tools, and examples
VA-API
一个开源库和 API 规范,它提供了对视频处理的图形硬件加速能力的访问。 它包括一个主库和每个支持的硬件供应商的特定于驱动程序的加速后端。(最早由Intel提出)
- libVA
VA-API(视频加速API)的一个实现
intel/libva: Libva is an implementation for VA-API (Video Acceleration API)
VAAPI驱动程序
-
带有 iHD 驱动程序的 VAAPI ------- 仍在更新
来自 Intel 的较新的 VAAPI 驱动程序变体也被 Linux 上的 libmfx 和 libvpl 使用。有一个完全免费的发行版和一个包含闭源内核的发行版。通俗理解是VAAPI Intel Driver
intel/media-driver -
带有 i965 驱动程序的 VAAPI ------- 不更新,仅维护
libva / 架构 结构的大部分免费驱动程序。大多数 Linux 发行版都将它打包。
intel/intel-vaapi-driver: VA-API user mode driver for Intel GEN Graphics family
Windows API
-
DXVA2 / D3D11VA
标准的 Windows API,由英特尔图形驱动程序实现以支持视频解码。 ffmpeg 支持。 -
Media Foundation
另一个通过 Intel 图形驱动程序支持某些编码和解码情况的 Windows API。 ffmpeg 不支持。
Microsoft Media Foundation - Win32 apps | Microsoft Docs
其他参考链接
Hardware video acceleration - ArchWiki
代码实践
截屏技术
【音视频】WIN8|WIN10的桌面采集技术-DXGI(一)_hcmonk的博客-CSDN博客
NVIDIA/video-sdk-samples: Samples demonstrating how to use various APIs of NVIDIA Video Codec SDK
DXVA硬解
dxva 解码视频_萧戈的专栏-CSDN博客_dxva2
基于FFmpeg的Dxva2硬解码及Direct3D显示(四) - 葫芦娃508 - 博客园
基于FFmpeg的Dxva2硬解码及Direct3D显示(一)
FFmpeg 使用 Dxva2 硬件加速以及渲染的一种方法 | zi-blog
FFmpeg+dxva2 硬解码库封装_tian028的博客-CSDN博客
ffmpeg实现dxva2硬件加速 - yeren2046 - 博客园
dxva2+ffmpeg硬件解码(Windows)重要笔记1_xjb2006的专栏-CSDN博客_windows 硬解码
leithergit/DVOIPCPlaySDK
FFmpeg
开源视频播放器(内含编解码)
VLC播放器
videolan/vlc: VLC media player - All pull requests are ignored, please follow https://wiki.videolan.org/Sending_Patches_VLC/
C语言,硬件加速支持度好
MPC-HC
mpc-hc/mpc-hc: MPC-HC’s main repository. For support use our Trac: https://trac.mpc-hc.org/
MPV播放器
mpv-player/mpv: 🎥 Command line video player
C语言开发,硬件加速的支持度一般
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)