다음을 통해 공유


하드웨어용 AVStream 미니드라이버 작성

공급업체에서 제공하는 AVStrMiniDeviceStart에서 하드웨어를 지원하는 AVStream 미니드라이버가 먼저 리소스 목록을 구문 분석한 다음 IoConnectInterrupt 를 호출하여 ISR(인터럽트 서비스 루틴)을 등록해야 합니다.

드라이버가 DMA(직접 메모리 액세스)를 지원하는 경우 추가 단계가 필요합니다. 드라이버가 DMA를 구현하는 경우 AVStream DMA 서비스를 참조하세요.

둘 이상의 애플리케이션이 디바이스를 사용하여 동시에 필터 그래프를 빌드할 수 있는 경우 그래프 간의 간섭을 방지하기 위해 주의해야 합니다. 특히 디바이스를 사용하여 애플리케이션에서 그래프를 생성하는 경우 논스톱 상태에서 디바이스를 사용하는 애플리케이션을 방해해서는 안 됩니다.

그래프가 KSSTATE_ACQUIRE 전환된 후 마이크로코드를 로드하여 간섭을 방지할 수 있습니다. 이렇게 하면 다른 그래프가 현재 실행되는 동안 새 그래프가 KSSTATE_ACQUIRE 전환되지 않으므로 현재 실행 중인 그래프가 보호됩니다. 핀 상태 변경 알림을 받으려면 KSPIN_DISPATCH 구조에서 AVStrMiniPinSetDeviceState 콜백 루틴을 제공합니다.

그러나 그래프 시작 시간을 최소화하려면 그래프가 KSSTATE_ACQUIRE 도달하기 전에 마이크로코드를 로드하는 것이 좋습니다. 이 경우 부팅하는 동안 우선 순위가 낮은 백그라운드 스레드에서 마이크로코드를 로드하는 것이 좋습니다. 이 솔루션은 다른 애플리케이션을 방해하지 않고, 그래프 시작 시간을 줄이며, 비동기적으로 수행되는 경우 부팅 시간을 연장해서는 안 됩니다.

그러나 부팅 후에는 그래프가 KSSTATE_ACQUIRE 도달할 때까지 마이크로코드를 다시 로드하거나 하드웨어 레지스터를 조작하지 마세요.

새 그래프의 연결이 실행 중인 그래프를 방해할 수 있는 방법을 확인하려면 인코딩 및 디코딩을 지원하지만 이러한 작업 중 하나만 한 번에 수행하는 비디오 캡처 디바이스를 고려합니다. 미니 드라이버는 인코딩 필터와 디코딩 필터를 노출합니다.

애플리케이션은 인코딩 필터를 포함하는 필터 그래프를 빌드합니다. 미니 드라이버는 핀 연결 시 인코딩을 위해 마이크로코드를 로드합니다. 필터 그래프가 시작되고 하드웨어가 인코딩을 시작합니다.

하드웨어가 인코딩되는 동안 다른 애플리케이션은 디코딩 필터를 필터 그래프에 배치합니다. 디코딩 핀이 연결되면 핀 상태가 KSSTATE_ACQUIRE 변경되기 전에 미니드라이버가 디코딩을 위해 하드웨어를 구성하려고 시도합니다. 이 재구성은 현재 활성 인코딩 그래프를 방해하며 드라이버가 불안정할 수 있습니다.