信封段

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

参数曲线由使用 MP_ENVELOPE_SEGMENT 结构定义的一个或多个信封段组成。 此结构包含以下信息:

  • 开始和结束时间。
  • 起始值和结束值。
  • 曲线类型 (线性、方形等) 。
  • 可选标志,稍后将介绍。

客户端通过调用 IMediaParams::AddEnvelope 方法并传入 MP_ENVELOPE_SEGMENT 结构的数组,将信封段添加到参数中。 在调用 方法之前,客户端应按升序时间顺序对段进行排序。 当 DMO 处理数据时,可以想象参数在每个信封段上移动,就像汽车在一系列山丘上行驶一样。 IMediaParams::GetParam 方法返回最新的值。

两个相邻段之间可以有间隙。 在间隔期间, 参数保留其以前的值,如下所示:

  • 在第一段之前,该值是非特定值。
  • 在段之间, 值是上一段的结束值。
  • 在最后一段之后,该值仍位于该段的结束值处。
  • 如果客户端刷新 DMO,该值将还原为非特定值。

可以通过设置以下标志之一来更改段:

  • MPF_ENVLP_BEGIN_CURRENTVAL。 DMO 使用 参数的最新值作为段的起始值。 这可能是中性值,也可能是上一段的结束值。 DMO 忽略 MP_ENVELOPE_SEGMENT 结构的 valStart 成员。
  • MPF_ENVLP_BEGIN_NEUTRALVAL。 DMO 使用 参数的中性值作为段的起始值。 它忽略 valStart

可以将这些标志视为抓取段的起点并向上或向下移动,而结束值保持不变。 段将相应地“拉伸”。

媒体参数