Mutex d’appareil dans AVStream

Utilisez le mutex d’appareil pour synchroniser les objets de la hiérarchie de l’appareil vers les filtres. Chaque appareil AVStream a un seul mutex d’appareil associé. La création et la destruction des fabriques de filtres et des filtres sont synchronisées avec ce mutex. Certaines opérations Plug-and-Play et de gestion de l’alimentation sont également synchronisées avec ce mutex. Le minidriver se concentre sur deux problèmes main en ce qui concerne le mutex de l’appareil.

La hiérarchie d’objets est garantie pour être stable uniquement de l’appareil jusqu’aux filtres individuels si le mutex de l’appareil est conservé. Par conséquent, le minidriver doit obtenir le mutex de l’appareil avant de créer manuellement des fabriques de filtres en appelant KsCreateFilterFactory. Le minidriver doit également obtenir le mutex de l’appareil avant de parcourir la hiérarchie d’objets en appelant les fonctions KsXxxGetFirstChildXxx et KsXxxGetNextSiblingXxx .

AVStream conserve le mutex de l’appareil pour le compte du minidriver lorsqu’il reçoit les demandes suivantes :

Il est important de noter que le mutex de l’appareil ne peut pas être obtenu de manière récursive. Considérez l'exemple suivant. AVStream reçoit une notification de veille. Comme décrit ci-dessus, il prend le mutex de l’appareil pour le compte du minidriver. Si AVStream appelle ensuite une routine de rappel fournie par minidriver dans le contexte du thread A, le minidriver ne doit pas tenter par la suite d’obtenir le mutex de l’appareil dans le thread A. Cela entraîne l’interblocage du thread A avec lui-même.

AVStream obtient souvent des mutex de contrôle de filtre lorsque le mutex de l’appareil est déjà conservé. Par conséquent, en règle générale, un thread qui a pris un mutex de contrôle de filtre ne doit pas prendre par la suite le mutex de l’appareil.

Pour manipuler le mutex d’appareil, utilisez les fonctions suivantes :

KsAcquireDevice, KsReleaseDevice