Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NV21 format and odd image dimensions

I have been working for some time with NV21 images in Android and I have been tracking a bug that might be caused by incorrect indexing bytes in an NV21 image.

The image in the answer of this question has a nice overview of how the Y, U and V bytes are positioned in the image buffer. Not sure it is allowed, but I am embedding it below:

YUV420SP NV21 format

  1. What happens when the image has odd dimensions (as in parity)? Is that even possible in this format?
  2. Do we have an official specification of this format somewhere?
like image 598
silvaren Avatar asked Nov 19 '15 19:11

silvaren


People also ask

What is NV21 format?

NV21 is the default image format used by Android camera.

What is NV12 format?

August 2016. The NV12 image format is commonly found as the native format from various machine vision, and other, video cameras. It is yet another variant where colour information is stored at a lower resolution than the intensity data.


Video Answer


1 Answers

In the case of an image with odd dimensions (i.e one of W or H, in a WxH image is odd), you'd expect the Y plane to be fully sampled as always, with WxH samples, followed by 2(⌈W/2⌉ x ⌈H/2⌉) chroma samples, where we divide each image dimension by 2 but round up rather than round down.

So some of the pixels at the very edge of the image have chroma samples that correspond to only 1 or 2 original pixels, rather than 4. I hope that makes sense. You can see in this link that a couple of other libraries have had issues handling odd dimensions in YUV images previously.

For your second question, I haven't seen an official specification, but I have seen some code in the android framework that handles this format, I will see if I can dig up a link to it, and append it to this answer.

like image 103
jpowell Avatar answered Oct 07 '22 04:10

jpowell