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


Класс CBaseRenderer

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

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

Класс CBaseRenderer является базовым классом для реализации фильтров отрисовщика. Он поддерживает один входной контакт, реализованный классом CRendererInputPin . Чтобы использовать этот класс, объявите производный класс, который наследует CBaseRenderer. Как минимум, производный класс должен реализовывать следующие методы, объявленные как чистые виртуальные в базовом классе:

  • CBaseRenderer::CheckMediaType: принимает или отклоняет предлагаемые типы мультимедиа. Фильтр вызывает этот метод во время процесса соединения с закреплением.
  • CBaseRenderer::D oRenderSample: отрисовывает пример. Фильтр вызывает этот метод для каждого примера, который он получает во время выполнения.

Базовый класс обрабатывает изменения состояния и проблемы синхронизации. Он также планирует отрисовку примеров, хотя не реализует никаких мер контроля качества. Базовый класс также объявляет несколько методов обработчика. Это методы, которые фильтр вызывает в определенных точках процесса потоковой передачи. Они ничего не делают в базовом классе, но производный класс может их переопределить. В следующей таблице они перечислены под заголовком Открытые методы: обработчики.

Обработчик CBaseRenderer::OnReceiveFirstSample заслуживает особого упоминание. Фильтр вызывает этот метод, если он получает образец во время приостановки фильтра. Это может произойти, если граф переключается с остановленного на приостановленный или если граф ищется во время приостановки. Видео отрисовщики обычно используют пример для отображения неподвижного кадра. Когда фильтр переключается с приостановленного на запущенный, он отправляет тот же пример методу CBaseRenderer::D oRenderSample в качестве первого примера в потоке.

Класс CBaseRenderer предоставляет интерфейсы IMediaSeeking и IMediaPosition через объект CRendererPosPassThru . Все запросы на поиск передаются в следующий фильтр вышестоящий.

Планирование

Когда фильтр вышестоящий вызывает метод IMemInputPin::Receive входного контакта для доставки примера, контакт передает этот вызов методу CBaseRenderer::Receive фильтра. Фильтр либо удаляет пример, сразу же отрисовывает его, либо планирует его отрисовку.

Если в образце нет меток времени или нет ссылочных часов, фильтр немедленно отрисовывает пример. В противном случае фильтр вызывает метод CBaseRenderer::ShouldDrawSampleNow , чтобы определить, что делать. По умолчанию выборка планируется на основе меток времени. Производный класс может переопределить ShouldDrawSampleNow для поддержки контроля качества.

Чтобы запланировать пример, фильтр вызывает метод IReferenceClock::AdviseTime , который создает запрос на получение рекомендаций. Затем метод Receive блокируется до запланированного времени или до изменения состояния фильтра. Блокировка предотвращает доставку дополнительных образцов фильтром вышестоящий до отрисовки текущего примера.

Когда фильтр вышестоящий вызывает метод IPin::EndOfStream, чтобы сообщить о конце потока, фильтр отправляет EC_COMPLETE событие в диспетчер графа фильтров. Фильтр ожидает времени остановки текущего примера перед отправкой события.

Защищенные переменные-члены Описание
m_bAbort Флаг, указывающий, следует ли остановить отрисовку и отклонить дальнейшие выборки.
m_bEOS Флаг, указывающий, был ли достигнут конец потока.
m_bEOSDelivered Флаг, указывающий, опубликовал ли фильтр событие EC_COMPLETE.
m_bInReceive Флаг, указывающий, обрабатывает ли фильтр вызов приема .
m_bRepaintStatus Флаг, который включает или отключает события перекраски.
m_bStreaming Флаг, указывающий, является ли фильтр потоковой передачей данных.
m_dwAdvise Идентификатор события таймера, которое планирует отрисовку.
m_EndOfStreamTimer Идентификатор события таймера для планирования уведомлений EC_COMPLETE.
m_evComplete Событие, которое подается по завершении перехода состояния.
m_InterfaceLock Блокировка состояния фильтра.
m_ObjectCreationLock Блокировка для защиты создания объектов внутри фильтра.
m_pInputPin Указатель на входной контакт фильтра.
m_pMediaSample Указатель на текущий пример носителя.
m_pPosition Вспомогательный объект для передачи команд поиска вышестоящий.
m_pQSink Указатель на объект , получающий сообщения о контроле качества.
m_RendererLock Блокировка потоковой передачи.
m_RenderEvent Событие, используемое для планирования отрисовки.
m_SignalTime Время остановки в текущем примере.
m_ThreadSignal Событие, используемое для освобождения потока потоковой передачи.
Открытые методы Описание
CancelNotification Отменяет событие таймера, которое планирует отрисовку. Виртуальной.
CBaseRenderer Метод конструктора.
~CBaseRenderer Метод деструктора.
GetMediaPositionInterface Извлекает указатели интерфейса IMediaPosition и IMediaSeeking фильтра. Виртуальной.
GetPin Извлекает закрепление. Виртуальной.
GetPinCount Извлекает количество контактов. Виртуальной.
GetSampleTimes Извлекает метки времени из примера. Виртуальной.
OnDisplayChange Публикует событие EC_DISPLAY_CHANGED диспетчеру графов фильтров.
PrepareReceive Готовится к отрисовке примера. Виртуальной.
Receive Получает следующий пример мультимедиа в потоке. Виртуальной.
Визуализации Отрисовывает пример. Виртуальной.
ScheduleSample Планирует отрисовку примера. Виртуальной.
SendNotifyWindow Уведомляет фильтр вышестоящий дескриптора окна видео.
SendRepaint Отправляет событие repaint в диспетчер графов фильтров.
SetMediaType Вызывается, когда задан тип носителя контакта. Виртуальной.
SignalTimerFired Очищает идентификатор таймера, используемый для планирования отрисовки.
SourceThreadCanWait Содержит или освобождает поток потоковой передачи. Виртуальной.
WaitForReceiveToComplete Ожидает завершения метода CBaseRenderer::Receive .
WaitForRenderTime Ожидает времени презентации текущего примера. Виртуальной.
Открытые методы: методы доступа Описание
ClearPendingSample Освобождает текущий пример. Виртуальной.
GetCurrentSample Извлекает текущий пример. Виртуальной.
GetRealState Извлекает состояние фильтра.
GetRenderEvent Извлекает событие, которое планирует отрисовку.
HaveCurrentSample Определяет, содержит ли фильтр пример. Виртуальной.
IsEndOfStream Запрашивает, получено ли уведомление об окончании потока.
IsEndOfStreamDelivered Запрашивает, доставлено ли событие EC_COMPLETE диспетчеру графов фильтров.
IsStreaming Запрашивает, выполняет ли фильтр потоковую передачу данных.
SetAbortSignal Задает флаг, указывающий, следует ли прекратить отрисовку и отклонить дополнительные примеры.
SetRepaintStatus Включает или отключает события перекраски.
Открытые методы: методы State-Change Описание
Активных Вызывается при переключении состояния на приостановленное или запущенное. Виртуальной.
BeginFlush Начинает операцию очистки. Виртуальной.
BreakConnect Освобождает входной пин-код из подключения. Виртуальной.
CheckReady Запрашивает, завершен ли переход состояния.
CompleteConnect Завершает подключение входного контакта к другому контакту. Виртуальной.
CompleteStateChange Определяет, завершен ли переход в приостановленное состояние. Виртуальной.
EndFlush Завершает операцию очистки. Виртуальной.
Неактивно Вызывается при переключении состояния на остановленное. Виртуальной.
NotReady Сигнализирует о том, что переход состояния еще не завершен.
Ready Сигнализирует о завершении перехода состояния.
StartStreaming Инициирует потоковую передачу, когда фильтр переходит в состояние выполнения. Виртуальной.
StopStreaming Останавливает потоковую передачу при выходе фильтра из состояния выполнения. Виртуальной.
Открытые методы: методы конца потока Описание
EndOfStream Уведомляет фильтр о том, что входной пин-код получил уведомление об окончании потока. Виртуальной.
NotifyEndOfStream Публикует событие EC_COMPLETE в диспетчере графов фильтров.
ResetEndOfStream Сбрасывает флаги окончания потока.
ResetEndOfStreamTimer Отменяет таймер, который планирует EC_COMPLETE уведомления. Виртуальной.
SendEndOfStream Если был достигнут конец потока, планирует событие EC_COMPLETE для диспетчера графов фильтров. Виртуальной.
ТаймерCallback Метод обратного вызова для события таймера конца потока.
Открытые методы: обработчики Описание
OnReceiveFirstSample Вызывается, когда фильтр получает пример во время приостановки. Виртуальной.
OnRenderEnd Вызывается после отрисовки примера. Виртуальной.
OnRenderStart Вызывается при запуске отрисовки. Виртуальной.
OnStartStreaming Вызывается, когда фильтр начинает потоковую передачу. Виртуальной.
OnStopStreaming Вызывается, когда фильтр прекращает потоковую передачу. Виртуальной.
OnWaitEnd Вызывается, когда фильтр завершен в ожидании времени презентации примера. Виртуальной.
OnWaitStart Вызывается, когда фильтр начинает ожидать время презентации примера. Виртуальной.
PrepareRender Вызывается перед отображением фильтра примера. Виртуальной.
ShouldDrawSampleNow Определяет, как планируется отрисовка примера. Виртуальной.
Чистые виртуальные методы Описание
CheckMediaType Определяет, принимает ли фильтр определенный тип мультимедиа.
DoRenderSample Отрисовывает пример.
Методы IMediaFilter Описание
GetState Извлекает состояние фильтра (выполняется, остановлено или приостановлено).
Пауза Приостанавливает фильтр.
Выполнить Запускает фильтр.
Остановить Останавливает фильтр.
Методы IBaseFilter Описание
FindPin Извлекает пин-код с указанным идентификатором.

Требования

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