2013-03-17 2 views
0

API 레벨 9에서 Android는 카메라의 각 실제 카메라에 대한 정보를 포함하는 CameraInfo 클래스를 추가했습니다. 특히, orientation 속성은 "카메라 이미지를 시계 방향으로 회전시켜 자연스러운 방향으로 디스플레이에 올바르게 표시해야하는 각도"를 포함합니다. 이것은 getContext().getWindowManager().getDefaultDisplay().getRotation()에서 발견 된 실제 장치 회전과는 다릅니다.API에서 카메라의 고유 한 방향 가져 오기 <9

안드로이드의 sample code은 후방 카메라 용 카메라의 방향에서 장치의 회전을 뺍니다 (앞면 카메라의 경우 다소 복잡합니다).이 양만큼 카메라 미리보기가 회전합니다. 이렇게하면 미리보기가 화면의 세로 및 가로 방향 모두에서 올바르게 표시됩니다.

CameraInfo 클래스가없는 API 레벨 9 이하에서 카메라의 내장 방향을 어떻게 얻을 수 있습니까?

답변

1

일부 플랫폼 별 솔루션이 있습니다. 그러나 쉬운 해결책은 없습니다.

Android에는 HAL (하드웨어 추상 계층)이 있으며, 다른 공급 업체는 HAL을 다르게 구현합니다. 예를 들어, 다른 카메라 장치에는 다른 드라이버가있을 수 있으므로 cameraInfo를 포함하여 데이터를 가져 오는 다른 방법이 있습니다. Android가 HAL에 API를 추가하면 공급 업체는 하드웨어를 기반으로 API를 구현해야합니다. 그러면 안드로이드 프레임 워크와 안드로이드 애플리케이션은 일관된 방식으로 그 기능을 사용할 수 있습니다.

그러나 말했듯이 getCameraInfo는 HAL Before Froyo에 없습니다. 따라서 직접적인 접근은 드라이버 나 플랫폼 별 라이브러리에서 정보를 얻는 것입니다.

MSM 카메라의 경우 기능이 liboemcamera.so에 있습니다. 이를 사용하여 camera_info_t 구조체 목록을 가져올 수 있습니다.

typedef struct { 
    int modes_supported; 
    int8_t camera_id; 
    cam_position_t position; 
    uint32_t sensor_mount_angle; 
}camera_info_t; 

이 기능은 대상 카메라 장치에 대한 실제 시스템 호출을 캡슐화합니다. ioctl(controlfd, MSM_CAM_IOCTL_GET_CAMERA_INFO, &cameraInfo). 원할 경우 직접 전화해도 좋습니다.

불행히도, 작업중인 장치를 기반으로 정보를 얻어야합니다. 그러나 일반적인 접근 방식을 기대할 수 있습니다. 그렇다면 이것을 달성하는 유일한 방법은 직접 HAL을 구현하는 것입니다. 많은 if-else는 어떤 장치 또는 어떤 ioctl 명령을 사용해야하는지 결정합니다. 행운을 빌어 요.

+0

아야. 프 로요 (Froyo)의 경우에만 카메라의 방향이 90도이고 앞면이 270 인 경우를 가정 할 수 있습니까? 나는 이것이 어딘가에서 보통 값이라는 것을 기억한다. –

+0

예, 가능합니다. 사실 90과 270은 API 9 이후 Android의 CameraHardwareInterface에 정의 된 기본값입니다. @ 1 '' – StarPinkER

+0

허. 글쎄, 그게 문제를 해결하는 것 같습니다 :) –

관련 문제