小编use*_*624的帖子

使用DirectX视频加速(DXVA)实现媒体基础转换(MFT)

目的是实现用于视频处理和与外部应用程序同步的自定义MFT.细节并不重要.我想要实现的第一步是使用DXVA视频处理或DXVA-HD启动和运行MFT.我无法这样做.

这就是我所做的:我开始使用源输入节点(我的网络摄像头),MFT(MFT_Grayscale示例)和EVR构建拓扑.我把它包含在一个小应用程序中.拓扑工作,我可以看到相机的单色流.现在我想更改MF_Grayscale示例的代码,使其支持DXVA视频处理,并可以使用VideoProcessBlt方法提供的硬件加速.Microsoft文档提供了一些信息,但我无法实现正在运行的MFT.

到目前为止我做了什么:

pStreamInfo->dwFlags = MFT_OUTPUT_STREAM_PROVIDES_SAMPLES | MFT_OUTPUT_STREAM_WHOLE_SAMPLES | MFT_OUTPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER | MFT_OUTPUT_STREAM_FIXED_SAMPLE_SIZE;

直到这里,一切似乎都还可以.现在我的问题(对不起,我不能更具体):

  • 我必须调整GetOutputAvailableType/SetOutputType方法吗?

  • ProcessInput方法中我得到IMFSample并提取了一个IMFMediaBuffer.缓冲区不管理IDirect3DSurface9我的函数调用.我是否必须将缓冲区的数据存储到Direct3D表面?

  • ProcessOutput制作起点的方法中,我想将输入帧转发到输出.VideoProcessBlt从输入到输出应该是1:1的blit.文件说:

    获取当前未使用的可用表面.

如何确定表面是否正在使用?

  • 我怎么输出表面?我应该使用MFCreateVideoSampleFromSurfaceMFCreateDXSurfaceBuffer

  • 不幸的是,我真的迷路了,无法使用文档取得任何进展.

现在的情况是我没有看到任何视频输出(窗口有其默认的窗口背景颜色),并且网络摄像头在第一帧(LED关闭后)停止捕获帧.除此之外没有任何反应 - 应用程序只是继续运行而没有显示任何内容.

我希望有人可以帮助我.如果有人能指导我使用DXVA视频处理或DXVA-HD进行MFT的示例代码,我将不胜感激.我找不到任何东西......

谢谢

c++ dxva ms-media-foundation

6
推荐指数
1
解决办法
2170
查看次数

标签 统计

c++ ×1

dxva ×1

ms-media-foundation ×1