Camera2 YUV_420_888のPixelフォーマットを取得する|Android開発

   

Camera2 APIImageReader.newInstanceformatImageFormat.YUV_420_888を指定した場合、端末によって取得されるPixelフォーマット下記のいずれかになります。

  • NV12
  • NV21
  • I420

NV21が一番多くの端末で使用されているようです。

下記はPixelフォーマットの判定方法サンプルになります。

サンプルコード

解説

Image.getPlanesで取得される配列は

  • [0]:Y
  • [1]:U(UV)
  • [2]:V(VU)

の情報となっています。
ここでUまたはVのPixelStrideが1であれば、Planar=I420になります。

PixelStrideが2の場合、SemiPlanarになります。
この場合、UVとVUのBufferは同じ領域を参照しています。但し、それぞれUまたはVから始まるアドレスになります。

アドレス格納イメージ

フォーマット UVアドレス VUアドレス
NV12 0x00001000 0x00001001
NV21 0x00001001 0x00001000

なので、どちらのアドレスが先になるかで、Pixelフォーマットの判定を行っています。

 - Android