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 方法检索输入和输出 (I/O) 操作所需的扩展标头信息。 |
IKsDataTypeHandler::KsSetMediaType KsSetMediaType 方法设置数据类型处理程序的媒体类型。 |
注解
为了保持代理数据类型中性,可以加载可选的数据类型处理程序,以便在数据流传入或传入内核模式筛选器时对其进行按摩。 应将数据类型处理程序实现为至少支持 IKsDataTypeHandler 接口的 COM 服务器。 数据类型处理程序可以选择性地支持 IKsDataTypeCompletion 接口。
数据类型处理程序通常在固定连接过程中加载,并在连接断开时卸载。 但是,数据类型处理程序有时会出于其他目的短暂加载。 例如,如果应用程序使用 DirectShow 的 IAMStreamConfig::SetFormat 方法,则应用程序可能会使用数据类型处理程序来完成发送到方法的部分媒体类型参数。
代理使用媒体类型的 GUID 作为 COM 服务器类来确定要加载的数据类型处理程序。 只要数据类型处理程序在代理查找的预期 GUID 类下注册为 COM 服务器,则加载数据类型处理程序。 主要格式类型首先用于尝试打开数据类型处理程序 COM 服务器,如果打开数据类型处理程序使用主格式类型失败,则使用子类型和格式说明符。 如果任何尝试成功,则代理会查询 IKsDataTypeHandler 接口,并调用接口的 KsSetMediaType 方法,以建立当前与处理程序一起使用的媒体类型,以防处理程序支持多种类型。 如果未找到处理程序,则代理假定在将流封送至内核模式或从内核模式封送流或执行任何其他必要的任务时都没有必要。
在数据类型处理程序通过 CoCreateInstance 创建请求时,始终向服务器提供用于创建 COM 对象的外部 IUnknown 。 此 IUnknown 是加载此处理程序的固定对象上的接口。 IUnknown 接口指针可用于从引脚查询信息或接口,例如 IKsPin 或 IKsControl 接口,尽管在加载处理程序时可能尚未创建内核模式引脚。 通过获取任何接口,不应在外部对象上留下任何引用,因为这将导致循环引用计数。 使用没有引用计数的接口是可以接受的,因为外部对象拥有处理程序,并且根据定义,当外部对象的引用计数达到零时会销毁。
有关 IAMStreamConfig::SetFormat 和 CoCreateInstance 的详细信息,请参阅Microsoft Windows SDK文档。
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | ksproxy.h |