公開篩選拓撲
迷你埠驅動程式會根據針腳、節點和連線來描述 KS 篩選的內部拓撲。 此拓撲會透過篩選指定資料流程路徑,並定義邏輯目標--釘選和 nodes--for 屬性要求。 篩選內部拓撲是硬體裝置內部結構的邏輯標記法,該硬體裝置會低於篩選準則。 迷你埠驅動程式會描述此拓撲,其中包含固定、節點和連線描述元的靜態陣列。
針腳是在 PCPIN_DESCRIPTOR 結構的靜態陣列中指定。 每個針腳在陣列中都有其序數的識別碼。
節點是在 PCNODE_DESCRIPTOR 結構的靜態陣列中指定。 每個節點都有一個識別碼,其為數組中的序數。
(針腳對接、釘選到節點或節點對節點) 的連線是在 PCCONNECTION_DESCRIPTOR 結構的靜態陣列中指定。
迷你埠驅動程式會在其IMiniport::GetDescription方法所輸出的 PCFILTER_DESCRIPTOR結構中公開這三個數組。
例子
下列程式碼範例會指定具有一個輸入針腳和一個輸出針腳之簡單 KS 篩選器的內部拓撲。 篩選包含單一節點,這是磁片區層級控制項。
#define KSPIN_WAVEOUT_SRC 0
#define KSPIN_SPEAKERS_DST 1
PCPIN_DESCRIPTOR
MiniportPins[] =
{
{ // Pin 0 -- KSPIN_WAVEOUT_SRC
0,0,0, // InstanceCount
NULL, // AutomationTable
{ // KsPinDescriptor
0, // InterfacesCount
NULL, // Interfaces
0, // MediumsCount
NULL, // Mediums
SIZEOF_ARRAY(PinDataRangePointersBridge), // DataRangesCount
PinDataRangePointersBridge, // DataRanges
KSPIN_DATAFLOW_IN, // DataFlow
KSPIN_COMMUNICATION_NONE, // Communication
&KSNODETYPE_LEGACY_AUDIO_CONNECTOR, // Category
NULL, // Name
0 // Reserved
}
},
{ // Pin 1 -- KSPIN_SPEAKERS_DST
0,0,0, // InstanceCount
NULL, // AutomationTable
{ // KsPinDescriptor
0, // InterfacesCount
NULL, // Interfaces
0, // MediumsCount
NULL, // Mediums
SIZEOF_ARRAY(PinDataRangePointersBridge), // DataRangesCount
PinDataRangePointersBridge, // DataRanges
KSPIN_DATAFLOW_OUT, // DataFlow
KSPIN_COMMUNICATION_NONE, // Communication
&KSNODETYPE_SPEAKER, // Category
&KSAUDFNAME_VOLUME_CONTROL, // Name (This name shows up as the
// playback panel name in SndVol32)
0 // Reserved
}
}
};
#define KSNODE_WAVEOUT_VOLUME 0
PCNODE_DESCRIPTOR TopologyNodes[] =
{
{ // KSNODE_WAVEOUT_VOLUME
0, // Flags
&AutomationVolume, // AutomationTable
&KSNODETYPE_VOLUME, // Type
&KSAUDFNAME_WAVE_VOLUME // Name
}
};
PCCONNECTION_DESCRIPTOR MiniportConnections[] =
{ //FromNode---------------FromPin------------ToNode-----------------ToPin
{ PCFILTER_NODE, KSPIN_WAVEOUT_SRC, KSNODE_WAVEOUT_VOLUME, 1 },
{ KSNODE_WAVEOUT_VOLUME, 0, PCFILTER_NODE, KSPIN_SPEAKERS_DST }
};
下圖顯示上述範例程式碼所描述之篩選準則的拓撲。
此篩選是 拓撲篩選的簡單範例,配接器驅動程式會藉由將其 IMiniportTopology 物件系結至 PortCls 系統驅動程式所建立的 IPortTopology 物件來形成。 篩選準則的輸入 (接收) 和輸出 (來源) 針腳會命名為KSPIN_WAVEOUT_SRC和KSPIN_SPEAKERS_DST。 這兩個針腳都有類比訊號。 混音器API 會將這些針腳的連接公開為來源和目的地混音器線,分別 (MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT 和MIXERLINE_COMPONENTTYPE_DST_SPEAKERS) 。
下表說明討論 KS 針腳與混音器線的對應時,可能發生混淆的來源。
釘選名稱 | 混合器 API 術語 | KS 篩選術語 |
---|---|---|
KSPIN_WAVEOUT_SRC |
來源混音器線 |
接收針腳 |
KSPIN_SPEAKERS_DST |
目的地混音器線 |
來源釘選 |
請注意,KSPIN_WAVEOUT_SRC是來源混音器線,KSPIN_SPEAKERS_DST是來源針腳。 如需詳細資訊,請參閱 核心串流拓撲至音訊混音器 API 翻譯中的 KS 和混音器術語討論。
另請注意,名稱 「KSPIN_WAVEOUT_SRC」 包含 「WAVEOUT」,不是因為針腳會攜帶波浪格式的數位資料,但因為其具有波篩選器所產生的類比訊號,這是 WaveCyclic 或 WavePci 類型的篩選。 波篩選器代表音訊配接器硬體的一部分,可將波串流轉換成類比訊號。 釘選KSPIN_SPEAKERS_DST輸出驅動一組喇叭的類比訊號。
篩選包含單一節點KSNODE_WAVEOUT_VOLUME, 混合器 API 會以磁片區控制 (MIXERCONTROL_CONTROLTYPE_VOLUME) 表示。 磁片區控制項的 KS 節點類型 KSNODETYPE_VOLUME。 此類型的所有節點都支援 KSPROPERTY_AUDIO_VOLUMELEVEL 屬性,而篩選準則的用戶端會使用此屬性來控制磁片區層級。
磁片區節點有兩個「邏輯」針腳,編號為 0 和 1。 MiniportConnections 陣列所指定的兩個連接會以指向資料流程方向的虛線箭號表示于圖中。 每個連接都會由陣列中的兩個元素之一描述。
KSPIN_WAVEOUT_SRC和KSPIN_SPEAKERS_DST針腳都是 橋接器針腳,這表示它們代表介面卡中的硬式連線。 在上述範例程式碼中,MiniportPins 陣列中的兩個針腳描述元都會將其 IRP 流程方向指定為KSPIN_COMMUNICATION_NONE,這很適合,因為橋接器針腳不會傳送或接收 IRP。 兩個針腳描述元也會參考 PinDataRangePointersBridge 陣列,其定義如下:
static KSDATARANGE PinDataRangesBridge[] =
{
{
sizeof(KSDATARANGE),
0, 0, 0,
STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG),
STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE)
}
};
static PKSDATARANGE PinDataRangePointersBridge[] =
{
&PinDataRangesBridge[0]
};
PinDataRangePointersBridge 陣列會定義具有類比音訊訊號的橋接器針腳資料範圍。 如需詳細資訊,請參閱 音訊篩選圖表中的橋接器針腳討論。
如需更複雜的拓撲範例,請參閱 拓撲篩選。