C# NV12格式和UV平面

C# NV12格式和UV平面,c#,yuv,color-space,libyuv,nv12-nv21,C#,Yuv,Color Space,Libyuv,Nv12 Nv21,我对NV12格式有点困惑。我正在查看页面以了解格式。 我目前的理解是,如果您有一个640x480尺寸的图像或视频,那么Y平面将有640x480字节,U和V两个平面都有640/2 x 480/2。这并不意味着U平面只有640/2 x 480/2和V平面只有640/2 x 480/2字节。因此,out缓冲区数组中的总字节数将为。 2乘以(640/2)*(480/2),因为uv平面将占用两个字节 byte [] myArray new byte[(640 * 480) + (2 * (640/2) *

我对NV12格式有点困惑。我正在查看页面以了解格式。 我目前的理解是,如果您有一个
640x480
尺寸的图像或视频,那么Y平面将有
640x480
字节,U和V两个平面都有
640/2 x 480/2
。这并不意味着U平面只有
640/2 x 480/2
和V平面只有
640/2 x 480/2
字节。因此,out缓冲区数组中的总字节数将为。 2乘以
(640/2)*(480/2)
,因为uv平面将占用两个字节

byte [] myArray new byte[(640 * 480) + (2 * (640/2) * (480/2)) ];

所以问题是我对它的理解是正确的?我是否正在以指定NV12格式的格式制作字节数组。

NV12格式被二次采样为4:2:0

框架的总尺寸为
W x H x 3/2
,其中W为宽度,H为高度

vga分辨率的1帧为460800字节,其中

  • Y部分为640x480字节
  • Cb部分为640*480/4=76800字节
  • Cr部分为640*480/4=76800字节

希望这能回答您的问题。

为了补充第一个答案,NV12格式交错了U和V色度数据

对于
640x480
图像帧,NV12表示由720行640字节组成:

  • 前480行各包含640个亮度(Y)值

  • 最后240行每行包含320个(U,V)值元组

所以“数组将是,2乘以(640/2)*(480/2),因为uv平面将占用两个字节。”我没有得到它。