我正在使用 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 传输到映射纹理。