共用方式為


提供自訂視訊調整大小器

[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]

[此 API 不受支援,未來可能會變更或無法使用。]

注意

此功能需要 DirectX 9.0 或更新版本。

 

DirectShow Editing Services (DES) 調整視訊來源剪輯的大小時,預設行為是 StretchBlt,其速度很快,但不是反別名。 您可以藉由將自訂調整大小器實作為 DirectShow 轉換篩選來變更調整大小行為。 篩選準則必須公開 IResize 介面,讓 DES 能夠指定輸入和輸出視訊大小。 如需撰寫轉換篩選的資訊,請參閱 撰寫轉換篩選。 建議 使用 CTransformFilter 基類作為起點。 當您實作篩選時,請注意下列事項:

  • 在篩選上支援 IResize 介面, (不支援針腳) 。
  • 篩選應該只接受 VIDEOINFOHEADER 格式 (FORMAT_VideoInfo) 。 拒絕其他格式類型。
  • DES 的視訊格式可以是任何未壓縮的 RGB 類型,包括 32 位 RGB 與 Alpha (MEDIASUBTYPE_ARGB32) 。 您的篩選可以使用biHeight< 0 安全地拒絕格式。
  • 在轉譯引擎連接篩選的輸出釘選之前,它會呼叫 IResize::p ut_MediaType 來設定輸出類型。 它也可以呼叫 IResize::p ut_Size 來調整輸出大小。 它可以在連接輸出釘選之前,依任何順序、任意次數呼叫這兩種方法。
  • 在轉譯引擎連接輸出釘選之後,它可能會再次呼叫 put_Size 。 調整大小器篩選器應該使用新的大小重新連接其輸出釘選。
  • 在篩選的 CTransformFilter::Transform 方法內,將輸入視訊延展至輸出大小。
  • 您的篩選不應該在輸出範例上設定不連續旗標,或將媒體類型附加至輸出範例。
  • 若要將篩選的狀態儲存在 GraphEdit (.grf) 檔案中,請實作 IPersistStream 介面。 (這是選擇性的,但適用于 testing.)

若要使用調整大小器篩選,篩選準則必須註冊為使用者系統上的 COM 物件。 在應用程式轉譯影片專案之前,請查詢 IRenderEngine2 介面的 Render Engine,並使用調整大小器篩選的 CLSID 呼叫 IRenderEngine2::SetResizerGUID

轉譯專案