PCM이 아닌 핀 팩터리에 대한 요구 사항
Windows XP 이상 및 Microsoft Windows Me에서 비 PCM WAVEFORMATEX 형식을 재생하는 드라이버는 다음 지침에 따라 PCM이 아닌 핀을 노출해야 합니다.
먼저 PCM 핀 팩터리에서 분리된 비 PCM 데이터 형식에 대한 핀 팩터리를 정의합니다. PCM 및 PCM이 아닌 사용자는 단독 핀 instance 자동으로 KMixer에 할당되므로 동일한 단일 instance 핀 팩터리를 공유할 수 없습니다. 핀 팩터리에서 여러 인스턴스를 지원하는 경우 PCM 및 비 PCM은 동일한 핀 팩터리에서 공존할 수 있습니다. 그러나 이 경우 런타임에 PCM이 아닌 클라이언트에서 이러한 핀 인스턴스를 사용할 수 있다고 보장할 수 없습니다. PCM 클라이언트가 이미 할당했을 수 있습니다. 가장 안전한 옵션은 PCM이 아닌 형식에 대해 별도의 핀 팩터리를 제공하는 것입니다.
DirectSound 8에서 핀을 검색하고 사용하려면 이미 PCM을 지원하는 필터에서 이 비 PCM 핀 팩터리를 정의합니다. 그렇지 않으면 DirectSound가 PCM이 아닌 핀을 검색하지 않습니다. 이는 PCM을 전혀 지원하지 않는 디바이스가 PCM이 아닌 형식을 지원할 수 없음을 의미합니다.
둘째, PCM이 아닌 핀에서 데이터 교차 처리기를 구현합니다. PortCls는 기본 제공 처리기를 제공하지만 이 기본 처리기는 항상 PCM을 선택하므로 PCM이 아닌 형식에 대한 고유한 처리기를 추가해야 합니다. PCM이 아닌 핀에 대한 교차 처리기에서 WAVE_FORMAT_PCM 지원해서는 안 됩니다. 이 처리기는 OutputBufferLength 가 0인 상태에서 호출할 수 있습니다. 이 경우 호출자는 데이터 자체가 아닌 기본 설정 데이터 범위의 크기만 요청합니다. 이 경우 처리기는 PCM이 아닌 데이터 범위의 크기를 ResultantFormatLength 매개 변수로 복사하고 STATUS_BUFFER_OVERFLOW 반환하여 응답해야 합니다. WDK(Windows 드라이버 키트)의 Msvad 샘플에는 예제 처리기로 사용할 수 있는 DataRangeIntersection 루틴에 대한 코드가 포함되어 있습니다. DataRangeIntersection 루틴을 테스트하려면 KsStudio 유틸리티를 사용하여 핀을 인스턴스화합니다. 먼저 교차 처리기를 호출하여 허용되는 기본 형식을 결정합니다. PCM이 아닌 형식을 지원하려면 드라이버가 다음 위치에서 올바르게 처리해야 합니다.
미니포트 드라이버 메서드 Init 및 NewStream (예: IMiniportWavePci::Init 및 IMiniportWavePci::NewStream 참조).
Miniport 스트림 메서드 SetFormat (예: IMiniportWavePciStream::SetFormat 참조).