데이터 교집합
오디오 필터 그래프에서 오디오 스트림은 두 핀이 스트림에 대한 공통 형식을 지원하는 경우에만 한 필터의 원본 핀에서 다른 필터의 싱크 핀으로 흐를 수 있습니다. 마찬가지로 클라이언트는 필터의 싱크 핀으로 오디오 스트림을 보내거나 클라이언트와 핀이 공통 스트림 형식을 지원하는 경우에만 필터의 원본 핀에서 오디오 스트림을 받을 수 있습니다. 오디오 필터는 데이터 교차(데이터 범위 교차의 경우 약어)라는 기술을 사용하여 두 핀 또는 클라이언트와 핀에 공통되는 스트림 형식을 식별합니다.
예를 들어 Windows Server 2003, Windows XP, Windows 2000 및 Windows Me/98에서 SysAudio 시스템 드라이버는 데이터 교차 기술을 사용하여 호환되는 오디오 데이터 형식을 지원하는 필터 핀 쌍을 연결하여 오디오 필터 그래프를 생성합니다.
핀 팩터리는 각 핀이 데이터 범위 배열로 지원하는 형식 집합을 지정합니다. 여기서 각 데이터 범위는 KSDATARANGE_AUDIO 형식의 구조입니다. 데이터 범위는 KSDATAFORMAT_WAVEFORMATEX 또는KSDATAFORMAT_DSOUND 수 있는 일반 형식 형식을 지정합니다. 또한 데이터 범위는 다음 매개 변수 각각에 대한 값 범위를 지정합니다.
샘플당 비트 수
샘플 빈도
채널 수
KSDATARANGE_AUDIO 구조체는 샘플당 비트 및 샘플 빈도 범위에 대한 최소값과 최대값을 모두 지정하지만 채널 수 범위의 최대값만 지정합니다. 최소 채널 수는 암시적으로 1개입니다.
두 핀에 대한 공통 데이터 형식을 협상하는 작업은 서로 교차하는 두 개의 데이터 범위(각 핀에서 하나씩)를 찾는 것으로 구성됩니다. 다음과 같은 경우 데이터 범위 쌍이 교차합니다.
동일한 일반 웨이브 형식(KSDATAFORMAT_WAVEFORMATEX 또는 KSDATAFORMAT_DSOUND)을 지원합니다.
샘플당 비트 범위가 겹칩니다.
샘플 빈도 범위가 겹칩니다.
앞에서 설명한 것처럼 KSDATAFORMAT_AUDIO 구조는 핀에서 지원하는 최소 채널 수가 항상 1개인 하드웨어 모델을 의미합니다. 이 모델에 따르면 두 핀이 하나 이상의 채널을 지원하므로 두 핀의 채널 수 범위는 항상 겹쳐야 합니다. 물론 채널 수가 1보다 많은 하드웨어 어댑터는 이 모델을 준수하지 않지만 어댑터 드라이버는 이러한 유형의 문제를 처리하기 위해 독점 데이터 교차 처리기를 포함할 수 있습니다( 독점 Data-Intersection 처리기의 예제 참조).
두 핀에 대한 교차 데이터 범위 쌍을 찾으면 처리기는 다음과 같이 교차 영역에서 공통 데이터 형식을 선택합니다.
샘플당 두 비트 범위가 겹치는 지역에서 샘플당 비트 수가 선택됩니다.
샘플 빈도는 두 개의 샘플 빈도 범위가 겹치는 지역에서 선택됩니다.
채널 수가 두 개 채널 범위가 겹치는 지역에서 선택됩니다.
예를 들어 오디오 포트 드라이버의 싱크 핀과 다른 필터의 원본 핀(일반적으로 KMixer 시스템 드라이버)에 대한 공통 형식을 협상할 때 SysAudio는 먼저 원본 핀의 데이터 범위 배열을 가져옵니다. 그런 다음 SysAudio는 싱크 핀에 KSPROPERTY_PIN_DATAINTERSECTION 요청을 보내고 이 요청과 함께 원본 핀의 데이터 범위 배열을 포함합니다. 커널 스트리밍 계층은 요청을 가로채고 처리기가 데이터 교차를 찾는 데 성공할 때까지 첫 번째 요소부터 시작하여 원본 핀의 데이터 범위 배열에 있는 각 연속 요소에 대해 포트 드라이버의 데이터 교차 처리기를 한 번 반복적으로 호출합니다.
SysAudio가 포트 드라이버의 데이터 교차 처리기에 대해 호출할 때마다 처리기는 먼저 미니포트 드라이버에서 싱크 핀의 데이터 범위 배열을 가져옵니다. 그런 다음 첫 번째 요소부터 시작하여 싱크 핀 데이터 범위와 현재 소스 핀 데이터 범위 간의 교집합을 찾는 데 성공할 때까지 배열을 반복합니다. 처리기는 교집합 내에 있는 공통 형식을 선택하고 이 형식을 호출자에게 출력합니다.
반복의 각 단계에서 포트 드라이버는 두 개의 핀 각각에 대해 하나씩 두 개의 데이터 범위를 사용하여 미니포트 드라이버의 독점 데이터 교차 처리기를 호출합니다. 어느 단계에서든 독점 처리기가 두 데이터 범위 간의 데이터 교차 검사 처리를 거부하는 경우 포트 드라이버의 데이터 교차 처리기는 대신 검사 수행합니다.
요약하자면 원본 핀 데이터 범위와 싱크 핀 데이터 범위 간의 교차점에 대한 검색은 반복적인 프로세스입니다.
외부 루프에서 커널 스트리밍 계층은 첫 번째 배열 요소부터 시작하여 원본 핀의 데이터 범위 배열에서 연속적인 요소를 반복합니다.
내부 루프에서 포트 드라이버는 첫 번째 배열 요소부터 시작하여 싱크 핀의 데이터 범위 배열에서 연속적인 요소를 반복합니다.
첫 번째 데이터 교집합을 찾으면 검색이 중지됩니다. 이 프로세스는 각 핀의 데이터 범위 배열의 시작 부분에 요소를 선호하는 경향이 있습니다. 핀에 대한 데이터 범위 배열을 지정할 때 어댑터 드라이버는 배열의 시작 부분에 기본 형식에 대한 데이터 범위를 배치하여 배열 요소를 정렬해야 합니다.