获取此媒体基础转换 (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。 但是,大多数 MFT 应实现此方法,除非支持的类型很简单,并且可以通过 MFTGetInfo 函数发现。
此方法可以返回 部分 媒体类型。 部分媒体类型包含格式的不完整说明,用于向调用方提供提示。 例如,分部类型可能仅包括主类型和子类型 GUID。 但是,在客户端在 MFT 上设置输入类型后,MFT 通常应返回至少一个完整的输出类型,无需进一步修改即可使用。 有关详细信息,请参阅 完整媒体类型和部分媒体类型。
在 MFT 收到第一个输入示例之前,某些 MFT 无法提供输出类型的准确列表。 例如,MFT 可能需要读取第一个数据包标头才能推断出格式。 MFT 应按如下所示处理这种情况:
- 在 MFT 收到任何输入之前,它提供一个或多个可能生成的输出类型的列表。 例如,MPEG-2 解码器可能会返回描述 MPEG-2 main配置文件/main级别的媒体类型。
- 客户端通常 (第一个) 选择其中一种类型,并在输出流上设置它。
- 客户端通过调用 IMFTransform::P rocessInput 提供第一个输入示例。
- 如果输出类型不符合输入数据,则转换将在 ProcessOutput 方法中发出格式更改的信号。 有关格式更改的详细信息,请参阅 IMFTransform::P rocessOutput。
- 再次调用 GetOutputAvailableType 。 此时,方法应返回反映输入数据的类型的更新列表。
- 客户端从此列表中选择新的输出类型,并调用 SetOutputType。
实现说明
如果 MFT 在内部存储媒体类型,则 MFT 应返回媒体类型的克隆,而不是指向原始类型的指针。 否则,调用方可能会修改类型并更改 MFT 的内部状态。要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2008 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | mftransform.h |
Library | Mfuuid.lib |