Partager via


Réinitialisation de l’état dans les codecs AVStream

Pour ignorer les données de flux et réinitialiser l’état de diffusion en continu, le pipeline de streaming multimédia envoie MFT_MESSAGE_COMMAND_FLUSH à un MFT. Lorsqu’un MFT HW reçoit un MFT_MESSAGE_COMMAND_FLUSH, le MFT envoie IOCTL_KS_RESET_STATE avec une valeur de KSRESET_BEGIN aux broches d’entrée et de sortie. Les minidrivers doivent s’abonner pour recevoir une notification de réinitialisation en spécifiant un rappel AVStrMiniPinReset dans le membre Réinitialiser de KSPIN_DISPATCH.

Lorsque le pilote reçoit ce IOCTL, il doit supprimer tous les pointeurs de clone en suspens et réinitialiser tous les états internes précédents. Une fois que le pilote a vidé les demandes d’E/S en attente, il reçoit une autre IOCTL_KS_RESET_STATE avec une valeur de KSRESET_END.

À ce stade, le minidriver doit être prêt à accepter de nouvelles entrées à partir du flux suivant.

N’oubliez pas que pour que la réinitialisation fonctionne correctement, le minidriver doit spécifier la connexion de topologie entre les broches d’entrée et de sortie en fournissant un tableau de type KSTOPOLOGY_CONNECTION dans le membre Connexions de la structure KSFILTER_DESCRIPTOR .

Une réinitialisation IOCTL est également envoyée dans le scénario suivant. Lorsque le pilote définit l’indicateur KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM sur un en-tête de flux et déverrouille le pointeur de flux, KS vide la file d’attente, ce qui génère un appel IOCTL_KS_RESET_STATE avec une valeur de KSRESET_END dans le pilote.

Dans ce cas, lorsque le pilote reçoit une demande de fin sans demande de début précédente, le pilote doit définir KSPIN. ResetState à KSRESET_END. Ce cas s’applique uniquement aux broches de sortie.