共用方式為


資料交集

在音訊篩選圖形中,只有在兩個針腳支援資料流程的通用格式時,音訊串流才能從一個篩選準則的來源針腳流流到另一個篩選的接收針腳。 同樣地,用戶端可以將音訊資料流程傳送至篩選上的接收釘選,或只有在用戶端和釘選支援一般資料流程格式時,才會從篩選上的來源釘選接收音訊資料流程。 音訊篩選使用稱為資料交集的技術, (短于資料範圍交集) 來識別兩個針腳或用戶端和針腳通用的資料流程格式。

例如,在 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 對埠驅動程式的資料交集處理常式進行的每個呼叫時,處理常式會先從迷你埠驅動程式取得接收針腳的資料範圍陣列。 然後,它會逐一查看陣列,從第一個專案開始,直到它成功尋找接收釘選資料範圍與目前來源釘選資料範圍之間的交集為止。 處理常式會選取位於交集內的通用格式,並將此格式輸出給呼叫端。

在反復專案的每個步驟中,埠驅動程式會呼叫迷你埠驅動程式的專屬資料交集處理常式,並搭配兩個數據範圍--一個用於兩個針腳。 如果專屬處理常式在任何步驟拒絕處理兩個數據範圍之間的資料交集檢查,埠驅動程式的資料交集處理常式會改為執行檢查。

總而言之,搜尋來源釘選資料範圍與接收釘選資料範圍之間的交集是反復的程式:

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

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

搜尋會在尋找第一個資料交集時停止。 此程式通常會優先于每個針腳的資料範圍陣列開頭的專案。 指定針腳的資料範圍陣列時,配接器驅動程式應該藉由將資料範圍放在陣列開頭的慣用格式來排序陣列元素。