动态格式更改

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

当两个筛选器连接时,它们会就媒体类型达成一致,该类型描述了上游筛选器将提供的数据的格式。 在大多数情况下,媒体类型在连接期间是固定的。 但是,DirectShow 确实为筛选器提供了有限的支持来更改媒体类型。 当筛选器切换媒体类型时,它被称为 动态格式更改。 如果要编写 DirectShow 筛选器,则应了解动态格式更改的机制。 即使筛选器不支持此类更改,当另一个筛选器请求新格式时,它也应该正确响应。

DirectShow 为动态格式更改定义了多种不同的机制,具体取决于筛选器图的状态和所需的更改类型。

  • 如果图形停止,引脚可以重新连接并重新协商媒体类型。 有关详细信息,请参阅 重新连接 Pin
  • 即使图形处于活动状态 (运行或暂停) ,某些筛选器也可以重新连接引脚。 有关此机制的详细信息,请参阅 动态重新连接

否则,如果图形处于活动状态,但相关筛选器不支持动态引脚重新连接,则有三种可能的机制可用于更改格式:

  • 如果输出引脚建议对其下游对等方进行格式更改,但前提是新格式不需要更大的缓冲区,则使用 QueryAccept (下游) 。
  • 当输入引脚建议对其上游对等方进行格式更改时,将使用 QueryAccept (上游) 。 新格式的大小可以相同,也可以更大。
  • 当输出引脚建议对其下游对等方进行格式更改,并且新格式需要更大的缓冲区时,将使用 ReceiveConnection

处理视频呈现器中的格式更改