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


Класс CPullPin

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

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

Класс CPullPin обеспечивает поддержку входных контактов, которые извлекает данные через интерфейс IAsyncReader . Используйте этот класс, если вы реализуете фильтр, который использует модель извлечения для запроса данных из фильтра вышестоящий. Дополнительные сведения см. в разделе Поток данных в графе фильтра и модели по запросу.

Этот класс не является производным от CBasePin и не реализует интерфейс IPin , а некоторые имена методов конфликтуют с IPin, поэтому его лучше использовать в качестве вспомогательного объекта внутри контакта. Чтобы использовать этот класс, выполните следующие действия.

  1. Наследуйте вспомогательный класс от CPullPin, а класс входного закрепления — от CBasePin. Объявите экземпляр объекта как CPullPin переменную-член класса pin.
  2. Переопределите метод CBasePin::CheckConnect для вызова CPullPin::Connect. Этот метод запрашивает другой контакт для IAsyncReader.
  3. Переопределите метод CBasePin::BreakConnect , чтобы вызвать CPullPin::D isconnect.
  4. Переопределите метод CBasePin::Active для вызова CPullPin::Active. Этот метод запускает рабочий поток, который извлекает примеры из фильтра вышестоящий. При подключении контактов можно указать, будет ли рабочий поток выполнять асинхронные или синхронные запросы на чтение.
  5. Переопределите метод CBasePin::Inactive для вызова CPullPin::Inactive. Этот метод завершает работу рабочего потока.
  6. Реализуйте чистый виртуальный метод CPullPin::Receive для обработки входящих примеров и их доставки ниже.
  7. Чтобы задать позиции stop и start или найти поток, вызовите метод CPullPin::Seek . Этот метод приостанавливает рабочий поток и очищает граф фильтра.
  8. Реализуйте чистые виртуальные методы CPullPin::EndOfStream, CPullPin::BeginFlush и CPullPin::EndFlush , как описано в примечаниях для этих методов.
  9. Реализуйте чистый виртуальный метод CPullPin::OnError для обработки ошибок потоковой передачи.
Открытые переменные-члены Описание
m_pAlloc Указатель на интерфейс IMemAllocator распределителя памяти.
Открытые методы Описание
Активных Создает рабочий поток, который извлекает данные из выходного закрепления.
AlignDown Усекает значение до указанной границы выравнивания.
Выравнивание Округляет значение до указанной границы выравнивания.
Подключения Завершает подключение к выходному закреплению.
CPullPin Метод конструктора.
~CPullPin Метод деструктора. Виртуальной.
DecideAllocator Согласовывает распределителя с выходным закреплением. Виртуальной.
Отключение Клюв соединения с выходным закреплением.
Duration Извлекает длительность потока.
GetReader Возвращает указатель на интерфейс IAsyncReader выходного контакта.
Неактивно Завершает работу рабочего потока, который извлекает данные из выходного закрепления.
Seek Задает начальную и стоп-позицию потока.
Чистые виртуальные методы Описание
BeginFlush Сообщает фильтру-владельцев для очистки подчиненных фильтров.
EndFlush Сообщает фильтру владельцев о завершении операции очистки.
EndOfStream Вызывается после того, как объект доставляет последний пример.
OnError Вызывается при возникновении ошибки во время потоковой передачи.
Receive Вызывается, когда объект получает образец носителя из выходного закрепления.

Требования

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