Tistory View
이 문서 오류가 있으니 수정되기 전까지 보지 마세요..ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
안드로이드의 카메라는 기본적으로 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라는 형태를 지원하는 것 같은데 가지고있는 장치가 없어서...
아.. 머리아프다.. 일단.. 여기까지.. 좀 쉬고 다시 써야겠다..
'Android Develop > camera' 카테고리의 다른 글
Camera Preview NV21 GLES 2.0 Shader (0) | 2017.11.05 |
---|---|
NV21을 쓸까... YV12를 쓸까.... (1) | 2017.10.30 |
setPreviewCallbackWithBuffer와 addCallbackBuffer 삽질기.. (0) | 2017.10.29 |
카메라 api 주의사항 (0) | 2017.10.25 |
- Total
- Today
- Yesterday
- OpenGLes
- 재태크
- 전기료
- 애드센스
- 컴퓨트셰이더
- gpgpu
- 에어컨
- Android
- 사용료
- 예금
- 경제보복
- 전기요금
- 애드핏
- ComputeShader
- 컴퓨트쉐이더
- 공유 컨텍스트
- 아끼는 법
- 적금
- 금리
- TTS
- 전기세
- 블로그
- choreographer
- 티스토리
- 에어콘
- 재테크
- 안드로이드
- texture
- OpenGL ES
- 텍스처
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |