问题标签 [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.
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#NV21,NV21 is like NV12, but with U and V order reversed: it starts with V.
但是,当我通过代码实现时
- http://pastebin.com/T0my7zSc - 它假设你是第一位的
- https://stackoverflow.com/a/8394202/72437 - 它假设 U 也是第一位的
- https://stackoverflow.com/a/10125048/72437 - 它认为 U 也是第一位的
R 应该是最重要的位置
根据Color.javaint argb
中的实现,R 应该在最重要的位置。但是,我经历了以下代码实现
- http://pastebin.com/T0my7zSc - 它假设 R 处于最不重要的位置
- https://stackoverflow.com/a/8394202/72437 - 它假设 R 是最不重要的位置
我想知道,他们是在犯常见的错误,还是我忽略了什么?
目前,我的实现如下。
format - 如何判断一个文件是否为nv12格式文件?
我有一个文件,想知道是不是NV12格式,如何判断一个文件是nv12格式的文件?是否有任何工具或测试代码?
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 格式的格式制作字节数组。
c# - 位图图像 C# 中的 NV12 格式支持
是否BitmapImage
或WriteableBitmapImage
支持NV12
格式。或者我们可以创建一个BitmapImage
或WriteableBitmapImage
从一个以 NV12 格式排列的字节数组吗?
谢谢
image-processing - 图像格式 NV12 存储在内存中
我完全了解所描述的 NV12 格式的大小
现在我从两个来源阅读有关以这种格式存储 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位。
谁能澄清我的疑问?
android - NV21 格式和奇数图像尺寸
我在 Android 中使用 NV21 图像已经有一段时间了,我一直在跟踪一个可能由 NV21 图像中不正确的索引字节引起的错误。
这个问题的答案中的图像很好地概述了 Y、U 和 V 字节如何在图像缓冲区中定位。不确定是否允许,但我将其嵌入在下面:
- 当图像具有奇数尺寸(如奇偶校验)时会发生什么?这种格式甚至可能吗?
- 我们在某处有这种格式的官方规范吗?
c - 如何使用 IPP 将 RGB 转换为 NV12 色彩空间
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进行上述转换的有效方法是什么?
opengl - 如何使用 OpenGL 将 RGBA 转换为 NV12?
我需要使用 OpenGL 着色器作为编码器输入将 RGBA 转换为 NV12。
已经渲染了两个不同的片段着色器,两个纹理都来自一个相机。使用 v4l2 获取相机图像(YUV)。然后,将 YUV 转换为 RGB 让 OpenGL 渲染。下一步,我需要将 RGB 转换为 NV12 作为编码器输入,因为编码器只接受 NV12 格式。