我不熟悉YUV以及如何打包数据。鉴于我有以下代码......
int width = 1920;
int height = 1080;
BYTE* yuvData = GetFrame();
...我如何将yuvData
解压缩到具有以下签名的方法中......
Display(BYTE* pYplane, BYTE* pVplane, BYTE* pUplane)
YUV缓冲区采用平面格式。
答案 0 :(得分:0)
这取决于您未在问题中指定的YUV格式类型。以下链接对各种YUV类型有很好的解释和说明:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd206750%28v=vs.85%29.aspx
例如,一种常用的YUV类型是YUV420平面。在这种格式中,色度分量以2:1水平下采样,2:1垂直下采样。这意味着对于每4个亮度(Y)值,您有一个色度(1U + 1V)分量(请参见视觉链接中的插图)。 plane 告诉您首先拥有所有亮度分量,然后是所有U分量,然后是所有V分量。因此
int iSizeY = width * height;
int iSizeUV = (width * height)/4;
BYTE* pY = yuvData;
BYTE* pU = yuvData + iSizeY // there are width * height Y components
BYTE* pV = pU + iSizeUV; // skip the U components