CTransformFilter 类

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

ctransformfilter 类层次结构

CTransformFilter 是用于实现转换筛选器的基类。 此类旨在实现具有一个输入引脚和一个输出引脚的转换筛选器。 它为输入引脚和输出引脚使用单独的分配器。 若要创建就地处理数据的筛选器,请使用 CTransInPlaceFilter 类。

此筛选器将 CTransformInputPin 类用于其输入引脚,将 CTransformOutputPin 类用于其输出引脚。 通常,不需要重写这些引脚类。 大多数引脚方法在 类上 CTransformFilter 调用相应的方法,因此可以在必要时重写筛选器方法。 筛选器在 CTransformFilter::GetPin 方法中创建两个引脚。 如果确实重写了引脚类,则必须重写 GetPin 才能创建自定义图钉。

若要使用此类,请从 CTransformFilter 派生一个新类,并实现以下方法:

根据筛选器的要求,可能还需要重写其他方法。

媒体类型

此筛选器的输入引脚不推荐任何媒体类型;它依赖于上游筛选器来建议连接的媒体类型。 此设计的原因是在大多数情况下,上游筛选器可以提供有关格式的详细信息。 例如,对于视频格式,上游筛选器知道视频尺寸和帧速率,而转换筛选器无法确定此信息。 如果要更改此行为,请重写输入引脚的 GetMediaType 方法。 当上游筛选器建议媒体类型时,输入引脚 (纯虚拟) 调用筛选器的 CheckInputType 方法。

在连接输入引脚之前,输出引脚会拒绝所有连接,并且不会返回任何首选媒体类型。 连接输入引脚后,输出引脚通过调用筛选器的 GetMediaType 方法返回首选类型的列表。 它通过筛选器的 CheckTransform 方法检查连接的输出类型。 (这两种方法都是纯 virtual.) 通常,输入类型将部分确定可接受的输出类型。

根据筛选器,可能需要注册一些筛选器支持的媒体类型,以便 筛选器映射器 对象可以找到筛选器。 有关详细信息,请参阅 如何注册 DirectShow 筛选器

流式处理

此类不会对输出数据进行排队。 每个输出示例在 IMemInputPin::Receive 方法中传递。 Receive 方法调用筛选器的 Transform 方法 (纯虚拟) 来处理数据。

有关使用此类的详细信息,请参阅 编写转换筛选器

受保护的成员变量 说明
m_bEOSDelivered 指示筛选器是否已发送流结束通知的标志。
m_bSampleSkipped 指示是否删除了最新样本的标志。
m_bQualityChanged 指示质量是否已更改的标志。
m_csFilter 保护筛选器状态的关键部分。
m_csReceive 保护流状态的关键部分。
m_pInput 指向输入引脚的指针。
m_pOutput 指向输出引脚的指针。
公共方法 说明
CTransformFilter 构造函数方法。
~ CTransformFilter 析构函数方法。
GetPinCount 检索筛选器上的引脚数。 虚拟。
GetPin 检索图钉。 虚拟。
转换 转换输入样本以生成输出样本。 虚拟。
StartStreaming 当筛选器切换到暂停状态时调用。 虚拟。
停止流式处理 当筛选器切换到停止状态时调用。 虚拟。
AlterQuality 通知筛选器请求质量更改。 虚拟。
SetMediaType 在筛选器的其中一个引脚上设置媒体类型时调用。 虚拟。
CheckConnect 确定引脚连接是否合适。 虚拟。
BreakConnect 从连接释放引脚。 虚拟。
CompleteConnect 完成引脚连接。 虚拟。
接收 接收媒体样本,对其进行处理,并将输出样本传送到下游筛选器。 虚拟。
InitializeOutputSample 检索新的输出示例并对其进行初始化。
EndOfStream 通知筛选器输入引脚中不需要其他数据。 虚拟。
BeginFlush 开始刷新操作。 虚拟。
EndFlush 结束刷新操作。 虚拟。
NewSegment 通知筛选器,在此调用后收到的媒体样本被分组为段。 虚拟。
纯虚拟方法 说明
CheckInputType 检查指定的媒体类型是否可用于输入。
CheckTransform 检查输入媒体类型是否与输出媒体类型兼容。
DecideBufferSize 设置输出引脚的缓冲区要求。
GetMediaType 检索输出引脚的首选媒体类型。
IMediaFilter 方法 说明
停止 停止筛选器。
暂停 暂停筛选器。
IBaseFilter 方法 说明
FindPin 检索具有指定标识符的引脚。

要求

要求
标头
Transfrm.h (包括 Streams.h)

Strmbase.lib (零售版本) ;
Strmbasd.lib (调试生成)