DirectX 11 视频播放

DirectX 11 Video Playback

我希望在游戏引擎中实现视频播放器,有效地解码视频文件并将结果渲染为 DirectX 11 中的纹理。不幸的是,我对如何执行此操作一无所知,但我'我在 MSDN 上找到了 ID3D11VideoDevice class,但不知道如何使用它,而且我似乎无法在网上找到任何有用的 samples/examples 来说明它的使用方法。

我首先尝试使用以下代码查询我创建的 ID3D11Device 的接口:

ComPtr<ID3D11VideoDevice> video;
HRESULT hr = device->QueryInterface(__uuidof(ID3D11VideoDevice), &video);

但是我得到了 HRESULT E_NOINTERFACE,所以我猜我创建原始设备的方式无法将其转换为视频设备?那个或这个是完全错误的方法。所以我的问题是:

  1. 我的开始方式是否正确?如果正确,为什么会出现此错误?
  2. 有没有人知道任何有用的 documentation/samples 在线可以解释这是如何完成的?

仅供参考,下面是我创建原始 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 运行时可以通过 KB2670838, but it only provides the software features per MSDN. Any feature that requires new hardware features requires new WDDM v1.2 驱动程序安装在 Windows 7 Service Pack 1 上,该驱动程序仅在 Windows 8.0 或更高版本上受支持。

参见DirectX 11.1 and Windows 7 and DirectX 11.1 and Windows 7 Update