DirectX 11视频播放

时间:2016-05-19 14:33:16

标签: windows c++11 directx-11 video-player

我希望在游戏引擎中实现视频播放器,有效地解码视频文件并将结果呈现为DirectX 11中的纹理。不幸的是,我对如何做到这一点毫无头绪但我和#39;在MSDN上找到了ID3D11VideoDevice类,但不知道如何使用它,我似乎无法在网上找到任何有用的示例/示例,说明它是如何使用的。

我已经尝试使用以下代码查询界面哦我创建的ID3D11Device:

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

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

  1. 我是如何开始正确的,如果是,为什么我会收到此错误?
  2. 有没有人知道在线任何有用的文档/样本可以解释这是如何完成的?
  3. 以下仅供参考,我是如何创建原始ID3D11设备的:

    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);
    

    提前致谢。

1 个答案:

答案 0 :(得分:2)

评论中提到您使用的是Windows 7,这就是您没有Direct3D 11视频支持的原因。

DirectX 11.1运行时可以通过development version安装在Windows 7 Service Pack 1上,但它仅按KB2670838提供软件功能。任何需要新硬件功能的功能都需要新的MSDN驱动程序,这些驱动程序仅在Windows 8.0或更高版本上受支持。

请参阅WDDM v1.2DirectX 11.1 and Windows 7