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