[Windows Mobile] Programming Camera Driver #5
Camera Property Sets
Camera application은 DirectShow를 통해, brightness, contrast, exposure, focus, flash 등의 미리 정의해 놓은 properties를 query 또는 set 할 수 있다. DirectShow는 property sets 상의 properties를 이용하여, 미리 정의해놓은 camera features를 query 또는 set 할 수 있다.
Properties는 자동 또는 수동으로 제어된다. 또한 Camera hardware features를 custom properties로 구현 가능하다. 만약 camera driver가 자신의 custom properties를 구현한다면 반드시 그러한 properties를 document화 해야 하며, end user에게 그러한 기능을 나타내기 위해, control panel application을 제공해야 한다.
아래의 table은 camera driver를 위한 default property sets를 보여준다.
PROPSETID_VIDCAP_CAMERACONTROL
Camera devices 제어에 사용된다. 제공되는 제어는 ITU T.RDC standard를 따른다. 이러한 property set을 제공은 옵션 사항이며, 오직 camera control settings을 제공하는 device의 경우, 반드시 구현해야만 한다. 이 set에 포함된 property items는 CSPROPERTY_VIDCAP_CAMERACONTROL 목록에 열거되어있다.
PROPSETID_VIDCAP_VIDEOPROCAMP
이 property set은 analog 또는 digital domain상의 image color attributes를 변경할 수 있다. 이 property set은 brightness, contrast, hue 그리고 image quality settings을 변경 가능한 device를 위해 구현되어야 한다. 이러한 property set의 지원은 옵션 사항이며, 오직 이러한 제어를 제공하는 device상에서 반드시 구현되어야 한다.
이 property set에 포함된 property items는 CSPROPERTY_VIDCAP_VIDEOPROCAMP 목록에 열거되어 있다.
PROPSETID_VIDCAP_VIDEOPROCAMP property set은 IAMVideoProcAmp interface를 구현함에 있어 필요한 properties를 포함하고 있다.
PROPSETID_VIDCAP_VIDEOPROCAMP property set 상의 각 property는 범위와 default 값을 포함하고 있다. Property set의 범위는 parameters의 프로그램적인 제어를 허용하는, 일상에서 사용하는 단위로 정의되어있다. 각 device는 이러한 범위의 부분 및 step size를 정의할 수 있다. 이것은 sliders 또는 scroll bars와 같은 controls가 각 step에 맞추어 동작하는 것을 보여주기 위해 사용된다.
예를 들어, brightness를 위한 이론적인 범위는 -100에서 100 IRE 단위로 정의되어있다. IRE는 NTSC에서 정의한 video levels을 측정하는 단위로, 0는 blanking 또는 full-black level을 의미하며, 100는 pure white를 나타낸다. 만약 VideoProcAmp가 pure black input signal을 변경하였다면(camera lens를 완전히 덮어버리는 상황), 그것이 pure white로 나타나도록 하는 원인이 되며, 그때 그것의 범위는 0에서 100 IRE가 될 것이다.
대부분 VideoProcAmps는 제한된 범위와 brightness 제어를 제공한다. 범위를 측정하는 하나의 방법은 camera lens를 덮고, 조정 범위에 따른 output signal을 결정하여, 이 값을 IRE 단위로 표준화 하면 된다. 범위가 측정된 이후에, 각 단계적인 값은 최대값과 최소값을 얻어 그것을 나눔으로써, 값을 결정할 수 있다. (max + min)/N
주의. Property set values는 개선된 입상을 위해 100으로 나누어진다.
Adapter Properties for Cameras
Adapter properties는 다음과 같은 두가지 categories로 나누어진다: control-related and video-related. Control properties는 pan, tilt, zoom과 같은 camera hardware를 제어하는데 사용된다. Video properties는 brightness, sharpness 등의 video features를 나타낸다.
모든 adapter properties는 CSPROPERTY structures의 배열 안에 포함되어있다. Property set에서 지원되는 각 property는 CSPROPERTY_MEMBERSLIST structures의 배열 안에 서술되어있다. 이 배열은 static array로 각 property에 대한 모든 가능성 있는 범위와 default 값을 포함하고 있다.
Data structures와 formats는 아래와 같다.
typedef struct {
const GUID* Set;
ULONG PropertiesCount;
const CSPROPERTY_ITEM* PropertyItem;
ULONG FastIoCount;
const CSFASTPROPERTY_ITEM* FastIoTable;
} CSPROPERTY_SET, *PCSPROPERTY_SET;
typedef struct {
ULONG PropertyId;
BOOLEAN GetSupported;
ULONG MinProperty;
ULONG MinData;
BOOLEAN SetSupported;
const CSPROPERTY_VALUES* Values;
ULONG RelationsCount;
const CSPROPERTY* Relations;
LPVOID RESERVED1;
ULONG RESERVED2;
} CSPROPERTY_ITEM, *PCSPROPERTY_ITEM;
CSPROPERTY_SET table[] =
{
CSPROPERTY_SET set1,
CSPROPERTY_SET set2,
. . .
}
CSPROPERTY_ITEM set1_item_table[] =
{
CSPROPERTY_ITEM property1_in_set1,
CSPROPERTY_ITEM property2_in_set1,
CSPROPERTY_ITEM property3_in_set1,
. . .
}
. . .(arrays for each property. . .)
Adapters, Pins, and Streams
Pins
Pin object는 hardware adapter에 의해 지원되는 video streams를 나타낸다. 각 adaptor는 multiple pins를 지원한다. pin은 installable device driver이다. Windows Embedded CE-based camera drivers는 full streaming video drivers가 아니기 때문에, 각 pin당 실행되는 하나의 stream을 가지는 것으로 충분하다. 각 adapter는 아래에 보이는 모든 pin type 또는 그 어떤 type이라도 지원할 수 있다.
Pin Type | GUID |
Preview | PINNAME_VIDEO_PREVIEW |
Capture | PINNAME_VIDEO_CAPTURE |
Still | PINNAME_VIDEO_STILL |
Driver clients는 CSPROPERTY_PIN_CTYPES과 CSPROPERTY_PIN_CATEGORY properties (see CSPROPERTY_PIN) property set을 사용함으로써, pins의 수와 camera driver에서 지원하는 각 pin의 categories를 query할 수 있다.
Streams
Stream은 capture device에서 data를 처리하는 device로 흐르는 captured된 data이다. Capture device를 이용하여, 각 preview, capture, 그리고 still에 대한 multiple streams를 통합할 수 있다.
CS_DATARANGE_VIDEO structures의 배열은 camera driver에서 지원하는 각 pin의 format전체범위에 대한 상세한 내용을 제공하는데 사용된다. 이 배열은 이 pin으로부터 생성된 하나의 stream에 대한 잠재적인 모든 formats을 열거하고 있다. 예를 들어, stream은 RGB16, RGB24, YVU9 그리고 JPEG capture format을 제공할 수 있다.
세개의 값은 하나의 stream을 확인하는데 사용된다. 이러한 값들은 major type, subformat, 그리고 specifier로 구별된다. Video capture stream을 위한 major format은 CSDATAFORMAT_TYPE_VIDEO이며, specifier는 CSDATAFORMAT_SPECIFIER_VIDEOINFO이다. 하나의 stream에 대한 subformat 값은 사용된 color space와 같은 특별한 video data type의 상세내용을 전달하는데 사용된다.
Subformat의 개개의 low-order bytes는 BITMAPINFOHEADER structure의 biCompression MEMBER에서 사용된 FOURCC 값에 match 되어야 한다. 예를 들어, 아래의 GUID는 FOURCC (YVU9) video format을 식별하고 있다.
39555659-0000-0010-8000-00AA00389B71
59 = 'Y'
56 = 'V'
55 = 'U'
39 = '9'
CS_DATARANGE_VIDEO structure는 두개의 서로 다르지만 같은 용도로 제공된다. 첫째로, camera driver가 초기화 될 때, 모든 format이 지원할 수 있음을 알리기 위해, CS_DATARANGE_VIDEO structures의 배열을 return한다. 둘째, 특별한 format이 선택되었을 때, CS_DATARANGE_VIDEO structure는 제안된 format이 지원가능한지를 결정하기 위해, driver에 문의하는데 사용된다. 협상 중에, clients는 오직 VideoInfoHeader member의 내용만 변경가능하며, CS_DATARANGE_VIDEO의 모든 다른 member의 level은 변경할 수 없다. Driver가 요청된 parameters를 검증하면, 적절한 members에 값을 채워, CS_DATAFORMAT_VIDEOINFOHEADER structure를 return한다.
이러한 일을 하는 Properties는 CSPROPERTY_PIN_DATARANGES와 CSPROPERTY_PIN_DATAINTERSECTION (see CSPROPERTY_PIN)이다. 각 property query에 대한 property 값은 CSDATARANGE and CSDATAFORMAT이다.
October 10, 2007
from Hoya^^
원본 위치 <http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=60&MAEULNO=23&no=268&page=2>
'Hello CE,Mobile' 카테고리의 다른 글
너무 좋은 스마트폰 한글 입력기 열혈남아su님의 로즈키 (0) | 2010.11.01 |
---|---|
[Windows Mobile] Programming Camera Driver #6 (0) | 2010.10.28 |
[Windows Mobile] Programming Camera Driver #4 (0) | 2010.10.28 |
[Windows Mobile] Programming Camera Driver #3 (0) | 2010.10.28 |
[Wndows Mobile] Programming Camera Driver #2 (0) | 2010.10.28 |