반응형

카메라 애플리케이션은 카메라를 제어할 때, 기본적으로 카메라 서비스로 제어를 요청한 후 대기한다. 카메라 서비스로 제어를 요청한 후 메소드의 리턴값만으로 수행 결과를 처리할 경우, 처리가 오래 걸려 애플리케이션이 응답하지 않아 시스템 감시에 의해 ANR(Application Not Responding)로 인식되는 문제가 발생한다. 또한 카메라 서비스가 제어를 수행하는 동안 애플리케이션이 대기하므로 사용자의 요청을 처리할 수 없게 된다. 이와 같은 문제를 해결하기 위하여 다양한 콜백 메서드를 사용한다.


콜백메서드는 카메라 시스템의 주요 기능인데, 크게 두가지로 나뉘어진다.

데이터를 받아오기 위한 dataCallback 메서드

동작에 대한 상태나 결과를 받아오기 위한 notifyCallback 메서드가 그것이다.


dataCallback 메서드는 카메라의 영상을 프레임이나 이미지 형태로 가져오기 위하여 사용하며, 데이터 포맷은 카메라 설정에 따라 다르나 프레임의 경우 NV21(yuv420sp)를 기본이고, 이미지의 경우에는 JPEG을 기본으로 한다.


notifyCallback 메서드는 요청한 기능에 대하여 수행상태나 수행 완료등의 제어 결과나 제어 상태 정보를 얻기 위하여 사용한다.





1) PreviewCallback


카메라 영상 데이터는 네이티브 프레임워크에서 처리되므로, 애플리케이션은 카메라 영상 데이터를 얻기 위하여 카메라 서비스에 요청해야 한다. 이때 콜백 메서드로 카메라 영상 데이터를 얻어오는데, PreviewCallback 메서드는 startPreview() 메서드를 이용해 카메라에서 입력받아 화면에 출력되는 영상을 프레임 단위로 받아올 수 있다. 카메라 영상을 직접 처리해야하는 애플리케이션의 경우 PreviewCallback 메서드를 사용한다.

PreviewCallback 메서드는 setPreviewCallbck()메서드나 setOneshot PreviewCallback()메서드로 카메라 서비스에 콜백 메서드를 등록하거나 해제할 수 있다.

setOneShot PreviewCallback() 메서드는 프레임 데이터를 한번만 받아오고, setPreviewCallback()메서드는 해제 전까지 지속적으로 프레임 데이터를 받아온다. 이 경우 데이터 복사등에 따른 데이터 처리량이 많아져 시스템에 부하가 걸릴수 있으므로, 원하는 용도에 맞게 사용을 해야한다.



2) PictureCallback


PictureCallback 메서드는 사진 촬영 시 촬영된 결과물을 얻기 위한 인터페이스로,

애플리케이션에서 인터페이스를 구현하여 목적에 맞게 사용한다.

이렇게 구현된 콜백 메서드는 RawPictureCallback, PostViewPictureCallback, JpegPictureCallback 이 있다




3) RawPictureCallback


RawPictureCallback 메서드는 사진 촬영 시, 촬영된 원본 데이터를 받아온다.

카메라의 기본 애플리케이션은 카메라 서비스를 이용해 카메라 촬영 요청 후 촬영을 완료하여 이미지를 생성 완료하는 과정에서 카메라가 촬영을 완료한 시점의 시간 정보를 획득하는 데 RawPictureCallback 메서드를 사용한다.





4) PostViewPictureCallback


PostViewPictureCallback 메서드는 촬영된 이미지를 화면에 출력할 목적으로 사용한다. 카메라 기본 애플리케이션은 PostViewPictureCallback 메서드 역시 촬영 기능에 대한 시간을 측정하기 위한 용도로 사용한다.




5) JpegPictureCallback


JpegPictureCallback 메서드는 RawPictureCallback 메서드와 마찬가지로 takePicture()메서드를 통해 카메라 서비스에 등록한다. 전달받는 데이터는 JPEG 이미지 데이터에 EXIF정보가 포함된 전체 데이터로, 저장소에 저장한다.




6) ShutterCallback


사진 촬영 시 카메라 장치에서 사진 촬영을 완료한 후 데이터를 받아오기 전에 ShutterCallback 메서드가 등록되어 있으면 이를 통해 사진이 촬영되었음을 알려준다. ShutterCallback메서드를 통해 카메라 서비스에서 카메라 촬영음을 낸다. 카메라 기본 애플리케이션은 ShutterCallback 메서드를 통해 카메라 동작에 대한 시간을 측정한다.




7)ErrorCallback


카메라 서비스가 동작 중 에러가 발생하는 경우, 이를 애플리케이션이 알기 위한 콜백 메서드로, 카메라 서비스가 잘못 동작해 카메라 서비스나 미디어 서버가 죽는 경우에 호출된다.


반응형

+ Recent posts