Tistory View

Android Develop/camera

안드로이드 카메라의 NV21과 YV12과 YUV_420_888

God Dangchy What should I do? 2017. 10. 25. 18:49

안드로이드 YV12

 

 

이 문서 오류가 있으니 수정되기 전까지 보지 마세요..ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

 

 

안드로이드의 카메라는 기본적으로 NV21방식을 쓴다

모든 안드로이드 기기의 카메라는 NV21로 촬영할 수있다. 아니면 기기에 들어갈 수 없다.

단, 구글이 정책을 바꾸면..헉~, 어찌 되건 NV21은 아마 거의 지원할 것이다.

언젠가 YUV_420_888가 기본이 될지도 모르겠다. 롤리팝부터는 YUV_420_888를 권장하기 때문에....

 

필자가 테스트한 장치들의 경우 Camera Api(구버전)의 경우 NV21과 YV12를 지원하는 것으로 보였다.

 

 

NV21은 다음의 구조를 가진다.

6x4픽셀크기의 이미지를 예를 들어 설명하면, 바이트순서는 다음과 같다( 16byte align stride 부분은 무시하고 보라)

Y1 

Y2 

Y3 

Y4 

Y5 

Y6 

Y7

Y8

Y9 

Y10 

Y11 

Y12 

Y13

Y14

Y15 

Y16 

Y17 

Y18 

Y19 

Y20 

Y21 

Y22 

Y23 

Y24 

U1

V1 

U2 

V2

U3 

V3 

U4

V4 

U5

V5 

U6

V6

 

전체구성순서는 Y-plane + UV-plane으로 구성된다.

Y-Plane

UV-Plane 

 

 

4픽셀이 1개의 UV값을 공유한다. 

U1과 V1의 값은 Y1, Y2, Y7, Y8이 같이 쓴다. 

 

첫픽셀의 YUV값은 Y1, U1, V1 이고, Y22은 U5,V5값을 쓴다.

 

전체byte크기는 6x4+6x2 = 36으로 RGB인 6x4x3=72에 비해 반으로 작다.(화질은 따지지 말자.)

 

 

이미지를 다룰 때 stride값을 고려해야 되는 데, 필자가 테스트한 기기들의 preview크기는 모두 16byte-aligned값을 쓰고 있어 16byte-aligned이 되어있는지 아닌지 알 방법이 없었다..

 

 

 

(아직도 헤깔리는게.. YV12와 YUV_420_888이 같은 건지 다른 건지를 모르겠다.)

문서를 이것저것 뒤지다 보니 일부 기기에서 YUY2라는 형태를 지원하는 것 같은데 가지고있는 장치가 없어서...

아.. 머리아프다.. 일단.. 여기까지.. 좀 쉬고 다시 써야겠다..

 

 

Replies
Reply Write