Поделиться через


структура 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 вызывает отправку обработки, только если мини-driver явно вызывает KsXxxAttemptProcessing. Полезно для клиентов, которые намерены напрямую опрашивать очередь, например время DPC для передачи данных в оборудование.

KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL

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

KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING

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

KSPIN_FLAG_ENFORCE_FIFO

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

KSPIN_FLAG_GENERATE_MAPPINGS

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

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

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

KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY

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

KSPIN_FLAG_SPLITTER

Указывает, что этот пин-код (выходной пин-код) является разбиением. Закрепление, указывающее этот флаг, должно указывать количество возможных экземпляров, превышающих один. При создании второго экземпляра этого пин-кода AVStream автоматически настраивает разделитель, чтобы кадры, отправленные на исходный пин-код, копируются в новый пин-код. Обратите внимание, что это копирование выполняется автоматически AVStream. Клиенты , как правило, могут игнорировать пин-коды процесса, не имеющиеNULLДелегатBranch и указатели CopySource. Эти члены указывают, что пин-код является частью ветви разделения и обрабатывается автоматически AVStream. В выпусках post-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 в качестве ворота кадра для каждого экземпляра пин-кода и присоединения этого ворот ИЛИ к воротам фильтра.

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

KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE

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

KSPIN_FLAG_DENY_USERMODE_ACCESS

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

KSPIN_FLAG_IMPLEMENT_CLOCK

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

InstancesPossible

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

InstancesNecessary

Указывает значение типа ULONG, содержащее минимальное количество контактов заданного типа пин-кода, которые должны находиться в состоянии на минимальном уровне обработки для правильного функционирования фильтра. По умолчанию минимальный уровень обработки KSSTATE_PAUSE, хотя мини-driver может изменить поведение по умолчанию, установив для элемента Флаги этой структуры значение 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 имеет значение нулю для аналогового пин-кода ввода видео. Чтобы устранить эту проблему, задайте InstancesNecessary для этого закрепления.

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

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

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

Требования

Требование Ценность
заголовка ks.h (include Ks.h)

См. также

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject