Android & Qualcomm camera interface

Posted 2008/12/27 19:47 by kdsoo
일반적인 리눅스 시스템에서는 카메라는 크게 두가지 카테고리로 분류된다.

첫째는 USB 카메라, 아무래도 리눅스가 피씨 기반이다보니 피씨에서는 카메라 서브시스템이 따로 존재하지 않는지라..(ie. Intel C2D 에는 자체 카메라 인터페이스가 없다)

USB라는 만능 디바이스를 통해 카메라 를 연결해 사용한다.

둘째는 ARM 등을 사용하는 모바일 디바이스에 사용되는 SoC 기반의 카메라 인터페이스.

소위 모바일 CPU들은 작은 면적안에 많은 디바이스들을 컨트롤 할수 있어야 잘팔리기 때문에

Core 이외에 peripheral 들을 SoC로 붙여서 만들어 놓고 있다.

덕분에 다양한 부가 디바이스들을 하드웨어적으로 컨트롤하기 쉽다.

우리가 사용하는 핸드폰/PDA/스마트폰...(whatever) 등에 들어있는 CPU가 주로 ARM계열인데

핸드폰에 사용되는 카메라들은 주로 AP나 모뎀에서 제공하는 SoC 형태의 카메라 인터페이스를 사용한다.

그럼 리눅스에서는 어떻게 구현이 된느가?

첫째 피씨 기반에서는 USB 드라이버를 통해 카메라가 인식 되기 때문에 뭐...어떻게든 되겠지 ㅡ.ㅡ;;;

둘째..모바일  CPU에서는 SoC 형태의 카메라 인터페이스의 드라이버를 통해 카메라 모듈에서 보내는 영상을 받아들이고

요즘은 주로 I2C 버스를 통해 모듈을 컨트롤한다. (불과 몇년전만 해도 DPRAM을 통해서 하기도 했다.)

이 두가지 타입의 플랫폼의 카메라 모두 공통된 API를 통해 user space 에서 카메라를 컨트롤하는데

그게 바로 V4L2(Video for Linux 2)이다.

표준화된 API를 통해 사용자가 카메라 하드웨어에 상관없이 컨트롤할수 있게 드라이버를 구현해준다.

근데 안드로이드를 보니 의외의 부분을 발견했다.

Change 1776: add camera-interface library for dream (Merged) 
http://review.source.android.com/1776

카메라 컨트롤을 위한 라이브러리를 제공한다.

게다가 이런 불평불만들이 돌아다닌다
http://groups.google.com/group/android-developers/browse_thread/thread/927f115aa34f4806

불평불만을 요약해보면 안드로이드 에뮬에서(QEMU) 카메라를 사용하지 못해서 불만이라는 내용과

퀄컴의 외주(?) 엔지니어쯤 되는것 같은 Mark Kahrl 이 일을 제대로 못해 놨는지

이미 출시된 HTC의 G1 디바이스가 프리뷰를 보통 잘 쓰지 않는 YUV411 포맷을 사용해서

사용자들이 임의로 어플을 제작하면 (보통 422 혹은 420 을 많이쓴다)

화면이 깨지는 문제가 발생하는것이다.

poor Mark...

퀄컴이 MSM의 카메라 인터페이스에 대해 레지스터 등을 공개하지 않은 것인지...

msm 커널 트리에서 카메라 인터페이스의 드라이버를 난 아직 못찾고 있다.

그리고 위에 링크를 건 HTC dream  용 카메라 라이브러리는 뭔가

V4L2 가 아닌 자체 인터페이스를 제공한다는건지?

리눅스와 같은 오픈 프로젝트엔 그다지 맞지 않는 것 같다고 느끼는건 나뿐일까?


크리에이티브 커먼즈 라이선스
Creative Commons License

Tag : , , ,

« PREV : 1 : ... 81 : 82 : 83 : 84 : 85 : 86 : 87 : 88 : 89 : ... 692 : NEXT »