IMFTransform::GetOutputAvailableType 方法 (mftransform.h)
取得此 Media Foundation 轉換上輸出數據流的可用媒體類型, (MFT) 。
語法
HRESULT GetOutputAvailableType(
[in] DWORD dwOutputStreamID,
[in] DWORD dwTypeIndex,
[out] IMFMediaType **ppType
);
參數
[in] dwOutputStreamID
輸出數據流識別碼。 若要取得數據流標識碼的清單,請呼叫 IMFTransform::GetStreamIDs。
[in] dwTypeIndex
要擷取之媒體類型的索引。 媒體類型會從零編製索引,並以近似的喜好設定順序傳回。
[out] ppType
接收 IMFMediaType 介面的指標。 呼叫端必須釋放 介面。
傳回值
方法會傳回 HRESULT。 可能的值包括 (但不限於) 下表中的這些值。
傳回碼 | 描述 |
---|---|
|
此方法已成功。 |
|
MFT 沒有可用的輸出類型清單。 |
|
無效的數據流標識碼。 |
|
dwTypeIndex 參數超出範圍。 |
|
您必須先設定輸入類型,才能設定輸出類型。 |
備註
MFT 會為每個輸出數據流定義可用的媒體類型清單,並依喜好設定排序它們。 這個方法會列舉輸出數據流的可用媒體類型。 若要列舉可用的類型,請遞增 dwTypeIndex ,直到方法傳回MF_E_NO_MORE_TYPES為止。
在一個數據流上設定媒體類型可以變更另一個數據流的可用類型 (或變更喜好設定順序) 。 不過,動態更新可用類型清單不需要 MFT。 測試是否可以設定特定輸入類型的唯一保證方式是呼叫 IMFTransform::SetOutputType。
在某些情況下,MFT 在設定一或多個輸入類型之前,無法傳回輸出類型的清單。 如果是,方法會傳回 MF_E_TRANSFORM_TYPE_NOT_SET。
實作此方法不需要 MFT。 不過,除非支援的型別很簡單,而且可以透過 MFTGetInfo 函式來探索,否則大部分的 MFT 都應該實作此方法。
這個方法可以傳回 部分 媒體類型。 部分媒體類型包含格式不完整的描述,並用來提供呼叫端的提示。 例如,部分類型可能只包含主要類型和子類型 GUID。 不過,在用戶端設定 MFT 上的輸入類型之後,MFT 通常應該傳回至少一個完整的輸出類型,這可以在不進一步修改的情況下使用。 如需詳細資訊,請參閱 完成和部分媒體類型。
某些 MFT 在 MFT 收到第一個輸入範例之前,無法提供精確的輸出類型清單。 例如,MFT 可能需要讀取第一個封包標頭來推斷格式。 MFT 應該處理這種情況,如下所示:
- 在 MFT 收到任何輸入之前,它會提供一或多個可能產生的輸出類型清單。 例如,MPEG-2 譯碼器可能會傳回描述 MPEG-2 主要配置檔/主要層級的媒體類型。
- 用戶端會選取其中一種類型 (通常是第一個) ,並在輸出數據流上加以設定。
- 用戶端會呼叫 IMFTransform::P rocessInput來傳遞第一個輸入範例。
- 如果輸出類型不符合輸入數據,轉換會在 ProcessOutput 方法中發出格式變更的訊號。 如需格式變更的詳細資訊,請參閱 IMFTransform::P rocessOutput。
- 會再次呼叫 GetOutputAvailableType 。 此時,方法應該會傳回反映輸入數據的已更新型別清單。
- 用戶端會從此清單中選取新的輸出類型,並呼叫 SetOutputType。
實作注意事項
如果 MFT 在內部儲存媒體類型,MFT 應該傳回媒體類型的複製品,而不是原始類型的指標。 否則,呼叫端可能會修改類型,並改變 MFT 的內部狀態。規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2008 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | mftransform.h |
程式庫 | Mfuuid.lib |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應