다음을 통해 공유


공장 고정

오디오 필터의 핀 팩터리는 필터가 인스턴스화할 수 있는 모든 핀을 설명합니다. 앞서 언급했듯이 오디오 미니포트 드라이버는 핀 정보를 PCPIN_DESCRIPTOR 구조의 배열에 저장합니다. 각 구조체는 핀 팩터리를 지정하고 핀 팩터리는 배열의 인덱스로 식별됩니다. 이 인덱스는 핀 ID라고도 합니다.

PCPIN_DESCRIPTOR 구조에는 자동화 테이블과 KSPIN_DESCRIPTOR 구조가 포함됩니다.

KSPIN_DESCRIPTOR 구조체에는 핀 팩터리의 핀에 대한 다음 정보가 포함되어 있습니다.

  • 데이터 흐름의 필터 상대 방향

  • 통신 흐름의 필터 상대 방향(모든 현재 Windows 버전에서 KS 필터는 통신에 IRP를 사용합니다.)

  • 고정 범주

  • 이름

  • 인스턴스 기능

  • 데이터 형식 기능

구조체의 범주이름 멤버는 핀 팩터리의 핀 범주와 식별 이름을 지정합니다. 필터의 각 핀 팩터리에 대해 미니포트 드라이버는 핀 팩터리를 고유하게 식별하는 범주이름 GUID의 조합을 지정합니다. 둘 이상의 핀 팩터리에서 동일한 범주 값을 공유하는 경우 각 핀 팩터리에는 다른 핀 팩터리와 구별되는 Name 값이 있습니다. 단일 핀 팩터리에 특정 범주 값만 있는 경우 해당 값은 핀 팩터리를 식별하기에 충분하며 해당 핀 팩터리의 이름 값을 NULL로 설정할 수 있습니다. 코딩 예제는 필터 토폴로지 노출을 참조하세요. 핀 범주에 대한 자세한 내용은 범주 속성 고정을 참조하세요.

핀 팩터리는 확장 KSDATARANGE 구조체의 배열로 지원하는 데이터 형식 범위를 지정합니다.

  • 입력 또는 출력 스트림에 대한 다양한 웨이브 또는 DirectSound 데이터 형식을 지원하는 핀 팩터리는 KSDATARANGE_AUDIO 구조의 배열을 지정합니다.

  • 입력 또는 출력 스트림에 대한 MIDI 또는 DirectMusic 데이터 형식 범위를 지원하는 핀 팩터리는 KSDATARANGE_MUSIC 구조의 배열을 지정합니다.

KSDATARANGE_AUDIO 및 KSDATARANGE_MUSIC KSDATARANGE의 확장 버전입니다. 두 유형의 데이터 범위에 대한 예제는 오디오 데이터 형식 및 데이터 범위를 참조하세요.

한 필터의 싱크 핀을 다른 필터의 원본 핀에 연결하기 전에 그래프 작성기(예: SysAudio 시스템 드라이버)는 데이터 범위에서 호환되는 형식을 검색할 수 있습니다. 그래프 작성기는 일반적으로 필터 자체에서 호환되는 형식을 선택할 수 있도록 하는 필터의 데이터 교차 처리기를 호출합니다.

필터에는 여러 핀 팩터리를 포함할 수 있으며 핀 팩터리는 여러 핀 인스턴스를 지원할 수 있습니다.

  • 필터에 여러 핀 팩터리를 두는 것은 필터를 통해 흐르는 다양한 유형의 데이터에 대해 별도의 데이터 경로를 구분하는 데 유용합니다. 예를 들어 한 핀 팩터리는 PCM 데이터 스트림을 지원할 수 있고 다른 핀 팩터리는 AC-3 스트림을 지원할 수 있습니다.

  • 단일 필터는 동시에 스트림 렌더링 및 캡처를 지원할 수 있습니다. 렌더링 및 캡처 경로에는 별도의 필터 팩터리 집합이 있습니다.

  • 싱크 핀 팩터리에 여러 핀 인스턴스가 있는 것은 혼합을 의미하는 경우가 많습니다. 이 경우 필터에 SUM 노드(KSNODETYPE_SUM)가 포함됩니다.

필터와 마찬가지로 핀은 커널 개체이며 커널 핸들로 식별됩니다. 핀 instance 대한 핸들은 KsCreatePin을 호출하여 생성됩니다. 커널 개체로 핀을 IRP의 대상으로 지정할 수 있습니다. 드라이버의 클라이언트는 IOCTL 요청을 핀으로 보낼 때 핀 핸들을 지정합니다.

오디오 필터 그래프를 빌드할 때 SysAudio는 핀을 연결하여 한 필터를 다른 필터에 연결합니다. 한 필터의 원본 핀을 다른 필터의 싱크 핀에 연결할 수 있습니다. 원본 핀의 데이터 및 IRP는 이 연결을 통해 싱크 핀으로 흐릅니다. 연결을 만들기 위해 그래프 작성기(일반적으로 SysAudio)는 KsCreatePin 을 호출하여 먼저 원본 핀을 만든 다음 , KsCreatePin 을 다시 호출하여 싱크 핀을 만듭니다. 그러나 두 번째 호출에서 클라이언트는 새 싱크 핀이 첫 번째 호출에서 생성된 원본 핀에 연결되도록 지정합니다.