[Wndows Mobile] Programming Camera Driver #2
Camera Driver Architecture
Camera device로부터 나오는 data의 flow를 control하기 위해서는 다음과 같은 3가지 종류의 object가 요구된다: camera adapters, pins, and streams.
Streaming Architecture for Cameras
Windows Embedded CE camera driver에서 사용되는 많은 구조들은 Windows XP-based desktop system에서 사용되는 kernel steaming architecture로부터 비롯되었다. 대부분의 경우에 있어, data structures와 IOCTL codes와 같은 식별자들은 동일한 format와semantics를 사용하는 반면, Windows Embedded CE conventions에 의해 새로운 이름이 정해졌다. 또 다른 경우에 있어, data layouts, programming models, 그리고 nomenclatures는 Windows Embedded CE camera driver model에 더욱 적합하도록 변경되었다.
Camera control interfaces는 kernel streaming property model을 이용하여 구현되었다.
Property는 capability, settings, 또는 camera나 video stream에 포함된 상태를 나타낸다.
관련 property의 그룹은 하나의 property set으로 참조되도록 하였다. Application은 DeviceIoControl function의 dwIoControlCode parameter에 IOCTL_CS_PEOPERTY를 셋팅함으로써, 특정한 properties를 set 하거나 get 할 수 있다. Input buffer는 CSPROPERTY structure 또는 CSPROPERTY structure 안에 포함되어 있는 다른 structure 중 하나이며, 요청과 관련된 추가적인 정보를 포함하고 있다.
DeviceIoControl function을 호출 함으로써, client는 두개의 buffer를 전달한다: property descriptor type과 property value type. Property descriptor type은 DeviceIoControl 상의 lpInBuffer parameter를 위한 값을 나타낸다. 모든 type은 operation-specific identification data에 의한 CSPROPERTY header로 시작된다. Property value는 DeviceIoControl function의 lpOutBuffer parameter를 위한 값을 나타낸다. 그것은 property를 get 또는 set 하기 위한 data buffer를 제공한다. Camera property를 사용하기 위해서는, 반드시 IOCTL_CS_PROPERTY code를 가진DeviceIoControl function을 호출해야 하며, 위에서 언급한 structures를 넘겨줘야 한다.
Camera Driver Interface
Camera driver는 Windows Embedded CE stream interface drivers의 architecture를 따른다. 더 많은 정보는 Stream Interface Drivers를 참고하기 바란다. DirectShow middleware는 CreateFile function을 이용하여 file handle을 여는 것을 통해 드라이버와 통신을 할 수 있으며, 해당 file handle을 이용하여, DeviceIoControl 함수를 호출한다.
아래의 table은 stream interface functions을 나열한 것으로, camera driver를 만들 때, 구현해야만 하는 함수들이다.
Function | Description |
Camera device를 위한 device context를 close한다. | |
Camera device를 stop한다. | |
Camera device를 initialize한다. | |
Camera device에 하나의 command를 보낸다. | |
읽기 위해, camera device를 open한다. | |
Pin에 대한 device context를 close한다. | |
Pin을 stop한다. | |
Pin을 initialize한다. | |
Pin에 하나의 command를 보낸다. | |
Pin을 읽기 위해 open 한다. |
Camera driver는 stream interface function 중 XXX_Read, XXX_Write, XXX_Seek function을 반드시 구현할 필요는 없다.
아래의 table은 camera driver에서 반드시 구현해야 하는 I/O control codes를 보여준다.
I/O Control Code | Description |
Property values를 get 또는 set하는데 사용되거나, 하나의 property에 대한 지원 여부를 결정하는데 사용된다. | |
Driver에게 하나의 buffer를 보내는데 사용된다. | |
주어진 pin에 대한 stream type을 set하는데 사용된다. |
October 5, 2007
Hoya^^
원본 위치 <http://www.devpia.co.kr/MAEUL/Contents/Detail.aspx?BoardID=60&MAEULNO=23&no=264&page=2>
'Hello CE,Mobile' 카테고리의 다른 글
[Windows Mobile] Programming Camera Driver #4 (0) | 2010.10.28 |
---|---|
[Windows Mobile] Programming Camera Driver #3 (0) | 2010.10.28 |
[Windows Mobile] Programming Camera Driver #1 (0) | 2010.10.28 |
버스드라이버 (0) | 2010.10.27 |
NAND (1) | 2010.10.19 |