用于UWP的Unity插件中使用DirectX11的硬件加速H264解码

时间:2018-09-20 20:21:45

标签: unity3d ffmpeg uwp directx-11 hololens

我为UWP应用程序构建了一个Unity插件,该插件可将原始h264数据包转换为RGB数据并将其渲染为纹理。我已经使用FFMPEG来做到这一点,并且效果很好。

int framefinished = avcodec_send_packet(m_pCodecCtx, &packet);
framefinished = avcodec_receive_frame(m_pCodecCtx, m_pFrame);
// YUV to RGB conversion and render to texture after this

现在,我正在尝试转向使用DirectX11 DXVA2.0进行基于硬件的解码。

使用此方法: https://docs.microsoft.com/en-us/windows/desktop/medfound/supporting-direct3d-11-video-decoding-in-media-foundation

我能够创建一个解码器(ID3D11VideoDecoder),但是我不知道如何向其提供原始的H264数据包并获取YUV或NV12数据作为输出。 (或者,因为我可以获取ID3D11Texture2D指针,如果可以将输出直接呈现到纹理上)

所以我的问题是,如何将原始的h264数据包发送到此解码器并从中获取输出?

此外,这是用于实时操作,因此我正在尝试实现最小的延迟。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

由于您已经使用FFMPEG完成了此操作,因此我建议您直接使用FFMPEG的dx11硬件解码。

查看硬件解码FFMPEG示例以获取详细信息:github.com/FFmpeg/FFmpeg/blob/master/doc/examples/hw_decode.‌​c

相关问题