USBCAMD2 미니드라이버 작업
이 문서의 내용
USBCAMD2 카메라 미니 드라이버는 일반적으로 다음과 같이 작동합니다.
카메라 미니드라이버가 DriverEntry 루틴에서 USBCAMD_DriverEntry 호출합니다. 미니드라이버가 USBCAMD_DriverEntry 호출하면 미니드라이버의 AdapterReceivePacket 콜백 함수가 USBCAMD2에 전달됩니다. 그런 다음 USBCAMD2는 미니 드라이버를stream.sys 클래스 드라이버에 등록합니다.
그런 다음, 카메라 미니드라이버가 다음을 포함하여 처리할 AdapterReceivePacket 콜백 함수에서 다양한 SRB(스트림 요청 블록)를 수신할 수 있습니다.
카메라 미니 드라이버는 각 SRB를 처리하는 방법을 결정합니다. 미니 드라이버는 USBCAMD2 미니드라이버 라이브러리에서 루틴을 호출하여 SRB 처리를 지원할 수 있습니다. 이러한 루틴은 일반적으로 USBCAMD_ 접두사로 시작합니다.
예를 들어 USBCAMD2를 사용하여 카메라 미니드라이버의 다른 콜백 함수를 지정하기 위해 카메라 미니드라이버가 USBCAMD_DEVICE_DATA2 구조에서 진입점을 지정합니다. 그런 다음 미니 드라이버는 USBCAMD_InitializeNewInterface 호출하여 초기화된 USBCAMD_DEVICE_DATA2 구조를 USBCAMD2에 전달합니다. 그런 다음, USBCAMD2는 필요할 때 미니드라이버의 콜백 함수를 호출합니다.
미니드라이버가 USBCAMD_AdapterReceivePacket 호출하여 처리하지 않는 SRB를 USBCAMD2에 전송하여 처리해야 합니다.
USBCAMD 라이브러리 콜백 함수는 미니드라이버가 구현하는 콜백 함수와 선택 사항인지 필수인지에 대해 설명합니다.
다음 절차 목록은 카메라 미니드라이버로 전송되는 SRB에 대한 일반적인 처리 흐름을 보여 줍니다.
미니 드라이버의 SRB_INITIALIZE_DEVICE 처리기
미니 드라이버의 SRB_GET_STREAM_INFO 처리기
구성 요소
작업
카메라 미니드라이버
stream.sys 클래스 드라이버에 HW_STREAM_INFORMATION 스트림 정보 구조를 제공합니다.
카메라 미니드라이버
stream.sys클래스 드라이버의 HW_STREAM_HEADER 구조에서 디바이스 속성 집합의 배열에 대한 포인터를 채웁니다.
카메라 미니드라이버
USBCAMD_AdapterReceivePacket 호출합니다.
USBCAMD2
스트림 헤더의 핀 수를 입력합니다.
USBCAMD2
디바이스 이벤트 테이블(있는 경우)을 노출합니다.
USBCAMD2
스트림 정보 테이블의 항목 값을 수정합니다. 범주 이름(캡처 또는 스틸)을 설정합니다.
USBCAMD2
스트림 속성 배열에 대한 포인터를 채웁니다.
미니 드라이버의 SRB_INITIALIZATION_COMPLETE 처리기
구성 요소
작업
카메라 미니드라이버
IRP_MJ_PNP 및 IRP_MN_QUERY_INTERFACE 사용하여 USBCAMD2에 대한 GUID_USBCAMD_INTERFACE 획득합니다.
미니 드라이버의 SRB_GET_DEVICE_PROPERTY 처리기
미니 드라이버의 SRB_SET_DEVICE_PROPERTY 처리기
구성 요소
작업
카메라 미니드라이버
PROPSETID_VIDCAP_VIDEOPROCAMP, PROPSETID_VIDCAP_CAMERACONTROL 및 PROPSETID_VIDCAP_VIDEOCONTROL 매개 변수 및 기타 사용자 지정 속성 집합을 획득하여 카메라 미니드라이버가 처리하는 속성을 설정합니다.
미니 드라이버의 SRB_GET_DATA_INTERSECTION 처리기
구성 요소
작업
카메라 미니드라이버
KSDATARANGE 구조체에서 KSDATAFORMAT 구조를 반환합니다.
카메라 미니드라이버
요청된 프레임 속도(VideoInfoHeader.AvgTimePerFrame)가 요청된 비디오 형식의 상한 및 하한 내에 있는지 확인합니다. 제한을 초과하면 미니드라이버가 pSrb-CommandData.IntersectInfo-Datarange>>: VideoInfoHeader.AvgTimePerFrame, VideoInfoHeader.dwBitRate의 다음 값을 수정해야 합니다.
미니 드라이버의 SRB_OPEN_STREAM 처리기
구성 요소
작업
카메라 미니 드라이버
비디오 형식을 확인합니다.
카메라 미니 드라이버
USBCAMD_AdapterReceivePacket 호출합니다.
USBCAMD2
카메라 미니드라이버에서 수락한 비디오 형식을 저장합니다.
USBCAMD2
미니드라이버의 CamAllocateBandwidthEx 콜백 함수를 호출하여 비디오 형식 데이터를 기반으로 대역폭을 할당하고 비디오 형식의 최대 버퍼 크기를 가져옵니다.
카메라 미니 드라이버
요청된 프레임 속도 및 출력 창 크기를 충족하는 등시 채널의 최대 패킷 크기를 계산합니다.
카메라 미니 드라이버
USBCAMD_SelectAlternateInterface 호출하여 가장 가까운 대체 설정을 선택합니다. 미니드라이버에서는 USBCAMD2에 카메라가 생성할 수 있는 최대 프레임 크기를 제공해야 합니다.
카메라 미니 드라이버
카메라에서 하드웨어 크기 조정을 설정합니다. 카메라 컨트롤을 레지스트리의 저장된 값으로 설정하거나, 처음인 경우 기본 설정으로 설정합니다.
카메라 미니 드라이버
프레임 속도(VideoInfoHeader.AvgTimePerFrame)가 비디오 형식의 제한에 속하는지 확인하고, 그렇지 않은 경우 수정합니다.
USBCAMD2
미니드라이버의 CamStartCaptureEx 콜백 함수를 호출합니다.
카메라 미니 드라이버
하드웨어를 캡처 모드로 설정합니다.
USBCAMD2
등시 또는 대량 전송을 초기화합니다.
미니 드라이버의 SRB_CLOSE_STREAM 처리기
구성 요소
작업
카메라 미니 드라이버
USBCAMD_AdapterReceivePacket 호출합니다.
USBCAMD2
USBCAMD2에 제출된 보류 중인 IRP를 취소합니다. 보류 중인 데이터 SRB를 stream.sys 클래스 드라이버에 반환합니다.
USBCAMD2
미니드라이버의 CamStopCaptureEx 콜백 함수를 호출합니다.
카메라 미니 드라이버
카메라에 중지 캡처 명령을 보냅니다.
USBCAMD2
해당하는 경우 미니드라이버의 CamFreeBandwidthEx 콜백 함수를 호출하여 등시 버스 대역폭을 해제합니다.
카메라 미니 드라이버
유휴 대체 설정을 선택합니다.
USBCAMD2
USB 파이프와 연결된 무료 리소스입니다.
미니 드라이버의 SRB_UNINITIALIZE_DEVICE 처리기
미니 드라이버의 SRB_SURPRISE_REMOVAL 처리기
구성 요소
작업
카메라 미니 드라이버
새 비디오 형식을 확인합니다.
카메라 미니 드라이버
USBCAMD_SetVideoFormat 호출합니다.
USBCAMD2
연결된 스트림 확장을 사용하여 새 형식을 저장합니다.
Power ON에서 Power OFF 처리기로 미니 드라이버의 SRB_CHANGE_POWER_STATE
Power OFF에서 Power ON 처리기로 미니 드라이버의 SRB_CHANGE_POWER_STATE