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。 可能的值包括 (但不限於) 下表中的這些值。

傳回碼 描述
S_OK
此方法已成功。
E_NOTIMPL
MFT 沒有可用的輸出類型清單。
MF_E_INVALIDSTREAMNUMBER
無效的數據流標識碼。
MF_E_NO_MORE_TYPES
dwTypeIndex 參數超出範圍。
MF_E_TRANSFORM_TYPE_NOT_SET
您必須先設定輸入類型,才能設定輸出類型。

備註

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 應該處理這種情況,如下所示:

  1. 在 MFT 收到任何輸入之前,它會提供一或多個可能產生的輸出類型清單。 例如,MPEG-2 譯碼器可能會傳回描述 MPEG-2 主要配置檔/主要層級的媒體類型。
  2. 用戶端會選取其中一種類型 (通常是第一個) ,並在輸出數據流上加以設定。
  3. 用戶端會呼叫 IMFTransform::P rocessInput來傳遞第一個輸入範例。
  4. 如果輸出類型不符合輸入數據,轉換會在 ProcessOutput 方法中發出格式變更的訊號。 如需格式變更的詳細資訊,請參閱 IMFTransform::P rocessOutput
  5. 會再次呼叫 GetOutputAvailableType 。 此時,方法應該會傳回反映輸入數據的已更新型別清單。
  6. 用戶端會從此清單中選取新的輸出類型,並呼叫 SetOutputType
如果在包含 mftransform.h 之前定義 MFT_UNIQUE_METHOD_NAMES ,這個方法會重新命名 為 MFTGetOutputAvailableType。 請參閱 建立混合式 DMO/MFT 物件

實作注意事項

如果 MFT 在內部儲存媒體類型,MFT 應該傳回媒體類型的複製品,而不是原始類型的指標。 否則,呼叫端可能會修改類型,並改變 MFT 的內部狀態。

規格需求

需求
最低支援的用戶端 Windows Vista [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2008 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 mftransform.h
程式庫 Mfuuid.lib

另請參閱

IMFTransform

媒體基礎轉換