DMO 基础知识(Microsoft媒体基础)
本主题简要概述了与 Windows 媒体编解码器相关的 DMO。 有关 DMO 的详细信息,请参阅 DirectX 媒体对象。
DMO 是转换数据的 COM 对象。 将数据传递给它,并返回转换后的数据。 对于编解码器编码器 DMO,输入未压缩的媒体数据,DMO 会提供压缩的媒体数据。 使用 DMO 的主要优点是它们都实现相同的基接口,IMediaObject,这简化了使用它们,因为无论执行哪种转换类型,都可以使用相同的对象。
由于任何类型的数据转换中都涉及变量,因此音频和视频转换必须考虑到各种可能的媒体配置。 Windows 媒体音频和视频编解码器还支持许多特殊功能,你必须能够使用 DMO 进行配置。
一般情况下,编解码器 DMO 压缩和解压缩数字媒体所需的可变信息通过以下三种方式之一进行传达:
- 在 DMO 上设置输入类型,以传达传递给编码器 DMO 的未压缩媒体的特征,以及传递给解码器 DMO 的压缩媒体的特征。
- 设置 DMO 上的输出类型,以传达编码器 DMO 传递的压缩媒体的特征,以及解码器 DMO 传递的未压缩媒体的特征。
- 使用 IPropertyBag 接口的方法,配置支持编解码器 DMO 的各种功能的其他设置作为属性。 IPropertyBag 是所有编解码器 DMO 支持的标准 COM 接口。
此外,某些编解码器功能通过使用特定于编解码器 DMO 的其他接口进行管理。 这些接口针对 编解码器对象部分中的每个编解码器列出。
输入和输出类型特定于输入和输出流。 每个流表示内容的离散表示形式。 例如,Windows 媒体视频编码器 DMO 具有单个输入流和两个输出流。 输入流接受未压缩的视频示例。 两个输出流中的第一个提供压缩样本;另一个提供未压缩的示例。 一个输出流中的单个示例表示与其他流中相应样本相同的内容,但每个流以不同的格式提供这些样本。
每个流(输入或输出)都支持一个或多个媒体类型。 媒体类型或格式由 DMO_MEDIA_TYPE 结构描述。 可以通过调用 IMediaObject::GetOutputType来查询输出流支持的类型 DMO。 此方法返回该流的有效(尽管在某些情况下部分不完整)输出类型。 可以通过对 getOutputType进行重复调用来枚举输出流的支持的媒体类型,并随每次调用递增类型参数。 当传递的类型索引超出边界时,该方法将返回 DMO_E_NO_MORE_ITEMS。 可以使用 IMediaObject::GetInputType 方法以相同的方式枚举输入格式。
DMO 枚举的类型只是“首选”类型,但可能支持其他类型。 可以通过调用 IMediaObject::SetOutputType来验证输出类型。 使用 IMediaObject::SetInputType 验证输入类型。 如果传递的 DMO_MEDIA_TYPE 结构无效,这两种方法都将返回 DMO_E_TYPE_NOT_ACCEPTED。 某些 DMO 要求在枚举任何输入类型之前设置输出类型。 Windows 媒体音频和视频编解码器 DMO 都具有具有相互依赖验证的输入和输出。 也就是说,设置的输出类型将设置输入类型的验证条件。 此外,还存在一些属性,在设置时更改有效的输入和输出类型。 因此,在枚举类型之前,应在 DMO 上设置所有所需属性。
设置 DMO 的输出和输入类型后,可以开始处理示例。 每个输入示例都使用调用 IMediaObject::P rocessInput传递给编解码器,当调用 IMediaObject::P rocessOutput时,编解码器会传送每个输出示例。
相关主题