Главные часы
Мини-драйверы могут синхронизировать потоки с часами, созданными другими мини-драйверами; Несколько потоков могут быть синхронизированы с одними часами. Если контакт использует или создает такие master часы, мини-диск должен поддерживать KSPROPERTY_STREAM_MASTERCLOCK. Клиенты также могут использовать это свойство для задания master часов для контакта. Контакты, выполняющие операции отрисовки и записи, часто используют master часы. Мини-диск отвечает за выпуск ссылок на часы после завершения работы.
Интерфейс для master часов — это файловый объект, который поддерживает методы, свойства и события.
Все запросы к объекту файла доступны только в PASSIVE_LEVEL. Однако запрос позиции часов также поддерживается с помощью указателя прямого вызова функции, доступного в DISPATCH_LEVEL, который действителен при условии, что объект файла действителен. Этот прямой вызов должен передаваться в файловый объект часов в качестве параметра контекста.
Дескриптор файла получается с помощью запроса на создание в экземпляре фильтра, так же, как создание маркера выполняется IRP_MJ_CREATE. Запрос вызывает создание дескриптора файла так же, как и дескриптора файла к закреплению с собственными сведениями контекста. Затем этот дескриптор файла передается обратно вызывающей стороне и может использоваться для установки master часов для фильтров режима ядра. Во время назначения фильтру master часов графа экземпляр закрепления может запросить родительский объект файла, чтобы определить, является ли он владельцем master часов.
Если фильтр получает дескриптор файла для этого master часов, его можно использовать для запроса свойств. Если master часы основаны на фильтре в режиме ядра, он должен поддерживать интерфейс для запроса дескриптора файла к части master часов в режиме ядра. Если интерфейс не поддерживается, предполагается, что часы основаны на пользовательском режиме, и фильтры режима ядра не могут синхронизироваться с ним.
Фильтр прокси-сервера DirectShow, запрашивающий дескриптор часов master, затем передает его в базовый дескриптор файла фильтра в режиме ядра. Фильтр режима ядра ссылается на базовый объект файла. Если фильтр уже содержит master часов, он разыменовывает объект файла и использует новый дескриптор. Для этого фильтр должен находиться в состоянии Остановки.
Физическое время объекта master часов часто зависит от оборудования. Если фильтр, который представляет master часы, не имеет физических часов, то время потока будет продолжаться в соответствии с метками времени представленных данных. В такой ситуации метки времени могут прекратиться из-за отсутствия данных.
Физическое время master часов может быть удаленным. В этом случае за точные показания отвечает локальный прокси-сервер. Например, прокси-сервер несет ответственность за компенсацию задержки в подключении 1394 или усреднение задержки по сети. Кроме того, если какой-то другой фильтр ядра является прокси-сервером для второго устройства в той же шине 1394, два устройства могут согласовать частный метод взаимодействия с master часами. В этом случае устройства должны использовать частные интерфейсы для определения типа часов для проверки совместимости.