Фильтры KS
Фильтр — это группа узлов, которая инкапсулирует задачу обработки, выполняемую в потоке данных. Контакты служат в качестве входного и выходного канала для фильтра.
Простой фильтр может содержать один контакт приемника данных и один контакт источника данных. Фильтр получает входящие данные в контакте приемника данных, обрабатывает их внутренне и записывает в контакт источника данных. На следующем рисунке контакты показаны в виде тяжелых сегментов линии. На внутреннем сервере фильтр подключает контакт приемника данных к внутреннему блоку обработки — узлу, который, в свою очередь, подключен к контакту источника данных.
Другое устройство может объединять или разделять потоки данных между контактами. Например, аудиомикшер поддерживает несколько контактов приемника данных. Микшер объединяет их в один поток и записывает этот поток в контакт источника данных. На следующем рисунке показан поток данных.
Граф описывает внутреннюю связь между контактами фильтра. Более сложный фильтр может инкапсулировать несколько узлов, которые преобразуют данные, проходящие через фильтр.
Фильтры определяют внутренние подключения между контактами и внутренними узлами с помощью набора свойств KSPROPSETID_Topology .
Свойство KSPROPERTY_TOPOLOGY_CONNECTIONS запрашивает все соединения между узлами фильтра KS. Это свойство возвращает массив KSTOPOLOGY_CONNECTION. Каждая структура KSTOPOLOGY_CONNECTION представляет собой одно подключение к пути к данным внутри фильтра. На приведенной выше схеме микшера последовательность KSTOPOLOGY_CONNECTION структур может быть следующей:
// FromNode, FromNodePin, ToNode, ToNodePin,
{
{ KSFILTER_NODE, 0, 0, 0 },
{ 0, 1, KSFILTER_NODE, 1 }
}