DirectX 媒体对象 (DMO) documentation 建议,为了效率起见,保存媒体样本(支持 IMediaBuffer 接口(interface))的缓冲区应该被合并,而不是不断地创建/销毁:



现在 DMO 已被 Media Foundation Transforms (MFT) 取代,我在文档中找不到相同的建议。 在管理等效缓冲区对象(这次实现 IMFMediaBuffer 接口(interface))时,是否仍应考虑这种池化策略?

最佳答案

池化策略仍然降低了整体性能开销,但有一些重要的事情需要记住:

  • 池化的重要性随着时间的推移而降低,因为即使在实时视频处理等性能敏感的 API 上,不池化的影响也越来越小
  • 媒体基金会在其一侧为 MFCreateSample 等函数级 API 实现池化:该 API 返回在 API 管理的样本对象内部池
  • 上创建的新样本

    也就是说,即使您不进行池化,您仍然可以免费获得一些池化,并且 API 本身可以帮助您处理诸如此类的小事。当然,您用于准确资源管理的合理方法仍然有意义并且不会受到伤害,尤其是文档并没有详细说明它是如何进行优化的。

    此外,COM 对象池实现的一个很好的例子是 DirectShow 的 CMemAllocator 实现,该实现包含在\Samples\multimedia\directshow\baseclasses\amfilter.h 中的 Windows SDK 7.x 示例中

    关于c++ - 我还应该池化 IMFMediaBuffer 对象吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39336662/

    10-13 06:29