Oggetti attivazione
Un oggetto di attivazione è un oggetto helper usato per creare un altro oggetto, un po' simile a una classe factory. Gli oggetti di attivazione espongono l'interfaccia IMFActivate .
Un oggetto di attivazione consente di rinviare la creazione dell'oggetto di destinazione, perché è possibile tenere premuto un puntatore FMActivate senza creare l'oggetto di destinazione. Gli oggetti di attivazione possono essere serializzati e quindi usati per creare l'oggetto di destinazione in un altro processo. Ad esempio, gli oggetti di attivazione vengono usati per eseguire il marshalling dei componenti della pipeline dal processo dell'applicazione al processo pmP (Protected Media Path). Gli oggetti di attivazione vengono usati anche da determinate funzioni di enumerazione che restituiscono un elenco di puntatori FMActivate . Prima che l'applicazione crei l'oggetto di destinazione, può ottenere informazioni sull'oggetto esaminando gli attributi nell'oggetto di attivazione.
Per creare l'oggetto di destinazione da un oggetto di attivazione, chiamare il metodo IMFActivate::ActivateObject . Il chiamante deve chiamare FMActivate::ShutdownObject quando viene eseguito usando l'oggetto creato. Spesso l'applicazione crea l'oggetto di attivazione e la sessione multimediale chiama ActivateObject. In questo caso, la sessione multimediale, non l'applicazione, deve chiamare ShutdownObject. In altre situazioni, l'applicazione riceve un puntatore FMActivate dalla sessione multimediale e l'applicazione chiama ActivateObject e ShutdownObject. Ad esempio, vedere Come riprodurre file multimediali protetti.
Gli oggetti di attivazione possono avere attributi e l'interfaccia FMActivate eredita l'interfaccia IMFAttributes . Alcuni oggetti di attivazione usano attributi per configurare l'oggetto creato. Gli attributi specifici supportati da ogni oggetto sono documentati nel riferimento per la funzione di creazione dell'oggetto di attivazione. Impostare gli attributi usando il puntatore FMActivate ricevuto dalla funzione.
Per la riproduzione protetta, gli oggetti di attivazione vengono marshallati al processo PMP. Per supportare il marshalling, un oggetto di attivazione deve esporre l'interfaccia IPersistStream . Inoltre, sia l'oggetto di attivazione che l'oggetto creato devono essere componenti attendibili se il PMP è in esecuzione in un processo protetto. Questo non è un requisito quando il PMP viene caricato in un processo non protetto.
Per usare un oggetto pipeline personalizzato (ad esempio un sink multimediale) all'interno del processo PMP, è necessario implementare un oggetto di attivazione per l'oggetto pipeline:
- L'oggetto di attivazione deve esporre FMActivate e IPersistStream.
- Il metodo IPersist::GetClassID dell'oggetto di attivazione deve restituire il CLSID dell'oggetto di attivazione.
- Facoltativamente, è possibile implementare i metodi IPersistStream::Save e IPersistStream::Load per eseguire il marshalling di tutti i dati necessari per configurare l'oggetto di attivazione.
Quando la sessione multimediale carica la topologia all'interno del processo PMP, chiama CoCreateInstance per creare una nuova istanza dell'oggetto di attivazione. Chiama quindi FMActivate::ActivateObject per creare l'oggetto pipeline.
Argomenti correlati