最近,我一直在阅读Nvidia cuda5.0 SDK的cudaDecodeGL项目。这个项目将MPEG2文件转换为NV12文件,然后将NV12文件转换为内核函数中的ARGB文件,最后这个ARGB文件将是在OpenGL窗口中渲染和显示。实际上,中间生成的NV12文件没有输出,而我想获取NV12文件。 如果有人能告诉我该怎么做,我将非常感激。
答案 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);
如果您愿意,这将显示如何/何时/何时将解码后的帧抓回主机。此时,如果您想要这样做,则必须将帧排队并保存到文件中。