Structure KSPIN (ks.h)

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

Syntaxe

C++
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 d’épingle pour cette broche particulière. Pour plus d’informations, consultez KSPIN_DESCRIPTOR_EX.

Bag

Ce membre spécifie la KSOBJECT_BAG (la structure KSOBJECT_BAG équivaut au type PVOID) pour cette instance de broche particulière. sacs d’objets 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 pin est automatiquement nettoyé lorsque la broche est fermée.

Context

Pointeur vers une mémoire tampon. Les clients peuvent utiliser contexte pour associer des informations de contexte à une instance de broche spécifique. En règle générale, cela est utilisé pour les extensions de broche/flux et est alloué dans la distribution de création fournie dans la table de distribution de broche. Notez que toute mémoire dynamique allouée pour les informations de contexte doit être placée dans le conteneur d’objets de l’instance d’épingle à l’aide de KsAddItemToObjectBag. context 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 d’épingle. Il s’agit de l’index dans le tableau de descripteurs de broche fournis 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 FAUX, indique que la broche connectée prend en charge l’établissement d’une liaison de connexion AVStream. Il s’agit d’une indication indiquant si la connexion entre cette broche et la broche à qui 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 l’épingle.

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 l’épingle.

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 l’épingle.

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 lorsque l’épingle est créée et peuvent être modifiées via l’accès aux propriétés ou par le format des messages de modification insérés dans le flux. L’accès à ce membre est synchronisé par le mutex de contrôle de filtre. Ce membre ne doit pas être modifié par le client.

AttributeList

Pointeur vers une structure KSMULTIPLE_ITEM qui spécifie la liste des attributs, fourni 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 l’épingle et s’affichent dans le descripteur de broche. Il est mis en cache ici pour l’accès à IRQL ci-dessus 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 à taille de (KSSTREAM_HEADER) et avoir des en-têtes de flux étendus alloués (chaque en-tête de flux sera StreamHeaderSize octets longs). Si un client ne définit pas ce membre, cela indique qu’aucune information étendue ne suit les en-têtes de flux. Dans ce cas, chaque en-tête de flux est précisément taille de (KSSTREAM_HEADER). Les clients peuvent définir cette valeur dans la distribution de création d’épingle.

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 l’épingle et s’affichent dans une structure KSPIN_DESCRIPTOR pertinente. Il est mis en cache ici pour l’accès à IRQL ci-dessus PASSIVE_LEVEL.

DeviceState

Ce membre contient une énumération de type KSSTATE qui identifie l’état auquel l’épingle a été informé de la transition. Pas nécessairement identique à l’état du canal, qui est signalé via AVStrMiniPinSetDeviceState. Initialement KSSTATE_STOP, ce membre est modifié lorsque AVStream reçoit une propriété d’état de connexion définie IOCTL. Access est synchronisé à l’aide du mutex de contrôle de filtre . Les minidrivers ne doivent pas modifier ce membre. Consultez 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é par le biais de l’accès aux propriétés. L’accès à ce membre est synchronisé par le mutex de 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 AVStrMiniPinSetDeviceState est appelée. Si cette routine de rappel échoue, AVStream restaure ClientState à sa valeur précédente. Les minidrivers qui échouent les transitions d’état et qui vérifient ce membre pendant le traitement doivent être conscients de cette séquence d’événements.

Remarques

De nombreuses façons, les broches sont le focus du comportement du filtre. Cela est reflété 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 associé à une broche supplémentaire. Pour les filtres avec un comportement de broche assez classique, aucun affinement ou contexte supplémentaire n’est nécessaire. Dans de nombreux cas, le comportement de broche par défaut est suffisant ; les broches sont accessibles à l’aide du de traitementFilter-Centric .

À des fins de synchronisation, la durée de vie de cet objet est l’intervalle qui commence lorsque la fonction de distribution PreCreate du minidriver est appelée et se termine lorsque la fonction Close dispatch retourne, en supposant que la fonction ne retourne pas STATUS_PENDING. Si elle 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, en comparant la valeur du DeviceState membre 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 vérifiez cette variable. SetDeviceState est membre de KSPIN_DISPATCH.

Voir également sacs d’objets.

Exigences

Exigence Valeur
client minimum 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.
d’en-tête ks.h (include Ks.h)

Voir aussi

KSPIN_DESCRIPTOR

KSPIN_DESCRIPTOR_EX

KSPIN_DISPATCH

KsAddItemToObjectBag

KsCompletePendingRequest