Struttura KSPIN (ks.h)

La struttura KSPIN descrive un pin creato in un'istanza.

Sintassi

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;

Members

Descriptor

Puntatore al descrittore di pin per questo particolare pin. Per altre informazioni , vedere KSPIN_DESCRIPTOR_EX .

Bag

Questo membro specifica la KSOBJECT_BAG (la struttura KSOBJECT_BAG equivale al tipo PVOID) per questa particolare istanza di pin. I borse oggetti sono strutture usate per associare memoria dinamica a un oggetto AVStream specifico. Qualsiasi elemento nella borsa dell'oggetto pin viene pulito automaticamente quando il pin viene chiuso.

Context

Puntatore a un buffer. I client possono usare Context per associare le informazioni di contesto a un'istanza di pin specifica. In genere, questa operazione viene usata per le estensioni pin/stream e viene allocata nella tabella di invio del pin. Si noti che qualsiasi memoria dinamica allocata per le informazioni sul contesto deve essere inserita nel contenitore oggetti dell'istanza del pin usando KsAddItemToObjectBag. Il contesto viene inizializzato al valore del membro Context del KSFILTER padre al momento della creazione del pin. Vedere Gerarchia di oggetti AVStream.

Id

Questo membro specifica l'identificatore del tipo di pin. Questo è l'indice nella matrice di descrittori pin forniti per il tipo di filtro specificato.

Communication

Questo membro specifica KSPIN_COMMUNICATION_NONE, KSPIN_COMMUNICATION_SINK, KSPIN_COMMUNICATION_SOURCE, KSPIN_COMMUNICATION_BOTH o KSPIN_COMMUNICATION_BRIDGE. Vedere KSPROPERTY_PIN_COMMUNICATION per il significato di ogni valore.

ConnectionIsExternal

Questo membro specifica un valore booleano che, se TRUE, indica che il pin connesso non supporta l'handshake della connessione AVStream. Se FALSE, indica che il pin connesso supporta l'handshake di connessione AVStream. Si tratta di un'indicazione del fatto che la connessione tra questo pin e il pin a cui è connessa è una connessione tra due pin AVStream.

ConnectionInterface

Questo membro contiene una struttura KSPIN_INTERFACE che identifica l'interfaccia usata per la connessione. Queste informazioni vengono fornite dal generatore di grafici quando viene creato il pin.

ConnectionMedium

Questo membro contiene una struttura KSPIN_MEDIUM che identifica il supporto di connessione che deve essere usato. Queste informazioni vengono fornite dal generatore di grafici quando viene creato il pin.

ConnectionPriority

Questo membro contiene una struttura KSPRIORITY che specifica la priorità della connessione. Queste informazioni vengono fornite dal generatore di grafici quando viene creato il pin.

ConnectionFormat

Puntatore a una struttura KSDATAFORMAT che specifica il formato dati della connessione. Queste informazioni vengono inizialmente fornite dal generatore di grafici quando viene creato il pin e possono essere modificate tramite l'accesso alle proprietà o tramite i messaggi di modifica del formato inseriti nel flusso. L'accesso a questo membro viene sincronizzato dal mutex del controllo filtro. Questo membro non deve essere modificato dal client.

AttributeList

Puntatore a una struttura KSMULTIPLE_ITEM che specifica l'elenco di attributi, forniti durante la creazione del pin, per descrivere la connessione. Specifica la direzione del flusso di dati per questo pin (KSPIN_DATAFLOW_IN o KSPIN_DATAFLOW_OUT). Queste informazioni sono un attributo statico del pin e vengono visualizzate nel descrittore di pin. Viene memorizzato nella cache qui per l'accesso a IRQL sopra PASSIVE_LEVEL.

StreamHeaderSize

Questo membro indica le dimensioni in byte di ogni struttura KSSTREAM_HEADER per questo pin. In genere usato per i pin di output, un client può impostare questo valore su qualsiasi valore maggiore di sizeof (KSSTREAM_HEADER) e avere intestazioni di flusso estese allocate (ogni intestazione di flusso sarà streamHeaderSize long). Se un client non imposta questo membro, questo indica che nessuna informazione estesa segue le intestazioni di flusso. In tale situazione, ogni intestazione di flusso è esattamente sizeof (KSSTREAM_HEADER). I client possono impostare questo elemento nel messaggio di creazione del pin.

DataFlow

Questo membro specifica la direzione del flusso di dati per il pin. Le impostazioni possibili sono KSPIN_DATAFLOW_IN e KSPIN_DATAFLOW_OUT . Queste informazioni sono un attributo statico del pin e vengono visualizzate nella struttura KSPIN_DESCRIPTOR pertinente. Viene memorizzato nella cache qui per l'accesso a IRQL sopra PASSIVE_LEVEL.

DeviceState

Questo membro contiene un'enumerazione di tipo KSSTATE che identifica lo stato a cui è stato indicato il pin per la transizione. Non necessariamente lo stesso dello stato della pipe, che viene segnalato tramite AVStrMiniPinSetDeviceState. Inizialmente KSSTATE_STOP, questo membro viene modificato quando AVStream riceve una proprietà di stato della connessione impostata su IOCTL. L'accesso viene sincronizzato usando il mutex del controllo filtro. I minidriver non devono modificare questo membro. Vedere la nota nella sezione Osservazioni di seguito. Vedere anche il membro ClientState .

ResetState

Questo membro contiene un'enumerazione di tipo KSRESET che identifica lo stato di reimpostazione corrente del pin. Le impostazioni possibili sono KSRESET_BEGIN e KSRESET_END. Questo membro viene inizialmente impostato su KSRESET_END e viene modificato tramite l'accesso alle proprietà. L'accesso a questo membro viene sincronizzato dal mutex del controllo filtro. Il client non deve modificare questo membro.

ClientState

Questo membro specifica KSSTATE in corrispondenza del quale è attualmente impostato il pin. Aggiornato immediatamente prima che AVStrMiniPinPinSetDeviceState venga chiamato. Se questa routine di callback ha esito negativo, AVStream esegue il rollback di ClientState al valore precedente. I minidriver che hanno esito negativo sulle transizioni di stato e che controllano questo membro durante l'elaborazione devono essere consapevoli di questa sequenza di eventi.

Commenti

In molti modi, i pin sono lo stato attivo del comportamento del filtro. Questo si riflette nel fatto che la struttura del pin ha un numero elevato di membri. Molti minidriver devono perfezionare il comportamento dei pin e mantenere un contesto aggiunto aggiuntivo associato. Per i filtri con un comportamento di pin abbastanza convenzionale, non è necessario alcun ulteriore perfezionamento o contesto. In molti casi, il comportamento predefinito del pin è sufficiente; i pin sono accessibili usando l'elaborazione incentrata sui filtri.

A scopo di sincronizzazione, la durata di questo oggetto è l'intervallo a partire dal momento in cui viene chiamata la funzione di invio PreCreare del minidriver e termina quando viene restituita la funzione close dispatch del minidriver, presupponendo che la funzione non restituisca STATUS_PENDING. Se restituisce STATUS_PENDING, la durata dell'oggetto termina quando il client indica il completamento della richiesta di chiusura chiamando KsCompletePendingRequest.

Se il minidriver deve determinare se è stato detto di passare a un KSSTATE specifico, confrontando il valore del membro DeviceState di KSPIN a tale stato non è un metodo affidabile. Esaminare invece il membro ClientState o creare una variabile nel callback SetDeviceState e quindi controllare questa variabile. SetDeviceState è membro di KSPIN_DISPATCH.

Vedere anche Borse oggetto.

Requisiti

   
Client minimo supportato Disponibile in Microsoft Windows XP e versioni successive e in Microsoft DirectX 8.0 e versioni successive.
Intestazione ks.h (include Ks.h)

Vedi anche

KSPIN_DESCRIPTOR

KSPIN_DESCRIPTOR_EX

KSPIN_DISPATCH

KsAddItemToObjectBag

KsCompletePendingRequest