问题标签 [dxva]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1709 浏览

ffmpeg - dxva2 硬件解码器支持哪些 h264 配置文件

我有解码实时 h264 摄像机流并显示的代码。我使用了 ffmpeg dxvae 解码器。

问题:avcodec_send_packet 返回负错误代码。

我尝试过的:

  1. 我有转储流数据包并保存在 h264 文件中。然后ffmpeg.exe -hwaccel dxva2 -threads 1 -i output.h264 -f null - -benchmark命令验证并抛出错误 格式 dxva2_vld 设置失败:hwaccel 初始化返回错误。

  2. 我发现 h264 文件具有基线配置文件。dxva2 解码器不支持基线配置文件吗?

  3. 我可以用 vlc 播放器播放文件。

我也使用上述命令解码了高配置的 h264 视频,它的工作正常。

请帮助解决这个问题。提前致谢。

0 投票
1 回答
1836 浏览

directx - 如何从 H.264 NV12 IMFSample 输出渲染到 DirectX11 纹理?

有没有什么好的例子可以展示如何渲染IMFSampleH.264 解码器的输出?我的场景使用 4K 分辨率的 H.264 流,而我的目标 PC 将只接受使用 DXGI 缓冲区的 1080p。但是 H.264 解码器将处理 4K,因此我需要找到一种方法将 NV12IMFSample直接馈送到 DirectX 11 渲染器。我已经尝试过使用DX11VideoRenderer示例,但由于这个特定IMFSample的没有IMFDXGIBuffer接口而失败。

看起来在DX11VideoRenderer中输入IMFDXGIBuffer是 NV12 类型,并且可以在硬件中成功渲染。因此,NV12 类型的非 DXGI 缓冲区也应该是可以接受的,这似乎是合乎逻辑的?

也许我需要创建一个ID3D11Texture2DNV12 类型的纹理或资源?我找到了如何从文件创建纹理的示例,但没有找到如何从样本创建纹理的示例,这似乎更有用。如果我可以创建 NV12 纹理,如何找出 NV12 结构中的SysMemPitchSysMemSlicePitchD3D11_SUBRESOURCE_DATA

任何帮助将非常感激!谢谢你。

0 投票
1 回答
478 浏览

c++ - 有没有更快的方法从 IMFSample 读取样本?

我正在为使用 Direct3D9Ex 接口的应用程序设置 VideoRenderer,但是当我使用大纹理(桌面分辨率)时,视频开始变慢。

我正在使用 DirectShow,但我发现 H264 存在一些问题,因此我决定选择 Media Foundation。我已经搜索了很多关于它的内容,但我不知道如何使用 DXVA 渲染视频,因此,我使用 MF_SOURCE_READER_ENABLE_ADVANCED_VIDEO_PROCESSING 和 MFVideoFormat_RGB32 使用 IMFSourceReader(异步)读取样本,因此我可以复制到我的表面然后使其正常。

这就是我创建 SourceReader 的方式。

然后我发布一个 ReadSample 并在我的 Update 方法中,我这样做:

这是我的 OnReadSample 回调的一部分,它只是将一个表面复制到另一个表面。

所以,我的实际结果对于调试环境是可以接受的,但是当我将应用程序分辨率更改为桌面分辨率(从 800x600 到 1366x768)时,事情开始变得慢很多。

我必须使用 DXVA 之类的东西吗?我可以调整当前代码以更快地运行吗?我在哪里可以找到一些关于它的好样本?

0 投票
1 回答
651 浏览

c++ - 从 DXVA2 渲染 IDirect3DSurface9?

IDirect3DSurface9DXVA2使用硬件加速的视频解码器中得到了一个。

我试图IDirect3DSurface9通过它的句柄在我的窗口上渲染这个硬件。以下是我的总结代码。

第一个,我打电话dxva2_init(AVCodecContext *s, HWND hwnd);withhwnd是窗口的句柄

解码成功后,我得到一个IDirect3DSurface9,我通过以下函数渲染它。

注意:以上所有 D3D 函数:Clear(), BeginScene(), GetBackBuffer(), StretchRect(), EndScene(), Present()均返回成功。但是框架没有显示在我的窗口上。

我猜想,我想念一些将 My Window Handle 与DXVA2Context. 在这段代码中,我只分配:ctx->deviceHandle = hwnd;in function dxva2_init()

我搜索了很多次,但到目前为止我仍然找不到解决方案,任何人都可以帮助我吗?

非常感谢!

0 投票
0 回答
268 浏览

winapi - 激活媒体基础 HEVC 解码器时访问被拒绝

我正在尝试编写一个使用 IMFTransform 解码 HEVC 视频的程序。我能够创建一个 IMFTransform 解码器,使用 MF_MT_MAJOR_TYPE=MFMediaType_Video 和 MF_MT_SUBTYPE=MFVideoFormat_HEVC 调用 SetInputType,但是当我使用 MFVideoFormat_NV12 调用 SetOutputType 时,我得到了 MF_E_ATTRIBUTENOTFOUND。

最终我决定尝试从 Microsft Store 安装“HEVC Video Extensions”,但现在我的代码在 IMFActivate::ActivateObject 处失败并返回错误 E_ACCESSDENIED。

我卸载了“HEVC Video Extensions”,但仍然收到拒绝访问错误。我仍然有一个名为“来自设备制造商的 HEVC 视频扩展”的东西,“应用程序和功能”说它是几周前安装的。在 Visual Studio 输出窗口中,我看到以下内容:

这似乎表明问题在于我不是在编写 UWP 应用程序,而是在制作 Win32 桌面程序。我的目标是最终扩展现有的 Win32 程序,因此 UWP 不是一个选项。此外,在安装 HEVC 扩展之前我没有收到此错误。

更新:

我在我拥有的另一台计算机上运行我的程序,它运行良好。“进程没有包标识”也出现在那里,但似乎不是问题。

0 投票
0 回答
22 浏览

directx - dxva2渲染中视频大小发生变化怎么办

我使用 intel qsv 解码视频,并使用 dxva2 进行渲染。代码是intel的owt原生windows sdk:

在视频图像的大小改变时,结果渲染的图像是不正确的,例如渲染窗口是1920*1080,但是只有左上角,大约1/4的窗口被填充了图像。我猜 StretchRect 没有做任何事情,即使它返回正常。