Asignadores de AVStream
El controlador de clase AVStream usa un asignador para asignar búferes de datos en unidades denominadas fotogramas. 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 stream Pointers API; llame a KsPinGetLeadingEdgeStreamPointer para adquirir un puntero en la secuencia.
Los clientes de AVStream pueden obtener información sobre los requisitos de marco 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 grupo 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, puede proporcionar un asignador si el controlador asigna memoria de un búfer DMA común.
Para proporcionar un asignador, proporcione una estructura de KSALLOCATOR_DISPATCH que contenga punteros a las siguientes rutinas de devolución de llamada proporcionadas por el proveedor:
Proporcione un puntero a esta estructura de distribución de asignador en el miembro Asignador de la estructura KSPIN_DISPATCH que describe el pin para el que este asignador creará instancias de fotogramas.
Proporcione un puntero a esta estructura de distribución de patillas 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, el asignador podría rechazarse si hay un error de coincidencia en los requisitos del asignador y las funcionalidades del asignador. Si el asignador no está seleccionado, nunca se llama a la rutina de devolución de llamada avStrMiniInitializeAllocator .
Consulte también AvStream DMA Services y Stream Pointers.