我正在寻找在游戏引擎中实现视频播放器,有效地解码视频文件并将结果渲染到 DirectX 11 中的纹理。不幸的是,我对如何执行此操作有点无能为力,但我发现MSDN 上的 ID3D11VideoDevice 类,但不知道如何使用它,而且我似乎无法在网上找到任何有用的示例/示例来展示它的使用方法。
我首先尝试使用以下代码查询我创建的 ID3D11Device 的接口(interface):
ComPtr<ID3D11VideoDevice> video;
HRESULT hr = device->QueryInterface(__uuidof(ID3D11VideoDevice), &video);
但是我得到了 HRESULT E_NOINTERFACE,所以我猜我已经以无法将其转换为视频设备的方式创建了原始设备?要么那样,要么这样,这都是完全错误的做法。所以我的问题是:
- 我的开始方式是否正确?如果是,为什么会出现此错误?
- 有人知道任何有用的在线文档/示例可以解释这是如何完成的吗?
下面是我如何创建原始 ID3D11Device 的方法,仅供引用:
std::vector<D3D_FEATURE_LEVEL> feature_levels = {
D3D_FEATURE_LEVEL_11_1,
D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1,
D3D_FEATURE_LEVEL_10_0,
D3D_FEATURE_LEVEL_9_3,
D3D_FEATURE_LEVEL_9_2,
D3D_FEATURE_LEVEL_9_1
};
UINT flags = 0;
#if defined(DEBUG) || defined(_DEBUG)
flags |= D3D11_CREATE_DEVICE_DEBUG;
#endif
// Create D3D device
HRESULT hr = D3D11CreateDevice(nullptr,
D3D_DRIVER_TYPE_HARDWARE,
0,
flags,
&feature_levels[0],
feature_levels.size(),
D3D11_SDK_VERSION,
&m_device,
&m_featureLevel,
&m_deviceContext);
提前致谢。
最佳答案
评论提到您使用的是 Windows 7,这就是您没有 Direct3D 11 视频支持的原因。
DirectX 11.1 Runtime 可以通过 KB2670838 安装在 Windows 7 Service Pack 1 上,但它仅提供 MSDN 中的软件功能。任何需要新硬件功能的功能都需要新的 WDDM v1.2仅 Windows 8.0 或更高版本支持的驱动程序。
参见DirectX 11.1 and Windows 7和 DirectX 11.1 and Windows 7 Update .
关于windows - DirectX 11 视频播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37326426/