Класс CBaseRenderer

cbaserenderer class hierarchy

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

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

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

Обработчик 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 Флаг, указывающий, обрабатывает ли фильтр вызов receive .
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 Готовится к отрисовке примера. Виртуальной.
Получить Получает следующий пример мультимедиа в потоке. Виртуальной.
Render Отрисовывает пример. Виртуальной.
ScheduleSample Планирует образец для отрисовки. Виртуальной.
SendNotifyWindow Уведомляет вышестоящий фильтр дескриптора окна видео.
SendRepaint Отправляет событие перепаковки диспетчеру графов фильтров.
SetMediaType Вызывается при установке типа носителя пин-кода. Виртуальной.
SignalTimerFired Очищает идентификатор таймера, используемый для планирования отрисовки.
SourceThreadCanWait Содержит или освобождает поток потоковой передачи. Виртуальной.
WaitForReceiveToComplete Ожидает завершения метода CBaseRenderer::Receive .
WaitForRenderTime Ожидает времени презентации текущего примера. Виртуальной.
Открытые методы: методы accessor Описание
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 для диспетчера графов фильтров. Виртуальной.
TimerCallback Метод обратного вызова для события таймера завершения потока.
Открытые методы: обработчики Описание
OnReceiveFirstSample Вызывается, когда фильтр получает образец во время приостановки. Виртуальной.
OnRenderEnd Вызывается после отрисовки примера. Виртуальной.
OnRenderStart Вызывается при запуске отрисовки. Виртуальной.
OnStartStreaming Вызывается, когда фильтр начинает потоковую передачу. Виртуальной.
OnStopStreaming Вызывается, когда фильтр прекращает потоковую передачу. Виртуальной.
OnWaitEnd Вызывается, когда фильтр будет завершен в ожидании времени презентации образца. Виртуальной.
OnWaitStart Вызывается, когда фильтр начинает ожидать времени презентации образца. Виртуальной.
PrepareRender Вызывается перед отображением образца фильтра. Виртуальной.
ShouldDrawSampleNow Определяет, как планируется отрисовка примера. Виртуальной.
Чистые виртуальные методы Описание
CheckMediaType Определяет, принимает ли фильтр определенный тип мультимедиа.
DoRenderSample Отрисовывает пример.
Методы IMediaFilter Описание
GetState Извлекает состояние фильтра (выполняется, остановлено или приостановлено).
Приостановить Приостанавливает фильтр.
Выполнить Запускает фильтр.
Остановить Останавливает фильтр.
Методы IBaseFilter Описание
FindPin Извлекает пин-код с указанным идентификатором.

Требования

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