首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存中的图像格式NV12存储

内存中的图像格式NV12存储
EN

Stack Overflow用户
提问于 2015-07-15 09:27:53
回答 1查看 24.3K关注 0票数 15

我完全理解所讨论的NV12格式的大小

NV12 format and UV plane

现在,我从两个来源阅读有关UV平面的这种格式的存储:一个是https://msdn.microsoft.com/en-us/library/windows/desktop/dd206750(v=vs.85).aspx

NV12

所有的Y样本首先出现在内存中,作为一个无符号字符值数组,其行数为偶数。Y平面后面紧跟着一个包含填充U (Cb)和V (Cr)样本的无符号字符值阵列。当组合的U数组被寻址为一个小端点字值数组时,LSB包含U值,MSB包含V值。NV12是DirectX VA的首选4:2:0像素格式。预计这将是支持4:2:0视频的DirectX VA加速器的中期要求.下图显示了Y平面和包含填充U和V样本的数组。

我所理解的是:在UV平面中,每个U和V都存储在单字节中。

当我从维基百科上读到这个:https://wiki.videolan.org/YUV#NV12

上面写着:

NV12

与I420相关的是,NV12有一个luma“亮度”平面Y和一个U和V值交错的平面。在NV12中,色度平面(蓝色和红色)在水平和垂直尺度上都被细分为2倍。对于2x2组像素,有4个Y样本和1U和1V样本。将NV12看作具有U面和V面交错的I420是有帮助的。下面是NV12的图形表示。每个字母代表一位:对于1 NV12像素: YYYYYYYY UVUV代表2像素NV12帧: YYYYYYYYYYYYYYYY代表50像素NV12帧: Y*8*50 (UV)*2*50用于n像素NV12帧: Y*8*n (UV)*2*n

我在这里所理解的是:,每个U和V在每个字节中被一点一点地交错。因此,UV平面的每一个字节都将包含4U位和4V位交织。

有人能澄清我的疑虑吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-19 09:33:24

TL;DR: MSDN是正确的

要验证这一点(或者至少验证在位级别上没有交织),可以使用ffmpeg,这是一个广泛使用的视频工具。我做了以下实验:

  1. 创建一个包含一些文本的文件(我以Lorem文本为例)
  2. 告诉ffmpeg把它读成一个小尺寸的I420视频帧
  3. 告诉ffmpeg将其转换为NV12格式
  4. 打印出来

下面是用于(2)和(3)的命令行示例:

代码语言:javascript
复制
ffmpeg -s 96x4 -i example_i420.yuv -pix_fmt nv12 example_nv12.yuv

下面是我在输出中得到的内容:

我也是一样的,神圣的,神圣的,不受诱惑的,不受诱惑的。Ut enim ad minim veniam,quis nostrud习服ullamco laboris aliquip ex ea commodo .在无名氏荒凉的地方,我们要谴责天鹅绒和毛毛虫。我的名字是:. bLoorree .cUotn seenci

我用粗体标记色度(U和V)。很明显,这些值(ASCII字母)是相同的,只是按无序排列。如果执行任何位交错操作,我会得到不同的值。

因此,VLC wiki中的描述(BTW是而不是维基百科)是不正确的。名为"Edwardw“的人添加了提到像素here的”插图“,然后将其更改为"bits”here。我希望有人修改它,以减少误导性( wiki需要注册,所以我不能编辑它)。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31426515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档