Метод CBaseInputPin.Receive
Метод Receive
получает следующий образец мультимедиа в потоке. Этот метод реализует метод IMemInputPin::Receive .
Синтаксис
HRESULT Receive(
IMediaSample *pSample
);
Параметры
-
pSample
-
Указатель на интерфейс IMediaSample примера.
Возвращаемое значение
Возвращает значение HRESULT . Возможные значения включают те, которые перечислены в следующей таблице.
Код возврата | Описание |
---|---|
|
Успешно. |
|
Закрепление в настоящее время очищается; Выборка отклонена. |
|
Аргумент указателя NULL. |
|
Недопустимый тип носителя. |
|
Произошла ошибка во время выполнения. |
|
Закрепление остановлено. |
Remarks
Вышестоящий выходной пин-код вызывает этот метод для доставки образца во входной пин-код. Входной контакт должен выполнять одно из следующих действий:
- Обработайте образец перед возвратом.
- Возвращает и обрабатывает пример в рабочем потоке.
- Отклоните пример.
Если пин-код использует рабочий поток для обработки примера, добавьте счетчик ссылок в пример внутри этого метода. После возврата метода вышестоящий пин-код освобождает образец. Когда число ссылок образца достигает нуля, пример возвращается в распределитель для повторного использования.
Этот метод является синхронным и может блокироваться. Если метод может блокироваться, метод pin-кода CBaseInputPin::ReceiveCanBlock должен возвращать S_OK.
В базовом классе этот метод выполняет следующие действия:
- Вызывает метод CBaseInputPin::CheckStreaming , чтобы убедиться, что пин-код может обрабатывать примеры сейчас. Если не удается, например, если закрепление остановлено, метод завершается ошибкой.
- Извлекает пример свойств и проверяет, изменился ли формат (см. ниже).
- Если формат изменился, метод вызывает метод CBasePin::CheckMediaType , чтобы определить допустимость нового формата.
- Если новый формат недопустим, метод вызывает метод CBasePin::EndOfStream , публикует событие EC_ERRORABORT и возвращает код ошибки.
- Если ошибок не было, метод возвращает S_OK.
Проверьте изменение формата следующим образом:
- Если пример поддерживает интерфейс IMediaSample2 , проверьте элемент dwSampleFlags структуры AM_SAMPLE2_PROPERTIES . Если флаг AM_SAMPLE_TYPECHANGED присутствует, формат изменился.
- В противном случае, если пример не поддерживает IMediaSample2, вызовите метод IMediaSample::GetMediaType . Если метод возвращает значение, отличное от NULL , формат изменился.
В базовом классе этот метод не обрабатывает пример. Производный класс должен переопределить этот метод для выполнения обработки. (То, что это влечет за собой, полностью зависит от фильтра.) Производный класс должен вызывать метод базового класса, чтобы проверить наличие ошибок, описанных ранее.
Требования
Требование | Значение |
---|---|
Заголовок |
|
Библиотека |
|