IMFTransform::P rocessInput 方法 (mftransform.h)

将数据传送到此媒体基础转换 (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

某些 MCT 要求输入样本具有有效的持续时间。 某些 MCT 不需要采样持续时间。

MF_E_NO_SAMPLE_TIMESTAMP
输入示例需要时间戳。 若要设置时间戳,请调用 IMFSample::SetSampleTime

某些 MMFT 要求输入样本具有有效的时间戳。 某些 MCT 不需要时间戳。

MF_E_NOTACCEPTING
转换目前无法处理更多输入。
MF_E_TRANSFORM_TYPE_NOT_SET
媒体类型未在一个或多个流上设置。
MF_E_UNSUPPORTED_D3D_TYPE
DirectX 视频加速 (DXVA) 不支持媒体类型。 已启用 DXVA 的解码器可能会返回此错误代码。
 
注意 如果要将 DirectX 媒体对象 (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 方法中处理输入数据。 但是,大多数 MMFT 会等到客户端调用 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 对象

异步处理

前面的说明描述了 同步 处理模型。 若要支持异步处理,请参阅 异步 MCT

要求

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

另请参阅

IMFTransform

Media Foundation 转换