視訊埠釘選
[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、imfMediaEngine 取代,並在媒體基金會 音訊/視訊擷取。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayer、IMFMediaEngine 和 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]
具有硬體視訊埠的擷取裝置可能會使用 Microsoft® DirectX® 中的視訊埠擴充功能 (VPE)。 如果是,擷取篩選器將會有視訊埠 (VP) 釘選。 沒有視訊資料會透過篩選圖形從 VP 釘選移動。 相反地,視訊畫面會在硬體中產生,並直接傳送至視訊記憶體。 VP 針腳允許將控制訊息傳送至硬體。
即使您的應用程式只執行沒有預覽的檔案擷取,也請務必連線 VP 釘選。 如果您將針腳保持未連接,圖形將無法正確執行。 這與不需要連接的預覽釘選不同。
不同的 DirectShow 視訊轉譯器提供不同的 VP 釘選支援:
- 視訊轉譯器:將 VP 釘選連接到 重迭混音器 篩選器上的釘選 0,並將重迭混音器篩選器連接到視訊轉譯器。
- VMR-7:將 VP 針腳連線到 視訊埠管理員 篩選,並將影片埠管理員連線至 VMR-7。
- VMR-9:如果裝置有 VP 針腳,則無法使用 VMR-9,因為 Direct3D 9 不支援視訊埠。 使用影片轉譯器或 VMR-7。
針對視訊埠案例,建議在視訊埠管理員和 VMR-7 上使用重疊混音器和視訊轉譯器,因為並非所有驅動程式都支援視訊埠管理員。 一般而言,重迭混音器是視訊埠最可靠的選項。
ICaptureGraphBuilder2::RenderStream 方法會在有 VP 針腳時自動插入重迭混音器。 如果您要在沒有使用此方法的情況下建置圖形,您應該檢查擷取篩選器上的視訊埠釘選,如果有的話,請將它連接到重迭混音器篩選器,如下圖所示。
您可以使用 ICaptureGraphBuilder2::FindPin 方法來搜尋擷取篩選上的 VP 釘選:
hr = pBuild->FindPin(
pCap, // Pointer to the capture filter.
PINDIR_OUTPUT, // Look for an output pin.
&PIN_CATEGORY_VIDEOPORT, // Look for a video port pin.
NULL, // Any media type.
FALSE, // Pin can be connected.
0, // Retrieve the first matching pin.
&pVPPin // Receives a pointer to the pin.
);
將重迭混音器新增至圖形之後,請再次呼叫 FindPin,以在重迭混音器上尋找針腳 0。 Pin 0 一律是篩選上的第一個輸入針腳。
pBuild->FindPin(pOvMix, PINDIR_INPUT, NULL, NULL, TRUE, 0, &pOVPin);
呼叫 IGraphBuilder::Connect來連接兩個針腳。
pGraph->Connect(pVPPin, pOvPin);
然後將重迭混音器的輸出釘選連接到視訊轉譯器篩選。 您可以在 Filter Graph 管理員上呼叫 IVideoWindow::p ut_AutoShow 和 IVideoWindow::p ut_Visible 方法來隱藏影片。
對於電視微調器,擷取篩選器可能也有視訊埠 VBI 針腳(PIN_CATEGORY_VIDEOPORT_VBI)。 如果是,請將該釘選連接到 VBI Surface 配置器 篩選條件。 如需詳細資訊,請參閱 檢視隱藏式輔助字幕。
相關主題