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;
Angehörige
Descriptor
Ein Zeiger auf den Pindeskriptor für diesen bestimmten Pin. Weitere Informationen finden Sie unter KSPIN_DESCRIPTOR_EX.
Bag
Dieses Element gibt die KSOBJECT_BAG (die KSOBJECT_BAG-Struktur entspricht dem Typ PVOID) für diese bestimmte Pininstanz an. Objektbehälter sind Strukturen, die verwendet werden, um einem bestimmten AVStream-Objekt dynamischen Speicher zuzuordnen. Alles im Pinobjektbehälter wird automatisch bereinigt, wenn der Pin geschlossen wird.
Context
Ein Zeiger auf einen Puffer. Clients können Kontext- verwenden, um Kontextinformationen einer bestimmten Pininstanz zuzuordnen. In der Regel wird dies für Pin-/Stream-Erweiterungen verwendet und in der in der Pin-Dispatch-Tabelle bereitgestellten Create-Dispatch zugeordnet. Beachten Sie, dass alle für Kontextinformationen zugewiesenen dynamischen Speicher in den Objektbehälter der Pininstanz mit KsAddItemToObjectBagplatziert werden sollten. Context wird initialisiert, um den Wert des Context Member des übergeordneten KSFILTER zum Zeitpunkt der Pinerstellung zu erhalten. Siehe AVStream-Objekthierarchie.
Id
Dieses Element gibt den Pintypbezeichner an. Dies ist der Index im Array von Pindeskriptoren, die für den angegebenen Filtertyp bereitgestellt werden.
Communication
Dieses Element gibt KSPIN_COMMUNICATION_NONE, KSPIN_COMMUNICATION_SINK, KSPIN_COMMUNICATION_SOURCE, KSPIN_COMMUNICATION_BOTH oder KSPIN_COMMUNICATION_BRIDGE an. Siehe KSPROPERTY_PIN_COMMUNICATION für die Bedeutung der einzelnen Werte.
ConnectionIsExternal
Dieser Member gibt einen booleschen Wert an, der, wenn TRUE, angibt, dass der verbundene Pin den AVStream-Verbindungs-Handshake nicht unterstützt. Wenn FALSE-angibt, dass der verbundene Pin den AVStream-Verbindungs-Handshake unterstützt. Dies ist ein Hinweis darauf, ob die Verbindung zwischen diesem Pin und dem Pin verbunden ist, eine Verbindung zwischen zwei AVStream-Pins ist.
ConnectionInterface
Dieses Element enthält eine KSPIN_INTERFACE Struktur, die die schnittstelle identifiziert, die für die Verbindung verwendet wird. Diese Informationen werden vom Graph-Generator bereitgestellt, wenn der Pin erstellt wird.
ConnectionMedium
Dieses Element 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
Dieses Element 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 möglicherweise über den Eigenschaftenzugriff oder durch Formatänderungsmeldungen geändert werden, die in den Datenstrom eingefügt wurden. Der Zugriff auf dieses Mitglied wird vom Mutex des Filtersteuerelements synchronisiert. Dieses Mitglied sollte nicht vom Client geändert werden.
AttributeList
Ein Zeiger auf eine KSMULTIPLE_ITEM Struktur, die die Liste der Attribute angibt, die während der Pinerstellung bereitgestellt 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. Sie wird hier für den Zugriff auf IRQL über PASSIVE_LEVEL zwischengespeichert.
StreamHeaderSize
Dieses Element gibt die Größe in Byte jeder KSSTREAM_HEADER Struktur für diesen Pin an. In der Regel kann ein Client dies auf einen beliebigen Wert festlegen, der größer als Größe (KSSTREAM_HEADER) ist und erweiterte Datenstromheader zugewiesen haben (jeder Datenstromheader wird StreamHeaderSize Bytes lang). Wenn ein Client dieses Element nicht festgelegt hat, gibt dies an, dass keine erweiterten Informationen Streamheader folgen. In einer solchen Situation ist jeder Datenstromheader genau Größe (KSSTREAM_HEADER). Clients können dies im Verteiler für die Pinerstellung festlegen.
DataFlow
Dieses Element 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 der Pin und werden in relevanter KSPIN_DESCRIPTOR Struktur angezeigt. Sie wird hier für den Zugriff auf IRQL über PASSIVE_LEVEL zwischengespeichert.
DeviceState
Dieses Element enthält eine Enumeration vom Typ KSSTATE, die den Zustand angibt, zu dem der Pin übergangen wurde. Nicht unbedingt identisch mit dem Zustand des Rohrs, der über AVStrMiniPinSetDeviceStategemeldet wird. Zunächst KSSTATE_STOP wird dieser Member geändert, wenn AVStream eine IOCTL-Eigenschaft des Verbindungsstatus empfängt. Access wird mit dem Filtersteuerelement mutexsynchronisiert. Minidriver sollten dieses Mitglied nicht ändern. Weitere Informationen finden Sie im Abschnitt "Hinweise" weiter unten. Siehe auch das ClientState Mitglied.
ResetState
Dieses Element enthält eine Enumeration vom Typ KSRESET, die den aktuellen Zurücksetzungszustand des Pins identifiziert. Mögliche Einstellungen sind KSRESET_BEGIN und KSRESET_END. Dieses Element wird zunächst auf KSRESET_END festgelegt und über den Eigenschaftenzugriff geändert. Der Zugriff auf dieses Mitglied wird vom filtersteuerelement mutexsynchronisiert. Der Client sollte dieses Mitglied nicht ändern.
ClientState
Dieses Element gibt den KSSTATE- an, auf dem der Pin derzeit festgelegt ist. Wird unmittelbar vor dem Aufruf AVStrMiniPinSetDeviceState- aktualisiert. Wenn diese Rückrufroutine fehlschlägt, setzt AVStream ClientState- auf den vorherigen Wert zurück. Minidriver, die Zustandsübergänge fehlschlagen und dieses Element während der Verarbeitung überprüfen, sollten sich dieser Abfolge von Ereignissen bewusst sein.
Bemerkungen
Auf viele Arten sind Pins der Fokus des Filterverhaltens. Dies spiegelt sich in der Tatsache wider, dass die Pinstruktur über eine große Anzahl von Mitgliedern verfügt. Viele Minidriver müssen das Pinverhalten verfeinern und zusätzlichen pin-zugeordneten Kontext beibehalten. Für Filter mit relativ herkömmlichem Pinverhalten ist keine zusätzliche Einschränkung oder kein zusätzlicher Kontext erforderlich. In vielen Fällen reicht das Standardverhalten des Pins aus; auf die Pins wird mithilfe Filter-Centric Verarbeitungzugegriffen.
Für Synchronisierungszwecke ist die Lebensdauer dieses Objekts das Intervall, das beginnt, wenn die PreCreate-Verteilerfunktion des Minidrivers aufgerufen und beendet wird, wenn die Close-Dispatch-Funktion des Minidrivers zurückgegeben wird, vorausgesetzt, die Funktion gibt nicht STATUS_PENDING zurück. Wenn es STATUS_PENDING zurückgibt, endet die Lebensdauer des Objekts, wenn der Client den Abschluss der Close-Anforderung angibt, indem KsCompletePendingRequestaufgerufen wird.
Wenn der Minidriver ermitteln muss, ob er zu einem bestimmten KSSTATE-wechseln muss, ist der Wert des DeviceState Member von KSPIN mit diesem Zustand keine zuverlässige Methode. Sehen Sie sich stattdessen entweder den ClientState Member an, oder erstellen Sie eine Variable im SetDeviceState Callback, und überprüfen Sie dann diese Variable. SetDeviceState ist ein Mitglied von KSPIN_DISPATCH.
Siehe auch Object Bags.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Verfügbar in Microsoft Windows XP und höheren Betriebssystemen und in Microsoft DirectX 8.0 und höheren Versionen. |
Header- | ks.h (enthalten Ks.h) |