1

我正在使用 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);

后来我启动了编码过程。

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

有没有办法在解锁后向 Direct3d11 纹理发出副本形式 NV_ENC_INPUT_PTR inputBuffer?

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

4

1 回答 1

0

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

所以,我会说,做 DmaCopy,然后将新资源映射/取消映射到 directx 纹理。

于 2018-09-05T17:49:17.940 回答