struttura KSPIN_DESCRIPTOR_EX (ks.h)

La struttura KSPIN_DESCRIPTOR_EX descrive le caratteristiche di un tipo di pin in un determinato tipo di filtro.

Sintassi

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;

Membri

Dispatch

Puntatore alla struttura KSPIN_DISPATCH per questo pin. Questo puntatore è facoltativo e deve essere fornito solo dai client che desiderano ricevere notifiche. I client che devono eseguire l'elaborazione incentrata sui pin (filtri relativi al routing dei dati, in altre parole i driver hardware) devono fornire questa tabella dispatch e un invio del processo. Per altre informazioni, vedere KSPIN_DISPATCH.

AutomationTable

Puntatore alla struttura KSAUTOMATION_TABLE per questo pin. La tabella di automazione contiene le proprietà, i metodi e gli eventi supportati dal pin. Questa tabella di automazione viene unita alla tabella di automazione fornita da AVStream per tutti i pin. Se il client fornisce qualsiasi proprietà, evento o gestori di metodi già forniti da AVStream, l'implementazione del client sostituisce quella di AVStream.

PinDescriptor

Questo membro specifica una struttura di tipo KSPIN_DESCRIPTOR.

Flags

Specifica un valore di tipo ULONG. Può trattarsi di qualsiasi combinazione dei flag elencati nell'elenco seguente. Specificare i flag usando un OR bit per bit, con le eccezioni seguenti: KSPIN_FLAG_CRITICAL_PROCESSING e KSPIN_FLAG_HYPERCRITICAL_PROCESSING si escludono a vicenda. KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING e KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL si escludono a vicenda. KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING e KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING si escludono a vicenda. KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY e KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE si escludono a vicenda.

KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING

Indica che il minidriver richiede che il processo venga inviato in irQL DISPATCH_LEVEL anziché PASSIVE_LEVEL.

KSPIN_FLAG_CRITICAL_PROCESSING

Se è stata specificata l'elaborazione asincrona o se il sistema è in esecuzione in PASSIVE_LEVEL e viene eseguita una chiamata di processo in DISPATCH_LEVEL, l'elaborazione viene eseguita in un elemento di lavoro in coda. Questo flag indica che l'elemento di lavoro deve essere inserito nella coda di lavoro critica anziché nella coda di lavoro ritardata.

KSPIN_FLAG_HYPERCRITICAL_PROCESSING

Se è stata specificata l'elaborazione asincrona o se il sistema è in esecuzione in PASSIVE_LEVEL e viene eseguita una chiamata di processo in DISPATCH_LEVEL, l'elaborazione viene eseguita in un elemento di lavoro in coda. Questo flag indica che l'elemento di lavoro deve essere inserito nella coda di lavoro ipercritica anziché nella coda di lavoro ritardata o nella coda di lavoro critica.

KSPIN_FLAG_ASYNCHRONOUS_PROCESSING

Indica che il pin deve elaborare i dati in modo asincrono. Se questo flag è impostato, AVStream non attende che venga chiamato un invio di processo prima di procedere con fotogrammi aggiuntivi.

KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING

AVStream chiama il dispatch di elaborazione solo quando il minidriver chiama in modo esplicito KsXxxAttemptProcessing. Utile per i client che intendono eseguire direttamente il polling della coda in corrispondenza, ad esempio, del tempo DPC per il trasporto dei dati nell'hardware.

KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL

Indica che l'elaborazione deve essere eseguita ogni volta che un frame di dati arriva nella coda. Se questo flag non viene specificato, il processo dispatch viene chiamato solo quando i dati arrivano in una coda vuota in precedenza.

KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING

Indica che i fotogrammi non sono necessari per l'elaborazione per l'avvio dell'elaborazione. Anche se nella coda non esistono fotogrammi, una modifica dello stato sarà sufficiente per fare in modo che AVStream chiami l'invio di elaborazione. Questo flag è utile solo per i filtri incentrati sui filtri. I pin che non specificano questo flag ritardano l'elaborazione sul filtro se non dispongono di frame disponibili. I pin che specificano questo flag non ritardano l'elaborazione in questo modo. Se un pin specifica questo flag, diventa responsabilità del processo di invio per verificare la presenza di frame disponibili.

KSPIN_FLAG_ENFORCE_FIFO

Se si specifica questo flag, la coda forza la gestione dei runtime di integrazione in modo first-in-first-out. Se un IRP viene completato dal minidriver prima di un IRP inviato in precedenza, l'IRP successivo non viene completato da AVStream fino al completamento dell'IRP precedente da parte del minidriver.

KSPIN_FLAG_GENERATE_MAPPINGS

Se si specifica questo flag, AVStream genera automaticamente mapping a dispersione/raccolta per un frame in coda quando il minidriver blocca un puntatore di flusso che fa riferimento a tale frame. I client che intendono usare questa funzionalità devono registrare l'oggetto adattatore DMA con AVStream tramite la funzione KsDeviceRegisterAdapterObject . Per l 'effetto di questo flag sulla struttura di KSSTREAM_HEADER, vedere il membro DataUsed di KSSTREAM_HEADER. Vedere anche KSSTREAM_POINTER_OFFSET.

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

Indica che la coda associata al pin deve avere un puntatore al flusso di arco finale. Il puntatore perimetrale finale è un puntatore di flusso speciale che punta ai dati meno recenti nella coda, a meno che i puntatori clone non esistano nei dati meno recenti. Tutti i frame di dati nella finestra tra i puntatori di flusso bordo iniziale e finale vengono considerati come almeno un conteggio dei riferimenti su di essi e non vengono completati fino a quando non si spostano fuori dalla finestra avanzando il bordo finale con KsPinGetTraTra ilingEdgeStreamPointer e una delle funzioni di KsStreamPointerAdvanceXxx o KsStreamPointerUnlock. I pin che non specificano questo flag non dispongono di un puntatore del flusso di arco finale.

KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY

Indica che AVStream deve chiamare questo pin per elaborare solo quando il pin è in KSSTATE_RUN. Modifica lo stato di elaborazione minimo dalla sospensione all'esecuzione. AVStream chiama questo pin per elaborare dopo indicare di passare allo stato di esecuzione, anche se arrivano fotogrammi. Qualsiasi pin che specifica questo flag e fa parte di un filtro incentrato sui filtri fa sì che il filtro non venga elaborato se il pin specificato non è incluso in KSSTATE_RUN.

KSPIN_FLAG_SPLITTER

Indica che questo pin (pin di output) è un separatore. I pin che specificano questo flag devono indicare un numero di istanze possibili maggiori di uno. Quando viene creata una seconda istanza di questo pin, AVStream configura automaticamente una divisione in modo che i fotogrammi inviati al pin originale vengano copiati nel nuovo pin. Si noti che questa copia viene eseguita automaticamente da AVStream. I client in genere possono ignorare i pin di processocon puntatori nullNULLDelegateBra nch e CopySource. Questi membri indicano che il pin fa parte di un ramo splitter e viene gestito automaticamente da AVStream. Nelle versioni successive a DirectX 8.0, questo flag funziona per i pin nei filtri incentrati sui filtri e sui pin. Le versioni precedenti supportano questo flag solo per i pin nei filtri incentrati sui filtri.

KSPIN_FLAG_USE_STANDARD_TRANSPORT

Questo flag forza il pin a usare il meccanismo di trasporto standard. Esegue l'override di tutti gli altri controlli (tipo di comunicazione, tipo medio, tipo di interfaccia e così via) sul pin. Specificando sia questo flag che KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT si ottiene l'uso del trasporto standard. Questo flag esegue l'override di tutti gli altri controlli.

KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT

Indica che il pin non utilizza il meccanismo di trasporto standard. I pin che non usano il meccanismo di trasporto standard non appartengono a una sezione pipe e non avranno code associate.

KSPIN_FLAG_FIXED_FORMAT

Indica che questo pin usa un formato dati fisso. Qualsiasi tentativo di impostare il formato dati restituisce STATUS_INVALID_DEVICE_REQUEST.

KSPIN_FLAG_GENERATE_EOS_EVENTS

Indica che questo pin gestisce le richieste di supporto degli eventi di connessione.

KSPIN_FLAG_RENDERER

Specifica che questo pin è in grado di eseguire il rendering dei fotogrammi.

KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING

Se specificato su un pin di filtro incentrato sui filtri, indica che una o più istanze del tipo di pin in questione devono avere frame disponibili per elaborare i dati. Si escludono a vicenda con KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING.

Si noti che questo comportamento può essere ottenuto tramite KsPinAttachOrGate impostando manualmente un cancello OR come cancello cornice per ogni istanza del pin e collegando questo cancello OR al cancello AND del filtro.

Quando si usa questo flag, i minidriver non possono chiamare KsPinAttachAndGate o KsPinAttachOrGate nelle istanze di pin associate. Il flag esegue questa operazione in modo efficace per il semplice caso OR. Vedere anche Filter-Centric Elaborazione.

KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE

Se specificato in un pin incentrato sul filtro , indica che l'elaborazione può verificarsi quando una o più istanze di pin contrassegnate sono nello stato di esecuzione. Tutti i pin non arrestati devono ancora trovarsi almeno in pausa per elaborare i dati. Non usare questo flag se il pin corrispondente è un pin di output e questo pin è coinvolto in una trasformazione sul posto.

KSPIN_FLAG_DENY_USERMODE_ACCESS

Questo flag impedisce l'accesso in modalità utente a questo pin specifico.

KSPIN_FLAG_IMPLEMENT_CLOCK

Indica che questo pin espone un orologio che può essere selezionato dal gestore del grafo come orologio master. Vedere anche orologi AVStream.

InstancesPossible

Specifica un valore di tipo ULONG che contiene un conteggio del numero massimo di istanze possibili di questo pin. Qualsiasi tentativo di creare un'istanza di più di questo numero di pin del tipo specificato ha esito negativo. Impostare su KSINSTANCE_INDETERMINATE per non avere limiti al numero di pin di cui è stata creata un'istanza.

InstancesNecessary

Specifica un valore di tipo ULONG che contiene il numero minimo di pin di un tipo di pin specificato che devono trovarsi in uno stato in corrispondenza o superiore al livello di elaborazione minimo per il corretto funzionamento del filtro. Per impostazione predefinita, il livello di elaborazione minimo è KSSTATE_PAUSE, anche se il minidriver può modificare il comportamento predefinito impostando il membro flag di di questa struttura su KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY o KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE. Qualsiasi tentativo di modificare lo stato di un filtro che non dispone di questo numero di istanze di questo tipo di pin ha esito negativo. Vedere altre informazioni nella sezione Osservazioni.

AllocatorFraming

Puntatore a una struttura KSALLOCATOR_FRAMING_EX contenente i requisiti di frame dell'allocatore per questo tipo di pin. Il frame dell'allocatore specifica elementi quali requisiti di allineamento della memoria, dimensioni massime dei fotogrammi e dimensioni minime dei fotogrammi. Questo membro può essere NULL, che indica che questo pin non supporta la proprietà di frame dell'allocatore.

IntersectHandler

Puntatore a una funzione definita dal driver KStrIntersectHandlerEx per gestire l'intersezione dei dati. Se questo membro è NULL, il pin gestisce le query di intersezione dei dati per gli intervalli di dati con l'identificatore KSDATAFORMAT_SPECIFIER_NONE. La funzione del gestore di intersezione riceve un singolo intervallo di dati dalla query e un singolo intervallo di dati dall'elenco di puntini di dati. I GUID del tipo, del sottotipo e dell'identificatore di questi intervalli sono garantiti per la corrispondenza, anche se alcuni possono essere caratteri jolly. La funzione indica che gli intervalli di dati non corrispondono o produce il formato di dati migliore nell'intersezione dei due intervalli di dati. Per altre informazioni, vedere Intersezioni dell'intervallo di dati in AVStream.

Osservazioni

AMCap e Blink potrebbero non essere in grado di trovare interfacce di tuner e barra incrociata nel driver AVStream se il membro InstancesNecessary di KSPIN_DESCRIPTOR_EX è impostato su zero per il pin di input video analogico. Per risolvere il problema, impostare IstanzeUtili per questo pin su uno.

Si noti che i requisiti di frame dell'allocatore del pin possono essere ignorati nonostante il fatto che il frame dell'allocatore specifichi che l'allineamento o le dimensioni è assolutamente necessario per essere un determinato valore. Se il driver in modalità kernel è connesso a un filtro in modalità utente upstream che alloca per esso e l'allocatore del filtro upstream specifico non riconosce i requisiti di frame, questo può verificarsi (gli esempi correnti includono il splitter MPEG-2).

Inoltre, se si specifica KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING e il pin utilizza il meccanismo di trasporto standard, è necessario disporre di un oggetto di elaborazione. Ciò significa che deve essere disponibile un certo invio del processo (a livello di filtro o a livello di pin); anche se questa funzione non viene mai chiamata, deve essere fornita in questa circostanza.

intersezioni dell'intervallo di dati in AVStream e splitters AVStream.

Fabbisogno

Requisito Valore
intestazione ks.h (include Ks.h)

Vedere anche

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject