【问题标题】:Nvidia NVDEC - copy decoded frame to D3D11 NV12 textureNvidia NVDEC - 将解码帧复制到 D3D11 NV12 纹理
【发布时间】:2023-03-03 15:35:02
【问题描述】:

我正在尝试将 NV12 NVDEC 解码缓冲区直接复制到 NV12 d3d11 纹理中。到目前为止没有运气。我设法做的是使用 2 个 d3d11 纹理(亮度 + 色度)、2 个cuGraphicsMapResources、2 个cuGraphicsSubResourceGetMappedArray、2 个CUDA_MEMCPY2D 和一个像素着色器来合并所有的双镜头副本......没办法执行单次复制,到目前为止,NVidia 论坛没有任何回应。

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

【问题讨论】:

  • “单次”复制是什么意思? NV12 本身是半平面格式。
  • 我的意思是单个 cuMemcpy2D 操作,如果可能的话。甚至是单个 NV12 纹理映射数组上的 2 cuMemcpy2D。

标签: cuda directx-11 nv12-nv21 cuvid nvdec


【解决方案1】:

也许你需要这样的东西。此代码截取自 FFmpeg 项目(开源)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;
}

【讨论】:

  • 不,这是从 HOST 到 DEVICE 的副本,它们是从系统内存复制到 gpu 内存。
  • 好吧,不介意那部分。关注 ffmpeg 如何迭代 Y 和 UV 分量(for 循环)并使用线尺寸作为间距等。我认为这可能会有所帮助。
【解决方案2】:

不知道如何使用 NVidia/Cuda 完成此操作,因为我不熟悉。但这就是我设法使用 Direct3D (D3D11va) 做到这一点的方法,这可能会帮助您将其转化为您的情况:-

  1. (NV12 NDEC Device).CopySubresourceRegion(src NV12 NVDEC texture, srcSubresourceArrayIndex, dst NV12 shared texture)

(获取新创建的 NV12 共享纹理的共享句柄)

  1. (您的设备).OpenSharedResource(NV12 共享句柄)

(准备 VideoProcessorInputView、VideoProcessorOutputView 和 Streams)

  1. (Your Device).VideoProcessorBlt(src NV12 shared handle, dst Your RGBA/BGRA Render Texture)

这个过程是视频加速,它只发生在您的 GPU 中(不涉及 CPU/RAM)。您还应该确保 GPU 适配器支持这一点。

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 2014-12-05
    • 2017-03-25
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2021-10-05
    • 2020-10-13
    • 1970-01-01
    相关资源
    最近更新 更多