如何将nvEncode输入缓冲区复制到Direct3d11纹理?

时间:2018-07-12 11:17:39

标签: directx nvidia video-encoding direct3d11 nvenc

我正在使用nvencode api进行视频编码。我的采集卡使用直接DMA传输(GpuDirect)将帧复制到预分配的输入缓冲区(NV_ENC_INPUT_PTR)。序列看起来像这样:

nvEncodeApi->nvEncLockInputBuffer(_encoder, &lockInputBufferParams); // lock input buffer
DmaCopy(lockInputBufferParams.bufferDataPtr); // initiate dma transfer
nvEncodeApi->nvEncUnlockInputBuffer(_encoder, lockInputBufferParams.inputBuffer);

然后我开始编码过程。

这很好,但是为了呈现捕获的帧,我需要将其复制到纹理中。

是否有一种方法可以将解锁后的NV_ENC_INPUT_PTR inputBuffer副本发布到Direct3d11纹理?

注意:我知道我可以将Direct3D纹理用作nvencode的输入缓冲区并使用Map / Unmap API。但是我的采集卡似乎无法直接执行DMA传输到映射纹理的操作。

1 个答案:

答案 0 :(得分:0)

例如,Cuda Map / Unmap API是Cuda Frame资源和DirectX纹理之间的互操作性。一切都驻留在GPU内。

因此,我想说要先做DmaCopy,然后将新资源映射/取消映射到DirectX纹理。