본문 바로가기

OnePIC (Android App)/카메라

[Camera2] Camera2로 Preview 띄우기

반응형
Camera2 프리뷰띄우기 및 캡처 샘플 코드 - GitHub

 

 

GitHub - googlearchive/android-Camera2Basic: Migrated:

Migrated:. Contribute to googlearchive/android-Camera2Basic development by creating an account on GitHub.

github.com

 


Camera2 흐름도 - preview 띄우기까지 

 

위 Camera2 샘플코드를 작성자가 직접 해석한 흐름도임으로, 정확하지 않을 수 있다.

 

 


 

주요 함수 설명

 

CameraManager.openCamera(cameraId, stateCallback, backgroundHandler)

 

cameraId인 카메라 장치를 열고, 이에 대한 사후 알림은 callback으로 간다.

 

 cameraDevice.createCaptureSession
( Arrays.asList(surface, imageReader?.surface), CameraCaptureSession.StateCallback() { ... } )

 

지원되는 모든 매개 변수를 집계하는 SessionConfiguration를 사용하여 새 CameraCaptureSession을 제작한다.

 

Arrays.asList(surface, imageReader?.surface) : List에 두가지 surface를 사용할 것이다.

StateCallback의 onConfigured( .. ) 가 불러질 때 CameraCaptureSession이 만들어진 것이다.

 

captureSession.setRepeatingRequest(previewRequest,captureCallback, backgroundHandler)

 

주어진 캡처 요청 설정을 사용하여 카메라 장치가 지속적으로 이미지를 캡처하도록 요청한다. 이를 사용하면 카메라 장치가 가능한 최대 속도로 이미지를 지속적으로 캡처한다.

 

쉽게 말해, captureSession이 지속적으로 이미지를 캡처하게 요청하는 코드이다.

 

이렇게 반복적인 요청을 사용하면 애플리케이션은 capture(CaptureRequest, CaptureCallback, Handler)를 통해 반복적으로 동일한 요청을 계속 제출할 필요 없이 preview나 연속적인 프레임 스트림을 유지하는 간단한 방법이다.

 

반복적인 요청은 capture(CaptureRequest, CaptureCallback, Handler) 또는 captureBurst(List, CaptureCallback, Handler)을 통해 제출된 요청보다 우선순위가 낮다. 따라서 반복적인 요청이 활성화된 상태에서 capture(CaptureRequest, CaptureCallback, Handler)가 호출되면 새로운 캡처 요청이 처리되기 전에 반복적인 요청이 계속 처리된다.


반복적인 캡처를 중지하려면 stopRepeating()을 호출하면 된다. abortCaptures()를 호출하면 요청이 지워진다.

stopRepeating(), abortCaptures()은 추후 이미지 캡처에서 사용되므로 가볍게 알아둔다.

 

리스너 및 콜백 함수 설명

 

TextureView.SurfaceTextureListener

 

텍스처 보기와 연결된 표면 텍스처를 사용할 수 있을 때 알림을 받는데 사용할 수 있다.

 

TextureView.SurfaceTextureListener 함수 설명
onSurfaceTextureAvailable
(SurfaceTexture surface, int width, int height)
TextureView의 surfaceTexture를 사용할 수 준비가 되면 호출되는 함수이다.
onSurfaceTextureDestroyed
(SurfaceTexture surface)
surfaceTexture를 소멸 되려고하면 호출되는 함수이다.
onSurfaceTextureSizeChanged
(SurfaceTexture surface, int width, int height)
surfaceTexture의 버퍼 크기가 변경되었을 때 호출되는 함수이다.
onSurfaceTextureUpdated
(SurfaceTexture surface)
surfaceTexture를 업데이트 될 때 호출되는 함수이다.

 

CameraDevice.StateCallback()

 

카메라 장치의 상태에 대한 업데이트를 수신하기 위한 콜백 클래스이다.

 

CameraDevice.StateCallback 함수 설명
onOpened(CameraDevice camera) 카메라 장치가 열렸을 때 호출되는 함수이다.
onDisconnected
(CameraDevice camera)
카메라 장치가 더 이상 사용할 수 없을 때 호출되는 함수이다.
onClosed(CameraDevice camera) 카메라 장치가 닫혔을 때 호출되는 함수이다.

 

CameraCaptureSession.StateCallback()

 

CameraCaptureSession의 상태에 대한 업데이트를 수신하기 위한 콜백 클래스이다.

 

CameraCaptureSession.StateCallback 함수 설명
onConfigured(CameraCaputureSession session) 카메라 장치가 자체 구성을 완료하고 세션이 캡처 요청 처리를 시작할 수 있을 때 호출되는 함수이다.
onConfigureFailed(CameraCaputureSession session) 요청한 대로 세션을 구성할 수 없는 경우 호출되는 함수이다.

 

반응형