Media Foundation: еще один способ вызвать IMFActivate :: ShutdownObject? - PullRequest
1 голос
/ 13 сентября 2009

Вот вопрос о IMFActivate::ActivateObject и IMFActivate::ShutdownObject в Media Foundation.

Согласно 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 голосов
/ 24 августа 2010

Вы правы, что должны вызывать IMFActivate::ShutdownObject, когда вы закончите, используя объект, который вы активировали. Однако обратите внимание, что рассматриваемый образец создает экземпляр IMFMediaSource, который должен быть возвращен в выходном параметре.

HRESULT CreateVideoDeviceSource(IMFMediaSource **ppSource)

Если бы CreateVideoDeviceSource должен был выполнить ShutdownObject на созданном им IMFMediaSource, а затем передать его вам, он был бы в выключенном состоянии и, следовательно, вероятно, непригоден для использования.

Чтобы ответить на ваш вопрос о том, что вы должны делать по этому поводу, вы, вероятно, сможете воспользоваться pMyMediaSource->Shutdown() после того, как все закончите с его использованием.

Дополнительная информация: Другое использование IMFActivate в Media Foundation - для разрешения создания экземпляра объекта MF в другом процессе (полезно, потому что сеанс MF Media будет воспроизводить контент с защитой DRM в отдельном процессе); в этом случае MF Media Session действительно будет вызывать IMFActivate::ShutdownObject для всех IMFActivates, которые вы ему дали.

...