Nuke Olaf - Log Store

[Android] 안드로이드 - 카메라 앱 만들기 (Camera2 개념) 본문

Android

[Android] 안드로이드 - 카메라 앱 만들기 (Camera2 개념)

NukeOlaf 2019. 12. 7. 13:44

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를 준다.

 

 

Comments