Partager via


structure KSPIN_DESCRIPTOR_EX (ks.h)

La structure KSPIN_DESCRIPTOR_EX décrit les caractéristiques d’un type d’épingle sur un type de filtre donné.

Syntaxe

typedef struct _KSPIN_DESCRIPTOR_EX {
  const KSPIN_DISPATCH         *Dispatch;
  const KSAUTOMATION_TABLE     *AutomationTable;
  KSPIN_DESCRIPTOR             PinDescriptor;
  ULONG                        Flags;
  ULONG                        InstancesPossible;
  ULONG                        InstancesNecessary;
  const KSALLOCATOR_FRAMING_EX *AllocatorFraming;
  PFNKSINTERSECTHANDLEREX      IntersectHandler;
} KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;

Membres

Dispatch

Pointeur vers la structure KSPIN_DISPATCH pour cette broche. Ce pointeur est facultatif et doit uniquement être fourni par les clients qui souhaitent recevoir des notifications. Les clients qui doivent effectuer un traitement centré sur les broches (filtres concernés par le routage des données, en d’autres termes les pilotes matériels) doivent fournir cette table de répartition et une distribution de processus. Pour plus d’informations, consultez KSPIN_DISPATCH.

AutomationTable

Pointeur vers la structure KSAUTOMATION_TABLE pour cette broche. La table Automation contient les propriétés, méthodes et événements pris en charge par l’épingle. Cette table d’automatisation est fusionnée avec la table Automation fournie par AVStream pour toutes les broches. Si le client fournit des gestionnaires de propriétés, d’événements ou de méthodes déjà fournis par AVStream, l’implémentation du client remplace celle d’AVStream.

PinDescriptor

Ce membre spécifie une structure de type KSPIN_DESCRIPTOR.

Flags

Spécifie une valeur de type ULONG. Il peut s’agir de n’importe quelle combinaison des indicateurs répertoriés dans la liste suivante. Spécifiez des indicateurs à l’aide d’une or au niveau du bit, avec les exceptions suivantes : KSPIN_FLAG_CRITICAL_PROCESSING et KSPIN_FLAG_HYPERCRITICAL_PROCESSING s’excluent mutuellement. KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING et KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL s’excluent mutuellement. KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING et KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING s’excluent mutuellement. KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY et KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE s’excluent mutuellement.

KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING

Indique que le minidriver demande que le processus de distribution se produise à IRQL DISPATCH_LEVEL au lieu de PASSIVE_LEVEL.

KSPIN_FLAG_CRITICAL_PROCESSING

Si le traitement asynchrone a été spécifié ou si le système s’exécute à PASSIVE_LEVEL et qu’un appel de processus se trouve à DISPATCH_LEVEL, le traitement est effectué dans un élément de travail mis en file d’attente. Cet indicateur indique que l’élément de travail doit être placé sur la file d’attente de travail critique, par opposition à la file d’attente de travail retardée.

KSPIN_FLAG_HYPERCRITICAL_PROCESSING

Si le traitement asynchrone a été spécifié ou si le système s’exécute à PASSIVE_LEVEL et qu’un appel de processus se trouve à DISPATCH_LEVEL, le traitement est effectué dans un élément de travail mis en file d’attente. Cet indicateur indique que l’élément de travail doit être placé sur la file d’attente de travail hypercritique, par opposition à la file d’attente de travail retardée ou à la file d’attente de travail critique.

KSPIN_FLAG_ASYNCHRONOUS_PROCESSING

Indique que l’épingle doit traiter les données de manière asynchrone. Si cet indicateur est défini, AVStream n’attend pas qu’une distribution de processus soit appelée avant de continuer avec des images supplémentaires.

KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING

AVStream appelle la distribution de traitement uniquement lorsque le minidriver appelle explicitement KsXxxAttemptProcessing. Utile pour les clients qui ont l’intention d’interroger directement la file d’attente à l’heure DPC pour transporter des données vers du matériel.

KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL

Indique que le traitement doit se produire chaque fois qu’une trame de données arrive dans la file d’attente. Si cet indicateur n’est pas spécifié, la distribution du processus est appelée uniquement lorsque les données arrivent dans une file d’attente précédemment vide.

KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING

Indique que les images ne sont pas requises sur cette broche pour que le traitement commence. Même si aucune trame n’existe dans la file d’attente, une modification d’état suffit maintenant pour que AVStream appelle la distribution de traitement. Cet indicateur est utile uniquement pour les filtres centrés sur le filtre. Épingles qui ne spécifient pas ce traitement de délai d’indicateur sur le filtre s’ils n’ont pas d’images disponibles. Les broches qui spécifient cet indicateur ne retardent pas le traitement de cette façon. Si une broche spécifie cet indicateur, il devient responsable de la distribution du processus pour vérifier les images disponibles.

KSPIN_FLAG_ENFORCE_FIFO

Si vous spécifiez cet indicateur, la file d’attente force le traitement des irPs d’une manière initiale. Si un IRP est terminé par le minidriver avant un IRP envoyé précédemment, l’IRP ultérieure n’est pas terminée par AVStream tant que l’IRP précédent n’a pas été effectué par le minidriver.

KSPIN_FLAG_GENERATE_MAPPINGS

Si vous spécifiez cet indicateur, AVStream génère automatiquement des mappages de nuages de points/collectes pour une trame mise en file d’attente lorsque le minidriver verrouille un pointeur de flux référençant ce cadre. Les clients qui ont l’intention d’utiliser cette fonctionnalité doivent inscrire leur objet d’adaptateur DMA auprès d’AVStream via la fonction KsDeviceRegisterAdapterObject. Consultez le membre DataUsed de KSSTREAM_HEADER pour connaître l’effet de cet indicateur sur la structure KSSTREAM_HEADER. Voir également KSSTREAM_POINTER_OFFSET.

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

Indique que la file d’attente associée à la broche doit avoir un pointeur de flux de bord de fin. Le pointeur de bord de fin est un pointeur de flux spécial qui pointe vers les données les plus anciennes de la file d’attente, sauf si des pointeurs clones existent sur des données plus anciennes. Toutes les trames de données dans la fenêtre entre les pointeurs de flux de bord de début et de fin sont considérées comme ayant au moins un nombre de références sur eux et ne sont pas terminées tant qu’elles ne sont pas terminées tant qu’elles ne se déplacent pas de la fenêtre en faisant avancer le bord de fin avec KsPinGetTrailingEdgeStreamPointerPointerPointer et l’une des fonctions KsStreamPointerAdvanceXxx ou KsStreamPoint erUnlock. Les broches qui ne spécifient pas cet indicateur n’ont pas de pointeur de flux de bord de fin.

KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY

Indique que AVStream doit uniquement appeler cette broche pour traiter lorsque la broche est dans KSSTATE_RUN. Modifie l’état de traitement minimal de la pause à l’exécution. AVStream appelle cette broche pour traiter après lui indiquer d’atteindre l’état d’exécution, même si les images arrivent. Toute broche qui spécifie cet indicateur et fait partie d’un filtre centré sur le filtre entraîne le traitement du filtre si la broche donnée n’est pas dans KSSTATE_RUN.

KSPIN_FLAG_SPLITTER

Indique que cette broche (une broche de sortie) est un séparateur. Les broches qui spécifient cet indicateur doivent indiquer un certain nombre d’instances possibles supérieures à une. Lorsqu’une deuxième instance de cette broche est créée, AVStream configure automatiquement un séparateur afin que les images envoyées à la broche d’origine soient copiées dans la nouvelle broche. Notez que cette copie est effectuée automatiquement par AVStream. Les clients généralement peuvent ignorer les broches de processus quiont des pointeursDelegateBranch et CopySource. Ces membres indiquent que la broche fait partie d’une branche de fractionnement et est gérée automatiquement par AVStream. Dans les versions postérieures à DirectX 8.0, cet indicateur fonctionne pour les broches sur les filtres centrés sur les filtres centrés sur les broches. Les versions antérieures prennent en charge cet indicateur uniquement pour les broches sur les filtres centrés sur les filtres.

KSPIN_FLAG_USE_STANDARD_TRANSPORT

Cet indicateur force la broche à utiliser le mécanisme de transport standard. Elle remplace toutes les autres vérifications (type de communication, type moyen, type d’interface, etc.) sur la broche. La spécification de cet indicateur et de KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT entraîne l’utilisation du transport standard. Cet indicateur remplace toutes les autres vérifications.

KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT

Indique que la broche n’utilise pas le mécanisme de transport standard. Les broches qui n’utilisent pas le mécanisme de transport standard n’appartiennent pas à une section de canal et n’ont pas de files d’attente associées.

KSPIN_FLAG_FIXED_FORMAT

Indique que cette broche utilise un format de données fixe. Toute tentative de définition du format de données retourne STATUS_INVALID_DEVICE_REQUEST.

KSPIN_FLAG_GENERATE_EOS_EVENTS

Indique que cette broche gère les demandes de prise en charge des événements de connexion.

KSPIN_FLAG_RENDERER

Spécifie que cette broche est capable de restituer des images.

KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING

Lorsqu’elle est spécifiée sur une broche de filtre centrée sur le filtre, indique qu’une ou plusieurs instances du type de broche en question doivent disposer d’images disponibles pour traiter les données. Mutuellement exclusif avec KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING.

Notez que ce comportement peut être obtenu via KsPinAttachOrGate en configurant manuellement une porte OR comme porte de cadre pour chaque instance de la broche et en attachant cette porte OR à la porte AND du filtre.

Lorsque vous utilisez cet indicateur, les minidrivers ne peuvent pas appeler KsPinAttachAndGate ou KsPinAttachOrGate sur les instances de broche associées. (L’indicateur effectue cela efficacement pour vous pour le cas OR simple.) Consultez également Filter-Centricde traitement.

KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE

Lorsqu’elle est spécifiée sur un épingle centrée sur le filtre, indique que le traitement peut se produire lorsqu’une ou plusieurs instances de broche de sorte qu’elles soient marquées dans l’état d’exécution. Toutes les broches non arrêtées doivent toujours être en pause au moins pour traiter les données. N’utilisez pas cet indicateur si la broche correspondante est une broche de sortie et que cette broche est impliquée dans une transformation sur place.

KSPIN_FLAG_DENY_USERMODE_ACCESS

Cet indicateur empêche l’accès en mode utilisateur à cette broche spécifique.

KSPIN_FLAG_IMPLEMENT_CLOCK

Indique que cette broche expose une horloge qui peut être sélectionnée par le gestionnaire de graphiques comme horloge principale. Voir également horloges AVStream.

InstancesPossible

Spécifie une valeur de type ULONG qui contient le nombre maximal d’instances possibles de cette broche. Toute tentative d’instancier plus de ce nombre de broches du type donné échoue. Défini sur KSINSTANCE_INDETERMINATE pour n’avoir aucune limite sur le nombre d’épingles instanciées.

InstancesNecessary

Spécifie une valeur de type ULONG qui contient le nombre minimal d’épingles d’un type d’épingle donné qui doivent être dans un état au niveau de traitement minimal ou supérieur au niveau de traitement minimal pour le bon fonctionnement du filtre. Par défaut, le niveau de traitement minimal est KSSTATE_PAUSE, bien que le minidriver puisse modifier le comportement par défaut en définissant les indicateurs de membre de cette structure sur KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY ou KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE. Toute tentative de modification de l’état d’un filtre qui n’a pas ce nombre d’instances de ce type d’épingle échoue. Consultez des informations supplémentaires dans la section Remarques.

AllocatorFraming

Pointeur vers une structure KSALLOCATOR_FRAMING_EX contenant les exigences d’encadrement de l’allocateur pour ce type d’épingle. L’allocation de trame spécifie des éléments tels que les exigences d’alignement de la mémoire, la taille maximale d’image et la taille minimale d’image. Ce membre peut être NULL, ce qui indique que cette broche ne prend pas en charge la propriété d’encadrement de l’allocateur.

IntersectHandler

Pointeur vers une fonction KStrIntersectHandlerEx définie par le pilote pour gérer l’intersection des données. Si ce membre est NULL, l’épingle gère les requêtes d’intersection de données pour les plages de données avec le spécificateur KSDATAFORMAT_SPECIFIER_NONE. La fonction de gestionnaire d’intersection reçoit une plage de données unique de la requête et une plage de données unique de la liste des broches de plages de données. Les GUID de type, de sous-type et de spécificateur de ces plages sont garantis pour correspondre, même si certains peuvent être des caractères génériques. La fonction indique que les plages de données ne correspondent pas, ou qu’elle produit le meilleur format de données dans l’intersection des deux plages de données. Pour plus d’informations, consultez intersections de plages de données dans AVStream.

Remarques

AMCap et Blink peuvent ne pas être en mesure de trouver des interfaces de réglage et de barre croisée sur votre pilote AVStream si le membre InstancesNecessary de KSPIN_DESCRIPTOR_EX est défini sur zéro pour la broche d’entrée vidéo analogique. Pour résoudre ce problème, définissez instances Inutiles pour cette épingle sur une.

Notez que les exigences d’encadrement de l’allocateur de votre épingle peuvent être ignorées malgré le fait que votre cadre d’allocator spécifie que l’alignement ou la taille est absolument nécessaire pour être une certaine valeur. Si votre pilote en mode noyau est connecté à un filtre en mode utilisateur en amont qui lui est alloué et que l’allocateur du filtre en amont particulier ne comprend pas les exigences d’encadrement, cela peut se produire (les exemples particuliers actuels incluent le séparateur MPEG-2).

En outre, si vous spécifiez KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING et que la broche utilise le mécanisme de transport standard, vous devez disposer d’un objet de traitement. Cela signifie qu’il doit y avoir une répartition de processus fournie (au niveau du filtre ou au niveau de la broche) ; même si cette fonction n’est jamais appelée, elle doit être fournie dans cette circonstance.

intersections de plage de données dans les AVStream et fractionnements AVStream.

Exigences

Exigence Valeur
d’en-tête ks.h (include Ks.h)

Voir aussi

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject