DMO 体系结构
[与此页面关联的功能(DirectShow)是一项旧功能。 它已被 MediaPlayer、IMFMediaEngine取代,并在媒体基金会 音频/视频捕获。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft强烈建议新代码尽可能使用 MediaPlayer、IMFMediaEngine 和 Media Foundation 中的音频/视频捕获,而不是 DirectShow。 Microsoft建议重写使用旧 API 的现有代码,以尽可能使用新 API。]
本部分介绍 DMO 的整体体系结构。
流
DMO 是一个对象,它采用 m 输入并生成 n 个 输出。 输入和输出 流调用。 每个 DMO 至少有一个流。 流不是对象;它们只是按索引号在 DMO 上引用。 设计时固定的流数。
媒体类型
所有数据都是使用 媒体类型键入的,该类型定义如何解释数据的内容。 例如,320 x 240 24 位 RGB 视频是一种类型;44.1-kbhertz (kHz) 16 位立体声 PCM 音频是另一种类型。 使用 DMO_MEDIA_TYPE 结构描述媒体类型。 在客户端处理任何数据之前,它必须为 DMO 上的每个流设置媒体类型。
通常,流可以接受一系列媒体类型。 某些 DMO 支持比其他类型更广泛的类型。 DMO 接口定义客户端发现支持类型的方法。 例如,一个 DMO 可能支持任何位深度的 RGB 视频,而另一个 DMO 可能仅支持 24 位 RGB。 此外,DMO 可能仅限于输入和输出的某些组合。 例如,如果输入类型为 16 位视频,则输出流可能需要相同的位深度。 客户端可以枚举每个流的首选类型,然后测试特定组合。
缓冲区
在默认 DMO 模型中,客户端分配单独的输入缓冲区和输出缓冲区。 它用数据填充输入缓冲区,并将其传递到 DMO,DMO 会将新数据写入输出缓冲区。
(可选)DMO 可以支持“就地”处理。 通过就地处理,DMO 会将输出直接写入输入缓冲区,以处理原始数据。 就地处理无需单独的缓冲区。 另一方面,它会更改原始数据,某些应用程序可能无法接受这些数据。
IMediaObject 接口支持默认的(非就地)缓冲模型。 所有 DMO 都必须实现此接口。 如果 DMO 支持就地处理,它还公开 IMediaObjectInPlace 接口。 客户端负责分配所有缓冲区,包括输入和输出。
相关主题
-
关于 DMO 的