estructura 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 anclajes (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 pines. 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 las marcas que usan 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 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 piensan 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. Anclajes que no especifican este procesamiento de retraso de marca en el filtro si no tienen marcos disponibles. Los anclajes que especifican esta marca no retrasan el procesamiento de esta manera. Si un pin especifica esta marca, se convierte en la 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 first-in-first-out. Si el minidriver completa un IRP antes de un IRP que se envió anteriormente, AVStream no completará 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 o recopilación para un marco en cola cuando el minidriver bloquea un puntero de secuencia que hace referencia a ese fotograma. Los clientes que piensan usar esta característica deben registrar su objeto de adaptador DMA con AVStream a través de la función KsDeviceRegisterAdapterObject. Consulte el miembro
KSPIN_FLAG_DISTINCT_TRAILING_EDGE
Indica que la cola asociada a la patilla debe tener un puntero de flujo de borde final. El puntero de borde 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. Se considera que los marcos de datos de la ventana entre los punteros de flujo de borde inicial y final tienen al menos un recuento de referencias y no se completan hasta que se mueven fuera 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 de borde 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 dado 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 la nueva patilla. Tenga en cuenta que AVStream realiza automáticamente esta copia. Los clientes
KSPIN_FLAG_USE_STANDARD_TRANSPORT
Esta marca fuerza el pin para usar el mecanismo de transporte estándar. Invalida todas las demás comprobaciones (tipo de comunicación, tipo medio, tipo de interfaz, etcetera). Especificar tanto esta marca como KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT da lugar a que se use el transporte estándar. Esta marca invalida todas las demás comprobaciones.
KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT
Indica que la patilla no usa el mecanismo de transporte estándar. Las patillas 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 de la patilla y adjuntando esta puerta OR a la puerta AND del filtro.
Al usar esta marca, los minidrivers no pueden llamar a KsPinAttachAndGate ni KsPinAttachOrGate en las instancias de patillas asociadas. (La marca hace esto de forma eficaz para el caso OR simple). Consulte también Filter-Centric procesamiento.
KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE
Cuando se especifica en una patilla centrada en el filtro, indica que el procesamiento puede producirse cuando una o varias de las instancias de patillas que se marcan están en estado de ejecución. Todas las patillas no detenidas todavía deben estar en al menos pausar 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 reloj de 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 no tener 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 funcionamiento adecuado del filtro. De forma predeterminada, el nivel de procesamiento mínimo es KSSTATE_PAUSE, aunque el minidriver puede modificar el comportamiento predeterminado estableciendo el Flags miembro de esta estructura en KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY o KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE. Se produce un error en cualquier intento de cambiar el estado de un filtro que no tiene este número de instancias de este tipo de patilla. Consulte 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 de
Observaciones
Es posible que AMCap y Blink no puedan encontrar interfaces de sintonizador y barra cruzada en el controlador AVStream si el miembro de
Tenga en cuenta que los requisitos de marco del asignador del pin pueden omitirse a pesar del hecho de que el marco de 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 en modo de usuario ascendente que lo asigna y el asignador del filtro ascendente determinado no entiende los requisitos de marco, 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 proceso 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 intervalos de datos en AVStream y divisores de AVStream.
Requisitos
Requisito | Valor |
---|---|
encabezado de |
ks.h (incluya Ks.h) |