Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Если фильтр использует центрированную на фильтре обработку, то по умолчанию AVStream вызывает предоставленную минидрайвером подпрограмму обратного вызова AVStrMiniFilterProcess, когда в каждом экземпляре пина доступны кадры данных. Минидрайверы могут изменить поведение по умолчанию, установив элемент Flags структуры KSPIN_DESCRIPTOR_EX.
Для реализации обработки, ориентированной на фильтрацию, укажите указатель на подпрограмму обратного вызова AVStrMiniFilterProcess в элементе Process структуры KSFILTER_DISPATCH. Установите элемент Process структуры KSPIN_DISPATCH в NULL.
AVStream вызывает AVStrMiniFilterProcess только при выполнении всех следующих условий:
Кадры доступны на закреплении, для которых требуется обработка кадров. Минидрайверы могут изменять процесс обработки, задав флаги в элементе FlagsKSPIN_DESCRIPTOR_EX. Обратите особое внимание на сочетания взаимоисключающих флагов, таких как KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING и KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING. Минидрайвер также может модифицировать набор выводов, требующих кадры, с помощью подпрограмм KsPinAttachAndGate или KsPinAttachOrGate.
Число экземпляров контактов равно или превышает член InstancesNecessary структуры KSPIN_DESCRIPTOR_EX. Член ClientState структуры KSPIN указывает конкретный перечислитель KSSTATE , в котором в данный момент задан пин-код. После выполнения InstancesNecessary дополнительные пины в состоянии KSSTATE_STOP не будут препятствовать обработке фильтра.
Требуемое количество пин-экземпляров достигнуто, как указано элементом InstancesNecessary структуры KSPIN_DESCRIPTOR_EX.
Минидрайвер не закрыл управляющий шлюз фильтра, используя функции KSGATEXxx.
В подпрограмме обратного вызова AVStrMiniFilterProcess минидрайвер получает указатель на массив структур KSPROCESSPIN_INDEXENTRY. AVStream упорядочивает массив структур KSPROCESSPIN_INDEXENTRY по идентификатору пина.
В следующих примерах кода показано, как использовать структуры закрепления процесса. Код взят из примера AVStream Filter-Centric имитированного драйвера захвата (Avssamp), который демонстрирует, как написать драйвер захвата, ориентированный на фильтр. Исходный код и описание этого примера включены в скачиваемые примеры пакета драйверов Windows.
Минидрайвер получает массив структур KSPROCESSPIN_INDEXENTRY в диспетчере процесса фильтрации. В этом примере минидрайвер извлекает первую структуру KSPROCESSPIN из структуры KSPROCESSPIN_INDEXENTRY с индексом VIDEO_PIN_ID.
NTSTATUS
CCaptureFilter::
Process (
IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex
)
{
PKSPROCESSPIN VideoPin = NULL;
...
VideoPin = ProcessPinsIndex [VIDEO_PIN_ID].Pins [0];
...
}
Минидрайвер не должен ссылаться на ProcessPinsIndex [n]. Пины [0] перед тем, как проверить, что элемент Count объекта ProcessPinsIndex [n] равен не менее одного или что элемент InstancesNecessary структуры KSPIN_DESCRIPTOR_EX, содержащейся в Пинах [0], равен не менее одного. (Если последний имеет значение true, то пин-код гарантированно существует.)
Затем, чтобы указать пин-код для записи кадров, подпрограмма обратного вызова AVStrMiniFilterProcess передает указатель на структуру KSPROCESSPIN в CaptureFrame, предоставляемую поставщиком подпрограмму захвата:
VidCapPin -> CaptureFrame (VideoPin, m_Tick);
Затем подпрограмма отслеживания может копироваться в элемент данных структуры KSPROCESSPIN или из нее. Он также может обновить элементы BytesUsed и Terminate этой структуры, как показано в следующем примере:
RtlCopyMemory ( ProcessPin -> Data,
m_SynthesisBuffer,
m_VideoInfoHeader -> bmiHeader.biSizeImage
);
ProcessPin -> BytesUsed = m_VideoInfoHeader -> bmiHeader.biSizeImage;
ProcessPin -> Terminate = TRUE;
Минидрайвер также может получить доступ к структуре заголовка потока, соответствующей текущему указателю потока и пину.
PKSSTREAM_HEADER StreamHeader = ProcessPin -> StreamPointer -> StreamHeader;
Большинство минидрайверов, которые используют фильтрационно-ориентированную обработку, применяют указатель потока только для доступа к заголовку потока. В модели, ориентированной на фильтр, AVStream управляет указателем потока внутренне. В результате мини-драйверы должны действовать с осторожностью, если они управляют указателем потока в фильтрующем драйвере.