Structure KSPIN (ks.h)
La structure KSPIN décrit une broche instanciée.
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;
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.
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.
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) |