媒体基金会:调用IMFActivate :: ShutdownObject的另一种方式?

时间:2009-09-13 06:31:25

标签: com directshow ms-media-foundation

以下是关于Media Foundation中IMFActivate::ActivateObjectIMFActivate::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

提前致谢。

1 个答案:

答案 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