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


Метод IMFTransform::P rocessInput (mftransform.h)

Доставляет данные во входной поток в этом преобразовании Media Foundation (MFT).

Синтаксис

HRESULT ProcessInput(
  [in] DWORD     dwInputStreamID,
  [in] IMFSample *pSample,
  [in] DWORD     dwFlags
);

Параметры

[in] dwInputStreamID

Идентификатор входного потока. Чтобы получить список идентификаторов потоков, вызовите IMFTransform::GetStreamIDs.

[in] pSample

Указатель на интерфейс IMFSample входного образца. Пример должен содержать по крайней мере один буфер мультимедиа, содержащий допустимые входные данные.

[in] dwFlags

Зарезервировано. Должен равняться нулю.

Возвращаемое значение

Метод возвращает HRESULT. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице.

Код возврата Описание
S_OK
Метод выполнен успешно.
E_INVALIDARG
Недопустимый аргумент.
MF_E_INVALIDSTREAMNUMBER
Недопустимый идентификатор потока.
MF_E_NO_SAMPLE_DURATION
Входной пример требует допустимой длительности выборки. Чтобы задать длительность, вызовите IMFSample::SetSampleDuration.

Для некоторых MFT требуется, чтобы входные образцы имели действительную длительность. Некоторые MFT не требуют длительности выборки.

MF_E_NO_SAMPLE_TIMESTAMP
Для входного примера требуется метка времени. Чтобы задать метку времени, вызовите IMFSample::SetSampleTime.

Для некоторых MFT требуется, чтобы входные образцы имели допустимые метки времени. Некоторые MFT не требуют меток времени.

MF_E_NOTACCEPTING
В настоящее время преобразование не может обработать больше входных данных.
MF_E_TRANSFORM_TYPE_NOT_SET
Тип мультимедиа не задан в одном или нескольких потоках.
MF_E_UNSUPPORTED_D3D_TYPE
Тип мультимедиа не поддерживается для DirectX Video Acceleration (DXVA). Декодер с поддержкой DXVA может вернуть этот код ошибки.
 
Примечание При преобразовании объекта мультимедиа DirectX (DMO) в MFT следует помнить, что S_FALSE не является допустимым кодом возврата для IMFTransform::P rocessInput, в отличие от метода IMediaObject::P rocessInput .
 

Комментарии

В большинстве случаев, если метод завершается успешно, MFT сохраняет выборку и содержит счетчик ссылок на указатель IMFSample . Не используйте пример повторно до тех пор, пока MFT не выпустит пример. Однако вместо хранения примера MFT может скопировать пример данных в новый буфер. В этом случае MFT должен установить флаг MFT_INPUT_STREAM_DOES_NOT_ADDREF в методе IMFTransform::GetInputStreamInfo .

Если MFT уже имеет достаточно входных данных для создания выходного примера, он не принимает новые входные данные, и ProcessInput возвращает MF_E_NOTACCEPTING. На этом этапе клиент должен очистить ожидающие входные данные, выполнив одно из следующих действий:

Исключением из этого правила является флаг MFT_OUTPUT_STREAM_LAZY_READ . При наличии этого флага преобразование отменит сохраненные примеры, если вы предоставите ему больше входных данных. Дополнительные сведения см. в разделе IMFTransform::GetOutputStreamInfo. Преобразование никогда не должно ставить в очередь больше входных данных, чем требуется для получения правильных выходных данных.

MFT может обрабатывать входные данные в методе ProcessInput . Однако большинство MFT ожидают, пока клиент не вызовет ProcessOutput.

После того как клиент настроит допустимые типы носителей для всех потоков, MFT всегда должен находиться в одном из двух состояний: "Может принимать больше входных данных" или может создавать больше выходных данных. Он никогда не должен находиться ни в обоих состояниях, ни в обоих состояниях. MFT должен принимать только столько входных данных, сколько необходимо для создания по крайней мере одного выходного примера, после чего ProcessInput возвращает MF_E_NOTACCEPTING. Когда ProcessInput возвращает MF_E_NOTACCEPTING, клиент может предположить, что MFT готов к выводу.

Если MFT сталкивается с неустранимой ошибкой во входных данных, он может просто удалить данные и попытаться восстановить, когда получает больше входных данных. Чтобы запросить дополнительные входные данные, MFT возвращает MF_E_TRANSFORM_NEED_MORE_INPUT из метода IMFTransform::P rocessOutput . Если MFT удаляет какие-либо данные, он должен задать атрибут MFSampleExtension_Discontinuity в следующем примере выходных данных, чтобы уведомить вызывающую сторону о наличии пробела в потоке данных.

Если MFT_UNIQUE_METHOD_NAMES определен перед включением mftransform.h, этот метод переименован в MFTProcessInput. См. раздел Создание гибридных объектов DMO/MFT.

Асинхронная обработка

Предыдущие замечания описывают модель синхронной обработки. Сведения о поддержке асинхронной обработки см. в разделе Асинхронные MFT.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header mftransform.h
Библиотека Mfuuid.lib

См. также раздел

IMFTransform

Преобразования Media Foundation