windows - DirectX 11 视频播放

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

我正在寻找在游戏引擎中实现视频播放器,有效地解码视频文件并将结果渲染到 DirectX 11 中的纹理。不幸的是,我对如何执行此操作有点无能为力,但我发现MSDN 上的 ID3D11VideoDevice 类,但不知道如何使用它,而且我似乎无法在网上找到任何有用的示例/示例来展示它的使用方法。

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

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

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

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

下面是我如何创建原始 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 7DirectX 11.1 and Windows 7 Update .

关于windows - DirectX 11 视频播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37326426/

相关文章:

c++ - 将 ID3D11Texture2D 复制到字节数组,导致内存不足错误 c++

c++ - ID3D11Buffer 中可以存储的最大数据量是多少?

c++ - std::copy 从 vector 的位置到 vector 的位置

windows - 安装程序 : WIX or Inno Setup?

windows - 批处理文件以更改目录并运行命令

windows - 当可以使用 __ImageBase 或 GetModuleHandleEx() 检索时,为什么框架存储自己的 HMODULE?

c++11 - c++ 无法将 chrono::duration 添加到 chrono::time_point

c++ - 为什么 `sqlpp-mysql` 没有正确链接?

c++ - DirectX 11 渲染到纹理

mysql - 错误号 2058 无法加载插件 authentication_windows_client : The specified module could not be found