Écriture de minidrivers AVStream pour le matériel
Dans avStrMiniDeviceStart fourni par le fournisseur, les minidrivers AVStream qui prennent en charge le matériel doivent d’abord analyser la liste des ressources, puis appeler IoConnectInterrupt pour inscrire une routine de service d’interruption (ISR).
Des étapes supplémentaires sont nécessaires si votre pilote prend en charge l’accès direct à la mémoire (DMA). Si votre pilote implémente DMA, consultez Services DMA AVStream.
Si plusieurs applications peuvent créer un graphique de filtre simultanément à l’aide de votre appareil, vous devez veiller à éviter toute interférence entre les graphiques. Plus précisément, si vous construisez un graphique dans une application à l’aide de l’appareil, vous ne devez pas interférer avec une application qui utilise l’appareil dans un état non stop.
Vous pouvez éviter les interférences en chargeant le microcode après la transition du graphique dans KSSTATE_ACQUIRE. Cela protégera un graphe en cours d’exécution, car un nouveau graphique ne passera pas en KSSTATE_ACQUIRE pendant qu’un autre graphique est en cours d’exécution. Pour recevoir une notification des modifications d’état d’épingle, fournissez une routine de rappel AVStrMiniPinSetDeviceState dans la structure KSPIN_DISPATCH .
Toutefois, pour réduire le temps de démarrage du graphique, vous pouvez charger le microcode avant que le graphique n’atteigne KSSTATE_ACQUIRE. Dans ce cas, envisagez de charger un microcode dans un thread d’arrière-plan de faible priorité pendant le démarrage. Cette solution n’interfère pas avec d’autres applications, réduit l’heure de début du graphique et ne doit pas allonger le temps de démarrage si elle est effectuée de manière asynchrone.
Toutefois, après le démarrage, ne rechargez pas le microcode ou ne manipulez pas les registres matériels jusqu’à ce que le graphique atteigne KSSTATE_ACQUIRE.
Pour voir comment la connexion d’un nouveau graphique peut interférer avec un graphe en cours d’exécution, envisagez un appareil de capture vidéo qui prend en charge l’encodage et le décodage, mais n’effectue qu’une de ces tâches à la fois. Le minidriver expose un filtre d’encodage et un filtre de décodage.
Une application génère un graphique de filtre contenant le filtre d’encodage. Le minidriver charge le microcode pour l’encodage au moment de la connexion d’épingle. Le graphique de filtre démarre et le matériel commence l’encodage.
Pendant l’encodage du matériel, une autre application place un filtre de décodage dans un graphique de filtre. Lorsque les broches de décodage sont connectées, avant que les broches ne changent d’état en KSSTATE_ACQUIRE, le minidriver tente de configurer le matériel pour le décodage. Cette reconfiguration interfère avec le graphe d’encodage actif et peut entraîner une instabilité du pilote.