Freigeben über


KSPIN_DESCRIPTOR_EX Struktur (ks.h)

Die KSPIN_DESCRIPTOR_EX Struktur beschreibt die Merkmale eines Pintyps für einen bestimmten Filtertyp.

Syntax

typedef struct _KSPIN_DESCRIPTOR_EX {
  const KSPIN_DISPATCH         *Dispatch;
  const KSAUTOMATION_TABLE     *AutomationTable;
  KSPIN_DESCRIPTOR             PinDescriptor;
  ULONG                        Flags;
  ULONG                        InstancesPossible;
  ULONG                        InstancesNecessary;
  const KSALLOCATOR_FRAMING_EX *AllocatorFraming;
  PFNKSINTERSECTHANDLEREX      IntersectHandler;
} KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;

Angehörige

Dispatch

Ein Zeiger auf die KSPIN_DISPATCH Struktur für diesen Pin. Dieser Zeiger ist optional und sollte nur von Clients bereitgestellt werden, die Benachrichtigungen empfangen möchten. Clients, die eine pinzentrierte Verarbeitung durchführen müssen (Filter, die mit dem Routing von Daten, d. h. Hardwaretreiber), arbeiten müssen diese Verteilertabelle und einen Prozessverteiler bereitstellen. Weitere Informationen finden Sie unter KSPIN_DISPATCH.

AutomationTable

Ein Zeiger auf die KSAUTOMATION_TABLE Struktur für diesen Pin. Die Automatisierungstabelle enthält die Eigenschaften, Methoden und Ereignisse, die von der Pin unterstützt werden. Diese Automatisierungstabelle wird mit der Automatisierungstabelle zusammengeführt, die von AVStream für alle Pins bereitgestellt wird. Wenn der Client Eigenschaften-, Ereignis- oder Methodenhandler bereitstellt, die bereits von AVStream bereitgestellt werden, ersetzt die Implementierung des Clients die von AVStream.

PinDescriptor

Dieses Element gibt eine Struktur vom Typ KSPIN_DESCRIPTORan.

Flags

Gibt einen Wert vom Typ ULONG an. Dies kann eine beliebige Kombination der in der folgenden Liste aufgeführten Flags sein. Geben Sie Flags unter Verwendung eines bitweisen OR mit den folgenden Ausnahmen an: KSPIN_FLAG_CRITICAL_PROCESSING und KSPIN_FLAG_HYPERCRITICAL_PROCESSING schließen sich gegenseitig aus. KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING und KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL schließen sich gegenseitig aus. KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING und KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING schließen sich gegenseitig aus. KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY und KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE schließen sich gegenseitig aus.

KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING

Gibt an, dass der Minidriver anfordert, dass der Prozessverteiler bei IRQL-DISPATCH_LEVEL anstelle von PASSIVE_LEVEL erfolgt.

KSPIN_FLAG_CRITICAL_PROCESSING

Wenn eine asynchrone Verarbeitung angegeben wurde oder das System bei PASSIVE_LEVEL ausgeführt wird und ein Prozessaufruf bei DISPATCH_LEVEL erfolgt, erfolgt die Verarbeitung in einer Arbeitsaufgabe in der Warteschlange. Dieses Kennzeichen gibt an, dass die Arbeitsaufgabe im Gegensatz zur verzögerten Arbeitswarteschlange in der kritischen Arbeitswarteschlange platziert werden soll.

KSPIN_FLAG_HYPERCRITICAL_PROCESSING

Wenn eine asynchrone Verarbeitung angegeben wurde oder das System bei PASSIVE_LEVEL ausgeführt wird und ein Prozessaufruf bei DISPATCH_LEVEL erfolgt, erfolgt die Verarbeitung in einer Arbeitsaufgabe in der Warteschlange. Dieses Kennzeichen gibt an, dass die Arbeitsaufgabe in der hyperkritischen Arbeitswarteschlange im Gegensatz zur verzögerten Arbeitswarteschlange oder kritischen Arbeitswarteschlange platziert werden soll.

KSPIN_FLAG_ASYNCHRONOUS_PROCESSING

Gibt an, dass die Pin Daten asynchron verarbeiten soll. Wenn dieses Kennzeichen festgelegt ist, wartet AVStream nicht, bis eine Prozesssendung aufgerufen wird, bevor sie mit zusätzlichen Frames fortfahren.

KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING

AVStream ruft den Verarbeitungsversand nur auf, wenn der Minidriver explizit KsXxxAttemptProcessingaufruft. Nützlich für Clients, die die Warteschlange direkt abfragen möchten, z. B. DPC-Zeit, um Daten nach Hardware zu übertragen.

KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL

Gibt an, dass die Verarbeitung bei jedem Eintreffen eines Datenframes in die Warteschlange erfolgen soll. Wenn diese Kennzeichnung nicht angegeben ist, wird der Prozessversand nur aufgerufen, wenn Daten in eine zuvor leere Warteschlange eintreffen.

KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING

Gibt an, dass frames für den Beginn der Verarbeitung auf diesem Pin nicht erforderlich sind. Auch wenn in der Warteschlange keine Frames vorhanden sind, reicht eine Zustandsänderung jetzt aus, um AVStream aufzurufen. Dieses Kennzeichen ist nur für filterorientierte Filter nützlich. Pins, die diese Kennzeichnungsverzögerungsverarbeitung für den Filter nicht angeben, wenn sie keine verfügbaren Frames haben. Pins, die diese Kennzeichnung angeben, verzögern die Verarbeitung auf diese Weise nicht. Wenn ein Pin dieses Kennzeichen angibt, wird es zur Verantwortung des Prozessversands, um nach verfügbaren Frames zu suchen.

KSPIN_FLAG_ENFORCE_FIFO

Wenn Sie dieses Kennzeichen angeben, wird die Warteschlange erzwingen, dass IRPs auf first-in-first-out-Weise behandelt werden. Wenn ein IRP vom Minidriver vor einem zuvor gesendeten IRP abgeschlossen wird, wird der spätere IRP erst von AVStream abgeschlossen, nachdem der frühere IRP vom Minidriver abgeschlossen wurde.

KSPIN_FLAG_GENERATE_MAPPINGS

Wenn Sie dieses Kennzeichen angeben, generiert AVStream automatisch Punkt-/Erfassungszuordnungen für einen in die Warteschlange eingereihten Frame, wenn der Minidriver einen Datenstromzeiger sperrt, der auf diesen Frame verweist. Clients, die dieses Feature verwenden möchten, müssen ihr DMA-Adapterobjekt über die funktion KsDeviceRegisterAdapterObject bei AVStream registrieren. Sehen Sie sich das DataUsed Member von KSSTREAM_HEADER für die Auswirkung dieses Flags auf die KSSTREAM_HEADER Struktur an. Siehe auch KSSTREAM_POINTER_OFFSET.

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

Gibt an, dass die dem Pin zugeordnete Warteschlange einen nachgestellten Edgestreamzeiger aufweisen soll. Der nachfolgende Randzeiger ist ein spezieller Datenstromzeiger, der auf die ältesten Daten in der Warteschlange zeigt, es sei denn, Klonzeiger sind in älteren Daten vorhanden. Alle Datenframes im Fenster zwischen den führenden und nachfolgenden Edgestreamzeigern werden als mindestens eine Referenzanzahl davon betrachtet und werden erst abgeschlossen, wenn sie aus dem Fenster verschoben werden, indem sie den nachgestellten Rand mit KsPinGetTrailingEdgeStreamPointer- und einer der KsStreamPointerAdvanceXxx oder KsStreamPointerUnlock Funktionen bewegen. Pins, die dieses Flag nicht angeben, weisen keinen nachgestellten Edgestreamzeiger auf.

KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY

Gibt an, dass AVStream diesen Pin nur aufrufen soll, um zu verarbeiten, wenn sich der Pin in KSSTATE_RUN befindet. Ändert den minimalen Verarbeitungszustand von "Anhalten" in "Ausführen". AVStream ruft diese Pin auf, um zu verarbeiten, nachdem sie angibt, zum Ausführungszustand zu wechseln, auch wenn Frames eingehen. Jeder Pin, der dieses Kennzeichen angibt und Teil eines filterorientierten Filters ist, bewirkt, dass der Filter nicht verarbeitet wird, wenn sich der angegebene Pin nicht in KSSTATE_RUN befindet.

KSPIN_FLAG_SPLITTER

Gibt an, dass dieser Pin (ein Ausgabehefter) ein Splitter ist. Pins, die dieses Flag angeben, sollten eine Reihe möglicher Instanzen angeben, die größer als eine sind. Wenn eine zweite Instanz dieses Pins erstellt wird, richtet AVStream automatisch einen Splitter ein, sodass frames, die an den ursprünglichen Pin gesendet werden, in den neuen Pin kopiert werden. Beachten Sie, dass das Kopieren von AVStream automatisch erfolgt. Clients in der Regel können Prozess-Pins ignorieren, die nichtNULL-DelegateBranch- und CopySource Zeiger aufweisen. Diese Member geben an, dass der Pin Teil einer Splitter-Verzweigung ist und automatisch von AVStream verarbeitet wird. In Versionen nach DirectX 8.0 funktioniert dieses Flag sowohl für filterorientierte als auch für pinorientierte Filter. Ältere Versionen unterstützen dieses Kennzeichen nur für Pins für filterorientierte Filter.

KSPIN_FLAG_USE_STANDARD_TRANSPORT

Diese Kennzeichnung erzwingt die Pin, um den Standardtransportmechanismus zu verwenden. Er setzt alle anderen Prüfungen (Kommunikationstyp, Mitteltyp, Schnittstellentyp usw.) auf dem Pin außer Kraft. Wenn Sie sowohl dieses Kennzeichen als auch KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT angeben, wird der Standardtransport verwendet. Dieses Kennzeichen setzt alle anderen Prüfungen außer Kraft.

KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT

Gibt an, dass der Pin nicht den Standardmäßigen Transportmechanismus verwendet. Pins, die nicht den Standardtransportmechanismus verwenden, gehören nicht zu einem Rohrabschnitt und weisen keine zugeordneten Warteschlangen auf.

KSPIN_FLAG_FIXED_FORMAT

Gibt an, dass dieser Pin ein festes Datenformat verwendet. Jeder Versuch, das Datenformat festzulegen, gibt STATUS_INVALID_DEVICE_REQUEST zurück.

KSPIN_FLAG_GENERATE_EOS_EVENTS

Gibt an, dass dieser Pin Verbindungsereignisunterstützungsanforderungen verarbeitet.

KSPIN_FLAG_RENDERER

Gibt an, dass dieser Pin Frames rendern kann.

KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING

Wenn für einen filterorientierten Filternadel angegeben, gibt dies an, dass mindestens eine Instanz des betreffenden Pintyps Frames zur Verarbeitung von Daten zur Verfügung haben muss. Sich gegenseitig ausschließend mit KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING.

Beachten Sie, dass dieses Verhalten über KsPinAttachOrGate abgerufen werden kann, indem sie ein OR-Tor für jede Instanz des Pins manuell einrichten und dieses OR-Tor an das AND-Gate des Filters anfügen.

Bei Verwendung dieser Kennzeichnung können Minidriver KsPinAttachAndGate oder KsPinAttachOrGate- für die zugehörigen Pininstanzen nicht aufrufen. (Die Kennzeichnung erledigt dies effektiv für Sie für den einfachen OR-Fall.) Siehe auch Filter-Centric Verarbeitung.

KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE

Wenn für einen filterzentrierten Pin angegeben, gibt dies an, dass die Verarbeitung auftreten kann, wenn eine oder mehrere der Pininstanzen, die gekennzeichnet sind, im Ausführungszustand liegen. Alle nicht angehaltenen Pins müssen mindestens angehalten werden, um Daten zu verarbeiten. Verwenden Sie dieses Flag nicht, wenn es sich bei dem entsprechenden Pin um eine Ausgabenadel handelt und diese Pin an einer direkten Transformation beteiligt ist.

KSPIN_FLAG_DENY_USERMODE_ACCESS

Dieses Kennzeichen verhindert den Benutzermoduszugriff auf diese bestimmte Pin.

KSPIN_FLAG_IMPLEMENT_CLOCK

Gibt an, dass dieser Pin eine Uhr verfügbar macht, die vom Graph-Manager als Masteruhr ausgewählt werden kann. Siehe auch AVStream Clocks.

InstancesPossible

Gibt einen Wert vom Typ ULONG an, der eine Anzahl der maximal möglichen Instanzen dieses Pins enthält. Jeder Versuch, mehr als diese Anzahl von Pins des angegebenen Typs instanziieren zu können, schlägt fehl. Legen Sie diesen Wert auf KSINSTANCE_INDETERMINATE fest, um die Anzahl der instanziierten Pins nicht einzuschränken.

InstancesNecessary

Gibt einen Wert vom Typ ULONG an, der die minimale Anzahl von Pins eines bestimmten Pintyps enthält, die für die ordnungsgemäße Funktion des Filters in einem Zustand oder über der Mindestverarbeitungsebene erforderlich sind. Standardmäßig ist die mindeste Verarbeitungsebene KSSTATE_PAUSE, obwohl der Minidriver das Standardverhalten ändern kann, indem das Flags Mitglied dieser Struktur entweder auf KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY oder KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE festgelegt wird. Jeder Versuch, den Status eines Filters zu ändern, der nicht über diese Anzahl von Instanzen dieses Pintyps verfügt, schlägt fehl. Weitere Informationen finden Sie im Abschnitt "Hinweise".

AllocatorFraming

Ein Zeiger auf eine KSALLOCATOR_FRAMING_EX Struktur, die die Allocator-Rahmenanforderungen für diesen Pintyp enthält. Allocator-Rahmen gibt Elemente an, z. B. Speicherausrichtungsanforderungen, maximale Framegröße und minimale Framegröße. Dieses Element kann NULL-sein, was angibt, dass dieser Pin die Allocator framing-Eigenschaft nicht unterstützt.

IntersectHandler

Ein Zeiger auf eine treiberdefinierte KStrIntersectHandlerEx--Funktion zum Behandeln der Datenkreuzung. Wenn dieser Member NULL-ist, verarbeitet der Pin Daten schnittmengenabfragen für Datenbereiche mit dem Bezeichner KSDATAFORMAT_SPECIFIER_NONE. Die Schnittmengenhandlerfunktion empfängt einen einzelnen Datenbereich aus der Abfrage und einen einzelnen Datenbereich aus der Pins-Liste der Datenbereiche. Die GUIDs für Typ, Untertyp und Bezeichner dieser Bereiche werden garantiert übereinstimmen, obwohl es sich bei einigen um Wildcards handelt. Die Funktion gibt entweder an, dass die Datenbereiche nicht übereinstimmen, oder sie erzeugt das beste Datenformat im Schnittpunkt der beiden Datenbereiche. Weitere Informationen finden Sie unter Datenbereichs-Schnittmengen in AVStream-.

Bemerkungen

AMCap und Blink können möglicherweise keine Tuner- und Kreuzleistenschnittstellen auf Ihrem AVStream-Treiber finden, wenn das InstancesNecessary Member von KSPIN_DESCRIPTOR_EX für den analogen Videoeingabenadel auf Null festgelegt ist. Um dieses Problem zu beheben, legen Sie InstancesNecessary- für diese Pin an eine fest.

Beachten Sie, dass die Anforderungen an den Allocatorrahmen Ihres Pins ignoriert werden können, obwohl der Allokatorrahmen angibt, dass die Ausrichtung oder Größe unbedingt ein bestimmter Wert sein muss. Wenn Ihr Kernelmodustreiber mit einem Upstream-Benutzermodusfilter verbunden ist, der sie zuweist und der Zuweisungsverteiler des jeweiligen Upstreamfilters die Anforderungen für die Rahmenstruktur nicht versteht, kann dies geschehen (aktuelle Beispiele umfassen den MPEG-2-Splitter).

Wenn Sie außerdem KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING angeben und der Pin den Standardmäßigen Transportmechanismus verwendet, müssen Sie über ein Verarbeitungsobjekt verfügen. Dies bedeutet, dass es einen Prozessversand geben muss (entweder auf Filterebene oder auf Pin-Ebene); auch wenn diese Funktion nie aufgerufen wird, muss sie in diesem Fall bereitgestellt werden.

Datenbereichs-Schnittmengen in AVStream und AVStream Splitters.

Anforderungen

Anforderung Wert
Header- ks.h (enthalten Ks.h)

Siehe auch

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject