首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用DirectX视频加速实现媒体基础变换

用DirectX视频加速实现媒体基础变换
EN

Stack Overflow用户
提问于 2015-02-11 07:28:51
回答 2查看 2.7K关注 0票数 6

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

下面是我所做的工作:我开始用源输入节点(我的摄像头)、MFT ( MFT_Grayscale示例)和EVR构建一个拓扑。我在一个小的应用程序中包括了这个。拓扑正常工作,我可以从相机上看到单色流。现在,我想更改MF_Grayscale示例的代码,以便它支持DXVA视频处理,并且可以使用VideoProcessBlt方法提供的硬件加速。微软的文档给出了一些零碎的信息,但我无法实现正在运行的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的比例从输入到输出。文件上说: 获取当前未使用的可用表面。

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

  • 我该怎么输出表面呢?我应该使用MFCreateVideoSampleFromSurface还是MFCreateDXSurfaceBuffer
  • 不幸的是,我真的迷路了,无法使用这些文档取得任何进展。

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

我希望有人能帮我。如果有人能指示我使用DXVA视频处理或DXVA-HD为MFT示例代码,我也会很感激。我什么都找不到..。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2015-07-13 11:59:52

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

是。您需要像往常一样提供属性,没有特殊的要求。

我是否必须将缓冲区的数据保存到Direct3D表面?

是。在这样做时,您需要关心IDirect3DDeviceManager9和LockDevice,因为EVR可以同时使用表面。

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

你必须关心,特别是当表面是免费的使用。您的MFT需要实现IMFAsyncCallback接口。使用MFCreateVideoSampleFromSurface之后,查询IMFTrackedSample接口并调用SetAllocator。Invoke方法将告诉您何时表面是空闲的。

我该怎么输出表面呢?我应该使用MFCreateVideoSampleFromSurface还是MFCreateDXSurfaceBuffer?

因为您使用的是IDirectXVideoProcessorService->CreateSurface,所以MFCreateVideoSampleFromSurface是正确的位置。通过IMFSample输出表面。

检查此项目:

MFNode

在MFTDxva2Decoder和MFSkDxva2Renderer下,您将看到一些dxva2处理。

票数 2
EN

Stack Overflow用户

发布于 2015-04-04 23:05:52

获取媒体基金会示例的最简单方法是从http://www.microsoft.com/en-us/download/details.aspx?id=8279下载并安装“MicrosoftWindowsSDKforWindows7和.NET Framework4”。安装这些示例,然后在'v7.1/ Samples /Multimedia/MediaFoundation‘上找到它们。据推测,媒体基金会的样本在微软的代码库网站上,但我一直无法在那里找到它们。这些示例不再包含在Windows版本中。

与您的问题直接相关的示例可能是解码器、DXVA_HD、DXVA2_VideoProc、EVRPresenter、MPEG1Source和拓扑编辑。

我无法提供更多的帮助,因为我目前正在努力解决一些同样的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28448764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档