Mise en cache des informations d’épingle pour DirectShow
Une application peut utiliser l’interface DirectShow IFilterMapper2 pour rechercher automatiquement des filtres qui répondent à certains critères. Cette application peut utiliser la liste des filtres proposés retournés par IFilterMapper2 pour créer automatiquement des graphiques de filtres avec des filtres qui reçoivent et rendent des signaux de télévision. Pour trouver rapidement les filtres qui répondent aux critères spécifiés, IFilterMapper2 utilise des informations sur un filtre et ses broches précédemment entrées dans un cache. La discussion dans les paragraphes suivants fait référence à ce cache en tant que cache de données d’épingle.
Les informations contenues dans le cache de données d’épingle incluent une liste de supports et de types de supports pour chaque broche que le filtre peut exposer. IFilterMapper2 utilise ces informations de cache pour déterminer si un filtre possible peut se connecter à une broche sur un filtre qui se trouve déjà dans le graphique. Cette détermination élimine la surcharge liée à la création d’un instance d’un filtre uniquement pour déterminer que la connexion au filtre est empêchée, car un support ou un type de média ne correspond pas. Si le cache de données d’épingle d’un filtre n’est pas à jour, un filtre peut être éliminé à tort en tant que candidat à la connexion dans un graphique de filtre.
Chaque fois qu’un minidriver BDA détermine que son cache de données d’épingle que DirectShow utilise n’est pas à jour, ce minidriver doit mettre à jour le cache de données pin afin que les informations d’épingle pour les instances de filtre BDA du composant BDA du minidriver soient correctement exposées dans un graphique de filtre. Un minidriver BDA met à jour le cache de données pin direct de DirectShow, comme décrit dans les scénarios suivants :
Un minidriver BDA peut être nécessaire ou non pour mettre à jour le cache de données d’épingle de DirectShow lorsque le minidriver crée initialement des instances de filtre BDA en fonction de la façon dont ce minidriver présente les filtres BDA en tant que filtres DirectShow en mode utilisateur. Un fichier d’informations inf (minidriver) BDA spécifie le mécanisme utilisé par le minidriver pour présenter ses filtres BDA en tant que filtres DirectShow.
Les mini-disques BDA utilisent généralement le module proxy de diffusion en continu du noyau (KS) (Ksproxy.ax) pour présenter leurs filtres BDA en tant que filtres DirectShow. Le proxy KS met automatiquement à jour le cache de données d’épingle de DirectShow pour exposer des informations d’épingle pour les filtres BDA chaque fois que des instances de ces filtres sont initialement créées. Par conséquent, les minidrivers BDA qui utilisent le proxy KS ne sont pas nécessaires pour effectuer une action pour mettre à jour le cache de données pin de DirectShow lorsqu’ils créent initialement des instances de filtres. Si un filtre BDA est exposé en mode utilisateur via le proxy KS, les informations mises en cache incluent automatiquement les supports et les types de supports pour les fabriques de broches qui existent sur le filtre instance immédiatement après les retours de la routine de distribution de création du filtre.
Certains minidrivers BDA n’utilisent pas le proxy KS pour présenter leurs filtres BDA en tant que filtres DirectShow. Par exemple, les minidrivers récepteur BDA qui implémentent des filtres BDA pour recevoir ou traiter des signaux de télévision analogique utilisent les modules KSTVTune.ax ou KSXBar.ax pour présenter ces filtres BDA en tant que filtres DirectShow. Étant donné que ces modules n’utilisent pas les méthodes d’interface de proxy KS standard pour mettre à jour le cache de données d’épingle de DirectShow, les minidrivers BDA pour ces types de filtres BDA doivent mettre à jour le cache de données pin de DirectShow lorsque ces minidrivers créent initialement des instances de filtres. Pour s’assurer que le cache de données pin de DirectShow est mis à jour lors de la création d’instances de ces filtres, un minidriver BDA appelle la fonction BdaFilterFactoryUpdateCacheData immédiatement après avoir appelé la fonction BdaInitFilter à l’intérieur de l’implémentation de la routine de dispatch create du filtre. Dans cet appel, le minidriver transmet les informations d’épingle pour mettre à jour toutes les broches initiales sur le filtre.
Les épingles peuvent être créées dynamiquement sur un filtre BDA une fois la routine de distribution de création du filtre terminée. Si le instance initialement créé d’un filtre BDA n’expose pas les instances de toutes les broches répertoriées dans la topologie de modèle du filtre BDA (BDA_FILTER_TEMPLATE), le minidriver BDA doit appeler BdaFilterFactoryUpdateCacheData pour forcer les informations sur toutes les broches répertoriées dans la topologie du modèle du filtre.
Note La mise à jour du cache de données pin de DirectShow entraîne une surcharge importante, car elle touche et modifie le Registre. En outre, la mise à jour du cache de données d’épingle de DirectShow a un impact sur la durée nécessaire à DirectShow pour générer automatiquement des graphiques de filtre. Par conséquent, un minidriver BDA doit appeler BdaFilterFactoryUpdateCacheData pour toutes les broches possibles uniquement lorsqu’il détermine que son cache de données de broche utilisé par DirectShow n’est pas à jour.
Si possible, un minidriver BDA doit appeler BdaFilterFactoryUpdateCacheData chaque fois qu’une mise à jour de pilote, de microprogramme ou de matériel s’est produite.