YUV图像翻转问题

时间:2021-03-23 09:23:56
我为WMP做了一个视频Transform filter解码插件,能正常解码和播放,但图像是倒立的,因此我需要把解码后的YUV图像数据垂直镜像或水平翻转后才能正常显示,我现在的问题Y已经翻转正常,只是颜色不正确,经过分析主要是U和V两个分量翻转得不正确,不知U和V如何处理才正常?请高手指教!
注:我图像数据格式是I420,位数是24,其算法如下:
void CMyDecoder::ConverseUV(PBYTE pBuffer,int nWidth,int nHeight)
{
register int nRows=nHeight/2;
register int nNewWidth=nWidth/2;
register int nNewHeight=nRows;
register BYTE TempBuff[720];
register int nTimes=nRows/2;
register int nPos=0;
for(register int nIndex=0;nIndex<nTimes;nIndex++)
{
nPos=nIndex*nNewWidth;
memcpy(&TempBuff,&pBuffer[nPos],nNewWidth);
memcpy(&pBuffer[nPos],&pBuffer[(nRows-nIndex-1)*nNewWidth],nNewWidth);
memcpy(&pBuffer[(nRows-nIndex-1)*nNewWidth],&TempBuff,nNewWidth);
}
}
U、V分量的转换都是调用这个函数的,现在颜色有问题,请高手指教!

4 个解决方案

#1


应该是以height为单位翻转吧,为什么要yuv分开来处理?

#2


u,v分量调用该函数时候用的是否是相应的指针(pBuffer),还有u,v分量有没有弄反

#3


因为YUV420的存储结构是先存Y分量,然后是U分量,最后才是V分量,pBuffer是不会错的,U和V的长度一样,处理方式也应该是一样的

#4


引用 3 楼 WaltersRen 的回复:
因为YUV420的存储结构是先存Y分量,然后是U分量,最后才是V分量,pBuffer是不会错的,U和V的长度一样,处理方式也应该是一样的


不错,关键是搞清楚存储结构........................................

#1


应该是以height为单位翻转吧,为什么要yuv分开来处理?

#2


u,v分量调用该函数时候用的是否是相应的指针(pBuffer),还有u,v分量有没有弄反

#3


因为YUV420的存储结构是先存Y分量,然后是U分量,最后才是V分量,pBuffer是不会错的,U和V的长度一样,处理方式也应该是一样的

#4


引用 3 楼 WaltersRen 的回复:
因为YUV420的存储结构是先存Y分量,然后是U分量,最后才是V分量,pBuffer是不会错的,U和V的长度一样,处理方式也应该是一样的


不错,关键是搞清楚存储结构........................................