Compartir a través de


Estructura KSPIN (ks.h)

La estructura KSPIN describe una patilla creada por instancias.

Sintaxis

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;

Miembros

Descriptor

Puntero al descriptor de patillas para este pin concreto. Consulte KSPIN_DESCRIPTOR_EX para obtener más información.

Bag

Este miembro especifica el KSOBJECT_BAG (la estructura de KSOBJECT_BAG es equivalente al tipo PVOID) para esta instancia de pin determinada. bolsas de objetos son estructuras que se usan para asociar la memoria dinámica a un objeto AVStream específico. Todo lo que se encuentra en el contenedor de objetos de anclaje se limpia automáticamente cuando se cierra el pin.

Context

Puntero a un búfer. Los clientes pueden usar contexto para asociar información de contexto a una instancia de pin específica. Normalmente, esto se usa para las extensiones de pin/stream y se asigna en el envío de creación proporcionado en la tabla de distribución de patillas. Tenga en cuenta que cualquier memoria dinámica asignada para la información de contexto debe colocarse en el contenedor de objetos de la instancia de anclaje mediante KsAddItemToObjectBag. de contexto se inicializa con el valor del miembro Context del primario KSFILTER en el momento en que se crea la patilla. Consulte jerarquía de objetos AVStream.

Id

Este miembro especifica el identificador de tipo de patilla. Este es el índice en la matriz de descriptores de anclaje proporcionados para el tipo de filtro especificado.

Communication

Este miembro especifica KSPIN_COMMUNICATION_NONE, KSPIN_COMMUNICATION_SINK, KSPIN_COMMUNICATION_SOURCE, KSPIN_COMMUNICATION_BOTH o KSPIN_COMMUNICATION_BRIDGE. Consulte KSPROPERTY_PIN_COMMUNICATION para obtener el significado de cada valor.

ConnectionIsExternal

Este miembro especifica un valor booleano que, si TRUE, indica que el pin conectado no admite el protocolo de enlace de conexión avStream. Si FALSE, indica que el pin conectado admite el protocolo de enlace de conexión AVStream. Se trata de una indicación de si la conexión entre este pin y la patilla a la que está conectado es una conexión entre dos patillas AVStream.

ConnectionInterface

Este miembro contiene una estructura KSPIN_INTERFACE que identifica la interfaz que se usa para la conexión. El generador de grafos proporciona esta información cuando se crea la patilla.

ConnectionMedium

Este miembro contiene una estructura KSPIN_MEDIUM que identifica el medio de conexión que debe usar este pin. El generador de grafos proporciona esta información cuando se crea la patilla.

ConnectionPriority

Este miembro contiene una estructura KSPRIORITY que especifica la prioridad de la conexión. El generador de grafos proporciona esta información cuando se crea la patilla.

ConnectionFormat

Puntero a una estructura KSDATAFORMAT que especifica el formato de datos de la conexión. Inicialmente, el generador de grafos proporciona esta información cuando se crea el pin y se puede cambiar a través del acceso a las propiedades o mediante el formato de los mensajes de cambio insertados en la secuencia. El acceso a este miembro está sincronizado por la exclusión mutua del control de filtro. El cliente no debe cambiar este miembro.

AttributeList

Puntero a una estructura de KSMULTIPLE_ITEM que especifica la lista de atributos, proporcionada durante la creación de patillas, para describir la conexión. Especifica la dirección del flujo de datos para este pin (KSPIN_DATAFLOW_IN o KSPIN_DATAFLOW_OUT). Esta información es un atributo estático del pin y aparece en el descriptor de patillas. Aquí se almacena en caché para el acceso en IRQL anterior PASSIVE_LEVEL.

StreamHeaderSize

Este miembro indica el tamaño en bytes de cada estructura de KSSTREAM_HEADER para este pin. Normalmente se usa para los pines de salida, un cliente puede establecerlo en cualquier valor mayor que tamaño de (KSSTREAM_HEADER) y tener encabezados de secuencia extendidos asignados (cada encabezado de secuencia será StreamHeaderSize bytes de longitud). Si un cliente no establece este miembro, indica que ninguna información extendida sigue los encabezados de secuencia. En tal situación, cada encabezado de flujo es precisamente tamaño de (KSSTREAM_HEADER). Los clientes pueden establecerlo en el envío de creación de patillas.

DataFlow

Este miembro especifica la dirección del flujo de datos para el pin. Los valores posibles son KSPIN_DATAFLOW_IN y KSPIN_DATAFLOW_OUT. Esta información es un atributo estático del pin y aparece en la estructura KSPIN_DESCRIPTOR pertinente. Aquí se almacena en caché para el acceso en IRQL anterior PASSIVE_LEVEL.

DeviceState

Este miembro contiene una enumeración de tipo KSSTATE que identifica el estado al que se le ha dicho que el pin realice la transición. No necesariamente igual que el estado de la canalización, que se notifica a través de AVStrMiniPinSetDeviceState. Inicialmente KSSTATE_STOP, este miembro se cambia cuando AVStream recibe una propiedad de estado de conexión establecida IOCTL. El acceso se sincroniza mediante el control de exclusión mutua del control de filtro. Los minidrivers no deben cambiar este miembro. Vea la nota de la sección Comentarios a continuación. Consulte también el miembro ClientState.

ResetState

Este miembro contiene una enumeración de tipo KSRESET que identifica el estado de restablecimiento actual del pin. Las opciones posibles son KSRESET_BEGIN y KSRESET_END. Este miembro se establece inicialmente en KSRESET_END y se cambia a través del acceso a propiedades. El acceso a este miembro se sincroniza mediante la exclusión mutua del control de filtro . El cliente no debe cambiar este miembro.

ClientState

Este miembro especifica el KSSTATE en el que está establecido actualmente el pin. Se actualiza inmediatamente antes de llamar a avStrMiniPinSetDeviceState. Si se produce un error en esta rutina de devolución de llamada, AVStream revierte ClientState a su valor anterior. Los minidrivers que producen un error en las transiciones de estado y que comprueban este miembro durante el procesamiento deben tener en cuenta esta secuencia de eventos.

Observaciones

De muchas maneras, los patillas son el foco del comportamiento del filtro. Esto se refleja en el hecho de que la estructura de patillas tiene un gran número de miembros. Muchos minidrives necesitan refinar el comportamiento de las patillas y mantener un contexto adicional asociado al pin. En el caso de los filtros con un comportamiento de patilla bastante convencional, no se requiere ningún refinamiento ni contexto adicionales. En muchos casos, el comportamiento de pin predeterminado es suficiente; Se accede a los pines mediante Filter-Centric Processing.

Con fines de sincronización, la duración de este objeto es el intervalo que comienza cuando se llama a la función de envío PreCreate del minidriver y finaliza cuando se devuelve la función Close dispatch del minidriver, suponiendo que la función no devuelva STATUS_PENDING. Si devuelve STATUS_PENDING, la duración del objeto finaliza cuando el cliente indica la finalización de la solicitud de cierre llamando a KsCompletePendingRequest.

Si el minidriver necesita determinar si se le ha dicho que vaya a un KSSTATE específico, comparando el valor del DeviceState miembro de KSPIN a ese estado no es un método confiable. En su lugar, examine el miembro clientState de o cree una variable en el SetDeviceState devolución de llamada y, a continuación, compruebe esta variable. setDeviceState es miembro de KSPIN_DISPATCH.

Vea también bolsas de objetos.

Requisitos

Requisito Valor
cliente mínimo admitido Disponible en Microsoft Windows XP y sistemas operativos posteriores y en Microsoft DirectX 8.0 y versiones posteriores.
encabezado de ks.h (incluya Ks.h)

Consulte también

KSPIN_DESCRIPTOR

KSPIN_DESCRIPTOR_EX

KSPIN_DISPATCH

KsAddItemToObjectBag

KsCompletePendingRequest