媒体基础转换(Media Foundation Transforms)全解析
1. MFT 操作模式
MFT 有几种主要的操作模式,这些模式决定了 MFT 在处理数据时的行为:
- MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES :表明 MFT 可以提供自己的样本,也可以填充传入的样本。如果在 GetOutputStreamFormat()
调用中既未设置此标志,也未设置 MFT_OUTPUT_STREAM_PROVIDES_SAMPLES
标志,客户端必须在 MFT_OUTPUT_DATA_BUFFER
结构中提供一个样本,MFT 会在 ProcessOutput()
调用期间填充该样本。
- MFT_OUTPUT_STREAM_LAZY_READ :表示如果客户端空间不足且 ProcessInput()
函数持续被调用,客户端将丢弃内部样本和数据。在此模式下运行的 MFT 在满时, ProcessInput()
函数永远不会返回 MF_E_NOTACCEPTING
错误,而是直接丢弃额外的数据。
例如,图像注入器 MFT 在 ProcessOutput()
调用中提供样本,具体来说,它会重写 ProcessInput()
调用中发送的样本信息,并在 ProcessOutput()