KSPIN-Struktur (ks.h)

Die KSPIN-Struktur beschreibt einen instanziierten Pin.

Syntax

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;

Member

Descriptor

Ein Zeiger auf den Stiftdeskriptor für diesen bestimmten Pin. Weitere Informationen finden Sie unter KSPIN_DESCRIPTOR_EX .

Bag

Dieser Member gibt die KSOBJECT_BAG (die KSOBJECT_BAG-Struktur entspricht dem Typ PVOID) für diesen bestimmten Pin instance an. Objektbehälter sind Strukturen, die verwendet werden, um dynamischen Speicher einem bestimmten AVStream-Objekt zuzuordnen. Alles in der Pin-Objekttasche wird automatisch bereinigt, wenn der Stift geschlossen wird.

Context

Ein Zeiger auf einen Puffer. Clients können Kontextinformationen einer bestimmten Pin instance zuordnen. In der Regel wird dies für Pin-/Stream-Erweiterungen verwendet und in der Erstellungsverteilung in der Pin-Dispatch-Tabelle zugeordnet. Beachten Sie, dass jeder dynamische Speicher, der für Kontextinformationen zugeordnet ist, mithilfe von KsAddItemToObjectBag in den Objektbehälter des instance platziert werden sollte. Der Kontext wird zum Zeitpunkt der Erstellung des Pins mit dem Wert des Context-Elements des übergeordneten KSFILTER initialisiert. Weitere Informationen finden Sie unter AVStream-Objekthierarchie.

Id

Dieser Member gibt den Pintypbezeichner an. Dies ist der Index in das Array von Stiftdeskriptoren, die für den angegebenen Filtertyp bereitgestellt werden.

Communication

Dieser Member gibt KSPIN_COMMUNICATION_NONE, KSPIN_COMMUNICATION_SINK, KSPIN_COMMUNICATION_SOURCE, KSPIN_COMMUNICATION_BOTH oder KSPIN_COMMUNICATION_BRIDGE an. Die Bedeutung der einzelnen Werte finden Sie unter KSPROPERTY_PIN_COMMUNICATION .

ConnectionIsExternal

Dieser Member gibt einen booleschen Wert an, der bei TRUE angibt, dass der verbundene Pin den AVStream-Verbindungshandshake nicht unterstützt. Gibt BEI FALSE an, dass der verbundene Pin den AVStream-Verbindungshandshake unterstützt. Dies ist ein Hinweis darauf, ob die Verbindung zwischen diesem Pin und dem Pin, mit dem er verbunden ist, eine Verbindung zwischen zwei AVStream-Pins ist.

ConnectionInterface

Dieser Member enthält eine KSPIN_INTERFACE-Struktur , die die für die Verbindung verwendete Schnittstelle identifiziert. Diese Informationen werden vom Graph-Generator bereitgestellt, wenn der Pin erstellt wird.

ConnectionMedium

Dieser Member enthält eine KSPIN_MEDIUM-Struktur , die das Verbindungsmedium identifiziert, das dieser Pin verwenden soll. Diese Informationen werden vom Graph-Generator bereitgestellt, wenn der Pin erstellt wird.

ConnectionPriority

Dieser Member enthält eine KSPRIORITY-Struktur , die die Priorität der Verbindung angibt. Diese Informationen werden vom Graph-Generator bereitgestellt, wenn der Pin erstellt wird.

ConnectionFormat

Ein Zeiger auf eine KSDATAFORMAT-Struktur , die das Datenformat der Verbindung angibt. Diese Informationen werden anfänglich vom Graph-Generator bereitgestellt, wenn der Pin erstellt wird, und können über den Eigenschaftenzugriff oder durch in den Stream eingefügte Formatänderungsmeldungen geändert werden. Der Zugriff auf dieses Element wird vom Mutex des Filtersteuerelements synchronisiert. Dieser Member sollte vom Client nicht geändert werden.

AttributeList

Ein Zeiger auf eine KSMULTIPLE_ITEM-Struktur , die die Liste der Attribute angibt, die während der Pinerstellung angegeben werden, um die Verbindung zu beschreiben. Gibt die Richtung des Datenflusses für diesen Pin an (KSPIN_DATAFLOW_IN oder KSPIN_DATAFLOW_OUT). Diese Informationen sind ein statisches Attribut der Pin und werden im Pindeskriptor angezeigt. Es wird hier für den Zugriff auf IRQL oberhalb PASSIVE_LEVEL zwischengespeichert.

StreamHeaderSize

Dieser Member gibt die Größe der einzelnen KSSTREAM_HEADER-Struktur für diesen Pin in Byte an. In der Regel für Ausgabepins verwendet, kann ein Client dies auf einen beliebigen Wert festlegen, der größer als sizeof (KSSTREAM_HEADER) ist und erweiterte Streamheader zugewiesen sind (jeder Streamheader ist StreamHeaderSize-Bytes lang). Wenn ein Client diesen Member nicht festgelegt, gibt dies an, dass keine erweiterten Informationen den Streamheadern folgen. In einer solchen Situation ist jeder Streamheader genau sizeof (KSSTREAM_HEADER). Clients können dies in der Pinerstellungsverteilung festlegen.

DataFlow

Dieser Member gibt die Richtung des Datenflusses für den Pin an. Mögliche Einstellungen sind KSPIN_DATAFLOW_IN und KSPIN_DATAFLOW_OUT. Diese Informationen sind ein statisches Attribut des Pins und werden in relevanten KSPIN_DESCRIPTOR Struktur angezeigt. Es wird hier für den Zugriff auf IRQL oberhalb PASSIVE_LEVEL zwischengespeichert.

DeviceState

Dieser Member enthält eine Enumeration vom Typ KSSTATE , die den Zustand identifiziert, in den die Pin übergehen soll. Nicht unbedingt identisch mit dem Zustand der Pipe, der über AVStrMiniPinSetDeviceState gemeldet wird. Anfänglich KSSTATE_STOP, wird dieser Member geändert, wenn AVStream eine IOCTL festgelegte Verbindungszustandseigenschaft empfängt. Der Zugriff wird mit dem Mutex des Filtersteuerelements synchronisiert. Minidriver sollten diesen Member nicht ändern. Weitere Informationen finden Sie weiter unten im Abschnitt "Hinweise". Siehe auch das ClientState-Element .

ResetState

Dieser Member enthält eine Enumeration vom Typ KSRESET, die den aktuellen Zurücksetzungszustand des Pins identifiziert. Mögliche Einstellungen sind KSRESET_BEGIN und KSRESET_END. Dieser Member ist zunächst auf KSRESET_END festgelegt und wird über den Eigenschaftenzugriff geändert. Der Zugriff auf dieses Element wird vom Mutex des Filtersteuerelements synchronisiert. Der Client sollte diesen Member nicht ändern.

ClientState

Dieser Member gibt den KSSTATE an, an dem der Pin derzeit festgelegt ist. Wird unmittelbar vor dem Aufruf von AVStrMiniPinSetDeviceState aktualisiert. Wenn diese Rückrufroutine fehlschlägt, führt AVStream ein Rollback von ClientState auf den vorherigen Wert aus. Minitreiber, die zustandsübergänge fehlschlagen und diesen Member während der Verarbeitung überprüfen, sollten diese Abfolge von Ereignissen beachten.

Hinweise

In vielerlei Hinsicht stehen Pins im Mittelpunkt des Filterverhaltens. Dies spiegelt sich in der Tatsache wider, dass die Pin-Struktur über eine große Anzahl von Membern verfügt. Viele Minidriver müssen das Pinverhalten verfeinern und zusätzlichen Pin-zugeordneten Kontext beibehalten. Für Filter mit ziemlich konventionellem Pinverhalten ist keine zusätzliche Einschränkung oder kontext erforderlich. In vielen Fällen ist das standardmäßige Pinverhalten ausreichend; auf die Pins wird mithilfe der filterzentrierten Verarbeitung zugegriffen.

Für Synchronisierungszwecke ist die Lebensdauer dieses Objekts das Intervall, das beginnt, wenn die PreCreate-Dispatchfunktion des Minitreibers aufgerufen wird, und endet, wenn die Close dispatch-Funktion des Minitreibers zurückgibt, vorausgesetzt, die Funktion gibt nicht STATUS_PENDING zurück. Wenn STATUS_PENDING zurückgegeben wird, endet die Lebensdauer des Objekts, wenn der Client den Abschluss der Close-Anforderung durch Aufrufen von KsCompletePendingRequest angibt.

Wenn der Minitreiber feststellen muss, ob er angewiesen wurde, zu einem bestimmten KSSTATE zu wechseln, ist der Vergleich des Werts des DeviceState-Elements von KSPIN mit diesem Zustand keine zuverlässige Methode. Sehen Sie sich stattdessen den ClientState-Member an, oder erstellen Sie eine Variable im SetDeviceState-Rückruf , und überprüfen Sie dann diese Variable. SetDeviceState ist ein Mitglied von KSPIN_DISPATCH.

Siehe auch Objektbehälter.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Microsoft Windows XP und höheren Betriebssystemen sowie in Microsoft DirectX 8.0 und höheren Versionen.
Kopfzeile ks.h (ks.h einschließen)

Weitere Informationen

KSPIN_DESCRIPTOR

KSPIN_DESCRIPTOR_EX

KSPIN_DISPATCH

KsAddItemToObjectBag

KsCompletePendingRequest