Direct3D-Aware MFT
本主題描述如何針對影片實作 Direct3D 感知 媒體基礎轉換 (MFT) 。
如果影片 MFT 可以處理包含 Direct3D 表面的樣本,則會被視為 Direct3D 感知 。 在視訊 MFT 中支援 Direct3D 的一般原因是使用 DirectX 影片加速 (DXVA) 來啟用硬體加速解碼。
本主題描述讓您的 MFT Direct3D 感知所需的步驟。 本主題未涵蓋 DXVA 解碼的機制。 如需 DXVA 的相關資訊,請參閱 DirectX 影片加速 2.0。
重要
從Windows 8開始,可以使用IMFDXGIDeviceManager,而不是IDirect3DDeviceManager9。 針對 Windows 市集應用程式,您必須使用 IMFDXGIDeviceManager 和 Microsoft Direct3D 11。 如需詳細資訊,請參閱 Direct3D 11 影片 API。
- 實作 IMFTransform::GetAttributes 方法。 這個方法會傳回屬性存放區的指標。
- MFT 必須在自己的屬性存放區上, 將 MF_SA_D3D_AWARE 屬性的值設定為 TRUE 。 從 Windows 8 開始,如果使用 Direct3D 11,請使用MF_SA_D3D11_AWARE。
- 在格式交涉期間,如果使用 Direct3D 11) 屬性時,如果MF_SA_D3D_AWARE (或MF_SA_D3D11_AWARE,用戶端可能會將MFT_MESSAGE_SET_D3D_MANAGER訊息傳送至 MFT。 ulParam事件參數是IDirect3DDeviceManager9介面的指標。 從Windows 8開始,您可以使用IMFDXGIDeviceManager,而不是IDirect3DDeviceManager9。 用戶端不需要傳送此訊息。
- MFT 會呼叫 IDirect3DDeviceManager9::GetVideoService 來查詢所需的 DXVA 服務。 從Windows 8開始,如果使用了 IMFDXGIDeviceManager,MFT 會呼叫IMFDXGIDeviceManager::GetVideoService。 解碼器通常會查詢 IDirectXVideoDecoderService,而影片處理器會查詢 IDirectXVideoProcessorService。
- 假設上一個步驟成功, IMFTransform::GetInputAvailableType 和 IMFTransform::GetOutputAvailableType 方法必須傳回 DXVA 相容格式。
- 用戶端會設定 MFT 上的媒體類型。 如果媒體類型與 DXVA 不相容,MFT 必須傳回錯誤碼 MF_E_UNSUPPORTED_D3D_TYPE。
- 此時,視用戶端是否找到適當的 DXVA 格式而定,有兩個選項。
- 如果用戶端成功設定 DXVA 格式,它可能會開始處理。 此時,MFT 可以使用 DXVA 進行處理,或回復至軟體處理。
- 或者,如果用戶端找不到可接受的 DXVA 格式,用戶端可能會傳送另一個 MFT_MESSAGE_SET_D3D_MANAGER 訊息,這次將 ulParam 設定為 Null。 MFT 必須釋放IDirect3DDeviceManager9指標 (IMFDXGIDeviceManager 指標,如果使用 IMFDXGIDeviceManager) 和其他任何 DXVA 介面,並還原為軟體處理。 此時,MFT 不得使用 DXVA 處理。
必須準備好 Direct3D 感知 MFT 來處理包含 Direct3D 表面的樣本。 此範例只會包含一個媒體緩衝區。 若要從緩衝區取得 Direct3D 介面,請呼叫 MFGetService 函式並指定 MR_BUFFER_SERVICE 服務。 如需詳細資訊,請參閱 DirectX Surface Buffer。
使用 DXVA 的 MFT 必須配置自己的輸出範例,如下所示:
- 在 IMFTransform::GetOutputStreamInfo 方法中,設定 MFT_OUTPUT_STREAM_PROVIDES_SAMPLES 旗標。
- 建立 DXVA 介面集區,如 DXVA 規格中所述。
- 呼叫 MFCreateVideoSampleFromSurface來建立媒體範例。
MFT 應該一律支援軟體處理作為後援,因為 DXVA 處理可能無法使用,原因如下:
- GPU 可能不支援 DXVA。
- 用戶端可能不會使用 Direct3D。
- DXVA 設定檔未針對每個視訊格式定義。
Direct3D 感知 MFT 必須具有單一輸出資料流程。 它不能有多個輸出。
相關主題