Table of contents
Collapse the table of content
Expand the table of content

AVStream Allocators

Last Updated: 8/26/2016

The AVStream class driver uses an Allocator to allocate data buffers in units called frames. A frame is a chunk of continuous memory, the size of which is vendor-specified through the AllocatorFraming member of KSPIN_DESCRIPTOR_EX.

Minidrivers access these buffers through the Stream Pointers API; call KsPinGetLeadingEdgeStreamPointer to acquire a pointer into the stream.

AVStream clients can obtain information about the framing requirements of a pin by using the read-only property KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX. This property returns a structure of type KSALLOCATOR_FRAMING_EX that describe the framing requirements for the pin.

When data is no longer in use, AVStream uses the allocator to free the buffer.

AVStream provides a default allocator. The default allocator allocates pool memory based on the allocator requirements that the minidriver provides in the AllocatorFraming member of the KSPIN_DESCRIPTOR_EX structure.

A vendor with device-specific allocation requirements can write a minidriver that includes its own allocation routines. For example, you might provide an allocator if your driver allocates memory from a common DMA buffer.

To provide an allocator, supply a KSALLOCATOR_DISPATCH structure that contains pointers to the following vendor-supplied callback routines:

Provide a pointer to this allocator dispatch structure in the Allocator member of the KSPIN_DISPATCH structure describing the pin for which this allocator will instantiate frames.

Supply a pointer to this pin dispatch structure in the Dispatch member of the corresponding KSPIN_DESCRIPTOR_EX structure. To learn more about dispatch structures in AVStream, read AVStream Dispatch Tables.

At run time, the graph manager (for example, the Kernel Streaming Proxy module) handles allocator selection. A vendor-supplied allocator is not guaranteed to be selected by the graph manager.

A kernel-mode allocator is only chosen if the connection is in kernel mode. In addition, your allocator could be rejected if there is a mismatch in allocator requirements and your allocator's capabilities. If your allocator is not selected, your AVStrMiniInitializeAllocator callback routine is never called.

Also see AVStream DMA Services and Stream Pointers.

Send comments about this topic to Microsoft

© 2017 Microsoft