各模块功能简介 KSPROXY: KSPROXY 提供了一些COM接口来对核心组件标准属性集进行访问 KSPROXY的主要作用就是为了在应用程序和硬件之间传送数据流,其运行在非核心模式。当应用程序有请求发给KSPROXY 时,KSPROXY将其转成IOCTL控制码传递给运行在核心模式的WDM驱;动程序。在DIRECTSHOW中,KSPROXY为音频和视频设备生成一个CAPTURE FILTER,向DIRECTSHOW的下游过滤器提供若干个引脚(PIN),所以用户可以像操作其他过滤器一样来操作KSPROXY生成的过滤器。针对不同的过滤器管脚(Filter pins)或不同的Directshow接口方法,KSPROXY提供了几种不同的属性集。下面是几种属性集的列表 属性集 说明 KSPROPSETID_Pin 提供引脚和可以创建的实例的信息,以及每个引脚数据流和兼容数据类型信息 KSPROPSETID_Topology 反映DIRECTSHOW内部连接信息。当企图传递状态变化时,表示一个过滤器的拓扑状态。 KSPROPSETID_MediaSeeking 对应ImediaSeeking接口的属性,反映搜索能力。 KSPROPSETID_Stream 用来设置或者访问每个KS PIN对时钟的支持。也能用于询问或者设置每个KS输入PIN对分配器(Allocator)的支持。 KSPROPSETID_Connection 反映了状态,输入分配器大小,数据格式集,建议的数据格式等连接信息 WDM 流媒体类驱动程序是一个为流媒体和打上时间戳的媒体数据量身定制的类。通常被用来处理系统资源和存储单元分配,适用于视频和音频驱动开发,在微软提供的类 驱动程序和设备制造商开发的小驱动程序之间提供接口。当接到上层驱动程序的数据访问请求时,它负责将该请求传递到设备小驱动程序。它还负责处理多处理器和 中断同步。当流媒体类驱动程序和设备小驱动程序都初始化以后,小驱动程序运行在 passive模式,这时流媒体类驱动程序可以访问小驱动程序所有流媒体 设备小驱动程序是不可重入的。流媒体小驱动程序和流媒体类驱动程序互相依赖,共同协作对WDM流媒体设备的访问。但是流媒体小驱动程序自身不分配一个设备 实例,这由流媒体类驱动程序来完成。 流媒体类驱动程序提供了下列函数 StreamClassAbortOutstandingRequests StreamClassCallAtNewPriority StreamClassCompleteRequestAndMarkQueueReady StreamClassDeviceNotification StreamClassGetDmaBuffer StreamClassGetNextEvent StreamClassGetPhysicalAddress StreamClassQueryMasterClock StreamClassQueryMasterClockSync StreamClassReadWriteConfig StreamClassReenumerateStreams StreamClassRegisterMinidriver StreamClassRegisterFilterWithNoKSPins StreamClassScheduleTimer StreamClassStreamNotification USBCAMD 为了方便开发者开发驱动程序,微软提供了USB CAMD。USBCAMD用来操作isochronous流媒体,允许在调用返回之前解析视频数据并加以处理。 USBCAMD处理所有的同步,启动,停止,与在USB总线上保持ISO流媒体数据有关的错误恢复事件 USBCAMD有以下几个主要函数 DriverEntry AdapterReceivePacket ControlVendorCommand SelectAlternateInterface GetRegistryKeyValue USB摄像头小驱动程序(USB minicam driver) 摄像头小驱动程序判断数据是否有效或者是否是本帧图像的一部分或者是下一帧图像的一部分,这个判断结果会被传递给USBCAMD驱动程序。 设备制造商定义的功能比如属性集由摄像头小驱动程序来处理,小驱动程序还可以用来处理额外的非ISO流媒体数据比如传递一幅图像。 USBD负责对USB总线的访问控制,向下传递应用程序和小驱动程序的请求,向上传递数据 为摄像头提供一个设备驱动只需要在流媒体类(streaming class driver)基础上自行开发一个流媒体设备驱动程序,或者利用USBCAMD驱动程序开发一个minicam driver即可。 |