0

最近一直在看Nvidia cuda5.0 SDK的cudaDecodeGL项目。这个项目将MPEG2文件转换为NV12文件,然后在内核函数中将NV12文件转换为ARGB文件,最后渲染并显示这个ARGB文件在 OpenGL 窗口中。其实中间产生的NV12文件是没有输出的,而我想得到NV12文件。如果有人能告诉我该怎么做,我将不胜感激。

4

1 回答 1

2

参考白皮书

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

此函数包含(并使用)在示例项目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);

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

于 2013-08-18T03:43:35.593 回答