实现编解码器 MFT
本主题提供有关将解码器或编码器实现为媒体基础转换 (MFT) 的一些准则。
编码器
编码器格式协商
以下过程用于初始化编码器:
- 查询 MFT 以获取 ICodecAPI 接口。
- 调用 ICodecAPI::SetValue 以设置编码属性。
- 调用 IMFTransform::SetOutputType 以设置编码格式。
- 调用 IMFTransform::GetInputAvailableType 以获取兼容输入类型的列表。 (可能会跳过此步骤。)
- 调用 IMFTransform::SetInputType 以设置未压缩的输入格式。
在步骤 3 中设置输出类型后, GetInputAvailableType 方法必须返回与当前输出类型兼容的输入类型列表。 换句话说, 此时由 GetInputAvailableType 返回的任何类型都必须对 SetInputType 有效。
对于解码器,类型设置的顺序将相反:首先设置输入类型,然后设置输出类型。 设置输入类型后, IMFTransform::GetOutputAvailableType 方法必须返回可传递给 IMFTransform::SetOutputType 方法的类型列表。
编码器和解码器应支持 NV12 作为常见的未压缩格式。 这可确保管道组件可以通过最少的颜色空间转换进行互操作。 当然,也可以支持其他格式。
解码器
Transcode-Only解码器
某些解码器针对转码 (解码进行了优化,然后重新编码流) ,不适合在播放期间使用。
如果解码器 MFT 仅用于转码,请在注册 MFT 时设置 MFT_ENUM_FLAG_TRANSCODE_ONLY 标志。 (请参阅 MFTRegister.)
默认情况下, MFTEnumEx 函数不返回转码解码器。 若要枚举转码解码器,请调用 MFTEnumEx 并在 Flags 参数中设置 MFT_ENUM_FLAG_TRANSCODE_ONLY 标志。 在 MFTEnumEx 函数中使用时,此标志同时枚举转码解码器和其他解码器。
MFTRegister MFT_ENUM_FLAG_TRANSCODE_ONLY | MFTEnumEx MFT_ENUM_FLAG_TRANSCODE_ONLY | MFT 是否枚举? |
---|---|---|
1 | 1 | 是 |
1 | 0 | 否 |
0 | 1 | 是 |
0 | 0 | 是 |
Telecine 属性
媒体源可能会将以下电视电影属性附加到它提供的媒体样本。
属性 | 说明 |
---|---|
MFSampleExtension_RepeatFirstField | 等效于 RFF) 标志 (“重复第一个字段”。 |
MFSampleExtension_BottomFieldFirst | TFF) 标志 (“top field first”的反面。 |
这些标志为增强的视频呈现器 (EVR) 执行去隔行处理时提供提示。 解码器应将这些标志复制到输出样本,使其到达 EVR,从而将这些标志传播到下游。
相关主题