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框架中看到了一些处理这种格式的代码,我会看看我是否可以挖掘它的链接,并将其附加到这个回答。
【讨论】:
我已经接受了答案,但如果你能想出那个链接,说明“官方”格式会非常好。 @silvarenYuv420SpToJpegEncoder::deinterleave
可能是您正在寻找的,完整的堆栈跟踪请参阅***.com/a/36560663/253468
@silvaren 注意到他们在 C++ 代码中只是 width >> 1
,因为 Android 的 YuvImage
不支持奇数大小的图像,请参阅 YuvImage.adjustRectangle
。以上是关于NV21 格式和奇数图像尺寸的主要内容,如果未能解决你的问题,请参考以下文章
Android ImageReader 获取 NV21 格式?