视频处理器 MFT

视频处理器 MFT 是一种Microsoft媒体基础转换(MFT),用于执行颜色空间转换、音调映射、视频调整大小、反交错、帧速率转换、旋转、裁剪、空间左右视图解压缩、镜像、呈现器效果处理和球体映射。

CLSID

CLSID_VideoProcessorMFT

接口

输入格式

通过 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::SetDestinationRectangleSetSourceRectangle 设置,有时使用 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_AWAREMF_SA_D3D12_AWARE

使用 由 MediaPlayerIMFMediaEngine 组件公开的 SVR 时,视频处理器用作视频呈现的前端转换器。 这些组件之一使用的解码器、插件或源

呈现器效果

视频处理器 MFT 是呈现器效果的主机组件。 呈现器效果允许应用程序插件到正常的视频转换和呈现过程。 对于典型应用程序,视频插件(请参阅: IMFMediaEngineEx::InsertVideoEffect)已足够。 但某些方案需要详细了解视频正在呈现的确切条件。 对于以下情况,请考虑呈现器效果:

  • 插件需要知道视频呈现的分辨率(例如执行特殊缩放作(如超分辨率)
  • 插件需要知道正在呈现视频的显示器的属性(例如执行准确的音调映射)
  • 插件需要确切地知道所呈现视频的最终输出格式

若要加载呈现器效果,请在视频处理器 MFT 的输入类型上配置 MF_MT_VIDEO_RENDERER_EXTENSION_PROFILE 属性。

立体声视频

视频处理器支持 3D 视频帧上的视图解压缩作:

如果输入帧包含在同一帧中打包的两个视图,则视频处理器可以将视图拆分为单独的缓冲区,或提取基本视图并放弃第二个视图。 若要启用视图解压缩,请将 MF_ENABLE_3DVIDEO_OUTPUT 属性设置为 MF3DVideoOutputType_StereoMF3DVideoOutputType_BaseView

要求

要求 价值
标题
Camerauicontrol.h

另请参阅

数字信号处理器