다음을 통해 공유


USBCAMD2 미니드라이버 작업

USBCAMD2 카메라 미니 드라이버는 일반적으로 다음과 같이 작동합니다.

예를 들어 USBCAMD2를 사용하여 카메라 미니드라이버의 다른 콜백 함수를 지정하기 위해 카메라 미니드라이버가 USBCAMD_DEVICE_DATA2 구조에서 진입점을 지정합니다. 그런 다음 미니 드라이버는 USBCAMD_InitializeNewInterface 호출하여 초기화된 USBCAMD_DEVICE_DATA2 구조를 USBCAMD2에 전달합니다. 그런 다음, USBCAMD2는 필요할 때 미니드라이버의 콜백 함수를 호출합니다.

참고

USBCAMD_DEVICE_DATA 구조는 이전 버전과의 호환성을 위해 USBCAMD2에서만 지원됩니다.

미니드라이버가 USBCAMD_AdapterReceivePacket 호출하여 처리하지 않는 SRB를 USBCAMD2에 전송하여 처리해야 합니다.

USBCAMD 라이브러리 콜백 함수는 미니드라이버가 구현하는 콜백 함수와 선택 사항인지 필수인지에 대해 설명합니다.

다음 절차 목록은 카메라 미니드라이버로 전송되는 SRB에 대한 일반적인 처리 흐름을 보여 줍니다.

미니 드라이버의 SRB_INITIALIZE_DEVICE 처리기

구성 요소 작업
카메라 미니드라이버 디바이스 이벤트 사용과 같이 커널 모드에서 비디오 또는 여전히 원시 처리 요구 사항을 나타내는 USBCAMD_InitializeNewInterface 호출하여 USBCAMD2를 초기화합니다.
카메라 미니드라이버 USBCAMD_AdapterReceivePacket 호출합니다.
USBCAMD2 USB 디바이스 및 구성 설명자를 가져옵니다.
USBCAMD2 미니드라이버의 CamConfigureEx 콜백 함수를 호출합니다.
카메라 미니드라이버 구성을 완료합니다. 대체 설정 및 최대 전송 크기를 선택합니다. USBCAMD_Pipe_Config_Descriptor 구조체의 배열을 채웁니다.
USBCAMD2 USBCAMD_Pipe_Config_Descriptor 구조체의 배열을 구문 분석합니다.
USBCAMD2 미니드라이버의 CamInitialize 콜백 함수를 호출합니다.
카메라 미니드라이버 초기화를 완료합니다. 디바이스 전원을 설정하고 카메라의 기본 설정을 활성화합니다.
USBCAMD2 스트림 수와 스트림 설명자 크기를 stream.sys 클래스 드라이버에 제공합니다.

미니 드라이버의 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 처리기

구성 요소 작업
카메라 미니드라이버 카메라 미니드라이버에서 처리하는 속성(예: PROPSETID_VIDCAP_VIDEOPROCAMP, PROPSETID_VIDCAP_CAMERACONTROLPROPSETID_VIDCAP_VIDEOCONTROL)과 다른 사용자 지정 속성 집합을 가져옵니다.

미니 드라이버의 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 처리기

구성 요소 작업
카메라 미니 드라이버 USBCAMD_AdapterReceivePacket 호출합니다.
USBCAMD2 스트림이 여전히 열려 있는 경우 각 스트림에 대해 minidriver의 CamStopCaptureExCamFreeBandwidthEx 콜백 함수를 호출하여 닫습니다.
USBCAMD2 미니드라이버의 CamUnInitialize 콜백 함수를 호출합니다.
카메라 미니 드라이버 리소스를 정리하고 해제합니다.

미니 드라이버의 SRB_SURPRISE_REMOVAL 처리기

구성 요소 작업
카메라 미니 드라이버 USBCAMD_AdapterReceivePacket 호출합니다.
USBCAMD2 보류 중인 데이터 SRB를 취소하고 STATUS_CANCELLED 있는 SRB를 반환합니다.
USBCAMD2 열려 있는 모든 스트림에서 미니드라이버의 CamStopCaptureExCamFreeBandwidthEx 콜백 함수를 호출합니다.
USBCAMD2 SRB_SURPRISE_REMOVAL 후에 내려온 모든 읽기/쓰기 SRB에서 STATUS_CANCELLED 반환합니다.

미니 드라이버의 SRB_SET_DATA_FORMAT 처리기

구성 요소 작업
카메라 미니 드라이버 새 비디오 형식을 확인합니다.
카메라 미니 드라이버 USBCAMD_SetVideoFormat 호출합니다.
USBCAMD2 연결된 스트림 확장을 사용하여 새 형식을 저장합니다.

Power ON에서 Power OFF 처리기로 미니 드라이버의 SRB_CHANGE_POWER_STATE

구성 요소 작업
카메라 미니 드라이버 USBCAMD_AdapterReceivePacket 호출합니다.
USBCAMD2 해당하는 경우 등시 파이프에서 스트리밍을 중지하거나 보류 중인 대량 또는 인터럽트 전송을 취소합니다.
USBCAMD2 미니드라이버의 CamStopCaptureEx 콜백 함수를 호출합니다.
카메라 미니 드라이버 중지 캡처 명령을 하드웨어에 보냅니다.

Power OFF에서 Power ON 처리기로 미니 드라이버의 SRB_CHANGE_POWER_STATE

구성 요소 작업
카메라 미니 드라이버 USBCAMD_AdapterReceivePacket 호출합니다.
USBCAMD2 해당하는 경우 등시 파이프에서 스트리밍을 다시 시작하거나 대량 또는 인터럽트 전송을 USB 클래스로 다시 제출합니다.
카메라 미니 드라이버 카메라 설정 및 카메라 전력 소비를 정상 수준으로 복원합니다.
USBCAMD2 미니드라이버의 CamStopCaptureEx 콜백 함수를 호출합니다.
USBCAMD2 미니드라이버의 CamStartCaptureEx 콜백 함수를 호출합니다.