MFT_OUTPUT_DATA_BUFFER 结构 (mftransform.h)
包含有关媒体基础转换的输出缓冲区的信息。 此结构在 IMFTransform::P rocessOutput 方法中使用。
语法
typedef struct _MFT_OUTPUT_DATA_BUFFER {
DWORD dwStreamID;
IMFSample *pSample;
DWORD dwStatus;
IMFCollection *pEvents;
} MFT_OUTPUT_DATA_BUFFER, *PMFT_OUTPUT_DATA_BUFFER;
成员
dwStreamID
输出流标识符。 在调用 ProcessOutput 之前,请将此成员设置为有效的流标识符。
异常:如果 IMFTransform::GetStreamIDs 方法返回E_NOTIMPL,MFT 将忽略此成员,并使用 ProcessOutput 方法中 pOutputSamples 数组的索引作为流标识符。 换句话说,它将数组中的第一个元素用于流 0,第二个元素用于流 1,依此类推。 在这种情况下,建议 (但不要求调用方设置 dwStreamID 等于数组索引) 。
pSample
指向 IMFSample 接口的 指针。 在调用 ProcessOutput 之前,请将此成员设置为有效的 IMFSample 指针或 NULL。 有关更多信息,请参见备注。
dwStatus
在调用 ProcessOutput 之前,将此成员设置为零。 当方法返回时,MFT 可能会将 成员设置为等于 _MFT_OUTPUT_DATA_BUFFER_FLAGS 枚举中的值。 否则,MFT 将此成员保留为零。
pEvents
在调用 ProcessOutput 之前,将此成员设置为 NULL。 在输出时,MFT 可能会将此成员设置为有效的 IMFCollection 接口指针。 指针表示包含零个或多个事件的集合。 若要获取每个事件,请调用 IMFCollection::GetElement 并查询 IMFMediaEvent 接口返回的 IUnknown 指针。 当 ProcessOutput 方法返回时,如果指针不为 NULL,则调用方负责释放 IMFCollection 指针。
注解
必须为每个选定的输出流提供 MFT_OUTPUT_DATA_BUFFER 结构。
MRT 可以为输出示例支持两种不同的分配模型:
- MFT 分配输出示例。
- 客户端分配输出示例。
标志 | 分配模型 |
---|---|
MFT_OUTPUT_STREAM_PROVIDES_SAMPLES | MFT 为流分配输出样本。 将此流的 pSample 设置为 NULL 。 |
MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES | MFT 支持这两种分配模型。 |
两者都不 (默认) | 客户端必须为流分配输出样本。 |
ProcessOutput 的行为取决于 pSample 的初始值和 ProcessOutput 方法中 dwFlags 参数的值。
-
如果 pSample 为 NULL 且 dwFlags 包含MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER标志,则 MFT 将放弃输出数据。
限制:此输出流必须具有 MFT_OUTPUT_STREAM_DISCARDABLE 或 MFT_OUTPUT_STREAM_LAZY_READ 标志。 (若要获取输出流的标志,请调用 IMFTransform::GetOutputStreamInfo 方法。)
-
如果 pSample 为 NULL 且 dwFlags 不包含MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER,则 MFT 会提供输出数据的示例。 MFT 将 pSample 设置为指向它提供的示例。 MFT 可以分配新样本或重复使用输入样本。
限制:此输出流必须具有 MFT_OUTPUT_STREAM_PROVIDES_SAMPLES 或 MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES 标志。
-
如果 pSample 为非 NULL,则 MFT 使用调用方提供的示例。
限制:此输出流不得具有MFT_OUTPUT_STREAM_PROVIDES_SAMPLES标志。
每次调用 ProcessOutput 可以生成零个或多个事件,每个输出流最多可以生成一个样本。
要求
最低受支持的客户端 | Windows Vista [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2008 [桌面应用 | UWP 应用] |
标头 | mftransform.h |