以下是关于Media Foundation中IMFActivate::ActivateObject
和IMFActivate::ShutdownObject
的问题。
根据MSDN,调用ActivateObject
的组件负责调用ShutdownObject
。
但有两个例子没有遵循这条规则:
http://msdn.microsoft.com/en-us/library/dd388503%28VS.85%29.aspx
和
http://msdn.microsoft.com/en-us/library/dd317912%28VS.85%29.aspx
在这两个示例中,他们调用ActivateObject
然后发布IMFActivate
接口而不调用ShutdownObject
方法。
这会导致内存泄漏,对吧?或者有另一种方法来释放对象占用的资源?
(我可以使用IMFMediaSource::Shutdown
来释放对象,而不是使用IMFActivate::ShutdownObject
)
提前致谢。
答案 0 :(得分:0)
当你完成使用你激活的对象时,你应该打电话给IMFActivate::ShutdownObject
。但是,请注意有问题的示例是实例化要在out参数中返回的IMFMediaSource。
HRESULT CreateVideoDeviceSource(IMFMediaSource **ppSource)
如果CreateVideoDeviceSource要在它实例化的IMFMediaSource上执行ShutdownObject,然后将其交还给您,它将处于关闭状态,因此可能无法使用。
要回答关于您应该对此做些什么的问题,您可以在完成所有操作后使用pMyMediaSource->Shutdown()
。
更多信息:IMFActivate在Media Foundation中的另一个用途是允许MF对象在不同的进程中实例化(因为MF Media Session将在单独的进程中播放受DRM保护的内容,因此非常有用);在这种情况下,MF媒体会话确实会在你给它的任何IMFActivates上调用IMFActivate::ShutdownObject
。