基于FFmpeg的Dxva2硬解码及Direct3D显示(一)
2024-08-23 11:47:00
前言
关于视频软解码的资料网上比较多了,但是关于硬解可供参考的资料非常之有限,虽然总得来说软解和硬解的基本逻辑一样,但是实现细节上的差别还是比较多的。虽然目前功能已实现,但是理解不到位的地方还是有的,文中我会抛出来,希望大神们不吝赐教。
上图大致说明了软解和硬解的流程,其中红色箭头表示需要在系统内存与显存之前进行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。
代码实现逻辑
实现逻辑还是比较简单的,分为四大块:
- 解析视频源
- 初始化D3D
- 初始化硬件解码器
- 解码显示
接下来将分成四篇博文依次进行介绍。
最新文章
- x:bind不支持样式文件 或 此Xaml文件必须又代码隐藏类才能使用{x:Bind} 解决办法
- 几种加解密方法:AES、DES、SHA数据加密
- js自调用匿名函数的三种写法
- Java中数据类型转换问题
- 常用MIME类型
- Android -- TouchEvent的分发和截获方式
- 纯JS操作服务器绑定控件(Repeat)实现表头升降排序
- SRM 399(1-250pt)
- LoadRunner脚本增强
- 在调试安卓系统的时候需要这个 ”adb disable-verity“
- Fast Paxos 和 Paxos的区别
- [APIO2015]雅加达的摩天楼
- 分布式系统监视zabbix讲解十一之zabbix升级--技术流ken
- eclipse导出svn源码,如何转化为项目
- httpd 2.4连接php-fpm
- 解决eclipse部署项目各种乱码问题,推荐一下别人的做法
- Python-多进程VS多线程
- HDU - 5017 Ellipsoid(模拟退火)
- Delphi win10 asssertion failure
- SVN更新报错问题(Please execute the 'Cleanup' command)