TI DM368 YUV420之NV12转IYUV总结

TI DM368 YUV420之NV12转IYUV小结

              最近折腾DM368 h264解码,解码出的流直接保存成单帧YUV420文件,然后在windows上查看解码是否成功(受调试条件限制,只能通过这个方式来确认解码效果)。

由于YUV420这个格式之前未实际深入调试过,忽视一些重要的知识点,导致困惑。上图,

              TI DM368 YUV420之NV12转IYUV总结

上图色彩明显不对,这个截图后效果比原始显示要好,原始显示的图片,还有明显的竖条纹出现,感觉是每隔一列一个竖条纹。

            开始思路一直怀疑是h264解码问题,查了两天无果。今早忽然灵感来,想到YUV420存储格式的问题。确认,dm368 解码后是NV12,而我用的工具显示是IYUV的,问题定位到。网上搜不到显示NV12的小工具,自己写个代码把NV12转换成IYUV,再显示,如下:

 TI DM368 YUV420之NV12转IYUV总结

代码:

int ConvertNV12toIYUV(Uint8* pbuf,Uint32 imgw,Uint32 imgh)
{
Uint8* pPU = NULL;
Uint8* pPV = NULL;
Uint8* pPUV = NULL;
Uint8* pcache = NULL;
Uint32 i;

if (pbuf == NULL)
return -1;
pPUV = pbuf + imgw*imgh;
pcache = (Uint8*)malloc((imgw*imgh)>>1);
if (pcache == NULL)

return -1;
pPU = pcache;
pPV = pcache + ((imgw*imgh)>>2);
for (i=0;i<(imgw*imgh)>>1;i++)
{
if ((i % 2) == 0)
*pPV++ = *(pPUV+i);
else
*pPU++ = *(pPUV+i);
}
memcpy(pPUV,pcache,(imgw*imgh)>>1);
if (pcache)
free(pcache);
return 0;
}


TIPS:

     a.时间允许还是做事前补充下相关背景知识。

     b.dm365/dm368 YUV420 是XDM_YUV_420SP格式。

     c.调试小工具很重要。