Nuke Olaf - Log Store

[Android] 안드로이드 - hardware 의 카메라 사용하는 앱 with Kotlin 본문

Android

[Android] 안드로이드 - hardware 의 카메라 사용하는 앱 with Kotlin

NukeOlaf 2019. 12. 6. 20:59

https://gabrieltanner.org/blog/camera-app

https://developer.android.com/guide/topics/media/camera

 

android.hardware.camera2 패키지는 Android 기기에 연결된 개별 카메라 기기에 대한 인터페이스를 제공합니다. 더 이상 사용되지 않는 Camera클래스를 대체합니다 .

이 패키지는 카메라 장치를 파이프 라인으로 모델링하여 단일 프레임 캡처를위한 입력 요청을 받아 요청 당 단일 이미지를 캡처 한 다음 하나의 캡처 결과 메타 데이터 패킷과 요청에 대한 출력 이미지 버퍼 세트를 출력합니다. 요청은 순서대로 처리되며 한 번에 여러 요청을 처리 할 수 ​​있습니다. 카메라 장치는 여러 단계의 파이프 라인이므로 대부분의 Android 장치에서 전체 프레임 속도를 유지하려면 여러 요청이 비행 중이어야합니다.

사용 가능한 카메라 장치를 열거, 쿼리 및 열려면 CameraManager인스턴스를 얻습니다 .

개인 CameraDevices은 하드웨어 장치 및 장치의 사용 가능한 설정 및 출력 매개 변수를 설명하는 정적 특성 정보 세트를 제공합니다. 이 정보는 CameraCharacteristics개체를 통해 제공되며 다음을 통해 제공됩니다. getCameraCharacteristics(String)

카메라 장치에서 이미지를 캡처하거나 스트리밍하려면 먼저 응용 프로그램 camera capture session 에서 카메라 장치와 함께 사용할 출력 표면 세트가있는를 생성해야합니다 createCaptureSession(SessionConfiguration). 각 Surface는 appropriate size and format카메라 장치에서 사용 가능한 크기 및 형식과 일치하도록 (해당되는 경우) 사전 구성되어 있어야합니다. 목표 표면을 포함 클래스의 다양한 얻을 수있다 SurfaceView, SurfaceTexture경유 Surface(SurfaceTexture), MediaCodec, MediaRecorder, Allocation, 및 ImageReader.

일반적으로 카메라 미리보기 이미지로 전송됩니다 SurfaceView또는 TextureView(ITS를 통해 SurfaceTexture). 대한 JPEG 이미지 나 RAW 버퍼의 캡처 DngCreator와 함께 할 수 ImageReader JPEG RAW_SENSOR형식을 지원합니다. 또는 직접 관리 또는 네이티브 코드 RenderScript OpenGL을 ES 카메라 데이터 애플리케이션 구동 처리가 가장 통해 이루어진다 AllocationYUV와 Type, SurfaceTexture ImageReaderA의 YUV_420_888각각 형식.

그런 다음 응용 프로그램 CaptureRequest은 단일 이미지를 캡처하기 위해 카메라 장치에 필요한 모든 캡처 매개 변수를 정의하는를 구성해야합니다 . 이 요청에는이 캡처의 대상으로 사용해야 할 구성된 출력 표면이 나열됩니다. CameraDevice에는 응용 프로그램이 실행되는 Android 장치에 최적화 된 지정된 사용 사례 factory method를 만들기 위한가 있습니다 request builder.

요청이 설정되면 원샷 capture또는 끝없이 repeating사용 하기 위해 활성 캡처 세션으로 전달 될 수 있습니다 . 두 방법 모두 버스트 캡처 / 반복 버스트로 사용할 요청 목록을 허용하는 변형이 있습니다. 반복 요청은 캡처보다 우선 순위가 낮으므로 capture()반복 요청이 구성된 동안 제출 된 요청은 현재 반복 (버스트) 캡처의 새 인스턴스가 캡처를 시작하기 전에 캡처됩니다.

요청을 처리 한 후 카메라 장치는 TotalCaptureResult캡처시 카메라 장치의 상태 및 사용 된 최종 설정에 대한 정보가 포함  객체 를 생성합니다 . 반올림 또는 해결 모순 매개 변수가 필요한 경우 요청과 약간 다를 수 있습니다. 카메라 장치는 또한 이미지 데이터 프레임을 Surfaces요청에 포함 된 각 출력으로 전송합니다 . 출력 CaptureResult와 관련하여 비동기 적으로 생성되며, 때로는 상당히 나중에 생성됩니다.

Comments