处理来自 IMFSourceReader 和 IMFSample 的图像数据

Handling Image data from IMFSourceReader and IMFSample

我正在尝试使用 IMFSourceReader 读取和解码 .mp4 文件。我已通过设置部分媒体类型并调用 IMFSourceReader::SetCurrentMediaType 将源 reader 解码为 MFVideoFormat_NV12,并加载尺寸为 1266x544 的视频。

在处理过程中,我收到了新尺寸为 1280x544 和 MF_MT_MINIMUM_DISPLAY_APERTURE 为 1266x544 的 MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED 标志。

我相信期望是然后使用视频缩放器 dsp 或视频处理器 mft。但是据我了解,视频处理器 mft 需要 windows 8.1,而我在 windows 7,而视频缩放器 dsp 不支持 MFVideoFormat_NV12

裁剪掉源reader添加的额外数据以仅显示MFVideoFormat_NV12最小显示孔径内的数据的正确方法是什么?

新媒体类型是这样说的:"video is 1266x544 and you expected/requested, but I have to carry it in 1280x544 textures because this is how GPU wanted it to work"。

一般来说,这不需要进一步缩放或裁剪,您已经拥有所需的帧。如果您从样本对象中读取它们——我相信您正在尝试这样做——只需增加步幅(连续行之间 1280 字节)。

如果您将其用作纹理,将其呈现在某处或将其用作渲染的一部分,您只需使用调整后的坐标 (0, 0) - (1266, 544) 忽略其余部分,而不是使用完整纹理。