视频处理器 MFT 是一种Microsoft媒体基础转换(MFT),用于执行颜色空间转换、音调映射、视频调整大小、反交错、帧速率转换、旋转、裁剪、空间左右视图解压缩、镜像、呈现器效果处理和球体映射。
CLSID
CLSID_VideoProcessorMFT
接口
- IMFRealTimeClientEx
- IMFTransform
- IMFVideoProcessorControl
- IMFVideoProcessorControl2
- IMFVideoProcessorControl3
- IMFVideoRendererEffectControl
输入格式
通过 IMFTransform::SetInputType 设置的媒体类型的MF_MT_SUBTYPE值支持以下格式
- MFVideoFormat_ABGR32
- MFVideoFormat_ARGB32
- MFVideoFormat_AYUV
- MFVideoFormat_I420
- MFVideoFormat_I422
- MFVideoFormat_I444
- MFVideoFormat_IYUV
- MFVideoFormat_NV11
- MFVideoFormat_NV12
- MFVideoFormat_RGB24
- MFVideoFormat_RGB32
- MFVideoFormat_RGB555
- MFVideoFormat_RGB565
- MFVideoFormat_RGB8
- MFVideoFormat_UYVY
- MFVideoFormat_v410
- MFVideoFormat_Y216
- MFVideoFormat_Y41P
- MFVideoFormat_Y41T
- MFVideoFormat_Y42T
- MFVideoFormat_YUY2
- MFVideoFormat_YV12
- MFVideoFormat_YVYU
- MFVideoFormat_P010
- MFVideoFormat_P016
- MFVideoFormat_A16B16G16R16F
- MFVideoFormat_A2R10G10B10
- MFVideoFormat_Y210
- MFVideoFormat_Y410
- MFVideoFormat_Y416
- MFVideoFormat_L8
- MFVideoFormat_L16
- MFVideoFormat_D16
输出格式
通过 IMFTransform::SetOutputType 设置的媒体类型的MF_MT_SUBTYPE值支持以下格式
- MFVideoFormat_ARGB32
- MFVideoFormat_AYUV
- MFVideoFormat_I420
- MFVideoFormat_I422
- MFVideoFormat_I444
- MFVideoFormat_IYUV
- MFVideoFormat_NV12
- MFVideoFormat_RGB24
- MFVideoFormat_RGB32
- MFVideoFormat_RGB555
- MFVideoFormat_RGB565
- MFVideoFormat_UYVY
- MFVideoFormat_Y216
- MFVideoFormat_YUY2
- MFVideoFormat_YV12
- MFVideoFormat_P010
- MFVideoFormat_P016
- MFVideoFormat_A16B16G16R16F
- MFVideoFormat_A2R10G10B10
- MFVideoFormat_Y210
- MFVideoFormat_Y410
- MFVideoFormat_Y416
不支持输入和输出格式的每个组合。 若要测试是否支持转换,请设置输入类型,然后调用 IMFTransform::GetOutputAvailableType。
有关这些格式的详细信息,请参阅 视频子类型 GUID。
颜色空间转换
可以在输入或输出类型上设置以下属性,以更改内容的颜色空间:
- MF_MT_VIDEO_PRIMARIES
- MF_MT_TRANSFER_FUNCTION
- MF_MT_YUV_MATRIX
- MF_MT_VIDEO_CHROMA_SITING
- MF_MT_VIDEO_NOMINAL_RANGE
- MF_MT_MAX_MASTERING_LUMINANCE
- MF_MT_MAX_LUMINANCE_LEVEL
- MF_MT_CUSTOM_VIDEO_PRIMARIES
- MF_MT_PALETTE
图像转换
可以在输入或输出类型上设置以下属性,以便对视频执行空间转换:
- MF_MT_PIXEL_ASPECT_RATIO
- MF_MT_VIDEO_ROTATION
- MF_MT_PAN_SCAN_APERTURE
- MF_MT_GEOMETRIC_APERTURE
- MF_MT_MINIMUM_DISPLAY_APERTURE
- MF_MT_VIDEO_3D
- MF_MT_VIDEO_3D_FORMAT
帧速率转换
可以在输入或输出类型上设置以下属性,以便对视频执行临时转换:
- MF_MT_INTERLACE_MODE
- MF_MT_FRAME_RATE
请注意,如果 MF_XVP_DISABLE_FRC 设置为 TRUE,则禁用帧速率转换,但仍会执行反交错。
转换属性
可以使用 IMFTransform::GetAttributes 在转换上设置以下属性:
- MF_XVP_DISABLE_FRC
- MF_XVP_CALLER_ALLOCATES_OUTPUT
- MF_LOW_LATENCY
- MF_XVP_SAMPLE_LOCK_TIMEOUT
- MF_ENABLE_3DVIDEO_OUTPUT
- MF_VIDEO_PROCESSOR_ALGORITHM
注解
可以通过以下方法之一创建视频处理器的实例:
- 通过调用 MFTEnumEx。 视频处理器在 MFT_CATEGORY_VIDEO_PROCESSOR 类别下注册。
- 通过调用 COM 函数 CoCreateInstance 向其传递 CLSID CLSID_VideoProcessorMFT。
以下备注与使用 视频处理器 MFT 中的源矩形和目标矩形有关。 源和目标矩形使用 IMFVideoProcessorControl::SetDestinationRectangle 和 SetSourceRectangle 设置,有时使用 IMFMediaEngineEx::UpdateVideoStream。
- 应对齐和舍入源矩形,以满足输入到视频处理器的帧的颜色格式的要求。 这一点很重要,因为 420 和 422 等格式对可以创建和访问的维度和偏移量有要求。 例如,输入格式为 420 时,{1、0、319、240} (左、上、右、下)的源矩形将舍入为 {2、0、320、240}。
- 目标矩形和源矩形始终都固定在各自的帧内,源矩形位于源框架和目标框架的目标矩形中。 这意味着负值没有意义,它们将始终固定到 0。
- 源矩形位于目标框架的坐标系中,减去任何目标矩形。 这意味着旋转等转换在源矩形上是“撤消的”。 因此,无需知道视频是否已旋转或 3D 解包。 例如,可以在视频标记的顶部绘制一个矩形,获取相对坐标(相对于视频标记),规范化它们(范围 0 到 1),并将其作为源矩形向下传递,即使视频正在旋转也是如此。
视频处理器支持 GPU 加速的视频处理,使用 Microsoft Direct3D 11 或 Direct3D 12。 有关详细信息,请参阅 MF_SA_D3D11_AWARE 和 MF_SA_D3D12_AWARE。
使用 由 MediaPlayer 和 IMFMediaEngine 组件公开的 SVR 时,视频处理器用作视频呈现的前端转换器。 这些组件之一使用的解码器、插件或源
呈现器效果
视频处理器 MFT 是呈现器效果的主机组件。 呈现器效果允许应用程序插件到正常的视频转换和呈现过程。 对于典型应用程序,视频插件(请参阅: IMFMediaEngineEx::InsertVideoEffect)已足够。 但某些方案需要详细了解视频正在呈现的确切条件。 对于以下情况,请考虑呈现器效果:
- 插件需要知道视频呈现的分辨率(例如执行特殊缩放作(如超分辨率)
- 插件需要知道正在呈现视频的显示器的属性(例如执行准确的音调映射)
- 插件需要确切地知道所呈现视频的最终输出格式
若要加载呈现器效果,请在视频处理器 MFT 的输入类型上配置 MF_MT_VIDEO_RENDERER_EXTENSION_PROFILE 属性。
立体声视频
视频处理器支持 3D 视频帧上的视图解压缩作:
如果输入帧包含在同一帧中打包的两个视图,则视频处理器可以将视图拆分为单独的缓冲区,或提取基本视图并放弃第二个视图。 若要启用视图解压缩,请将 MF_ENABLE_3DVIDEO_OUTPUT 属性设置为 MF3DVideoOutputType_Stereo 或 MF3DVideoOutputType_BaseView。
要求
| 要求 | 价值 |
|---|---|
| 标题 |
|
另请参阅