2015-11-19 23 views
3

我一直在Android的NV21圖像工作了一段時間,我一直在跟蹤一個錯誤,可能是由NV21圖像中的索引字節不正確引起的。NV21格式和奇怪的圖像尺寸

this question答案中的圖像很好地概述了Y,U和V字節在圖像緩衝區中的位置。不知道這是允許的,但我將它嵌入如下:

YUV420SP NV21 format

  1. 當圖像具有奇數維(如奇偶校驗)會發生什麼?這種格式甚至可能嗎?
  2. 我們是否有這種格式的官方說明?
+1

圖形錯誤,顯示NV12格式。我更新了圖形(我也在提到的答案中評論了這個問題)。 – rics

回答

2

對於具有奇數尺寸(即W或H中的一個,在WxH圖像中爲奇數)的圖像,您可以預期Y平面將一如既往地完全採樣,其中WxH採樣通過2(⌈ W/2 ⌉ x ⌈ H/2 ⌉)色度樣本,其中我們將每個圖像維度除以2,但向上取整而不是向下取整。

因此,在圖像的邊緣有一些像素的色度樣本只對應於1或2個原始像素,而不是4個。我希望這是有道理的。您可以在此link中看到,其他一些庫以前在處理YUV圖像中的奇數維時遇到了問題。對於你的第二個問題,我沒有看到官方的規範,但我已經看到在處理這種格式的android框架中的一些代碼,我會看看我是否可以挖掘一個鏈接到它,並將其附加到這個答案。

+0

我已經接受了答案,但是如果你能拿出這個鏈接,那麼說明「官方」格式將會非常好。 – silvaren

+1

@silvaren ['Yuv420SpToJpegEncoder :: deinterleave'](http://code.metager.de/source/xref/android/4.4/frameworks/base/core/jni/android/graphics/YuvToJpegEncoder.cpp#deinterleave)可能是你在尋找什麼,完整的堆棧跟蹤請參閱http://stackoverflow.com/a/36560663/253468 – TWiStErRob

+1

@silvaren注意到他們只是'寬度>> 1'在C++代碼中,因爲Android的'YuvImage'不支持奇數大小的圖像,請參閱['YuvImage.adjustRectangle'](https://github.com/android/platform_frameworks_base/blob/kitkat-mr2.2-release/graphics/java/android/graphics/YuvImage.java#L214 )。 – TWiStErRob