动态格式更改
[与此页面关联的功能(DirectShow)是一项旧功能。 它已被 MediaPlayer、IMFMediaEngine取代,并在媒体基金会 音频/视频捕获。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft强烈建议新代码尽可能使用 MediaPlayer、IMFMediaEngine 和 Media Foundation 中的音频/视频捕获,而不是 DirectShow。 Microsoft建议重写使用旧 API 的现有代码,以尽可能使用新 API。]
当两个筛选器连接时,它们就媒体类型达成一致,该类型描述了上游筛选器将传送的数据的格式。 在大多数情况下,媒体类型在连接期间是固定的。 但是,DirectShow 确实为筛选器提供有限的支持来更改媒体类型。 筛选器切换媒体类型时,称为 动态格式更改。 如果要编写 DirectShow 筛选器,应注意动态格式更改的机制。 即使筛选器不支持此类更改,如果另一个筛选器请求新格式,它也应该正确响应。
DirectShow 为动态格式更改定义了多种不同的机制,具体取决于筛选器图的状态和所需的更改类型。
- 如果图形停止,引脚可以重新连接并重新谈判媒体类型。 有关详细信息,请参阅 重新连接引脚。
- 即使图形处于活动状态(正在运行或暂停),某些筛选器也可以重新连接引脚。 有关此机制的详细信息,请参阅 动态重新连接。
否则,如果图形处于活动状态,但相关筛选器不支持动态引脚重新连接,则有三种可能的机制可以更改格式:
- 如果输出引脚建议对其下游对等方进行格式更改,但前提是新格式不需要更大的缓冲区,则使用 QueryAccept (下游)。
- 当输入引脚向上游对等方提出格式更改时,将使用 QueryAccept (上游)。 新格式的大小可以相同,也可以更大。
- 当输出引脚向下游对等方提出格式更改时,将使用 ReceiveConnection,并且新格式需要更大的缓冲区。
相关主题
-
处理来自视频呈现器 的格式更改