Introducción a los punteros de flujo
En el modelo de clase de flujo anterior, el minidriver es responsable de mantener sus propias colas de bloque de solicitud de flujo de datos (SRB). AVStream proporciona esta funcionalidad a través de la abstracción del puntero de flujo. Un puntero de secuencia es una referencia a una trama de datos AVStream específica.
Minidrivers que usan el procesamiento centrado en patillas (la mayoría de los controladores de hardware), usan punteros de flujo para administrar colas de patillas. Cada patilla tiene una cola independiente de búferes de datos. Cuando llega un paquete de datos al pin (una solicitud de lectura o escritura), AVStream agrega el paquete a la cola y podría llamar al envío del proceso del pin.
Los minicontroladores que usan el procesamiento centrado en filtros no deben usar punteros de flujo directamente. Consulte Procesamiento centrado en filtros para obtener más información.
De forma predeterminada, cada cola tiene un puntero de flujo de borde inicial. Opcionalmente, puede tener un puntero de flujo perimetral final si se especifica la marca de borde final. El minidriver puede crear nuevos punteros de secuencia llamando a KsStreamPointerClone.
Solo puede mover un puntero de secuencia en una dirección: a un fotograma más reciente. Esto se denomina avanzar el puntero de flujo.
Avanzar un puntero de flujo
Cuando se avanza un puntero de secuencia, se mueve a un marco más reciente o se avanza un cierto número de bytes dentro de su marco actual. Por ejemplo, el minidriver puede avanzar un puntero de flujo desde la primera llegada de fotogramas a la segunda llegada de fotogramas.
Para avanzar un puntero de secuencia, un filtro centrado en patillas puede llamar a KsStreamPointerAdvance o KsStreamPointerUnlock con el parámetro Eject establecido en TRUE.
Recuentos de referencias de fotogramas
Los fotogramas con punteros de secuencia que apuntan a ellos son referencias, como los marcos que se encuentran en la ventana entre los bordes inicial y final.
Cuando un minidriver finaliza con un puntero de secuencia, opcionalmente puede llamar a KsStreamPointerSetStatusCode para especificar un código de error con el que completar el paquete de solicitud de E/S especificado (IRP). A continuación, el minidriver debe llamar a KsStreamPointerDelete. A continuación, AVStream disminuye el recuento de referencias en el marco al que se ha hecho referencia anteriormente al puntero de flujo eliminado. No se pueden eliminar los punteros de flujo de borde inicial y final.