1

这是一个关于媒体基金会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

提前致谢。

4

1 回答 1

0

你是对的,你应该IMFActivate::ShutdownObject在使用完你激活的对象后调用。但是,请注意,有问题的示例正在实例化要在 out 参数中返回的 IMFMediaSource。

HRESULT CreateVideoDeviceSource(IMFMediaSource **ppSource)

如果 CreateVideoDeviceSource 在它实例化的 IMFMediaSource 上执行 ShutdownObject,然后将其交还给您,它将处于关闭状态,因此可能无法使用。

要回答有关您应该对此做什么的问题,您可能会pMyMediaSource->Shutdown()在使用完之后就可以侥幸逃脱。

更多信息:IMFActivate 在 Media Foundation 中的其他用途是允许在不同进程中实例化 MF 对象(很有用,因为 MF Media Session 将在单独的进程中播放受 DRM 保护的内容);在这种情况下,MF 媒体会话确实会调用IMFActivate::ShutdownObject您提供的任何 IMFActivates。

于 2010-08-24T13:45:35.467 回答