CTransformFilter 类
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
类 CTransformFilter
是用于实现转换筛选器的基类。 此类旨在实现具有一个输入引脚和一个输出引脚的转换筛选器。 它为输入引脚和输出引脚使用单独的分配器。 若要创建就地处理数据的筛选器,请使用 CTransInPlaceFilter 类。
此筛选器将 CTransformInputPin 类用于其输入引脚,将 CTransformOutputPin 类用于其输出引脚。 通常,不需要重写这些引脚类。 大多数引脚方法在 类上 CTransformFilter
调用相应的方法,因此可以在必要时重写筛选器方法。 筛选器在 CTransformFilter::GetPin 方法中创建两个引脚。 如果确实重写了引脚类,则必须重写 GetPin 才能创建自定义图钉。
若要使用此类,请从 CTransformFilter
派生一个新类,并实现以下方法:
- CTransformFilter::CheckInputType
- CTransformFilter::CheckTransform
- CTransformFilter::D ecideBufferSize
- CTransformFilter::GetMediaType
- CTransformFilter::Transform
根据筛选器的要求,可能还需要重写其他方法。
媒体类型
此筛选器的输入引脚不推荐任何媒体类型;它依赖于上游筛选器来建议连接的媒体类型。 此设计的原因是在大多数情况下,上游筛选器可以提供有关格式的详细信息。 例如,对于视频格式,上游筛选器知道视频尺寸和帧速率,而转换筛选器无法确定此信息。 如果要更改此行为,请重写输入引脚的 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 | 检索具有指定标识符的引脚。 |
要求
要求 | 值 |
---|---|
标头 |
|
库 |
|