问题标签 [nv12-nv21]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
27757 浏览

android - YUV NV21 转换为 RGB 的困惑

根据http://developer.android.com/reference/android/graphics/ImageFormat.html#NV21,NV21 是默认使用的格式。

网上有很多关于 YUV NV21 到 RGB 转换的代码。但是,当我浏览代码时,我怀疑代码的正确性。

第一个组件 V 应该首先出现,然后是第一个组件 U

根据http://wiki.videolan.org/YUV#NV21NV21 is like NV12, but with U and V order reversed: it starts with V.但是,当我通过代码实现时

R 应该是最重要的位置 根据Color.javaint argb中的实现,R 应该在最重要的位置。但是,我经历了以下代码实现

我想知道,他们是在犯常见的错误,还是我忽略了什么?

目前,我的实现如下。

0 投票
1 回答
4962 浏览

format - 如何判断一个文件是否为nv12格式文件?

我有一个文件,想知道是不是NV12格式,如何判断一个文件是nv12格式的文件?是否有任何工具或测试代码?

0 投票
2 回答
10996 浏览

c# - NV12格式和UV平面

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

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

0 投票
2 回答
1087 浏览

c# - 位图图像 C# 中的 NV12 格式支持

是否BitmapImageWriteableBitmapImage支持NV12格式。或者我们可以创建一个BitmapImageWriteableBitmapImage从一个以 NV12 格式排列的字节数组吗?

谢谢

0 投票
1 回答
22426 浏览

image-processing - 图像格式 NV12 存储在内存中

我完全了解所描述的 NV12 格式的大小

NV12格式和UV平面

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

NV12

所有 Y 样本首先出现在内存中,作为具有偶数行的 unsigned char 值数组。Y 平面后面紧跟一组 unsigned char 值,其中包含压缩的 U (Cb) 和 V (Cr) 样本。当组合 UV 数组被寻址为 little-endian WORD 值数组时,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 有一个亮度“亮度”平面 Y 和一个 U 和 V 值交错的平面。在 NV12 中,色度平面(蓝色和红色)在水平和垂直维度上均以 2 倍进行二次采样。对于 2x2 像素组,您有 4 个 Y 样本和 1 个 U 和 1 V 样本。将 NV12 视为 U 和 V 平面交错的 I420 会有所帮助。这是 NV12 的图形表示。每个字母代表一位: 对于 1 个 NV12 像素: YYYYYYYY UVUV 对于 2 像素 NV12 帧: YYYYYYYYYYYYYYYY UVUVUVUV 对于 50 像素 NV12 帧: Y*8*50 (UV)*2*50 对于 n 像素 NV12 帧: Y*8*n (UV)*2*n

我在这里的理解是:每个 U 和 V 在每个字节中逐位交错。所以UV平面的每个字节将包含交错的4U位和4V位。

谁能澄清我的疑问?

0 投票
1 回答
2792 浏览

android - NV21 格式和奇数图像尺寸

我在 Android 中使用 NV21 图像已经有一段时间了,我一直在跟踪一个可能由 NV21 图像中不正确的索引字节引起的错误。

这个问题的答案中的图像很好地概述了 Y、U 和 V 字节如何在图像缓冲区中定位。不确定是否允许,但我将其嵌入在下面:

YUV420SP NV21 格式

  1. 当图像具有奇数尺寸(如奇偶校验)时会发生什么?这种格式甚至可能吗?
  2. 我们在某处有这种格式的官方规范吗?
0 投票
1 回答
2133 浏览

android - 关于图像格式 NV21 及其似乎具有的不同内存布局的混淆

我必须处理上面给出的格式的图像。但是,我发现了有关它的相互矛盾的信息。

根据另一个堆栈溢出答案,UV 值彼此跟随,而根据维基百科,V 值位于内存中的 U 值之后。哪一个是正确的,或者如果他们都是,有什么区别?

会不会是 NV12 与 NV21 的问题?但是,站点声明它们应该简单地切换。

也许它与平面、半平面或非平面的图像有关,尽管我不知道这些术语是什么意思。

有人可以澄清一下吗?

0 投票
1 回答
7446 浏览

c - 如何使用 IPP 将 RGB 转换为 NV12 色彩空间

英特尔® Media SDK 等视频编码器需要 NV12 视频输入格式。

NV12 格式是在内存中排序的 YUV 4:2:0 格式,首先是 Y 平面,然后是交错 UV 平面中的打包色度样本。

例子:
YYYYYY
YYYYYY
UVUVUV

在此处输入图像描述

RGB 颜色格式,指 Pixel-Order RGB(每像素字节,低字节为红色):
RGBRGBRGBRGBRGB
RGBRGBRGBRGBRGB

在此处输入图像描述

我做了一些网络研究,发现关于 NV12,YUV被定义为 YCbCr 颜色空间。目前至少有 2 种可能的 YCbCr 格式适用于 NV12:

  • BT.601 - 适用于标清电视
  • BT.709 - 适用于高清电视

我的问题是:是否有将 RGB 颜色空间转换为 NV12的IPP功能?

0 投票
1 回答
1767 浏览

c - 如何使用 IPP 将 8 位灰度图像转换为 NV12(有限范围)色彩空间

英特尔® Media SDK 等视频编码器不接受 8 位灰度图像作为输入格式。
8 位灰度格式在 [0, 255] 范围内每个像素应用一个字节。

问题上下文中的 8 位 YUV 格式适用YCbCr(BT.601 或 BT.709)。
虽然有一个全范围的 YUV 标准,但常用的格式是“有限范围”YUV,其中 Y 的范围为 [16, 235],U,V 的范围为 [16, 240]。

在这种情况下, NV12 格式是常见的输入格式。
NV12 格式是在内存中排序的 YUV 4:2:0 格式,首先是 Y 平面,然后是交错 UV 平面中的打包色度样本:
YYYYYY
YYYYYY
UVUVUV

在此处输入图像描述

灰度图像将被称为“I 平面”:
IIIIII
IIIIII

在此处输入图像描述

设置 UV 平面很简单:将所有 U、V 元素设置为 128 值。

但是Y平面呢?

在全范围YUV的情况下,我们可以简单地将“I平面”作为Y平面(即Y = I)。

如果是“有限”的 YUV 格式,则需要
进行转换:在转换公式结果中设置 R=G=B:Y = round(I*0.859 + 16)。

使用IPP进行上述转换的有效方法是什么?

0 投票
1 回答
1586 浏览

opengl - 如何使用 OpenGL 将 RGBA 转换为 NV12?

我需要使用 OpenGL 着色器作为编码器输入将 RGBA 转换为 NV12。

已经渲染了两个不同的片段着色器,两个纹理都来自一个相机。使用 v4l2 获取相机图像(YUV)。然后,将 YUV 转换为 RGB 让 OpenGL 渲染。下一步,我需要将 RGB 转换为 NV12 作为编码器输入,因为编码器只接受 NV12 格式。