[Windows Mobile] Programming Camera Driver #3
Elements of a Camera System
전반적인 Camera architecture는 몇 개의 elements로 구성되어있다. 아래의 용어 및 concept는 camera hardware, hardware를 제어하기 위한 software 그리고 hardware로부터 captured된 data 흐름에 관해 기술하는데 사용된다.
Device driver
물리적인 camera hardware를 제어하는 software layer이다. Single camera driver는 multiple camera를 제어할 수 있다.
Device instance
Camera hardware의 하나의 완전한 물리적인 set (complete physical set)이다. Camera device driver는 multiple device instance를 제공한다.
Adapter
software에서 device instance의 논리적인 묘사.
Pin
Camera driver architecture는 DirectShow middleware에서 정의하는 pin concept를 사용한다. Pin에 관한 더 많은 정보는 따로 찾아보도록 한다.
Pin은 device의 data in과 out을 전달하는데 사용되며, 항상 3가지 상태 중 하나를 유지한다: stopped, paused, and playing. Camera driver는 세가지 type의 pin을 제공한다: preview, capture, still. 각 pin은 많은 media format 지원할 수 있다. DirectShow middleware는 downstream filter상의 pin을 이용하여, camera output pins로부터 process matching media formats를 관리한다. 더 많은 정보는 Video Format Negotiation을 참고하기 바란다.
Pin driver
Pin을 제어하기 위한 소프트웨어. Pin driver는 multiple pins를 지원할 수 있다.
Pin instance
하나의 adapter상에 존재하는 single pin.
Pin handle
Single pin을 위치시키는 수단을 제공하는 유일한 식별자
Stream
Adapter's pin의 out에서 application으로 전달되는 data
Camera Driver Implementation
아래의 topics은 Windows Embedded CE-based device를 위한 camera driver 구현에 관한 정보를 제공한다.
Camera Driver Development Process
Initialization Sequence for Camera Drivers
Asynchronous Data Flow and Buffer Management in Camera Drivers
Still Image Support in Camera Drivers
Camera Driver Development Process
Camera solution 개발은 camera driver, display driver 및 DriectShow를 통한 camera application를 하나의 소프트웨어로 완성하는 것을 포함하고 있다. 이러한 소프트웨어 stack을 개발함에 있어 많은 방법들이 있지만, 가장 믿을 수 있고 예측 가능한 결과들은 상위 layer의 개발 이전에 소프트웨어의 하위 layer를 성공적으로 완성하는 절차로부터 가능하다.
아래의 list는 디바이스 상의 하나의 camera solution을 개발함에 있어 개발 과제에 대한 일련의 절차를 소개하고 있다.
Display driver 개발. 더 많은 정보는 Display Drivers를 참고바람.
CETK test를 통한 display driver 안정성 확인. 더 만은 정보는 CETK Tests를 참고바람.
Camera driver 개발. 더 많은 정보는 Camera Driver Development Concepts를 참고바람.
CETK 및 Windows Mobile Logo Tests를 통한 camera driver 안정성 확인.
Camera preview 및 record function의 end-to-end test 및 최적화 수행.
Camera application 개발.
위의 과정에서 하나의 특징은 개발과정의 완전한 부분으로 testing 과정이 포함되어 있다는 것이다. CETK test가 소프트웨어 최종 확인에 사용되는 것은 사실이나, 반드시 최종 확인 역할만 하는 것은 아니다. 이러한 테스트를 통해, 중간 결과에 대한 확인하는 작업에 사용될 수 있다. 테스트를 통한 도움은 개발하는 새로운 소프트웨어를 가장 안정적인 base에서 개발되도록 하며, 개발 과정을 간단하게 만들 수 있다.
Initialization Sequence for Camera Drivers
Camera device를 위한 개발 초기 단계는 아래와 같다.
모든 camera driver는 반드시 동일한 GUID를 이용하여 등록해야 한다. 아래의 코드는 camera driver를 위한 stream interface driver registry entry를 보이고 있다.
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\CameraDriver]
"Prefix"="<Driver prefix>"
"Dll"="<Driver DLL name>"
"Order"=dword:10
"Index"=dword:1
"IClass"=multi_sz: "{CB998A05-122C-4166-846A-933E4D7E3C86}"
Windows Embedded CE Device Manger는 camera driver를 driver entry point인 CAM_Init 함수를 호출함으로써 load한다. 호출이 이루어지면, camera driver는 이를 detect하고 hardware 초기화, data structure에 대한 메모리 할당 및 초기화를 수행한 후, device instance identifier를 return 한다. Device identifier는 CAM_Open함수를 호출할 때 사용된다.
DirectShow는 적당한 device name을 이용하여, CreateFile 함수를 호출한다. Applications는 적당한 device class GUID를 기반으로 한, 실제 이름을 찾기 위해, FindFirstDevice함수를 사용해야만 한다. Capture Device Selection 부분을 참고하기 바란다.
DirectShow는 CSPROPERTY_PIN_CTYPES (see CSPROPERTY_PIN)을 사용하여, camera driver가 지원하는 pin의 수를 query한다. CSPROPERTY_PIN_CATEGORY를 이용하여, 세개의 pin의 각각의 type (preview, capture, still)을 query한다.
DirectShow는 CSPROPERTY_PIN_DEVICENAME를 이용하여, pin device의 이름을 query한다. 이것은 일반적으로 PIN1:으로 명시하나, driver는 다른 이름을 사용해도 상관없다.
DirectShow는 CreateFile을 호출함으로써, pin driver를 통해, camera driver가 지원하는 각 pin type을 얻을 수 있다.
Driver는 stream에 대한 pin의 properties 및 data formats을 셋팅하고, buffers를 할당한다.
Client는 pin identifier 및 message queue에 대한 handle담아 IOCTL_STREAM_INSTANTIATE를 전달함으로써, 주어진 pin handle을 위한 stream type을 셋팅한다. 이때, 사용되는 message queue란, driver와 DirectShow middleware 사이에 전달되는 asynchronous bundles를 사용하기 위한 queue이다. 예를 들어, 만약 CSPROPERTY_PIN_CTYPES이 3을 return 하고, id = 0 인CSPROPERTY_PIN_CATEGORY가 PINNAME_VIDEO_PREVIEW를 return 했을 때, PinId = 0인 IOCTL_STREAM_INSTANTIATE를 호출함으로써, preview stream에 대한 handle과 연결된다.
Pin을 통해 streaming data 전송이 시작된다.
Camera driver 적어도 두 가지 objects로 구성된다:
하나는 adapter를 위한 것이며, 다른 하나는 stream을 위한 것이다. 만약 camera가 하나 이상의 stream을 제공해야 한다면, driver는 추가적인 pin을 예시해야 한다. Camera adapter entry points는 CAM_XXX를 참조하며, stream entry points는 PIN_XXX를 참조한다. Entry point function 관련 완성된 list는 Camera Driver Functions을 참고하기 바란다.
October 8, 2007
from Hoya^^
원본 위치 <http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=60&MAEULNO=23&no=266&page=2>
'Hello CE,Mobile' 카테고리의 다른 글
[Windows Mobile] Programming Camera Driver #5 (0) | 2010.10.28 |
---|---|
[Windows Mobile] Programming Camera Driver #4 (0) | 2010.10.28 |
[Wndows Mobile] Programming Camera Driver #2 (0) | 2010.10.28 |
[Windows Mobile] Programming Camera Driver #1 (0) | 2010.10.28 |
버스드라이버 (0) | 2010.10.27 |