天下之事,必先处之难,而后易之。

了解FFmpeg dxva2 代码结构

ffmpeg官方地址

http://ffmpeg.org/

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

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)。

注 :关于内存问题先初始化,使用后及时销毁内存。

posted @ 2024-05-03 22:20  boonya  阅读(42)  评论(0)    收藏  举报  来源
我有佳人隔窗而居,今有伊人明月之畔。
轻歌柔情冰壶之浣,涓涓清流梦入云端。
美人如娇温雅悠婉,目遇赏阅适而自欣。
百草层叠疏而有致,此情此思怀彼佳人。
念所思之唯心叩之,踽踽彳亍寤寐思之。
行云如风逝而复归,佳人一去莫知可回?
深闺冷瘦独自徘徊,处处明灯影还如只。
推窗见月疑是归人,阑珊灯火托手思忖。
庐居闲客而好品茗,斟茶徐徐漫漫生烟。

我有佳人在水之畔,瓮载渔舟浣纱归还。
明月相照月色还低,浅近芦苇深深如钿。
庐山秋月如美人衣,画堂春阁香气靡靡。
秋意幽笃残粉摇曳,轻轻如诉画中蝴蝶。
泾水潺潺取尔浇园,暮色黄昏如沐佳人。
青丝撩弄长裙翩翩,彩蝶飞舞执子手腕。
香带丝缕缓缓在肩,柔美体肤寸寸爱怜。
如水之殇美玉成欢,我有佳人清新如兰。
伊人在水我在一边,远远相望不可亵玩。