NV21 格式和奇数图像尺寸

Posted

技术标签:

【中文标题】NV21 格式和奇数图像尺寸【英文标题】:NV21 format and odd image dimensions 【发布时间】:2016-02-22 02:36:31 【问题描述】:

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

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

    当图像具有奇数尺寸(如奇偶校验)时会发生什么?这种格式有可能吗? 我们在某处有这种格式的官方规范吗?

【问题讨论】:

图形错误,显示为 NV12 格式。我已经更新了图形(我还在参考答案中评论了这个问题)。 【参考方案1】:

对于具有奇数尺寸的图像(即 W 或 H 之一,在 WxH 图像中是奇数),您希望 Y 平面像往常一样被完全采样,WxH 样本,然后是 2( ⌈W/2⌉ x ⌈H/2⌉) 色度样本,我们将每个图像维度除以 2,但向上取整而不是向下取整。

因此,图像边缘的某些像素具有仅对应于 1 或 2 个原始像素而不是 4 个的色度样本。我希望这是有道理的。您可以在 link 中看到,其他几个库之前在处理 YUV 图像中的奇数尺寸时遇到了问题。

关于你的第二个问题,我还没有看到官方规范,但是我在android框架中看到了一些处理这种格式的代码,我会看看我是否可以挖掘它的链接,并将其附加到这个回答。

【讨论】:

我已经接受了答案,但如果你能想出那个链接,说明“官方”格式会非常好。 @silvaren Yuv420SpToJpegEncoder::deinterleave 可能是您正在寻找的,完整的堆栈跟踪请参阅***.com/a/36560663/253468 @silvaren 注意到他们在 C++ 代码中只是 width >> 1,因为 Android 的 YuvImage 不支持奇数大小的图像,请参阅 YuvImage.adjustRectangle

以上是关于NV21 格式和奇数图像尺寸的主要内容,如果未能解决你的问题,请参考以下文章

从android相机的NV21格式中提取黑白图像

C语言实现RGB packet格式转YUV(NV21)格式

Android ImageReader 获取 NV21 格式?

NV12格式转RGB的CUDA实现

视频存储格式YUV420 NV12 NV21 i420 YV12

如何将 android 位图转换为 NV12 颜色格式?