Objetos de ativação

Um objeto de ativação é um objeto auxiliar que é usado para criar outro objeto, um pouco semelhante a uma fábrica de classes. Objetos de ativação expõem a interface IMFActivate .

Um objeto de ativação permite adiar a criação do objeto de destino, pois você pode manter um ponteiro IMFActivate sem criar o objeto de destino. Objetos de ativação também podem ser serializados e, portanto, usados para criar o objeto de destino em outro processo. Por exemplo, os objetos de ativação são usados para realizar marshaling de componentes de pipeline do processo de aplicativo para o processo de PMP (caminho de mídia protegido). Objetos de ativação também são usados por determinadas funções de enumeração que retornam uma lista de ponteiros IMFActivate . Antes que o aplicativo crie o objeto de destino, ele pode obter informações sobre o objeto examinando atributos no objeto de ativação.

Para criar o objeto de destino de um objeto de ativação, chame o método IMFActivate::ActivateObject . O chamador deve chamar IMFActivate::ShutdownObject quando terminar de usar o objeto criado. Geralmente, o aplicativo cria o objeto de ativação e a Sessão de Mídia chama ActivateObject. Nesse caso, a Sessão de Mídia, não o aplicativo, deve chamar ShutdownObject. Em outras situações, o aplicativo recebe um ponteiro IMFActivate da Sessão de Mídia e o aplicativo chama ActivateObject e ShutdownObject. (Por exemplo, consulte Como reproduzir arquivos de mídia protegidos.)

Os objetos de ativação podem ter atributos e a interface IMFActivate herda a interface IMFAttributes . Alguns objetos de ativação usam atributos para configurar o objeto criado. Os atributos específicos compatíveis com cada objeto são documentados na referência para a função de criação desse objeto de ativação. Defina os atributos usando o ponteiro IMFActivate que você recebe da função.

Para reprodução protegida, os objetos de ativação são realizados em marshaling para o processo PMP. Para dar suporte ao marshaling, um objeto de ativação deve expor a interface IPersistStream . Além disso, o objeto de ativação e o objeto criado deverão ser componentes confiáveis se o PMP estiver em execução em um processo protegido. Isso não é um requisito quando o PMP é carregado em um processo desprotegido.

Para usar um objeto de pipeline personalizado (como um coletor de mídia) dentro do processo PMP, você deve implementar um objeto de ativação para o objeto de pipeline:

  • O objeto de ativação deve expor IMFActivate e IPersistStream.
  • O método IPersist::GetClassID do objeto de ativação deve retornar o CLSID do objeto de ativação.
  • Opcionalmente, você pode implementar os métodos IPersistStream::Save e IPersistStream::Load para realizar marshaling de todos os dados necessários para configurar o objeto de ativação.

Quando a Sessão de Mídia carrega a topologia dentro do processo PMP, ela chama CoCreateInstance para criar uma nova instância do objeto de ativação. Em seguida, ele chama IMFActivate::ActivateObject para criar o objeto de pipeline.

Media Foundation Platform APIs

IMFActivate