首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我还应该池IMFMediaBuffer对象吗?

我还应该池IMFMediaBuffer对象吗?
EN

Stack Overflow用户
提问于 2016-09-05 19:32:51
回答 2查看 281关注 0票数 4

DirectX媒体对象(DMO) 文档建议,为了提高效率,保存媒体示例(支持IMediaBuffer接口)的缓冲区应该集合起来,而不是不断地创建/销毁:

最简单的解决方案是为每个示例分配一个新的缓冲区,尽管这样做效率很低。 更好的解决方案是实现一个对象来管理缓冲区池。要做到这一点,请在IMediaBuffer实现的发布方法中编写代码,该方法在引用计数降到零时调用缓冲区管理器的方法(而不是删除自身)。然后,缓冲区管理器可以维护指向分配的缓冲区对象的指针列表。在缓冲区管理器中创建一个方法来检查空闲缓冲区列表并返回一个指针,以便应用程序可以在需要时访问缓冲区。

既然DMO已经被(MFT)所取代,我在文档中找不到同样的建议。这种池策略在管理等效的缓冲区对象(这次是实现IMFMediaBuffer 接口)时仍然需要考虑吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-05 20:24:22

池策略仍然可以减少总体性能开销,但是有几件重要的事情要记住:

  1. 池的重要性随着时间的推移而降低,因为不池的影响越来越小,即使在实时视频处理等性能敏感的APIs上也是如此。
  2. Media为函数级API (如MFCreateSample)在其一侧实现池:API返回在API管理的示例对象内部池上创建的新示例。

也就是说,即使您没有池,您仍然可以免费获得一些池,并且API本身可以帮助您处理这样的小事情。您正确管理资源的合理方法仍然是有意义的,当然也不会有什么害处,特别是文档并没有详细说明它是如何在其结束时进行优化的。

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

票数 4
EN

Stack Overflow用户

发布于 2016-09-10 19:23:38

请参阅以下网播:Windows媒体体系结构简介

您将了解有关MediaFoundation内部内存管理的更多信息。

就我使用MediaFoundation的经验而言,MediaFoundation池策略非常好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39336662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档