共用方式為


數據交集

在音訊過濾器圖中,只有在兩個針腳支持通用的數據流格式時,音訊流才能從一個過濾器的來源針腳流向另一個過濾器的接收針腳。 同樣地,用戶端如果和接腳支援共同的串流格式,才可以將音訊串流傳送至過濾器上的匯入接腳,或從過濾器上的匯出接腳接收音訊串流。 音訊濾波器使用一種稱為資料範圍交集(簡稱資料交集)的技術,來識別兩個接腳或客戶端與接腳之間共有的資料流格式。

例如,在 Windows Server 2003、Windows XP、Windows 2000 和 Windows Me/98 中, SysAudio 系統驅動程式 會使用數據交集技術,藉由連接支援相容音頻數據格式的篩選針腳組來建構音頻篩選圖形。

針腳處理站會指定每個針腳所支援的格式集合做為數據範圍的陣列,其中每個數據範圍都是類型KSDATARANGE_AUDIO的結構。 數據範圍會指定一般格式類型,它可以 KSDATAFORMAT_WAVEFORMATEXKSDATAFORMAT_DSOUND。 此外,數據範圍會指定下列每個參數的值範圍:

  • 每個樣本的位數

  • 取樣頻率

  • 通道數目

KSDATARANGE_AUDIO 結構指定樣本位元和取樣頻率範圍的最小值及最大值,但對於通道數量的範圍僅指定最大值。 通道數目下限為隱含的一個。

協商兩個端點的通用數據格式作業包括尋找兩個數據範圍,即每個端點各自的範圍,並確保它們互相交集。 兩組資料範圍相交,如果:

  • 它們支援相同的一般波浪格式(KSDATAFORMAT_WAVEFORMATEX或KSDATAFORMAT_DSOUND)。

  • 其樣本的位元範圍重疊。

  • 其取樣頻率範圍重疊。

如先前所述,KSDATAFORMAT_AUDIO結構表示硬體模型,其中針腳支援的通道數目下限一律為一。 根據此模型,任何兩個針腳的通道數目範圍應該一律重疊,因為兩個針腳都至少支援一個通道。 顯然,最小通道數目大於一的硬體適配卡不符合此模型,但適配卡驅動程式可以包含專屬的數據交集處理程式來處理這種類型的問題(請參閱 專屬 Data-Intersection 處理程式中的範例)。

當檢測到兩個針腳的一對交集數據範圍時,處理程序會從交集區域選取共同的資料格式,如下所示:

  • 每個樣本的位數是從兩個樣本位數範圍重疊的區域中選取的。

  • 取樣頻率是從兩個取樣頻率範圍重疊的區域選取。

  • 從兩個通道範圍重疊的區域選取通道數目。

例如,當協商音訊埠驅動程式匯入接腳的通用格式和另一個篩選器的來源接腳(通常是 KMixer 系統驅動程式)時,SysAudio 會先取得來源接腳的數據範圍陣列。 SysAudio 接著會將 KSPROPERTY_PIN_DATAINTERSECTION 要求傳送至匯集針腳,並包含來源針腳的資料範圍陣列與這個要求。 核心串流層會攔截請求,並依次呼叫埠驅動程序的資料交集處理器,從來源針腳資料範圍陣列的第一個元素開始,對每個後續元素逐一處理,直到處理器成功尋找資料交集為止。

使用 SysAudio 對埠驅動程式的資料交集處理程式進行的每個呼叫,處理程式會先從迷你埠驅動程式取得接收針腳的資料範圍陣列。 然後,它會從第一個元素開始迭代陣列,直到成功找到接收端插腳數據範圍與目前來源端插腳數據範圍之間的交集為止。 處理程式會選取位於交集內的通用格式,並將此格式輸出給呼叫端。

在每次迭代的每個步驟中,埠驅動程式會呼叫迷你埠驅動程式的專屬數據交集處理程式,包含兩個數據範圍,每個引腳各有一個。 如果在任何步驟中,專用處理程式不願意處理兩個數據範圍之間的數據交集檢查,埠驅動程式的數據交集處理程式將改為執行該檢查。

總而言之,搜尋來源針腳資料範圍與接收針腳資料範圍之間的交集是一個反覆過程:

  • 在外部迴圈中,核心串流層會逐一查看來源針腳資料範圍陣列中的連續元素,從第一個陣列元素開始。

  • 在內部迴圈中,埠驅動程式會逐一查看接收針腳數據範圍陣列中的連續元素,從第一個陣列元素開始。

搜尋會在找到第一個資料交集時停止。 此程式傾向於將元素偏向於每個針腳資料範圍陣列的開頭。 當指定一組引腳的資料範圍陣列時,適配器驅動程式應將偏好的格式資料範圍排列在陣列的開頭。