宣告篩選資訊
[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。
第一個步驟是視需要宣告篩選資訊。 DirectShow 會定義下列結構來描述篩選、針腳和媒體類型:
結構 | Description |
---|---|
AMOVIESETUP_FILTER | 描述篩選。 |
AMOVIESETUP_PIN | 描述針腳。 |
AMOVIESETUP_MEDIATYPE | 描述媒體類型。 |
這些結構是巢狀結構。 AMOVEIESETUP_FILTER結構具有AMOVIESETUP_PIN結構的陣列指標,而且每個結構都有AMOVEIESETUP_MEDIATYPE結構的陣列指標。 這些結構會結合在一起,為 IFilterMapper2 介面提供足夠的資訊,以找出篩選準則。 它們不是篩選準則的完整描述。 例如,如果篩選準則建立同一個針腳的多個實例,您應該只宣告該針腳的一個 AMOVIESETUP_PIN 結構。 此外,不需要篩選,才能支援它註冊的每個媒體類型組合;也不需要註冊它支援的每個媒體類型。
將設定結構宣告為 DLL 內的全域變數。 下列範例顯示具有一個輸出針腳的篩選準則:
static const WCHAR g_wszName[] = L"Some Filter";
AMOVIESETUP_MEDIATYPE sudMediaTypes[] = {
{ &MEDIATYPE_Video, &MEDIASUBTYPE_RGB24 },
{ &MEDIATYPE_Video, &MEDIASUBTYPE_RGB32 },
};
AMOVIESETUP_PIN sudOutputPin = {
L"", // Obsolete, not used.
FALSE, // Is this pin rendered?
TRUE, // Is it an output pin?
FALSE, // Can the filter create zero instances?
FALSE, // Does the filter create multiple instances?
&GUID_NULL, // Obsolete.
NULL, // Obsolete.
2, // Number of media types.
sudMediaTypes // Pointer to media types.
};
AMOVIESETUP_FILTER sudFilterReg = {
&CLSID_SomeFilter, // Filter CLSID.
g_wszName, // Filter name.
MERIT_NORMAL, // Merit.
1, // Number of pin types.
&sudOutputPin // Pointer to pin information.
};
篩選名稱會宣告為靜態全域變數,因為它將在其他地方再次使用。
相關主題