структура KSPIN_DESCRIPTOR_EX (ks.h)

Структура KSPIN_DESCRIPTOR_EX описывает характеристики типа закрепления для заданного типа фильтра.

Синтаксис

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;

Члены

Dispatch

Указатель на структуру KSPIN_DISPATCH для этого контакта. Этот указатель является необязательным и должен предоставляться только клиентами, которые хотят получать уведомления. Клиенты, которым требуется выполнять обработку, ориентированную на закрепление (фильтры, связанные с маршрутизацией данных, другими словами, аппаратными драйверами), должны предоставлять эту таблицу диспетчеризации и диспетчеризацию процессов. Дополнительные сведения см. в разделе KSPIN_DISPATCH .

AutomationTable

Указатель на структуру KSAUTOMATION_TABLE для этого контакта. Таблица автоматизации содержит свойства, методы и события, поддерживаемые закреплением. Эта таблица автоматизации объединяется с таблицей автоматизации, предоставляемой AVStream для всех контактов. Если клиент предоставляет какие-либо свойства, события или обработчики методов, которые уже предоставлены AVStream, реализация клиента заменяет avStream.

PinDescriptor

Этот элемент задает структуру типа KSPIN_DESCRIPTOR.

Flags

Задает значение типа ULONG. Это может быть любое сочетание флагов, перечисленных в следующем списке. Укажите флаги с помощью побитового или, за исключением следующих исключений: KSPIN_FLAG_CRITICAL_PROCESSING и KSPIN_FLAG_HYPERCRITICAL_PROCESSING являются взаимоисключающими. KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING и KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL являются взаимоисключающими. KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING и KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING являются взаимоисключающими. KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY и KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE являются взаимоисключающими.

KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING

Указывает, что мини-driver запрашивает, чтобы отправка процесса произошла в IRQL DISPATCH_LEVEL, а не PASSIVE_LEVEL.

KSPIN_FLAG_CRITICAL_PROCESSING

Если указана асинхронная обработка или система выполняется в PASSIVE_LEVEL и вызов процесса поступает в DISPATCH_LEVEL, обработка выполняется в рабочем элементе, помещенном в очередь. Этот флаг указывает, что рабочий элемент должен размещаться в критической рабочей очереди, а не в отложенной очереди.

KSPIN_FLAG_HYPERCRITICAL_PROCESSING

Если указана асинхронная обработка или система выполняется в PASSIVE_LEVEL и вызов процесса поступает в DISPATCH_LEVEL, обработка выполняется в рабочем элементе, помещенном в очередь. Этот флаг указывает, что рабочий элемент должен размещаться в гиперкритической рабочей очереди, а не в отложенной или критической рабочей очереди.

KSPIN_FLAG_ASYNCHRONOUS_PROCESSING

Указывает, что закрепление должно обрабатывать данные асинхронно. Если этот флаг установлен, AVStream не ожидает вызова одной отправки процесса, прежде чем продолжить работу с дополнительными кадрами.

KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING

AVStream вызывает диспетчер обработки только в том случае, если мини-накопитель явно вызывает KsXxxAttemptProcessing. Полезно для клиентов, которые намерены напрямую опрашивать очередь, например во время DPC для передачи данных на оборудование.

KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL

Указывает, что обработка должна выполняться каждый раз, когда кадр данных поступает в очередь. Если этот флаг не указан, диспетчеризация процесса вызывается только при поступлении данных в ранее пустую очередь.

KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING

Указывает, что кадры не требуются в этом контакте для начала обработки. Даже если в очереди нет кадров, изменения состояния теперь будет достаточно, чтобы AVStream вызвал отправку обработки. Этот флаг полезен только для фильтров, ориентированных на фильтры. Закрепление, не указывающее этот флаг, задерживает обработку фильтра, если у них нет доступных кадров. Закрепление, указывающее этот флаг, не задерживает обработку таким образом. Если закрепление указывает этот флаг, он становится ответственностью процесса отправки проверка для доступных кадров.

KSPIN_FLAG_ENFORCE_FIFO

Указание этого флага приводит к тому, что очередь принудительно обрабатывает irPs способом "первым в первом порядке". Если один IRP выполняется мини-накопителем до отправки ранее, более поздняя функция IRP не будет выполнена AVStream до тех пор, пока более ранняя функция IRP не будет завершена мини-накопителем.

KSPIN_FLAG_GENERATE_MAPPINGS

Указание этого флага приводит к тому, что AVStream автоматически создает сопоставления точечной и сборной для кадра в очереди, когда мини-диск блокирует указатель потока, ссылающийся на этот кадр. Клиентам, которые намерены использовать эту функцию, необходимо зарегистрировать объект адаптера DMA в AVStream с помощью функции KsDeviceRegisterAdapterObject . Сведения о влиянии этого флага на структуру KSSTREAM_HEADER см. в разделе Элемент DataUsedKSSTREAM_HEADER . См. также KSSTREAM_POINTER_OFFSET.

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

Указывает, что очередь, связанная с закреплением, должна иметь указатель потока с конечным краем. Конечный указатель ребер — это специальный указатель потока, указывающий на самые старые данные в очереди, если только не существуют клоновые указатели на старые данные. Все кадры данных в окне между начальным и конечным указателями потока ребер считаются по крайней мере одной ссылкой и не завершаются до тех пор, пока они не выйдут за пределы окна, перемещая конечный край с помощью KsPinGetTrailingEdgeStreamStreamPointer и одной из функций KsStreamPointerAdvanceXxx или KsStreamPointerUnlock . Закрепление, не указывающее этот флаг, не имеет указателя потока с конечным краем.

KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY

Указывает, что AVStream должен вызывать этот контакт только для обработки, когда закрепление находится в KSSTATE_RUN. Изменяет минимальное состояние обработки с приостановки на выполнение. AVStream вызывает этот пин-код для обработки после того, как сообщает ему о переходе в состояние выполнения, даже если поступают кадры. Любой контакт, который задает этот флаг и является частью фильтра, приводит к тому, что фильтр не обрабатывается, если заданный контакт не находится в KSSTATE_RUN.

KSPIN_FLAG_SPLITTER

Указывает, что этот контакт (выходной контакт) является разделиметером. Закрепление, указывающее этот флаг, должно указывать количество возможных экземпляров, превышающее один. При создании второго экземпляра этого контакта AVStream автоматически настраивает разделитель, чтобы кадры, отправленные в исходный контакт, копировались в новый контакт. Обратите внимание, что это копирование выполняется автоматически с помощью AVStream. Клиенты обычно могут игнорировать контакты процесса, имеющие указатели DelegateBranch и CopySource, отличные от NULL. Эти элементы указывают, что закрепление является частью ветви разделители и автоматически обрабатывается AVStream. В выпусках после DirectX 8.0 этот флаг работает для контактов с фильтрами и фильтрами, ориентированными на закрепление. Более старые выпуски поддерживают этот флаг только для контактов на фильтрах.

KSPIN_FLAG_USE_STANDARD_TRANSPORT

Этот флаг заставляет закрепления использовать стандартный транспортный механизм. Он переопределяет все остальные проверки (тип связи, средний тип, тип интерфейса и т. д.) в закреплении. Указание этого флага и KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT приводит к использованию стандартного транспорта. Этот флаг переопределяет все остальные проверки.

KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT

Указывает, что закрепление не использует стандартный механизм транспорта. Контакты, которые не используют стандартный механизм транспорта, не будут принадлежать к разделу канала и не будут иметь связанных очередей.

KSPIN_FLAG_FIXED_FORMAT

Указывает, что этот пин-код использует фиксированный формат данных. При любой попытке задать формат данных возвращается STATUS_INVALID_DEVICE_REQUEST.

KSPIN_FLAG_GENERATE_EOS_EVENTS

Указывает, что этот контакт обрабатывает запросы на поддержку событий подключения.

KSPIN_FLAG_RENDERER

Указывает, что этот контакт способен отрисовывать кадры.

KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING

При указании в фильтрующем контакте фильтра указывает, что один или несколько экземпляров соответствующего типа закрепления должны иметь доступные кадры для обработки данных. Взаимоисключающие с KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING.

Обратите внимание, что это поведение можно получить с помощью KsPinAttachOrGate , вручную настроив вентиль OR в качестве вентиль рамки для каждого экземпляра булавки и прикрепив этот шлюз ИЛИ к воротам И фильтра.

При использовании этого флага мини-накопители не могут вызывать KsPinAttachAndGate или KsPinAttachOrGate для связанных экземпляров закрепления. (Флаг фактически делает это для простого случая ИЛИ.) См. также раздел Фильтрация обработки.

KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE

При указании в фильтрующем контакте указывает, что обработка может происходить, когда один или несколько экземпляров закреплений, помеченных таким образом, находятся в состоянии выполнения. Все не остановленные контакты по-прежнему должны быть по крайней мере приостановлены для обработки данных. Не используйте этот флаг, если соответствующий контакт является выходным контактом и этот контакт участвует в преобразовании на месте.

KSPIN_FLAG_DENY_USERMODE_ACCESS

Этот флаг запрещает доступ к этому пин-коду в пользовательском режиме.

KSPIN_FLAG_IMPLEMENT_CLOCK

Указывает, что этот контакт предоставляет часы, которые могут быть выбраны диспетчером графов в качестве master часов. См. также статью Часы AVStream.

InstancesPossible

Задает значение типа ULONG, содержащее максимальное количество возможных экземпляров этого контакта. Любая попытка создать экземпляр, превышающее это число контактов заданного типа, завершается сбоем. Задайте значение KSINSTANCE_INDETERMINATE, чтобы не было ограничений на количество созданных экземпляров контактов.

InstancesNecessary

Задает значение типа ULONG, содержащее минимальное количество контактов определенного типа, которые должны находиться в состоянии не ниже минимального уровня обработки для правильного функционирования фильтра. По умолчанию минимальный уровень обработки KSSTATE_PAUSE, хотя мини-диск может изменить поведение по умолчанию, задав для элемента Flags этой структуры значение KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY или KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE. Любая попытка изменить состояние фильтра без такого числа экземпляров закрепления этого типа завершается ошибкой. Дополнительные сведения см. в разделе Примечания.

AllocatorFraming

Указатель на структуру KSALLOCATOR_FRAMING_EX , содержащую требования к обрамления распределителя для этого типа контактов. Обрамление распределителя определяет такие элементы, как требования к выравниванию памяти, максимальный размер кадра и минимальный размер кадра. Этот элемент может иметь значение NULL, что означает, что этот контакт не поддерживает свойство кадрирования распределителя.

IntersectHandler

Указатель на определяемую драйвером функцию KStrIntersectHandlerEx для обработки пересечения данных. Если этот элемент имеет значение NULL, контакт обрабатывает запросы пересечения данных для диапазонов данных с описателем KSDATAFORMAT_SPECIFIER_NONE. Функция обработчика пересечения получает один диапазон данных из запроса и один диапазон данных из списка контактов диапазонов данных. Идентификаторы GUID типа, подтипа и спецификатора этих диапазонов гарантированно совпадают, хотя некоторые из них могут быть подстановочными знаками. Функция либо указывает, что диапазоны данных не совпадают, либо она создает наилучший формат данных на пересечении двух диапазонов данных. Дополнительные сведения см. в разделе Пересечения диапазонов данных в AVStream .

Комментарии

AMCap и Blink могут не найти интерфейсы тюнера и перекрестной панели в драйвере AVStream, если элемент InstancesNecessary KSPIN_DESCRIPTOR_EX имеет значение 0 для аналогового контактного видеовхода. Чтобы устранить эту проблему, задайте для параметра InstancesNecessary для этого закрепления значение one.

Обратите внимание, что требования к обрамлениям распределителя для вашего контакта могут быть проигнорированы, несмотря на то, что обрамление распределителя указывает, что выравнивание или размер абсолютно требуется для определенного значения. Если драйвер в режиме ядра подключен к вышестоящий фильтру пользовательского режима, который выделяет его, а распределитель конкретного фильтра вышестоящий не понимает требований к кадру, это может произойти (в настоящее время конкретные примеры включают разделитель MPEG-2).

Кроме того, если вы указываете KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING, а контакт использует стандартный механизм транспорта, необходимо иметь объект обработки. Это означает, что должна быть предоставлена некоторая диспетчеризация процесса (на уровне фильтра или на уровне закрепления); даже если эта функция никогда не вызывается, она должна быть предоставлена в этих обстоятельствах.

Пересечения диапазонов данных в разделители AVStream и AVStream.

Требования

Требование Значение
Заголовок ks.h (включая Ks.h)

См. также раздел

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject