AVStream 类驱动程序使用 分配器 以称为 帧的单位分配数据缓冲区。 帧是连续内存的一个区块,其大小是通过KSPIN_DESCRIPTOR_EX的AllocatorFraming成员由供应商指定的。
微型驱动程序通过 流指针 API 访问这些缓冲区;调用 KsPinGetLeadingEdgeStreamPointer 以获取流中的指针。
AVStream 客户端可以使用只读属性 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX获取有关引脚的框架要求的信息。 此属性返回一个类型为 KSALLOCATOR_FRAMING_EX 的结构,描述了对引脚的框架要求。
当数据不再使用时,AVStream 使用分配器释放缓冲区。
AVStream 提供默认分配器。 默认分配器根据微型驱动程序在KSPIN_DESCRIPTOR_EX结构的 AllocatorFraming 成员中提供的分配器要求分配池内存。
具有特定于设备的分配要求的供应商可以编写包含其自己的分配例程的微型驱动程序。 例如,如果驱动程序从 通用 DMA 缓冲区分配内存,则可以提供分配器。
若要提供分配器,请提供一个 KSALLOCATOR_DISPATCH 结构,该结构包含指向以下供应商提供的回调例程的指针:
在KSPIN_DISPATCH结构的分配器成员中提供指向此分配器调度结构的指针,该分配器将为其实例化帧的引脚。
在相应的KSPIN_DESCRIPTOR_EX结构的Dispatch成员中,提供一个指向该引脚调度结构的指针。 若要详细了解 AVStream 中的调度结构,请阅读 AVStream 调度表。
在运行时,图形管理器(例如 内核流代理 模块)处理分配器选择。 不保证图管理器会选择供应商提供的分配器。
仅当连接处于内核模式时,才会选择内核模式分配器。 此外,如果分配器要求和分配器功能不匹配,则可能会拒绝分配器。 如果未选择分配器,则永远不会调用 AVStrMiniInitializeAllocator 回调例程。
另请参阅 AVStream DMA 服务和流指针。