2009-09-13 4 views
1

Voici une question à propos de IMFActivate::ActivateObject et IMFActivate::ShutdownObject dans Media Foundation. Selon MSDN, le composant qui appelle ActivateObject est chargé d'appeler le ShutdownObject.Media Foundation: une autre façon d'appeler IMFActivate :: ShutdownObject?

Mais il y a deux exemples qui ne suivent pas cette règle:

http://msdn.microsoft.com/en-us/library/dd388503%28VS.85%29.aspx

et

http://msdn.microsoft.com/en-us/library/dd317912%28VS.85%29.aspx

Dans ces deux exemples, ils appellent ActivateObject puis relâchez l'interface IMFActivate sans appeler ShutdownObject méthode .

Cela va conduire à des fuites de mémoire, non? Ou existe-t-il un autre moyen de libérer la ressource occupée par l'objet?

(Puis-je utiliser IMFMediaSource::Shutdown pour libérer l'objet au lieu d'utiliser IMFActivate::ShutdownObject)

Merci à l'avance.

Répondre

0

Vous avez raison d'appeler IMFActivate::ShutdownObject lorsque vous avez terminé d'utiliser l'objet que vous avez activé. Notez cependant que l'exemple en question instancie un IMFMediaSource à renvoyer dans un paramètre out.

HRESULT CreateVideoDeviceSource(IMFMediaSource **ppSource) 

Si CreateVideoDeviceSource devait faire un ShutdownObject sur le IMFMediaSource il instancié, puis le remettre à vous, il serait dans un état d'arrêt et donc probablement inutilisable.

Pour répondre à votre question sur ce que vous êtes censé faire à ce sujet, vous pouvez probablement vous en sortir avec un pMyMediaSource->Shutdown() après que vous ayez fini de l'utiliser.

En savoir plus: L'autre utilisation de IMFActivate dans Media Foundation est de permettre l'instanciation d'un objet MF dans un processus différent (utile parce que la MF Media Session va lire le contenu protégé par DRM dans un processus séparé); dans ce cas, la MF Media Session appellera en effet IMFActivate::ShutdownObject sur toutes les IMFActivates que vous lui avez données.

Questions connexes