我正在使用 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/