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


Класс CBaseReferenceClock

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

Иерархия классов cbasereferenceclock

Класс CBaseReferenceClock реализует ссылочные часы.

Защищенные переменные-члены Описание
m_pSchedule Объект CAMSchedule, обрабатывающий задачи планирования для часов.
Защищенные методы Описание
~CBaseReferenceClock Метод деструктора.
Открытые методы Описание
CBaseReferenceClock Метод конструктора.
GetPrivateTime Извлекает данные реального времени из часов.
SetTimeDelta Настраивает внутреннее время часов.
GetSchedule Извлекает указатель на объект планирования часов.
TriggerThread Активирует рабочий поток, обрабатывающий планирование.
Методы IReferenceClock Описание
GetTime Извлекает текущее время ссылки.
AdviseTime Создает одноразовый запрос на консультирование.
AdvisePeriodic Создает периодический запрос на получение рекомендаций.
Отмена отмены Удаляет ожидающий запрос на получение рекомендаций.
Методы IReferenceClockTimerControl Описание
GetDefaultTimerResolution Возвращает текущее разрешение таймера ссылочных часов.
SetDefaultTimerResolution Задает разрешение таймера ссылочных часов.
Вспомогательные функции Описание
ConvertToMilliseconds Преобразует время ссылки в миллисекундах.

Комментарии

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

Объект CBaseReferenceClock поддерживает два разных значения времени:

  • На внутреннем уровне метод CBaseReferenceClock::GetPrivateTime возвращает фактическое время, сохраненное часами.
  • С внешней стороны метод CBaseReferenceClock::GetTime возвращает время ссылки для графа фильтра.

Это допустимо для того, чтобы внутренние часы выполнялись назад в течение коротких периодов. Например, если часы смещения вперед, фильтр может настроить их назад. (См. раздел CBaseReferenceClock::SetTimeDelta.) Метод GetTime использует значения времени, сообщаемые GetPrivateTime. Однако время отсчета монотонно увеличивается; другими словами, он никогда не бежит назад. Таким образом, если внутренние часы выполняются назад, GetTime продолжает сообщать о старом времени до тех пор, пока внутренние часы не наверстят упущенное.

Например, два метода могут возвращать следующие последовательности:

GetPrivateTime: 105, 106, 103, 104, 105, 106, 107, 108
GetTime:        105, 106, 106, 106, 106, 106, 107, 108

На третьем тактовом часы внутренние часы прыгают назад до 103. Метод GetTime продолжает сообщать о 106, пока внутренние часы не наверстят упущенное.

По умолчанию GetPrivateTime возвращает системное время через вызов функции timeGetTime . Фильтр, предоставляющий эталонные часы с внешнего устройства, может выполнять одно из следующих действий:

  • Переопределите GetPrivateTime , чтобы вернуть время с устройства.
  • Отслеживайте несоответствие между временем устройства и системным временем и вызовите SetTimeDelta , чтобы внести исправления.

Этот класс использует объект CAMSchedule для обработки планирования запросов на консультирование. Дополнительные сведения см. в документации по классу CAMSchedule .

Требования

Требование Значение
Заголовок
Refclock.h (включая Streams.h)
Библиотека
Strmbase.lib (розничные сборки);
Strmbasd.lib (отладочные сборки)