我正在使用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传输到映射纹理的操作。
答案 0 :(得分:0)
例如,Cuda Map / Unmap API是Cuda Frame资源和DirectX纹理之间的互操作性。一切都驻留在GPU内。
因此,我想说要先做DmaCopy,然后将新资源映射/取消映射到DirectX纹理。