DevBytes: Android L Developer Preview – Camera2 API

ANKUR KOTWAL : Android L의 Camera2 API 카메라를 엄청나게 제어 할 수 있습니다 저는 Google 개발자 옹호자 Ankur Kotwal입니다

이 API가 얼마나 놀라운 지 보여 드리겠습니다 먼저 Kit Kat 카메라 API를 살펴 보겠습니다 그것은 정말로 직접적인 포인트를 위해 디자인되었고 촬영되었습니다 카메라 애플 리케이션, 그리고 이것 때문에, 스트리밍 이미지 데이터에 액세스하는 데에는 제한적인 방법이 있습니다 또한 API는 수동 캡처 제어 방법을 지원하지 않습니다

이러한 한계를 극복하기 위해 개발자들에게 능력을 부여한다 멋진 카메라 앱을 만들기 위해 완전히 새로운 API 세트를 도입했습니다 AndroidhardwareCamera2에서 꾸러미

한 번 보자 이 새로운 API는 파이프 라인으로 설계되었으며, 일방 통행 대신에 이제 출력 서피스를 미리 구성 할 수 있습니다 카메라에 부착하십시오 각 표면은 대상이 될 수 있습니다 이미지 버퍼의 스트림에 대한 요청을 전달할 수 있습니다

캡처 세션을 통해 각 요청은 하나의 결과 객체로 변환되며, 대상 표면이 이미지 버퍼로 채워집니다 여러 요청을 동시에 전달할 수 있지만, 이러한 요청은 비동기 적으로 처리됩니다 간단한 카메라를 만드는 데 필요한 것을 살펴 보겠습니다 이 새로운 API를 사용하여 먼저 카메라 하드웨어를 감지해야합니다 장치의 기존 카메라를 열거하고, 카메라에서 자세한 정보를 얻으십시오

CameraManager 서비스를 사용하여 그런 다음 열린 카메라 방법을 호출하여 카메라를 사용할 수 있습니다 ID와 콜백 목록이 있습니다 장치가 준비되면 onOpened 메서드 카메라 장치 인스턴스로 호출됩니다 이 순간은 하나의 카메라를 나타냅니다 요청을 제출하기 전에 버퍼 출력 타겟 세트를 정의한다

그들을 카메라 장치에 연결하십시오 이 작업은 카메라 캡처 세션을 시작하여 수행됩니다 예를 들어, TextureView를 사용하여 미리보기, 비디오 레코딩 용 MediaRecorder, 또는 YUV 처리를위한 RenderScriptAllocation 서페이스를 만들면 서페이스의 크기 중요하다 카메라 장치는 특정 유형의 크기 만 지원합니다

따라서 각 표면에 유효한 크기를 설정해야합니다 먼저 사용 가능한 스트림 구성을 얻습니다 카메라가 스칼라 스트림 구성을 지원하는지 여부 지도 크기는 결과 중 하나 여야합니다 getOutputSizes 메소드에서

이 예제에서는 첫 번째 예제를 가져와야합니다 하지만 실제 시나리오에서는 이 배열을 조사하고 싶을지도 모른다 적절한 크기를 선택하십시오 필요한 서페이스를 생성 한 후, createCaptureSession 메소드를 호출 할 수 있습니다 세션을 만들려면 다음을 요구할 수 있습니다

수백 밀리 초 세션이 준비되면 요청을 처리 할 수 ​​있습니다 필요에 따라 요청 빌더를 만들 수 있습니다 미리 정의 된 템플릿 중 하나를 사용하여 그런 다음 캡처 요청을 빌드 할 수 있습니다 빌드에서 build 메소드를 호출하여

여기서 TEMPLATE_PREVIEW는 미리보기 요청에 사용되며, TEMPLATE_STILL_CAPTURE는 JPEG 캡처에 사용됩니다 의뢰 이제는 세션과 요청을 모두 갖게됩니다 요청을 제출하는 데는 두 가지 옵션이 있습니다 캡처는 주어진 캡처 요청을 사용하여 하나의 이미지를 캡처하는 것입니다

한편, setRepeatingRequest 이미지를 연속적으로 캡처하기위한 것이다 명시된 요청을 반복적으로 사용함으로써 명시 적으로 멈춰 capture 및 setRepeatingRequests 모두 캡처 요청 목록을 가져 오는 오버로드가 있습니다 캡처를위한 CaptureBurst 및 setRepeatingBurst 반복 요청을 설정합니다 그러나 캡처 요청을 제출하기 전에, 카메라를 조정해야 할 수도 있습니다

귀하의 필요에 따라 설정 빌더의 속성을 수정할 수 있습니다 요청을 작성하기 전에 화이트 밸런스 모드, 효과, 심지어 플래시 설정 정말 큰 효과가 있습니다 음화와 세피아 같은 것을 적용 할 수 있습니다

태양 광 등 노출 및 초점 설정과 정확하게 상호 작용할 수 있습니다 CONTROL_AF_TRIGGER 및 CONTROL_AE_PRECAPTURE_TRIGGER을 (를) 사용합니다 그래도 조심해 초점을 올바르게 설정하는 것을 잊어 버린 경우, 당신은 조금 흐린 이미지로 끝날 수 있습니다

요청을 제출할 때마다 캡처 수신기 콜백을 전달할 수 있습니다 캡처 진행 상황을 추적합니다 예를 들어, onCaptureStarted를 사용할 수 있습니다 셔터 음 재생 또는 캡처 재생 생기 캡처 요청이 처리 된 후, onCaptureCompleted는 총 캡처로 호출됩니다

요청 결과 인스턴스 이 순간, TotalCaptureResult 캡처 프로세스의 최종 구성을 포함하며, 대상 표면이 곧 나타납니다 최종 캡처 데이터가 전송됩니다 표면을 통해 출력 이미지에 액세스 할 수 있습니다 그리고 그 이미지를 사용하는 방법은 당신에게 달린 것입니다

기본 카메라 응용 프로그램에서 바이트 버퍼를 얻을 수 있습니다 상기 화상 판독 부로부터의 화상 중, 그것을 SD 카드에 저장했습니다 그래서 이것은 새로운 Camera2 API입니다 매우 유연하고 통합 된 파이프 라인으로 설계되었습니다 모든 카메라 관련 작업에 대해 응용 프로그램의 기능을 향상시킵니다

카메라 서브 시스템을 제어한다 Camera2 API에 대한 자세한 내용을 확인할 수 있습니다 유용한 샘플은 developerAndroidcom에서 확인하십시오

Android 개발자를 확인하십시오 더 많은 새로운 API를 미리보기 고맙습니다