IMFTransform::GetOutputAvailableType 方法 (mftransform.h)

获取此媒体基础转换 (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。 但是,大多数 MFT 应实现此方法,除非支持的类型很简单,并且可以通过 MFTGetInfo 函数发现。

此方法可以返回 部分 媒体类型。 部分媒体类型包含格式的不完整说明,用于向调用方提供提示。 例如,分部类型可能仅包括主类型和子类型 GUID。 但是,在客户端在 MFT 上设置输入类型后,MFT 通常应返回至少一个完整的输出类型,无需进一步修改即可使用。 有关详细信息,请参阅 完整媒体类型和部分媒体类型

在 MFT 收到第一个输入示例之前,某些 MFT 无法提供输出类型的准确列表。 例如,MFT 可能需要读取第一个数据包标头才能推断出格式。 MFT 应按如下所示处理这种情况:

  1. 在 MFT 收到任何输入之前,它提供一个或多个可能生成的输出类型的列表。 例如,MPEG-2 解码器可能会返回描述 MPEG-2 main配置文件/main级别的媒体类型。
  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
Library Mfuuid.lib

另请参阅

IMFTransform

Media Foundation 转换