gpt4 book ai didi

c++ - 我还应该合并 IMFMediaBuffer 对象吗?

转载 作者:太空狗 更新时间:2023-10-29 20:36:14 27 4
gpt4 key购买 nike

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

The simplest solution is to allocate a new buffer for each sample, although doing so is inefficient.

A better solution is to implement an object to manage a pool of buffers. To do this, write code in the Release method of your IMediaBuffer implementation that calls a method of your buffer manager (instead of deleting itself) when the reference count drops to zero. The buffer manager can then maintain a list of pointers to allocated buffer objects. Create a method in your buffer manager to check the list of free buffers and return a pointer so that your application can access buffers when needed.

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

最佳答案

池化策略仍然可以降低整体性能开销,但需要牢记一些重要事项:

  1. 池化的重要性随着时间的推移而降低,因为不池化的影响越来越小,即使对于实时视频处理等性能敏感的 API 也是如此
  2. Media Foundation 在其一侧为函数级 API(例如 MFCreateSample)实现池化: 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com