了解FFmpeg dxva2 代码结构
ffmpeg官方地址
dxva2.h头文件
http://www.ffmpeg.org/doxygen/3.2/dxva2_8h_source.html
ffmpeg_dxva2.c源文件
http://www.ffmpeg.org/doxygen/3.2/ffmpeg__dxva2_8c_source.html
获取ffmpeg源码
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
ffmpeg硬件加速桥梁
http://www.ffmpeg.org/doxygen/3.2/group__lavc__codec__hwaccel.html
Modules | |
| Direct3D11 | |
| DXVA2 | |
| VA API Decoding | |
| VDA | |
| VDPAU Decoder and Renderer | |
| VDPAU hardware acceleration has two modules. | |
| XvMC | |
ffmpeg常用示例
http://www.ffmpeg.org/doxygen/3.4/examples.html
- avio_reading.c
- decode_audio.c
- decode_video.c
- demuxing_decoding.c
- encode_audio.c
- encode_video.c
- ffhash.c
- filter_audio.c
- filtering_audio.c
- filtering_video.c
- http_multiclient.c
- hw_decode.c
- metadata.c
- muxing.c
- qsvdec.c
- remuxing.c
- resampling_audio.c
- scaling_video.c
- transcode_aac.c
- transcoding.c
ffmpeg一般操作流程
1、注册编解码器
2、申明和使用内存上下文变量
3、打开音视频文件,探测音视频文件流
4、打开编、解码器
5、持续编解码将数据放入生产队列处理
6、关闭编、解码器
7、释放内存
ffmpeg视频硬件加速代码分析
dxva2.h定义了dxva的上下文

ffmpeg_dxva2.c是ffmpeg对dxva2的实现:
定义了支持GPU编码的格式

dxva2 上下文结构:

初始化 dxva2:

分配dxva2操作内存:

创建 解码器:

获取解码器配置:

获取buffer:

数据转换:

反初始化dxva2:完成内存释放

示例程序关注
根据ffmpeg实现dxva2硬件加速转载一文进行剖析。从最新版本的代码来看,有些跟转载文章上面是不一样的。
从上面源码的结构来看,已经很清晰的反映了代码实现需要的步骤。我们主要关注的是D3D是如何将视频渲染到绑定窗口的。
另外,代码里面多出来的调用方法(实际调用还是ffmpeg_dxva2.c的方法):
int dxva2_retrieve_data_call(AVCodecContext *s, AVFrame *frame)
{
return dxva2_retrieve_data(s, frame);
}
核心代码见函数运行LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)。
注 :关于内存问题先初始化,使用后及时销毁内存。
纸上得来终觉浅,绝知此事要躬行。

浙公网安备 33010602011771号