Compartir a través de


Asignadores de AVStream

El controlador de clase AVStream usa un asignador para asignar búferes de datos en unidades denominadas marcos. Un marco es un fragmento de memoria continua, cuyo tamaño se especifica por el proveedor a través del miembro AllocatorFraming de KSPIN_DESCRIPTOR_EX.

Los minicontroladores acceden a estos búferes a través de la API de Stream Pointers; llame a KsPinGetLeadingEdgeStreamPointer para adquirir un puntero en el flujo.

Los clientes de AVStream pueden obtener información sobre los requisitos de enmarcado de un pin mediante la propiedad de solo lectura KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX. Esta propiedad devuelve una estructura de tipo KSALLOCATOR_FRAMING_EX que describe los requisitos de marco del pin.

Cuando los datos ya no están en uso, AVStream usa el asignador para liberar el búfer.

AVStream proporciona un asignador predeterminado. El asignador predeterminado asigna memoria del pool en función de los requisitos del asignador que proporciona el minidriver en el miembro AllocatorFraming de la estructura KSPIN_DESCRIPTOR_EX.

Un proveedor con requisitos de asignación específicos del dispositivo puede escribir un minidriver que incluya sus propias rutinas de asignación. Por ejemplo, podría proporcionar un gestor de asignación si el controlador asigna memoria de un búfer DMA común.

Para proporcionar un asignador, proporcione una estructura KSALLOCATOR_DISPATCH que contenga punteros a las siguientes routines de callback proporcionadas por el proveedor:

Proporcione un puntero a esta estructura de envío del asignador en el miembro Asignador de la estructura KSPIN_DISPATCH que describe el pin para el que este asignador instanciará fotogramas.

Proporcione un puntero a esta estructura de envío de pines en el miembro Dispatch de la estructura KSPIN_DESCRIPTOR_EX correspondiente. Para obtener más información sobre las estructuras de distribución en AVStream, lea Tablas de distribución de AVStream.

En tiempo de ejecución, el administrador de grafos, por ejemplo el módulo Proxy de Streaming de Kernel, controla la selección del asignador. No se garantiza que el administrador de grafos seleccione un asignador proporcionado por el proveedor.

Solo se elige un asignador en modo kernel si la conexión está en modo kernel. Además, su distribuidor podría ser rechazado si hay una discrepancia entre los requisitos del distribuidor y sus capacidades. Si no se selecciona su asignador, nunca se llama a su rutina de devolución de llamada AVStrMiniInitializeAllocator.

Consulte también AVStream DMA Services y Stream Pointers.