IKsDataTypeHandler 接口 (ksproxy.h)
IKsDataTypeHandler 接口提供了执行媒体样本的可选预处理和后处理的方法。 此接口还可以返回处理所需的额外流标头信息的大小,并且可以确定特定媒体类型是否在给定的内核流式处理数据范围内。
此接口的 IID IID_IKsDataTypeHandler。
遗产
IKsDataTypeHandler 接口继承自 IUnknown 接口。
方法
IKsDataTypeHandler 接口具有这些方法。
IKsDataTypeHandler::KsCompleteIoOperation KsCompleteIoOperation 方法清理扩展标头并完成输入和输出(I/O)作。 |
IKsDataTypeHandler::KsIsMediaTypeInRanges KsIsMediaTypeInRanges 方法验证媒体类型是否在提供的数据范围内。 |
IKsDataTypeHandler::KsPrepareIoOperation KsPrepareIoOperation 方法初始化扩展标头,并为 I/O作准备媒体示例。 |
IKsDataTypeHandler::KsQueryExtendedSize KsQueryExtendedSize 方法检索输入和输出作所需的扩展标头信息。 |
IKsDataTypeHandler::KsSetMediaType KsSetMediaType 方法设置数据类型处理程序的媒体类型。 |
言论
为了保持代理数据类型中性,可以加载可选数据类型处理程序,以在传入或传出内核模式筛选器时按摩数据流。 应实现数据类型处理程序作为 COM 服务器,至少支持 IKsDataTypeHandler 接口。 数据类型处理程序可以选择性地支持 IKsDataTypeCompletion 接口。
数据类型处理程序通常在引脚连接过程中加载,并在连接断开时卸载。 但是,出于其他目的,有时会短暂加载数据类型处理程序。 例如,如果应用程序使用 DirectShow 的 IAMStreamConfig::SetFormat 方法,则应用程序可能使用数据类型处理程序来完成发送到该方法的部分媒体类型参数。
代理使用媒体类型的 GUID 作为 COM 服务器类来确定要加载的数据类型处理程序。 只要数据类型处理程序在代理查找的预期 GUID 类下注册为 COM 服务器,则加载数据类型处理程序。 主要格式类型首先用于尝试打开数据类型处理程序 COM 服务器,然后在打开数据类型处理程序失败时使用主要格式类型,后跟子类型和格式说明符。 如果尝试成功,则代理查询 IKsDataTypeHandler 接口,并调用接口的 KsSetMediaType 方法来建立与处理程序一起使用的当前媒体类型,以防处理程序支持许多类型。 如果未找到处理程序,则代理假定在将流封送到内核模式或从内核模式封送流或执行任何其他任务时都没有必要。
在数据类型处理程序通过 CoCreateInstance创建请求时,服务器始终呈现用于创建 COM 对象的外部 IUnknown。 此 IUnknown 是加载此处理程序的 pin 对象上的接口。 IUnknown 接口指针可用于从引脚查询信息或接口,例如 IKsPin 或 IKsControl 接口,尽管加载处理程序时可能尚未创建内核模式引脚。 不应通过获取任何接口将引用保留在外部对象上,因为这将导致循环引用计数。 使用没有引用计数的接口是可以接受的,因为外部对象拥有处理程序,并且根据定义销毁外部对象的引用计数达到零。
有关 IAMStreamConfig::SetFormat 和 CoCreateInstance的详细信息,请参阅 Microsoft Windows SDK 文档。
要求
要求 | 价值 |
---|---|
目标平台 | 窗户 |
标头 | ksproxy.h |