我正在尝试将NV12 NVDEC解码的缓冲区直接复制到NV12 d3d11纹理中。到目前为止没有运气。我设法做的是使用2个d3d11纹理(亮度+色度),2个cuGraphicsMapResources,2个cuGraphicsSubResourceGetMappedArray,2个CUDA_MEMCPY2D和一个像素着色器进行双重复制的副本。...无法执行单一复制,到目前为止,Nvidia论坛都没有回应。
我发现this old question面临着非常相似的问题,那里也没有解决方案。
也许您需要这样的东西。这段代码摘自FFmpeg Project(开源)的libavutil/hwcontext_cude.c
文件:
for (i = 0; i < FF_ARRAY_ELEMS(src->data) && src->data[i]; i++) {
CUDA_MEMCPY2D cpy = {
.srcMemoryType = CU_MEMORYTYPE_HOST,
.dstMemoryType = CU_MEMORYTYPE_DEVICE,
.srcHost = src->data[i],
.dstDevice = (CUdeviceptr)dst->data[i],
.srcPitch = src->linesize[i],
.dstPitch = dst->linesize[i],
.WidthInBytes = FFMIN(src->linesize[i], dst->linesize[i]),
.Height = src->height >> (i ? priv->shift_height : 0),
};
ret = CHECK_CU(cu->cuMemcpy2DAsync(&cpy, hwctx->stream));
if (ret < 0)
goto exit;
}