Windows 媒体基础 2D 缓冲区
Posted
技术标签:
【中文标题】Windows 媒体基础 2D 缓冲区【英文标题】:Windows media foundation 2D Buffer 【发布时间】:2020-03-17 18:25:25 【问题描述】:我无法理解IMF2DBuffer
在什么情况下可以使用。在IMFMediaBuffer
上使用QueryInterface
会产生No such interface supported
。 (我使用的是 Windows 10。)
我找到了这个措辞,但它很模糊:
此接口专为图像数据而设计。得到一个 指向此接口的指针,在媒体缓冲区上调用 QueryInterface。 并非所有媒体缓冲区对象都公开此接口。但如果媒体缓冲区确实公开了 IMF2DBuffer 接口,则应使用该接口 接口来访问数据,如果可能的话,而不是使用 IMF媒体缓冲区。您仍然可以使用 IMFMediaBuffer 接口,但它 可能效率较低。
我找不到任何关于它在什么情况下会公开或不公开这一点的信息。它依赖媒体吗?输出格式?编解码器?操作系统版本?真的不说了。
【问题讨论】:
【参考方案1】:引用的语言建议您应该使用此界面的方式。您不应依赖媒体、输出格式、编解码器或操作系统版本。
这个想法是“有时”您可以使用此接口来更有效地访问数据。因此,如果您想微调处理,您可以拥有一个执行IMF2DBuffer
的代码路径和通用IMFMediaBuffer
的后备编解码器路径。
这是文档信息,有一定道理。
IMF2DBuffer
的可用性是特定于实现的。没有直接提及它何时可用,因为它是一个承诺:如果它被记录在案,那么就有一个承诺遵循它,没有理由接受这样的约束。
接口本身的文档解释说,当数据以非标准方式有效存储时,此接口会有所帮助。 IMFMediaBuffer
访问将不得不重新排列数据,这在性能方面可能不是那么有效。 IMF2DBuffer
方法反过来有助于完成某些任务/数据访问,而无需“昂贵”的数据重新安排。
【讨论】:
以上是关于Windows 媒体基础 2D 缓冲区的主要内容,如果未能解决你的问题,请参考以下文章
JavaSE8基础 StringBuffer delete trimToSize 清空字符串缓冲区与整理缓冲区的空间
如何在 1D 缓冲区中生成 2D 纹理并将其加载到 OpenGL 中?