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;

Member

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 für das Routing von Daten, d. h. Hardwaretreiber), müssen diese Dispatchtabelle und eine Prozessverteilung 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 avStream.

PinDescriptor

Dieser Member gibt eine Struktur vom Typ KSPIN_DESCRIPTOR an.

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 mithilfe eines bitweisen OR an, mit folgenden Ausnahmen: 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 Minitreiber anfordert, dass die Prozessverteilung am IRQL DISPATCH_LEVEL statt PASSIVE_LEVEL.

KSPIN_FLAG_CRITICAL_PROCESSING

Wenn die asynchrone Verarbeitung angegeben wurde oder das System unter PASSIVE_LEVEL ausgeführt wird und DISPATCH_LEVEL ein Prozessaufruf eingeht, erfolgt die Verarbeitung in einem Arbeitselement in der Warteschlange. Dieses Flag gibt an, dass das Arbeitselement in der kritischen Arbeitswarteschlange und nicht in der verzögerten Arbeitswarteschlange platziert werden soll.

KSPIN_FLAG_HYPERCRITICAL_PROCESSING

Wenn die asynchrone Verarbeitung angegeben wurde oder das System unter PASSIVE_LEVEL ausgeführt wird und DISPATCH_LEVEL ein Prozessaufruf eingeht, erfolgt die Verarbeitung in einem Arbeitselement in der Warteschlange. Dieses Flag gibt an, dass das Arbeitselement in der überkritischen Arbeitswarteschlange platziert werden soll, anstatt in der verzögerten Arbeitswarteschlange oder der kritischen Arbeitswarteschlange.

KSPIN_FLAG_ASYNCHRONOUS_PROCESSING

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

KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING

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

KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL

Gibt an, dass die Verarbeitung jedes Mal erfolgen soll, wenn ein Datenrahmen in der Warteschlange eintrifft. Wenn dieses Flag nicht angegeben ist, wird die Prozessverteilung nur aufgerufen, wenn Daten in einer zuvor leeren Warteschlange eingehen.

KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING

Gibt an, dass für diesen Pin keine Frames erforderlich sind, damit die Verarbeitung gestartet werden kann. Selbst wenn keine Frames in der Warteschlange vorhanden sind, reicht jetzt eine Zustandsänderung aus, um AVStream dazu zu bringen, den Verarbeitungsversand aufzurufen. Dieses Flag ist nur für filterzentrierte Filter nützlich. Pins, die diese Flagverzögerungsverarbeitung für den Filter nicht angeben, wenn sie nicht über verfügbare Frames verfügen. Pins, die dieses Flag angeben, verzögern die Verarbeitung auf diese Weise nicht. Wenn ein Pin dieses Flag angibt, wird es in die Verantwortung der Prozessverteilung übernommen, nach verfügbaren Frames zu suchen.

KSPIN_FLAG_ENFORCE_FIFO

Die Angabe dieses Flags bewirkt, dass die Warteschlange erzwingt, dass IRPs auf eine First-in-First-Out-Weise verarbeitet werden. Wenn ein IRP vom Minidriver vor einem zuvor gesendeten IRP abgeschlossen wird, wird die spätere IRP erst durch AVStream abgeschlossen, wenn die frühere IRP vom Minidriver abgeschlossen wurde.

KSPIN_FLAG_GENERATE_MAPPINGS

Wenn Sie dieses Flag angeben, generiert AVStream automatisch Punkt-/Sammlungszuordnungen für einen Frame in der Warteschlange, wenn der Minitreiber einen Streamzeiger sperrt, der auf diesen Frame verweist. Clients, die dieses Feature verwenden möchten, müssen ihr DMA-Adapterobjekt über die KsDeviceRegisterAdapterObject-Funktion bei AVStream registrieren. Informationen zur Auswirkung dieses Flags auf die KSSTREAM_HEADER-Struktur finden Sie im DataUsed-Element von KSSTREAM_HEADER . Siehe auch KSSTREAM_POINTER_OFFSET.

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

Gibt an, dass die der Pin zugeordnete Warteschlange einen nachfolgenden Edgestreamzeiger aufweisen soll. Der nachfolgende Edgezeiger ist ein spezieller Datenstromzeiger, der auf die ältesten Daten in der Warteschlange verweist, es sei denn, für ältere Daten sind Klonzeiger vorhanden. Alle Datenrahmen im Fenster zwischen den führenden und nachgestellten Datenstromzeigern gelten als haben mindestens eine Verweisanzahl und werden erst abgeschlossen, wenn sie sich aus dem Fenster bewegen, indem sie den nachgestellten Rand mit KsPinGetTrailingEdgeStreamPointer und einer der Funktionen KsStreamPointerAdvanceXxx oder KsStreamPointerUnlock verschieben. Pins, die dieses Flag nicht angeben, verfügen nicht über einen nachfolgenden Edgestreamzeiger.

KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY

Gibt an, dass AVStream diese Pin nur zum Verarbeiten aufrufen soll, wenn sich die Pin in KSSTATE_RUN befindet. Ändert den minimalen Verarbeitungszustand von "Anhalten" in "Ausführung". AVStream ruft diesen Pin an den Prozess auf, nachdem er aufgefordert wurde, in den Ausführungszustand zu wechseln, auch wenn Frames eintreffen. Jeder Pin, der dieses Flag angibt und Teil eines filterzentrierten 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 Ausgabepin) ein Splitter ist. Pins, die dieses Flag angeben, sollten eine Anzahl möglicher Instanzen angeben, die größer als eine sind. Wenn eine zweite instance dieses Pins erstellt wird, richtet AVStream automatisch einen Splitter ein, damit an den ursprünglichen Pin gesendete Frames auf den neuen Pin kopiert werden. Beachten Sie, dass dieses Kopieren automatisch von AVStream erfolgt. Clients können in der Regel Prozesspins ignorieren, die Nicht-NULL-DelegateBranch- und CopySource-Zeiger aufweisen. Diese Member geben an, dass der Pin Teil eines Splitterbranchs ist und automatisch von AVStream verarbeitet wird. In Releases nach DirectX 8.0 funktioniert dieses Flag für Pins sowohl für filter- als auch für pinzentrierte Filter. Ältere Versionen unterstützen dieses Flag nur für Pins an filterzentrierten Filtern.

KSPIN_FLAG_USE_STANDARD_TRANSPORT

Dieses Flag erzwingt, dass der Pin den Standardtransportmechanismus verwendet. Er überschreibt alle anderen Überprüfungen (Kommunikationstyp, Mitteltyp, Schnittstellentyp usw.) an der Pin. Die Angabe dieses Flags und KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT führt dazu, dass der Standardtransport verwendet wird. Dieses Flag überschreibt alle anderen Überprüfungen.

KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT

Gibt an, dass der Pin nicht den Standardtransportmechanismus verwendet. Pins, die nicht den Standard-Transportmechanismus verwenden, gehören nicht zu einem Pipeabschnitt und verfügen nicht über zugeordnete Warteschlangen.

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 Supportanforderungen für Verbindungsereignisse verarbeitet.

KSPIN_FLAG_RENDERER

Gibt an, dass dieser Pin Frames rendern kann.

KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING

Gibt bei Angabe für einen filterzentrierten Filterpin an, dass eine oder mehrere Instanzen des betreffenden Pintyps Frames zur Verarbeitung von Daten zur Verfügung haben müssen. Schließen Sie sich mit KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING gegenseitig aus.

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

Bei Verwendung dieses Flags können Minidriver nicht KsPinAttachAndGate oder KsPinAttachOrGate für die zugeordneten Pininstanzen aufrufen. (Das Flag erledigt dies effektiv für Sie für den einfachen OR-Fall.) Weitere Informationen finden Sie unter Filterzentrierte Verarbeitung.

KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE

Gibt bei Angabe für einen filterzentrierten Pin an, dass die Verarbeitung erfolgen kann, wenn sich mindestens eine der so gekennzeichneten Pininstanzen im Ausführungszustand befindet. Alle nicht beendeten Pins müssen sich noch mindestens in der Angehaltenen für die Verarbeitung von Daten aufhalten. Verwenden Sie dieses Flag nicht, wenn der entsprechende Pin ein Ausgabepin ist und dieser Pin an einer direkten Transformation beteiligt ist.

KSPIN_FLAG_DENY_USERMODE_ACCESS

Dieses Flag verhindert den Benutzermoduszugriff auf diese spezifische Pin.

KSPIN_FLAG_IMPLEMENT_CLOCK

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

InstancesPossible

Gibt einen Wert vom Typ ULONG an, der die Anzahl der maximalen Anzahl möglicher Instanzen dieses Pins enthält. Jeder Versuch, mehr als diese Anzahl von Pins des angegebenen Typs zu instanziieren, schlägt fehl. Legen Sie auf KSINSTANCE_INDETERMINATE fest, um keine Beschränkung für die Anzahl der instanziierten Pins zu haben.

InstancesNecessary

Gibt einen Wert vom Typ ULONG an, der die minimale Anzahl von Pins eines bestimmten Pintyps enthält, die sich in einem Zustand auf oder über der Mindestverarbeitungsebene befinden müssen, um die ordnungsgemäße Funktion des Filters zu erreichen. Standardmäßig ist die Mindestverarbeitungsstufe KSSTATE_PAUSE, obwohl der Minitreiber das Standardverhalten ändern kann, indem er den Flags-Member dieser Struktur entweder auf KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY oder KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE festlegt. 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 Zuordnungsrahmenanforderungen für diesen Pintyp enthält. Die Zuordnungsrahmenart gibt Elemente an, z. B. Anforderungen an die Speicherausrichtung, die maximale Framegröße und die minimale Framegröße. Dieser Member kann NULL sein, was angibt, dass dieser Pin die Zuordnungsrahmeneigenschaft nicht unterstützt.

IntersectHandler

Ein Zeiger auf eine vom Treiber definierte KStrIntersectHandlerEx-Funktion zum Verarbeiten von Datenkreuzungen. Wenn dieser Member NULL ist, verarbeitet der Pin Datenschnittabfragen für Datenbereiche mit dem Spezifizierer KSDATAFORMAT_SPECIFIER_NONE. Die Schnittmengenhandlerfunktion empfängt einen einzelnen Datenbereich aus der Abfrage und einen einzelnen Datenbereich aus der Pinsliste der Datenbereiche. Die Typ-, Untertyp- und Spezifizierer-GUIDs dieser Bereiche stimmen garantiert überein, obwohl es sich bei einigen möglicherweise um Wildcards handelt. Die Funktion gibt entweder an, dass die Datenbereiche nicht übereinstimmen, oder sie erzeugt das beste Datenformat in der Schnittmenge der beiden Datenbereiche. Weitere Informationen finden Sie unter Datenbereichsschnittpunkte in AVStream .

Hinweise

AMCap und Blink können möglicherweise keine Tuner- und Querleistenschnittstellen in Ihrem AVStream-Treiber finden, wenn der 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 auf eins fest.

Beachten Sie, dass die Zuweisungsrahmenanforderungen ihres Pins ignoriert werden können, obwohl ihr Allocatorrahmen angibt, dass ausrichtung oder größe unbedingt ein bestimmter Wert sein muss. Wenn Ihr Kernelmodustreiber mit einem Upstream Benutzermodusfilter verbunden ist, der ihn zugeordnet, und die zuordnungsbezogene Upstream Filter die Rahmenanforderungen nicht versteht, kann dies der Fall sein (aktuelle Beispiele sind der MPEG-2-Splitter).

Wenn Sie außerdem KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING angeben und der Pin den Standardtransportmechanismus verwendet, benötigen Sie ein Verarbeitungsobjekt. Dies bedeutet, dass ein Prozessversand bereitgestellt werden muss (entweder auf Filterebene oder auf Pinebene); auch wenn diese Funktion nie aufgerufen wird, muss sie in diesem Fall bereitgestellt werden.

Datenbereichs schnittmengen in AVStream - und AVStream-Splittern.

Anforderungen

Anforderung Wert
Header ks.h (ks.h einschließen)

Weitere Informationen

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject