Метод 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. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице.
Код возврата | Описание |
---|---|
|
Метод выполнен успешно. |
|
Недопустимый аргумент. |
|
Недопустимый идентификатор потока. |
|
Входной пример требует допустимой длительности выборки. Чтобы задать длительность, вызовите IMFSample::SetSampleDuration.
Для некоторых MFT требуется, чтобы входные образцы имели действительную длительность. Некоторые MFT не требуют длительности выборки. |
|
Для входного примера требуется метка времени. Чтобы задать метку времени, вызовите IMFSample::SetSampleTime.
Для некоторых MFT требуется, чтобы входные образцы имели допустимые метки времени. Некоторые MFT не требуют меток времени. |
|
В настоящее время преобразование не может обработать больше входных данных. |
|
Тип мультимедиа не задан в одном или нескольких потоках. |
|
Тип мультимедиа не поддерживается для DirectX Video Acceleration (DXVA). Декодер с поддержкой DXVA может вернуть этот код ошибки. |
Комментарии
В большинстве случаев, если метод завершается успешно, MFT сохраняет выборку и содержит счетчик ссылок на указатель IMFSample . Не используйте пример повторно до тех пор, пока MFT не выпустит пример. Однако вместо хранения примера MFT может скопировать пример данных в новый буфер. В этом случае MFT должен установить флаг MFT_INPUT_STREAM_DOES_NOT_ADDREF в методе IMFTransform::GetInputStreamInfo .
Если MFT уже имеет достаточно входных данных для создания выходного примера, он не принимает новые входные данные, и ProcessInput возвращает MF_E_NOTACCEPTING. На этом этапе клиент должен очистить ожидающие входные данные, выполнив одно из следующих действий:
- Создайте новые выходные данные, вызвав IMFTransform::P rocessOutput.
- Очистите входные данные, вызвав IMFTransform::P rocessMessage с сообщением MFT_MESSAGE_COMMAND_FLUSH .
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 |