如何确定 Windows Media Foundation 接收器编写器需要自下而上还是自上而下的图像?

How does one find out whether a Windows Media Foundation sink writer needs bottom-up or top-down images?

我正在使用 Windows Media Foundation 创建视频文件。我有一些基于 Using the Sink Writer to Encode Video 教程的代码。

当输入类型为MFVideoFormat_RGB32,输出类型为MFVideoFormat_WMV3,sink writer写入WMV文件,我为sink writer提供top-down RGB32数据, 我得到了我期望的视频。

另一方面,当输出类型为 MFVideoFormat_H264 时 - 其他一切都相同 - 位图上下颠倒。

如何在运行时找出需要哪种位图数据?

可能会为 RGB 视频媒体类型提供一个可选的 MF_MT_DEFAULT_STRIDE attribute 来指定行顺序:

Default surface stride, for an uncompressed video media type. Stride is the number of bytes needed to go from one row of pixels to the next. [...]

Stride is positive for top-down images, and negative for bottom-up images.

该属性是可选的,省略时可能会导致混淆,因为数据消费者可能会应用不同的默认值。一般来说,由于历史原因,RGB 数据通常以相反的行顺序出现,但是最近的 API 倾向于修复它并以正常的行顺序显示数据。