Struttura KSPIN (ks.h)

La struttura KSPIN descrive un pin di cui è stata creata 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 puntina per questo particolare pin. Per altre informazioni, vedere KSPIN_DESCRIPTOR_EX .

Bag

Questo membro specifica il KSOBJECT_BAG (la struttura KSOBJECT_BAG equivale al tipo PVOID) per questa particolare istanza del pin. I contenitori oggetti sono strutture utilizzate per associare la memoria dinamica a un oggetto AVStream specifico. Qualsiasi elemento nel contenitore 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 del pin specifica. In genere, questo viene usato per le estensioni di pin/stream e viene allocato nel dispatch di creazione fornito nella tabella dispatch pin. Si noti che qualsiasi memoria dinamica allocata per le informazioni sul contesto deve essere inserita nel contenitore di oggetti dell'istanza del pin usando KsAddItemToObjectBag. Il contesto viene inizializzato sul 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 utilizzata per la connessione. Queste informazioni vengono fornite dal generatore di gragrafi quando viene creato il pin.

ConnectionMedium

Questo membro contiene una struttura KSPIN_MEDIUM che identifica il supporto di connessione che deve essere utilizzato da questo pin. Queste informazioni vengono fornite dal generatore di gragrafi 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 gragrafi quando viene creato il pin.

ConnectionFormat

Puntatore a una struttura KSDATAFORMAT che specifica il formato dati della connessione. Queste informazioni vengono fornite inizialmente dal generatore di grafi quando viene creato il pin e possono essere modificate tramite l'accesso alle proprietà o tramite 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 del flusso sarà lunga in byte StreamHeaderSize ). Se un client non imposta questo membro, indica che nessuna informazione estesa segue le intestazioni del flusso. In una situazione di questo tipo, ogni intestazione del flusso è esattamente sizeof (KSSTREAM_HEADER). I client possono impostare questo valore nell'invio di creazione dei 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 in cui è stato indicato al pin di eseguire la transizione. Non necessariamente uguale allo stato della pipe, che viene segnalato tramite AVStrMiniPinSetDeviceState. Inizialmente KSSTATE_STOP, questo membro viene modificato quando AVStream riceve un set di proprietà dello stato di connessione 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 il KSSTATE in corrispondenza del quale è attualmente impostato il pin. Aggiornato immediatamente prima della chiamata di AVStrMiniPinSetDeviceState . Se questa routine di callback non riesce, AVStream esegue il rollback di ClientState al valore precedente. I minidriver che non superano le 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 l'obiettivo del comportamento del filtro. Ciò si riflette nel fatto che la struttura del segnaposto ha un numero elevato di membri. Molti minidriver devono perfezionare il comportamento delle pin e mantenere un contesto aggiuntivo associato al pin. Per i filtri con comportamento del pin abbastanza convenzionale, non è necessario alcun ulteriore perfezionamento o contesto. In molti casi, il comportamento predefinito dei pin è sufficiente; è possibile accedere ai pin usando l'elaborazione basata su filtri.

Ai fini della sincronizzazione, la durata di questo oggetto è l'intervallo che inizia quando viene chiamata la funzione dispatch PreCreate del minidriver e termina quando viene restituita la funzione dispatch close 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 indicato di passare a un KSSTATE specifico, confrontando il valore del membro DeviceState di KSPIN con tale stato non è un metodo affidabile. Esaminare invece il membro ClientState oppure creare una variabile nel callback SetDeviceState e quindi controllare questa variabile. SetDeviceState è un membro di KSPIN_DISPATCH.

Vedere anche Contenitori di oggetti.

Requisiti

Requisito Valore
Client minimo supportato Disponibile in Microsoft Windows XP e nei sistemi operativi successivi 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