Класс CSource
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Класс CSource является базовым классом для реализации исходных фильтров. Фильтр, производный от CSource , содержит один или несколько выходных контактов, производных от класса CSourceStream . Каждый выходной контакт создает рабочий поток, который отправляет примеры мультимедиа вниз.
Примечание
Класс CSource предназначен для поддержки модели отправки для потока данных. Этот класс не рекомендуется использовать для создания фильтров чтения файлов. Средства чтения файлов должны поддерживать модель извлечения через интерфейс IAsyncReader . Дополнительные сведения см. в разделе Поток данных для разработчиков фильтров.
Защищенные переменные-члены | Описание |
---|---|
m_iPins | Количество контактов на фильтре. |
m_paStreams | Массив контактов. |
m_cStateLock | Объект критического раздела, защищающий состояние фильтра. |
Открытые методы | Описание |
CSource | Метод конструктора. |
~CSource | Метод деструктора. |
GetPinCount | Извлекает количество контактов в фильтре. |
GetPin | Извлекает закрепление. |
pStateLock | Извлекает указатель на объект критического раздела фильтра. |
AddPin | Добавляет новый выходной контакт в фильтр. |
RemovePin | Удаляет указанный контакт из фильтра. |
FindPinNumber | Извлекает номер указанного контакта в фильтре. |
Методы IBaseFilter | Описание |
FindPin | Извлекает пин-код с указанным идентификатором. |
Комментарии
Чтобы реализовать выходную закрепку, выполните следующие действия.
- Наследуйте класс от CSourceStream.
- Переопределите метод CSourceStream::GetMediaType и, возможно, метод CSourceStream::CheckMediaType , которые проверяют типы носителей для закрепления.
- Реализуйте метод CBaseOutputPin::D ecideBufferSize , который возвращает требования к буферу контакта.
- Реализуйте метод CSourceStream::FillBuffer , который заполняет буфер образца мультимедиа данными.
Чтобы реализовать фильтр, выполните следующие действия.
- Наследуйте класс от CSource.
- В конструкторе создайте один или несколько выходных контактов, производных от CSourceStream. Контакты автоматически добавляются в фильтр в методах конструктора и удаляются в методах деструктора.
Чтобы синхронизировать состояние фильтра между несколькими потоками, вызовите метод CSource::p StateLock . Этот метод возвращает указатель на критический раздел состояния фильтра. Используйте класс CAutoLock для хранения критического раздела. Из закрепления вы можете получить доступ к pStateLock из переменной члена CBasePin::m_pFilter контакта следующим образом:
CAutoLock lock(m_pFilter->pStateLock());
Требования
Требование | Значение |
---|---|
Заголовок |
|
Библиотека |
|