如何确定 Windows Media Foundation 接收器编写器是不是需要自下而上或自上而下的图像?
Posted
技术标签:
【中文标题】如何确定 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 接收器编写器是否需要自下而上或自上而下的图像? 【发布时间】:2017-03-25 21:10:32 【问题描述】:我正在使用 Windows Media Foundation 创建视频文件。我有一些基于Using the Sink Writer to Encode Video 教程的代码。
当输入类型为MFVideoFormat_RGB32
,输出类型为MFVideoFormat_WMV3
,并且接收器写入器正在写入 WMV 文件,并且我向接收器写入器提供自上而下的 RGB32 数据时,我得到的视频是我会期待的。
另一方面,当输出类型为 MFVideoFormat_H264
时 - 其他一切都相同 - 位图颠倒显示。
如何在运行时找出需要什么样的位图数据?
【问题讨论】:
我想这最终都是关于使用MF_MT_DEFAULT_STRIDE
属性正确指示行顺序。也就是说,请确保您的原始视频 RGB 帧带有媒体类型,其中定义了 stride 并指示行顺序。
@RomanR。是的,看起来这样就行了。如果您将您的评论充实到一个答案中,那么我会将其标记为正确的,否则我会在一两天内添加我自己的答案。
【参考方案1】:
RGB 视频媒体类型可能会被赋予可选的MF_MT_DEFAULT_STRIDE
attribute 来指定行顺序:
默认表面步幅,用于未压缩的视频媒体类型。步幅是从一行像素到下一行所需的字节数。 [...]
自上而下图像的步幅为正,自下而上的图像为负。
该属性是可选的,当省略时可能会导致混淆,因为数据使用者可能会应用不同的默认值。一般来说,由于历史原因,RGB 数据通常以相反的行顺序出现,但最近的 API 倾向于修复它并以正常的行顺序提供数据。
【讨论】:
以上是关于如何确定 Windows Media Foundation 接收器编写器是不是需要自下而上或自上而下的图像?的主要内容,如果未能解决你的问题,请参考以下文章
winform播放视频(windows media player)