_MFT_INPUT_STREAM_INFO_FLAGS 枚举 (mftransform.h)
描述媒体基础转换 (MFT) 上的输入流。
语法
typedef enum _MFT_INPUT_STREAM_INFO_FLAGS {
MFT_INPUT_STREAM_WHOLE_SAMPLES = 0x1,
MFT_INPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER = 0x2,
MFT_INPUT_STREAM_FIXED_SAMPLE_SIZE = 0x4,
MFT_INPUT_STREAM_HOLDS_BUFFERS = 0x8,
MFT_INPUT_STREAM_DOES_NOT_ADDREF = 0x100,
MFT_INPUT_STREAM_REMOVABLE = 0x200,
MFT_INPUT_STREAM_OPTIONAL = 0x400,
MFT_INPUT_STREAM_PROCESSES_IN_PLACE = 0x800
} ;
常量
MFT_INPUT_STREAM_WHOLE_SAMPLES 值: 0x1 输入数据 (IMFSample 接口) 的每个媒体示例都必须包含完整、不间断的数据单位。 数据单位的定义取决于媒体类型:对于未压缩的视频,为视频帧;对于压缩数据,为压缩数据包;对于未压缩的音频,为单个音频帧。 对于未压缩的音频格式,始终隐含此标志。 (设置标志是有效的,但不是必需的。) 未压缩的音频帧绝不应跨越多个媒体样本。 |
MFT_INPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER 值: 0x2 客户端作为输入提供的每个媒体示例都必须包含为MFT_INPUT_STREAM_WHOLE_SAMPLES标志定义的一个数据单元。 如果此标志存在,则MFT_INPUT_STREAM_WHOLE_SAMPLES标志也必须存在。 处理未压缩音频的 MFT 不应设置此标志。 为了提高效率,MFT 应接受包含多个音频帧的缓冲区。 |
MFT_INPUT_STREAM_FIXED_SAMPLE_SIZE 值: 0x4 所有输入样本的大小必须相同。 大小在 MFT_INPUT_STREAM_INFO 结构的 cbSize 成员中给出。 MFT 必须提供此值。 在处理期间,MFT 应验证输入样本的大小,并可能会删除大小不正确的样本。 |
MFT_INPUT_STREAM_HOLDS_BUFFERS 值: 0x8 调用 IMFTransform::P rocessOutput 后,MFT 可能保存一个或多个输入样本。 如果存在此标志,则 MFT_INPUT_STREAM_INFO 结构的 hnsMaxLatency 成员会提供最大延迟,cbMaxLookahead 成员提供最大 lookahead 字节数。 |
MFT_INPUT_STREAM_DOES_NOT_ADDREF 值: 0x100 在 IMFTransform::P rocessInput 方法返回后,MFT 不保存输入样本。 它会在 ProcessInput 方法返回之前发布示例。 如果此标志不存在,MFT 可能会保留传递给 ProcessInput 方法的样本的引用计数。 在 MFT 释放示例的 IMFSample 指针之前,客户端不得重复使用或删除缓冲区内存。 如果此标志不存在,则不保证 MFT 在输入样本上保留引用计数。 即使 MFT 未设置此标志,MFT 也能在 ProcessInput 中发布输入示例。 但是,设置此标志可能会使客户端能够优化重新使用缓冲区的方式。 如果 MFT 在从 ProcessInput 返回后保留输入样本,则不应设置此标志。 |
MFT_INPUT_STREAM_REMOVABLE 值: 0x200 可以通过调用 IMFTransform::D eleteInputStream 删除此输入流。 |
MFT_INPUT_STREAM_OPTIONAL 值: 0x400 此输入流是可选的。 转换可以在不接收来自此流的输入的情况下生成输出。 调用方可以通过不设置媒体类型或设置 NULL 媒体类型来取消选择流。 转换中的每个输入流都是可选的,但必须至少选择一个输入才能生成输出。 |
MFT_INPUT_STREAM_PROCESSES_IN_PLACE 值: 0x800 MFT 可以执行就地处理。 在此模式下,MFT 直接修改输入缓冲区。 当客户端调用 ProcessOutput 时,在具有匹配流标识符的输出流中返回传递到此流的相同示例。 此标志意味着 MFT 保留输入缓冲区,因此此标志不能与MFT_INPUT_STREAM_DOES_NOT_ADDREF标志组合使用。 如果存在此标志,MFT 必须为与此输入流对应的输出流设置MFT_OUTPUT_STREAM_PROVIDES_SAMPLES或MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES标志。 (请参阅 IMFTransform::GetOutputStreamInfo) 。 |
注解
在客户端在转换上设置媒体类型之前,唯一保证准确的标志是MFT_INPUT_STREAM_REMOVABLE和MFT_INPUT_STREAM_OPTIONAL标志。 对于所有其他标志,客户端应首先在每个非可选流上设置媒体类型。
在默认处理模型中,MFT 保存它在 ProcessInput 中接收的样本的引用计数。 它不会立即在 ProcessInput 中处理示例。 调用 ProcessOutput 时,MFT 会生成输出数据,然后放弃输入示例。 定义了此模型上的以下变体:
- 如果 MFT 永远不会保留 ProcessInput 和 ProcessOutput 之间的输入样本,则可以设置MFT_INPUT_STREAM_DOES_NOT_ADDREF。
- 如果 MFT 在下一次调用 ProcessOutput 之后保留一些输入样本,则可以设置MFT_INPUT_STREAM_HOLDS_BUFFERS。
要求
最低受支持的客户端 | Windows Vista [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2008 [桌面应用 | UWP 应用] |
标头 | mftransform.h |