Escritura de minidrives AVStream para hardware
En avStrMiniDeviceStart proporcionado por el proveedor, los minidriveres AVStream que admiten hardware deben analizar primero la lista de recursos y, a continuación, llamar a IoConnectInterrupt para registrar una rutina de servicio de interrupción (ISR).
Se requieren pasos adicionales si el controlador admite el acceso directo a memoria (DMA). Si el controlador implementa DMA, consulte AVStream DMA Services.
Si más de una aplicación puede compilar un grafo de filtro simultáneamente mediante el dispositivo, debe tener cuidado para evitar interferencias entre gráficos. En concreto, si crea un grafo en una aplicación mediante el dispositivo, no debe interferir con una aplicación que use el dispositivo en un estado que no sea de detención.
Puede evitar interferencias cargando microcódigo después de que el gráfico pase a KSSTATE_ACQUIRE. Esto protegerá un grafo que se está ejecutando actualmente porque un nuevo grafo no pasará a KSSTATE_ACQUIRE mientras se está ejecutando otro grafo actualmente. Para recibir notificaciones de cambios de estado de anclaje, proporcione una rutina de devolución de llamada AVStrMiniPinSetDeviceState en la estructura de KSPIN_DISPATCH .
Sin embargo, para minimizar el tiempo de inicio del grafo, puede que desee cargar microcódigo antes de que el grafo alcance KSSTATE_ACQUIRE. En este caso, considere la posibilidad de cargar microcódigo en un subproceso en segundo plano de prioridad baja durante el arranque. Esta solución no interfiere con otras aplicaciones, reduce la hora de inicio del grafo y no debe prolongar el tiempo de arranque si se realiza de forma asincrónica.
Sin embargo, después del arranque, no vuelva a cargar el microcódigo ni manipule los registros de hardware hasta que el grafo alcance KSSTATE_ACQUIRE.
Para ver cómo la conexión de un nuevo grafo puede interferir con un grafo en ejecución, considere la posibilidad de usar un dispositivo de captura de vídeo que admita la codificación y la descodificación, pero solo realiza una de estas tareas a la vez. El minidriver expone un filtro de codificación y un filtro de descodificación.
Una aplicación crea un gráfico de filtros que contiene el filtro de codificación. El minidriver carga el microcódigo para la codificación en el momento de la conexión de patillas. El gráfico de filtros se inicia y el hardware comienza a codificar.
Mientras el hardware está codificando, otra aplicación coloca un filtro de descodificación en un gráfico de filtros. Cuando se conectan las patillas de descodificación, antes de que los patillas cambien de estado a KSSTATE_ACQUIRE, el minidriver intenta configurar el hardware para la descodificación. Esta reconfiguración interfiere con el gráfico de codificación activo actualmente y puede dar lugar a una inestabilidad del controlador.