Класс CBaseRenderer
Класс 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 | Извлекает пин-код с указанным идентификатором. |
Требования
Требование | Значение |
---|---|
Заголовок |
|
Библиотека |
|