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 视频加速 (DXVA) 不支持媒体类型。 启用了 DXVA 的解码器可能会返回此错误代码。
 
注意 如果要将 DirectX Media 对象 (DMO) 转换为 MFT,请注意 ,S_FALSE 不是 IMFTransform::P rocessInput 的有效返回代码,与 IMediaObject::P rocessInput 方法不同。
 

注解

在大多数情况下,如果该方法成功,MFT 会存储样本,并在 IMFSample 指针上保存引用计数。 在 MFT 发布示例之前,请勿重复使用该示例。 但是,MFT 可能会将示例数据复制到新的缓冲区,而不是存储示例。 在这种情况下,MFT 应在 IMFTransform::GetInputStreamInfo 方法中设置MFT_INPUT_STREAM_DOES_NOT_ADDREF标志。

如果 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 从 IMFTransform::P rocessOutput 方法返回MF_E_TRANSFORM_NEED_MORE_INPUT。 如果 MFT 删除了任何数据,则应在下一个输出示例中设置 MFSampleExtension_Discontinuity 属性属性,以通知调用方数据流存在差距。

如果在包括 mftransform.h 之前定义 MFT_UNIQUE_METHOD_NAMES ,则此方法将重命名 为 MFTProcessInput。 请参阅 创建混合 DMO/MFT 对象

异步处理

上述备注描述了 同步 处理模型。 若要支持异步处理,请参阅 异步 MFT

要求

   
最低受支持的客户端 Windows Vista [桌面应用|UWP 应用]
最低受支持的服务器 Windows Server 2008 [桌面应用|UWP 应用]
目标平台 Windows
标头 mftransform.h
Library Mfuuid.lib

另请参阅

IMFTransform

Media Foundation 转换