c++ - 如何从 'normal' IDirect3D9Surface 获取离屏平面

标签 c++ direct3d direct3d9 ms-media-foundation

我正在使用 Media Foundation 开发媒体播放器。我正在尝试使用 DXVA-HD 进行后期处理。但是,当我尝试使用 HD 设备执行 VideoProcessBltHD 时,它失败并显示 E_INVALIDARGS。我怀疑它无法以某种方式与我作为输入提供的 ID39Surface 正常工作。我正在从“IMFMediaBuffer”获取输入表面(这是我从 SourceReader 读取样本得到的)。

我正在按如下方式提取表面: CHECK_HR (hr = MFGetService(video_buffer, MR_BUFFER_SERVICE, __uuidof(IDirect3DSurface9), (void**)&pSurface));

但是,在 DXVA-HD example on MSDN , VideoProcessBltHD 工作正常。

而示例代码中的 IDirect3DSurface9 表面是屏幕外的平面。 如何将“我的表面”(具有视频数据)作为屏幕外的平面传递给视频处理器并使“blt 操作”成功?

如有任何帮助,我们将不胜感激。

谢谢 格言

最佳答案

我建议安装完整的 DirectX SDK,在 DirectX 控制面板中将运行时库切换到 Debug模式,打开完整验证,出错时中断并在 Debug模式下运行您的应用程序。这样,您将获得 DirectX 人类可读的错误描述。

关于c++ - 如何从 'normal' IDirect3D9Surface 获取离屏平面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8485446/

相关文章:

变量周围的 C++ 堆栈已损坏

graphics - 使用 Direct3D 时,CPU 上执行了多少数学运算?

c++ - LPD3DXFONT 不绘制

c++ - 从依赖模板的基类继承构造函数

c++ - C++ 中奇怪的引用行为

c++ - 在eclipse中编译c++时如何自动链接类?

Direct3D 11/HLSL Texture3D<float3> 假错误?

c++ - 将纹理渲染到窗口

directx - 从 DllMain 调用 IDirect3D9::CreateDevice() 挂起