Procesamiento centrado en patillas

Al escribir un minidriver AVStream, proporciona filtros que usan uno de los dos paradigmas de procesamiento: procesamiento centrado en patillas o procesamiento centrado en filtros.

El procesamiento centrado en patillas significa que AVStream llama a la rutina de distribución del proceso de anclaje del minidriver cuando llegan nuevos fotogramas a la cola de patillas.

El procesamiento centrado en filtros significa que AVStream llama a la rutina de distribución del proceso de filtro del minidriver cuando hay fotogramas de datos disponibles en cada patilla de instancia. Tenga en cuenta que estas definiciones especifican el comportamiento predeterminado; los minidrivers pueden modificar el comportamiento predeterminado estableciendo marcas en la estructura KSPIN_DESCRIPTOR_EX .

En general, los filtros de software usan el procesamiento centrado en filtros y los filtros de hardware usan el procesamiento centrado en patillas. Por ejemplo, el hardware que transforma o representa los datos podría enrutar los datos en un filtro centrado en patillas. Hay casos poco frecuentes en los que estos roles se pueden invertir.

Para proporcionar un filtro centrado en patillas, el minidriver proporciona un puntero a una rutina de devolución de llamada AVStrMiniPinProcess en cada estructura KSPIN_DISPATCH ; no proporcione un envío de procesamiento en la estructura KSFILTER_DISPATCH .

Si el minidriver no modifica la configuración de marca en la estructura de KSPIN_DESCRIPTOR_EX, AVStream llama a la rutina de devolución de llamada AVStrMiniPinProcess proporcionada por el proveedor en tres situaciones:

  • La patilla pasa al estado de procesamiento mínimo. Los fotogramas ya deben existir en la cola y la patilla debe pasar de menos del estado de procesamiento mínimo a al menos el estado de procesamiento mínimo.

  • Llegan nuevos marcos. La patilla debe estar en al menos el estado de procesamiento mínimo y no debe haber fotogramas en el borde inicial o delante.

  • Minidriver llama explícitamente a KsPinAttemptProcessing.

De forma predeterminada, pause es el estado de procesamiento mínimo.

Además, AVStream no llama al envío del proceso de anclaje si la puerta AND del pin está cerrada. Si usa las rutinas KSGATEXxx para agregar entradas adicionales a la puerta AND del pin, por ejemplo, no se llamará al envío del proceso.

Cuando AVStream llama a AVStrMiniPinProcess, proporciona un puntero al objeto pin que tiene datos disponibles. Después, el envío de procesamiento del minidriver puede adquirir un puntero de borde inicial llamando a KsPinGetLeadingEdgeStreamPointer. A continuación, los minicontroladores manipulan los datos de flujo mediante la API de puntero de flujo .

Los minidrivers que usan el procesamiento centrado en patillas pueden modificarse cuando AVStream llama al envío de AVStrMiniPinProcess estableciendo marcas en la estructura KSPIN_DESCRIPTOR_EX pertinente. Las descripciones de marcas de la página de referencia de KSPIN_DESCRIPTOR_EX son especialmente relevantes para los proveedores que implementan filtros centrados en patillas.

Es posible que se produzca un error en los intentos de procesamiento si el minidriver mantiene la exclusión mutua de procesamiento a través de KsPinAcquireProcessingMutex. También pueden surgir problemas si el minidriver manipula directamente una puerta mediante las llamadas KSGATE* .

El controlador de ejemplo de hardware simulado de AVStream (AVSHwS) en los ejemplos del Kit de controladores de Windows es un controlador de captura centrado en patillas para una pieza simulada de hardware. En el ejemplo de Avshws se muestra cómo implementar DMA a través de AVStream.