본문 바로가기

Hello CE,Mobile

[Windows Mobile] Programming Camera Driver #3

[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

Camera Property Sets

Adapters, Pins, and Streams

Still Image Support in Camera Drivers

Camera Driver Details

   

   

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>