MF_TOPOLOGY_ENUMERATE_SOURCE_TYPES 属性

指定拓扑加载器是否枚举媒体源提供的媒体类型。

数据类型

UINT32

使用以下值之一。

含义
FALSE
不枚举源媒体类型。
TRUE
枚举源媒体类型。

 

Get/set

若要获取此属性,请调用 IMFAttributes::GetUINT32

若要设置此属性,请调用 IMFAttributes::SetUINT32

适用于

IMFTopology

备注

媒体源上的每个流都可以提供多个媒体类型。 系统通过流描述符上的 IMFMediaTypeHandler 接口枚举类型列表。

拓扑加载器尝试媒体源的媒体类型的顺序由以下两个属性控制:

如果 MF_TOPOLOGY_ENUMERATE_SOURCE_TYPES 属性为 FALSE 或未设置,拓扑加载器将使用流的当前媒体类型。 不会枚举可能的类型列表。 如果当前媒体类型与下游拓扑节点不兼容,并且找不到解码器/转换器组合,拓扑解析就会失败。

如果 MF_TOPOLOGY_ENUMERATE_SOURCE_TYPES 属性为 TRUE,拓扑加载器将枚举源的媒体类型,直到找到兼容类型。 此时,操作的确切顺序取决于源节点上的 MF_TOPONODE_CONNECT_METHOD 属性是否包括 MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES 标志。

如果 MF_TOPOLOGY_ENUMERATE_SOURCE_TYPES 为 TRUE 并且设置了 MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES 标志,则拓扑加载器会先耗尽每个媒体类型,然后再移动到下一个媒体类型,如下所示:

foreach media type T
    connect directly using T
    if failed, connect with converters using T
    if failed, connect with decoders using T

如果 MF_TOPOLOGY_ENUMERATE_SOURCE_TYPES 为 TRUE 但未设置 MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES,拓扑加载器会尝试与每个媒体类型建立直接连接,然后使用转换器尝试每个媒体类型,最后使用解码器尝试每个媒体类型:

foreach media type T
    connect directly using T
if failed,
    foreach media type T
        connect with converters using T
if failed
    foreach media type T
        connect with decoders using T

如果 MF_TOPOLOGY_ENUMERATE_SOURCE_TYPES 为 FALSE,将忽略 MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES 标志。

MF_TOPOLOGY_ENUMERATE_SOURCE_TYPES 的默认值为 FALSE,以便与现有应用程序兼容。

此属性的 GUID 常量从 mfuuid.lib 导出。

示例

下面是说明 MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES 标志的示例。 假设拓扑将 MF_TOPOLOGY_ENUMERATE_SOURCE_TYPES 属性设置为 TRUE

媒体源提供以下类型:

  • T1、T2、T3

媒体接收器接受以下类型:

  • T3、T4

案例 1:设置了 MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES 标志。

  1. 拓扑加载器尝试与 T1 建立直接连接。 接收器拒绝 T1。
  2. 拓扑加载器插入接受 T1 并输出 T4 的解码器。 接收器接受 T4。
  3. 最终拓扑包含:媒体源 → 解码器 → 媒体接收器。

案例 2:未设置该标志。

  1. 拓扑加载器尝试与 T1 建立直接连接。 接收器拒绝 T1。
  2. 拓扑加载器尝试与 T2 建立直接连接。 接收器拒绝 T2。
  3. 拓扑加载器尝试与 T3 建立直接连接。 接收器接受 T3。
  4. 最终拓扑包含:媒体源 → 媒体接收器。

要求

要求
最低受支持的客户端
Windows 7 [仅限桌面应用]
最低受支持的服务器
Windows Server 2008 R2 [仅限桌面应用]
标头
Mfidl.h

另请参阅

媒体基础属性的字母顺序列表

拓扑属性