본문 바로가기

OnePIC (Android App)/카메라

[Camera2] Camera2 API 기본 구조

반응형
 

Camera2 overview  |  Android Developers

Camera2 overview Stay organized with collections Save and categorize content based on your preferences. Note: This page refers to the Camera2 package. Unless your app requires specific, low-level features from Camera2, we recommend using CameraX. Both Came

developer.android.com

 

Camera2 란?

 

Camera2는 Android의 저수준 카메라 패키지로서, 더 이상 사용되지 않는 Camera 클래스를 대체합니다. Camera2는 복잡한 사용 사례에 대해 깊이 있는 제어를 제공하지만, 기기별 구성을 직접 관리해야 합니다. 또한 Camera2는 Android 5.0(API 레벨 21) 이상에서 작동합니다.

추가적으로 복잡한 사용 사례를 지원하기 위해 낮은 수준의 카메라 제어가 필요한 경우 Camera2가 좋은 옵션이지만, CameraX보다 복잡하고 장치별 구성을 개발자가 직접 관리해줘야 한다.

 

쉽게 말해 Android 카메라를 세밀하게 제어할 수 있는 Low-Level 카메라 API이다.

세밀한 제어를 원할 경우는 Camera2를, 그게 아니라 원하는 제어를 CameraX가 해준다면 CameraX를 사용하는 게 편하다.

 


Camera2 특징
  • 안드로이드 기기에 연결된 카메라 장치에 대한 인터페이스 제공
  • 단일 프레임 캡처 가능 ( 단일 프레임 캡처 요청 → 캡처 시도 → 캡처 결과 제공 및 이미지 버퍼 출력 )
  • 요청은 순서대로 처리되며, 여러 요청 한 번에 처리 가능

 


Camera2 실행 과정 - 기본 틀

 

1. 사용 가능한 카메라 장치 알아내고 열기 위해 CameraManager 얻기

 

2. 개별 카메라 하드웨어적 제어(프레임 속도, 초점 정보 등 카메라 설정과 출력 파라미터 얻기)를 하기 위해 CameraDevice 얻기 

 

3. 카메라 장치에서 이미지를 캡처하거나 스트리밍 하기 위해  CameraCaptureSession 과 output Surface 제작

 

4. 카메라 preview 이미지 띄우기 위해 SurfaceViewTextureView 제작

 

5. 캡처를 위해서, 캡처에 필요한 모든 캡처 매개변수를 정의하는 CaptureRequest를 구상 및 설정

 

6. 실제 캡처 함수( capture() ) 요청 실행 후, 카메라 장치는 TotalCaptureResult 객체를 생성

모순되는 매개변수를 반올림하거나 해결해야 하는 경우 요청과 다소 다른 결과가 나올 수 있습니다.

CameraManager

 

안드로이드 기기에 사용가능한 카메라 장치 얻어내는 데 사용

 

함수 이름 설명
getCameraIdList() 안드로이드 기기에 연결된 모든 Camera 장치 ID List 얻어낸다.
getCameraCharacteristics
(String cameraId)
cmeraId인 카메라 장치의 하드웨어적 기능을 얻어낸다.
openCamera
(String cameraId,
CameraDevice.StateCallback callback,
Handler handler)
cameraId인 카메라 장치를 열고, 이에 대한 사후 알림은 callback으로 간다.

 

CameraDevice 

 

Android 장치에 연결된 단일 카메라를 나타내며 높은 프레임 속도에서 이미지 캡처 및 사후 처리를 세밀하게 제어하는 데 사용

 

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

 

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

 

CameraCaptureSession

 

카메라에서 이미지를 캡처하거나 이전에 동일한 세션에서 카메라에서 캡처한 이미지를 재처리하는 데 사용

 

콜백 클래스 설명
CameraCaptureSession.CaptureCallback 카메라 장치에 제출된 CaptureRequest의 진행률을 추척하기 위한 콜백 클래스이다.
CameraCaptureSession.StateCallback CameraCaptureSession의 상태에 대한 업데이트를 수신하기 위한 콜백 클래스이다.

 

CameraCaptureSession.CaptureCallback 함수 설명
onCaptureProgregressed
(CameraCaptureSession session,
CaptureRequest request, CaptureResult partialResult)
이미지 캡처가 부분적으로 앞으로 진행될 때 호출되는 함수이다.
이미지 캡처의 일부 결과 사용 가능하다.
onCaptureCompleted
(CameraCaptureSession session,
CaptureRequest request, TotalCaptureResult resulf)
이미지 캡처가 완전히 완료되고 모든 결과 메타데이터를 사용할 수 있을 때 호출되는 함수이다.
CameraCaptureSession.StateCallback 함수 설명
onConfigured(CameraCaputureSession session) 카메라 장치가 자체 구성을 완료하고 세션이 캡처 요청 처리를 시작할 수 있을 때 호출되는 함수이다.
onConfigureFailed(CameraCaputureSession session) 요청한 대로 세션을 구성할 수 없는 경우 호출되는 함수이다.

 

SurfaceView와 TextureView 비교

 

SurfaceView

: 뷰 계층 구조 내부에 포함된 전용 드로잉 표면을 제공, 이 표면의 형식과 원하는 경우 크기를 제어

TextureView

: 카메라 미리 보기, 비디오 또는 OpenGL 장면에서 오는 것과 같은 콘텐츠 스트림을 표시하는 데 사용  (View를 상속)

 

 

TextureView

 

TextureView에는 SurfaceTexture가 존재

 

TextureView란?

: 카메라 미리 보기, 비디오 또는 OpenGL 장면에서 오는 것과 같은 콘텐츠 스트림을 표시하는 데 사용  (View를 상속)

 

SurfaceTexture란?

: 특별한 유형의 텍스처(texture)로, 비트맵 이미지를 GPU로 직접 렌더링하기 위해 사용되는 텍스처 객체

 

Surface란?

: 안드로이드 preview의 표면(Surface)를 의미하며, 그래픽 처리르 위해 그릴 수 있는 2D/3D 작업에 사용

 

TextureView 리스너 설명
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를 업데이트 될 때 호출되는 함수이다.

 

CaptureRequest

 

카메라 장치에서 단일 이미지를 캡처하는 데 필요한 변경 불가능한 설정 및 출력을 도움

 

캡처 하드웨어(센서, 렌즈, 플래시), 처리 파이프라인, 제어 알고리즘 및 출력 버퍼에 대한 구성을 포함

+ 또한, 이 캡처를 위해 이미지 데이터를 보낼 대상 표면 목록을 포함

 

TotalCaptureResult

 

이미지 센서에서 단일 이미지 캡처의 총 결과
캡처 하드웨어(센서, 렌즈, 플래시), 처리 파이프라인, 제어 알고리즘 및 출력 버퍼에 대한 최종 구성을 포함

 

 

반응형