Nvidia NVDEC-将解码的帧复制到D3D11 NV12纹理

问题描述 投票:0回答:1

我正在尝试将NV12 NVDEC解码的缓冲区直接复制到NV12 d3d11纹理中。到目前为止没有运气。我设法做的是使用2个d3d11纹理(亮度+色度),2个cuGraphicsMapResources,2个cuGraphicsSubResourceGetMappedArray,2个CUDA_MEMCPY2D和一个像素着色器进行双重复制的副本。...无法执行单一复制,到目前为止,Nvidia论坛都没有回应。

我发现this old question面临着非常相似的问题,那里也没有解决方案。

cuda directx-11 nv12-nv21 cuvid nvdec
1个回答
1
投票

也许您需要这样的东西。这段代码摘自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;
}
© www.soinside.com 2019 - 2024. All rights reserved.