Nuke Olaf - Log Store
[Android] 안드로이드 - 카메라 앱 만들기 (Camera2 개념) 본문
https://medium.com/google-developers/detecting-camera-features-with-camera2-61675bb7d1bf#.2x3icoqnc
https://developer.android.com/reference/android/hardware/camera2/package-summary.html
https://blog.shift.moe/2018/09/05/camera2-overview/
기존 카메라 API는 안드로이드 초기 버전에서 만들어진 만큼 카메라가 지금 이렇게까지 발전할 거라고는 생각하지 않았고, 컴팩트 카메라처럼 간단한 기능들만을 제공했다. 이런 점을 상당 부분 개선한 API가 Camera2 API 이다.
camera1 은 이제 공식적으로 지원이 중단되었으며, 앞으로 많은 유저들이 고성능의 스마트폰 카메라를 사용하게 될것이다. 이제는 camera2 를 사용해야하는 시점이다
< camera2 api 의 동작 순서도 >
CameraManager : 시스템 서비스로서, 사용가능한 카메라와 카메라 기능들을 쿼리할 수 있고, 카메라를 열 수 있다.
CameraCharacteristics : 카메라의 속성들을 담고있는 객체, 속성을 가져오는 것만 가능하다
CameraDevice : 카메라 객체
CaptureRequest : 사진 촬영이나 카메라 미리보기를 요청(request) 하는 데 쓰이는 객체이다
CameraCaptureSession : CaptureRequest 를 보내고, 카메라 하드웨어에서 결과를 받을 수 있는 세션
CaptureResult : CaptureRequest 의 결과이다. 이미지의 메타데이터도 가져올 수 있다.
위의 그림을 보면,
1. 앱에서 CameraCaptureSession 으로 CaptureRequest 를 보낸다.
2. CameraCaptureSession에서 현재 보여지고 있는 화면을 CameraResult 를 통해 앱으로 다시 보내준다
는 것을 알 수 있다.
CaptureRequest 를 보내기 전까지는 카메라로 보고 있는 이미지(In-progress captures)를 버퍼를 통해 Surface에 뿌려준다.
위의 그림을 참고하면 여러 개의 Surface로 버퍼를 보내고 있는데, SurfaceView를 사용해 바로 미리보기를 보낼 수도 있고, SurfaceTexture나 RenderScript를 이용해 후처리를 하게 할 수도 있다. 특이한 점은 ImageReader나 MediaCodec으로 보내는 점인데, Camera2는 사진을 찍으면 바로 ByteArray를 주는 Camera1과는 달리 ImageReader로 Image를 준다.
'Android' 카테고리의 다른 글
[Android] 안드로이드 - camera2 api 사용하기 (0) | 2019.12.08 |
---|---|
[Android] 안드로이드 - 카메라앱 만들기 (camera2 사용하는 법) (0) | 2019.12.07 |
[Android] 안드로이드 - hardware 의 카메라 사용하는 앱 with Kotlin (0) | 2019.12.06 |
[Android] 안드로이드 - 카메라 예제 참고 사이트 (0) | 2019.12.06 |
[Android] 안드로이드 - 내가 생각한 foreground/background service의 차이 (1) | 2019.12.06 |