estructura de KSPIN_DESCRIPTOR_EX (ks.h)

La estructura KSPIN_DESCRIPTOR_EX describe las características de un tipo de patilla en un tipo de filtro determinado.

Sintaxis

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;

Miembros

Dispatch

Puntero a la estructura KSPIN_DISPATCH para este pin. Este puntero es opcional y solo debe proporcionarse por los clientes que deseen recibir notificaciones. Los clientes que necesitan realizar el procesamiento centrado en patillas (filtros relacionados con el enrutamiento de datos, es decir, controladores de hardware) deben proporcionar esta tabla de distribución y un envío de procesos. Consulte KSPIN_DISPATCH para obtener más información.

AutomationTable

Puntero a la estructura KSAUTOMATION_TABLE para este pin. La tabla de automatización contiene las propiedades, los métodos y los eventos admitidos por el pin. Esta tabla de automatización se combina con la tabla de automatización proporcionada por AVStream para todos los patillas. Si el cliente proporciona cualquier controlador de propiedad, evento o método que ya proporciona AVStream, la implementación del cliente sustituye a la de AVStream.

PinDescriptor

Este miembro especifica una estructura de tipo KSPIN_DESCRIPTOR.

Flags

Especifica un valor de tipo ULONG. Puede ser cualquier combinación de las marcas enumeradas en la lista siguiente. Especifique marcas con un or bit a bit, con las siguientes excepciones: KSPIN_FLAG_CRITICAL_PROCESSING y KSPIN_FLAG_HYPERCRITICAL_PROCESSING son mutuamente excluyentes. KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING y KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL son mutuamente excluyentes. KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING y KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING son mutuamente excluyentes. KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY y KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE son mutuamente excluyentes.

KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING

Indica que el minidriver solicita que el proceso se envíe a IRQL DISPATCH_LEVEL en lugar de PASSIVE_LEVEL.

KSPIN_FLAG_CRITICAL_PROCESSING

Si se ha especificado el procesamiento asincrónico o si el sistema se ejecuta en PASSIVE_LEVEL y se produce una llamada de proceso en DISPATCH_LEVEL, el procesamiento se realiza en un elemento de trabajo en cola. Esta marca indica que el elemento de trabajo debe colocarse en la cola de trabajo crítica en lugar de la cola de trabajo retrasada.

KSPIN_FLAG_HYPERCRITICAL_PROCESSING

Si se ha especificado el procesamiento asincrónico o si el sistema se ejecuta en PASSIVE_LEVEL y se produce una llamada de proceso en DISPATCH_LEVEL, el procesamiento se realiza en un elemento de trabajo en cola. Esta marca indica que el elemento de trabajo debe colocarse en la cola de trabajo hipercrítica en lugar de la cola de trabajo retrasada o en la cola de trabajo crítica.

KSPIN_FLAG_ASYNCHRONOUS_PROCESSING

Indica que la patilla debe procesar los datos de forma asincrónica. Si se establece esta marca, AVStream no espera a que se llame a un envío de proceso antes de continuar con fotogramas adicionales.

KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING

AVStream llama al envío de procesamiento solo cuando el minidriver llama explícitamente a KsXxxAttemptProcessing. Resulta útil para los clientes que pretenden sondear directamente la cola en, por ejemplo, el tiempo de DPC para transportar datos al hardware.

KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL

Indica que el procesamiento debe producirse cada vez que llega una trama de datos a la cola. Si no se especifica esta marca, solo se llama al envío del proceso cuando los datos llegan a una cola vacía previamente.

KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING

Indica que los fotogramas no son necesarios en este pin para que se inicie el procesamiento. Incluso si no existen fotogramas en la cola, un cambio de estado ahora será suficiente para hacer que AVStream llame al envío de procesamiento. Esta marca solo es útil para los filtros centrados en filtros. Patillas que no especifican este procesamiento de retraso de marca en el filtro si no tienen marcos disponibles. Las patillas que especifican esta marca no retrasan el procesamiento de esta manera. Si un pin especifica esta marca, se convierte en responsabilidad del envío del proceso para comprobar si hay fotogramas disponibles.

KSPIN_FLAG_ENFORCE_FIFO

La especificación de esta marca hace que la cola obligue a que los IRP se controlan de forma primero en salir. Si el minidriver completa un IRP antes de un IRP enviado anteriormente, avStream no completa el IRP posterior hasta que el minidriver haya completado el IRP anterior.

KSPIN_FLAG_GENERATE_MAPPINGS

Especificar esta marca hace que AVStream genere automáticamente asignaciones de dispersión y recopilación para un marco en cola cuando el minidriver bloquea un puntero de secuencia que hace referencia a ese marco. Los clientes que pretenden usar esta característica deben registrar su objeto de adaptador DMA con AVStream a través de la función KsDeviceRegisterAdapterObject . Consulte el miembro DataUsed de KSSTREAM_HEADER para ver el efecto de esta marca en la estructura KSSTREAM_HEADER. Consulte también KSSTREAM_POINTER_OFFSET.

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

Indica que la cola asociada a la patilla debe tener un puntero de flujo de borde final. El puntero perimetral final es un puntero de flujo especial que apunta a los datos más antiguos de la cola a menos que existan punteros de clonación en datos más antiguos. Los marcos de datos de la ventana entre los punteros de flujo perimetral inicial y final se consideran que tienen al menos un recuento de referencias en ellos y no se completan hasta que salen de la ventana avanzando el borde final con KsPinGetTrailingEdgeStreamPointer y una de las funciones KsStreamPointerAdvanceXxx o KsStreamPointerUnlock . Los pines que no especifican esta marca no tienen un puntero de flujo perimetral final.

KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY

Indica que AVStream solo debe llamar a este pin para procesar cuando el pin está en KSSTATE_RUN. Cambia el estado de procesamiento mínimo de pausa para ejecutarse. AVStream llama a este pin para procesar después de indicarle que vaya al estado de ejecución, incluso si llegan fotogramas. Cualquier patilla que especifique esta marca y forma parte de un filtro centrado en filtros hace que el filtro no se procese si el pin especificado no está en KSSTATE_RUN.

KSPIN_FLAG_SPLITTER

Indica que este pin (un pin de salida) es un divisor. Los anclajes que especifican esta marca deben indicar una serie de instancias posibles mayores que una. Cuando se crea una segunda instancia de este pin, AVStream configura automáticamente un divisor para que los fotogramas enviados al pin original se copien en el nuevo pin. Tenga en cuenta que AVStream realiza automáticamente esta copia. Normalmente, los clientes pueden omitir las patillas de proceso que tienen punteros DelegateBranch y CopySource que no son NULL. Estos miembros indican que la patilla forma parte de una rama divisora y la controla automáticamente AVStream. En versiones posteriores a DirectX 8.0, esta marca funciona para patillas tanto en filtros centrados en filtros como en filtros centrados en patillas. Las versiones anteriores solo admiten esta marca para patillas en filtros centrados en filtros.

KSPIN_FLAG_USE_STANDARD_TRANSPORT

Esta marca obliga al pin a usar el mecanismo de transporte estándar. Invalida todas las demás comprobaciones (tipo de comunicación, tipo medio, tipo de interfaz, etc.) en la patilla. Si se especifica esta marca y KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT, se usa el transporte estándar. Esta marca invalida todas las demás comprobaciones.

KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT

Indica que el pin no usa el mecanismo de transporte estándar. Los anclajes que no usan el mecanismo de transporte estándar no pertenecerán a una sección de canalización y no tendrán colas asociadas.

KSPIN_FLAG_FIXED_FORMAT

Indica que este pin usa un formato de datos fijo. Cualquier intento de establecer el formato de datos devuelve STATUS_INVALID_DEVICE_REQUEST.

KSPIN_FLAG_GENERATE_EOS_EVENTS

Indica que este pin controla las solicitudes de soporte técnico de eventos de conexión.

KSPIN_FLAG_RENDERER

Especifica que este pin es capaz de representar fotogramas.

KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING

Cuando se especifica en un pin de filtro centrado en filtros, indica que una o varias instancias del tipo de patilla en cuestión deben tener marcos disponibles para procesar los datos. Mutuamente excluyente con KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING.

Tenga en cuenta que este comportamiento se puede obtener a través de KsPinAttachOrGate configurando manualmente una puerta OR como puerta de marco para cada instancia del pin y adjuntando esta puerta OR a la puerta AND del filtro.

Al usar esta marca, los minidrivers no pueden llamar a KsPinAttachAndGate o KsPinAttachOrGate en las instancias de pin asociadas. (La marca hace esto de forma eficaz para el simple caso OR). Consulte también Procesamiento centrado en filtros.

KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE

Cuando se especifica en una patilla centrada en filtro , indica que el procesamiento puede producirse cuando una o varias instancias de patilla, por lo que se marcan, están en estado de ejecución. Todas las patillas no detenidas todavía deben estar en al menos en pausa para procesar los datos. No use esta marca si el pin correspondiente es un pin de salida y este pin está implicado en una transformación en contexto.

KSPIN_FLAG_DENY_USERMODE_ACCESS

Esta marca impide el acceso en modo de usuario a este pin específico.

KSPIN_FLAG_IMPLEMENT_CLOCK

Indica que este pin expone un reloj que el administrador de grafos puede seleccionar como reloj maestro. Consulte también los relojes AVStream.

InstancesPossible

Especifica un valor de tipo ULONG que contiene un recuento del número máximo de instancias posibles de este pin. Se produce un error en cualquier intento de crear instancias de más de este número de patillas del tipo especificado. Establézcalo en KSINSTANCE_INDETERMINATE para que no tenga ningún límite en el número de patillas creados en instancias.

InstancesNecessary

Especifica un valor de tipo ULONG que contiene el número mínimo de patillas de un tipo de patilla determinado que deben estar en un estado en o por encima del nivel de procesamiento mínimo para el correcto funcionamiento del filtro. De forma predeterminada, el nivel de procesamiento mínimo es KSSTATE_PAUSE, aunque el minidriver puede modificar el comportamiento predeterminado estableciendo el miembro Flags de esta estructura en KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY o KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE. Cualquier intento de cambiar el estado de un filtro que no tiene este número de instancias de este tipo de pin produce un error. Vea información adicional en la sección Comentarios.

AllocatorFraming

Puntero a una estructura de KSALLOCATOR_FRAMING_EX que contiene los requisitos de marco del asignador para este tipo de patilla. El marco del asignador especifica elementos como los requisitos de alineación de memoria, el tamaño máximo del marco y el tamaño mínimo del marco. Este miembro puede ser NULL, lo que indica que este pin no admite la propiedad de marco del asignador.

IntersectHandler

Puntero a una función KStrIntersectHandlerEx definida por el controlador para controlar la intersección de datos. Si este miembro es NULL, el pin controla las consultas de intersección de datos para los intervalos de datos con el especificador KSDATAFORMAT_SPECIFIER_NONE. La función de controlador de intersección recibe un único intervalo de datos de la consulta y un único intervalo de datos de la lista de patillas de intervalos de datos. Se garantiza que los GUID de tipo, subtipo y especificador de estos intervalos coincidan, aunque algunos pueden ser caracteres comodín. La función indica que los intervalos de datos no coinciden o genera el mejor formato de datos en la intersección de los dos intervalos de datos. Consulte Intersecciones de intervalos de datos en AVStream para obtener más información.

Comentarios

Es posible que AMCap y Blink no puedan encontrar interfaces de tuner y de barra cruzada en el controlador AVStream si el miembro InstancesNecessary de KSPIN_DESCRIPTOR_EX está establecido en cero para el pin de entrada de vídeo analógico. Para corregir este problema, establezca InstancesNecessary para este pin en uno.

Tenga en cuenta que los requisitos de marco del asignador del pin pueden omitirse a pesar del hecho de que el marco del asignador especifica que la alineación o el tamaño es absolutamente necesario para ser un valor determinado. Si el controlador en modo kernel está conectado a un filtro de modo usuario ascendente que lo asigna y el asignador del filtro ascendente determinado no entiende los requisitos de trama, esto puede ocurrir (los ejemplos concretos actuales incluyen el divisor MPEG-2).

Además, si especifica KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING y la patilla usa el mecanismo de transporte estándar, debe tener un objeto de procesamiento. Esto significa que debe haber algún envío de procesos proporcionado (ya sea en el nivel de filtro o en el nivel de patilla); incluso si nunca se llama a esta función, debe proporcionarse en esta circunstancia.

Intersecciones de intervalo de datos en divisores AVStream y AVStream.

Requisitos

Requisito Valor
Header ks.h (incluya Ks.h)

Consulte también

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject