Partager via


Structure KSPIN (ks.h)

La structure KSPIN décrit une broche instanciée.

Syntaxe

typedef struct _KSPIN {
  const KSPIN_DESCRIPTOR_EX *Descriptor;
  KSOBJECT_BAG              Bag;
  PVOID                     Context;
  ULONG                     Id;
  KSPIN_COMMUNICATION       Communication;
  BOOLEAN                   ConnectionIsExternal;
  KSPIN_INTERFACE           ConnectionInterface;
  KSPIN_MEDIUM              ConnectionMedium;
  KSPRIORITY                ConnectionPriority;
  PKSDATAFORMAT             ConnectionFormat;
  PKSMULTIPLE_ITEM          AttributeList;
  ULONG                     StreamHeaderSize;
  KSPIN_DATAFLOW            DataFlow;
  KSSTATE                   DeviceState;
  KSRESET                   ResetState;
  KSSTATE                   ClientState;
} KSPIN, *PKSPIN;

Membres

Descriptor

Pointeur vers le descripteur de broche pour cette broche particulière. Pour plus d’informations, consultez KSPIN_DESCRIPTOR_EX .

Bag

Ce membre spécifie la KSOBJECT_BAG (la structure de KSOBJECT_BAG équivaut au type PVOID) pour cette instance de broche particulière. Object Bags sont des structures utilisées pour associer la mémoire dynamique à un objet AVStream spécifique. Tout ce qui se trouve dans le sac d’objets de broche est automatiquement nettoyé lorsque l’épingle est fermée.

Context

Pointeur vers une mémoire tampon. Les clients peuvent utiliser Context pour associer des informations de contexte à un instance spécifique. En règle générale, il est utilisé pour les extensions de broche/flux et est alloué dans la répartition de création fournie dans la table de répartition des broches. Notez que toute mémoire dynamique allouée pour les informations de contexte doit être placée dans le sac d’objets de l’instance à l’aide de KsAddItemToObjectBag. Le contexte est initialisé à la valeur du membre Context du KSFILTER parent au moment de la création de l’épingle. Consultez Hiérarchie d’objets AVStream.

Id

Ce membre spécifie l’identificateur de type de broche. Il s’agit de l’index dans le tableau de descripteurs de broches fourni pour le type de filtre donné.

Communication

Ce membre spécifie KSPIN_COMMUNICATION_NONE, KSPIN_COMMUNICATION_SINK, KSPIN_COMMUNICATION_SOURCE, KSPIN_COMMUNICATION_BOTH ou KSPIN_COMMUNICATION_BRIDGE. Consultez KSPROPERTY_PIN_COMMUNICATION pour connaître la signification de chaque valeur.

ConnectionIsExternal

Ce membre spécifie une valeur booléenne qui, si TRUE, indique que la broche connectée ne prend pas en charge l’établissement d’une liaison de connexion AVStream. Si la valeur est FALSE, indique que la broche connectée prend en charge la négociation de connexion AVStream. Il s’agit d’une indication indiquant si la connexion entre cette broche et la broche à laquelle elle est connectée est une connexion entre deux broches AVStream.

ConnectionInterface

Ce membre contient une structure KSPIN_INTERFACE qui identifie l’interface utilisée pour la connexion. Ces informations sont fournies par le générateur de graphiques lors de la création de la broche.

ConnectionMedium

Ce membre contient une structure KSPIN_MEDIUM qui identifie le support de connexion que cette broche doit utiliser. Ces informations sont fournies par le générateur de graphiques lors de la création de la broche.

ConnectionPriority

Ce membre contient une structure KSPRIORITY qui spécifie la priorité de la connexion. Ces informations sont fournies par le générateur de graphiques lors de la création de la broche.

ConnectionFormat

Pointeur vers une structure KSDATAFORMAT qui spécifie le format de données de la connexion. Ces informations sont initialement fournies par le générateur de graphiques lors de la création de la broche et peuvent être modifiées par l’accès à la propriété ou par des messages de modification de format insérés dans le flux. L’accès à ce membre est synchronisé par le mutex du contrôle de filtre. Ce membre ne doit pas être modifié par le client.

AttributeList

Pointeur vers une structure de KSMULTIPLE_ITEM qui spécifie la liste d’attributs, fournie lors de la création d’une broche, pour décrire la connexion. Spécifie la direction du flux de données pour cette broche (KSPIN_DATAFLOW_IN ou KSPIN_DATAFLOW_OUT). Ces informations sont un attribut statique de la broche et apparaissent dans le descripteur de broche. Il est mis en cache ici pour l’accès à IRQL au-dessus de PASSIVE_LEVEL.

StreamHeaderSize

Ce membre indique la taille en octets de chaque structure KSSTREAM_HEADER pour cette broche. Généralement utilisé pour les broches de sortie, un client peut définir cette valeur sur n’importe quelle valeur supérieure à sizeof (KSSTREAM_HEADER) et disposer d’en-têtes de flux étendus alloués (chaque en-tête de flux aura une longueur d’octets StreamHeaderSize ). Si un client ne définit pas ce membre, cela indique qu’aucune information étendue ne suit les en-têtes de flux. Dans une telle situation, chaque en-tête de flux a précisément la taille de (KSSTREAM_HEADER). Les clients peuvent définir cette valeur dans le dispatch de création de broche.

DataFlow

Ce membre spécifie la direction du flux de données pour la broche. Les paramètres possibles sont KSPIN_DATAFLOW_IN et KSPIN_DATAFLOW_OUT. Ces informations sont un attribut statique de la broche et apparaissent dans la structure appropriée KSPIN_DESCRIPTOR . Il est mis en cache ici pour l’accès à IRQL au-dessus de PASSIVE_LEVEL.

DeviceState

Ce membre contient une énumération de type KSSTATE qui identifie l’état vers lequel la broche a été mise en transition. Pas nécessairement identique à l’état du canal, qui est signalé via AVStrMiniPinSetDeviceState. Initialement KSSTATE_STOP, ce membre est modifié quand AVStream reçoit une propriété d’état de connexion définie iocTL. L’accès est synchronisé à l’aide du mutex du contrôle de filtre. Les minidrivers ne doivent pas changer ce membre. Consultez la remarque dans la section Remarques ci-dessous. Consultez également le membre ClientState .

ResetState

Ce membre contient une énumération de type KSRESET qui identifie l’état de réinitialisation actuel de la broche. Les paramètres possibles sont KSRESET_BEGIN et KSRESET_END. Ce membre est initialement défini sur KSRESET_END et est modifié via l’accès à la propriété. L’accès à ce membre est synchronisé par le mutex du contrôle de filtre. Le client ne doit pas modifier ce membre.

ClientState

Ce membre spécifie le KSSTATE auquel la broche est actuellement définie. Mise à jour immédiatement avant l’appel d’AVStrMiniPinSetDeviceState . Si cette routine de rappel échoue, AVStream restaure ClientState à sa valeur précédente. Les minidrivers qui échouent les transitions d’état et qui case activée ce membre pendant le traitement doivent connaître cette séquence d’événements.

Remarques

À bien des égards, les épingles sont au centre du comportement des filtres. Cela se reflète dans le fait que la structure de broche a un grand nombre de membres. De nombreux minidrivers doivent affiner le comportement des broches et maintenir un contexte supplémentaire associé à des broches. Pour les filtres avec un comportement d’épingle assez conventionnel, aucun affinement ou contexte supplémentaire n’est requis. Dans de nombreux cas, le comportement d’épingle par défaut est suffisant ; les broches sont accessibles à l’aide du traitement centré sur les filtres.

À des fins de synchronisation, la durée de vie de cet objet est l’intervalle commençant lorsque la fonction de répartition PreCreate du minidriver est appelée et se terminant lorsque la fonction De répartition close du minidriver est retournée, en supposant que la fonction ne retourne pas STATUS_PENDING. S’il retourne STATUS_PENDING, la durée de vie de l’objet se termine lorsque le client indique l’achèvement de la demande de fermeture en appelant KsCompletePendingRequest.

Si le minidriver doit déterminer s’il a été dit d’accéder à un KSSTATE spécifique, la comparaison de la valeur du membre DeviceState de KSPIN à cet état n’est pas une méthode fiable. Au lieu de cela, examinez le membre ClientState ou créez une variable dans le rappel SetDeviceState, puis case activée cette variable. SetDeviceState est membre de KSPIN_DISPATCH.

Consultez également Sacs d’objets.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Microsoft Windows XP et les systèmes d’exploitation ultérieurs et dans Microsoft DirectX 8.0 et versions ultérieures.
En-tête ks.h (inclure Ks.h)

Voir aussi

KSPIN_DESCRIPTOR

KSPIN_DESCRIPTOR_EX

KSPIN_DISPATCH

KsAddItemToObjectBag

KsCompletePendingRequest