如何在Nvidia CUDA 5.0 SDK的项目cudaDecodeGL中获取NV12文件?

时间:2013-08-16 13:56:03

标签: cuda

最近,我一直在阅读Nvidia cuda5.0 SDK的cudaDecodeGL项目。这个项目将MPEG2文件转换为NV12文件,然后将NV12文件转换为内核函数中的ARGB文件,最后这个ARGB文件将是在OpenGL窗口中渲染和显示。实际上,中间生成的NV12文件没有输出,而我想获取NV12文件。 如果有人能告诉我该怎么做,我将非常感激。

1 个答案:

答案 0 :(得分:2)

参考whitepaper

  

通过cudaPostProcessFrame()映射帧来完成对帧的后处理。这将返回指向NV12解码帧的指针。

此函数包含(并使用)在sample project中包含的源文件videoDecodeGL.cpp中。

此功能只有一个实际用途(函数调用)。它被称为copyDecodedFrameToTexture函数。此功能中的解码帧是您想要的。如果您在致电cudaPostProcessFrame之前查看此功能,则会看到以下代码:

        // If streams are enabled, we can perform the readback to the host while the kernel is executing
        if (g_bReadback && g_ReadbackSID)
        {
            CUresult result = cuMemcpyDtoHAsync(g_bFrameData[active_field], pDecodedFrame[active_field], (nDecodedPitch * nHeight * 3 / 2), g_ReadbackSID);

如果您愿意,这将显示如何/何时/何时将解码后的帧抓回主机。此时,如果您想要这样做,则必须将帧排队并保存到文件中。