Condividi tramite


Distributori plug-in

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

I distributori plug-in (PID) sono un modo per estendere la funzionalità della gestione grafo dei filtri. Un server di distribuzione plug-in è un oggetto COM che la gestione dei filtri aggrega in fase di esecuzione. Le applicazioni ottengono l'accesso al PID tramite la gestione dei grafici di filtro.

Quando la gestione dei grafici di filtro viene eseguita una query per un'interfaccia che non supporta, cerca nel Registro di sistema una chiave con il modulo seguente:

HKEY_CLASSES_ROOT\Interface\IID\Distributor

IID è una stringa contenente l'identificatore dell'interfaccia. Se esiste la voce del Registro di sistema, il valore della voce definisce l'identificatore di classe (CLSID) di un PID che supporta l'interfaccia. La gestione dei grafici di filtro aggrega il PID e restituisce un puntatore dell'interfaccia, fungendo quindi da IUnknown esterno per il PID. Quando l'applicazione chiama i metodi nell'interfaccia, viene effettivamente chiamata sul PID. Tuttavia, l'esistenza del PID è trasparente all'applicazione.

Il termine distributore deriva dal fatto che un PID può eseguire una query sul puntatore IUnknown esterno per le interfacce nella gestione dei grafici di filtro. Chiamando il metodo IFilterGraph::EnumFilters , il PID può enumerare i filtri nel grafico e distribuire le chiamate al metodo a tali filtri. In questo modo, un PID può fungere da singolo punto di controllo per l'applicazione per chiamare i metodi sui filtri.

Quando la gestione dei grafici di filtro aggrega un PID, esegue una query sul PID per l'interfaccia IDistributorNotify . Se il PID supporta questa interfaccia, il gestore dei grafici di filtro lo usa per notificare le modifiche apportate al grafo:

Per implementare un PID personalizzato, creare un oggetto COM che supporta l'aggregazione. Deve supportare un'interfaccia che il gestore dei grafici di filtro non supporta già. Facoltativamente, può supportare l'interfaccia IDistributorNotify .

Se il PID ottiene eventuali puntatori di interfaccia dalla gestione grafo filtro, deve rilasciarli immediatamente. In caso contrario, potrebbe creare un conteggio di riferimenti circolare, che potrebbe impedire l'eliminazione della gestione dei grafici di filtro. Se si tiene un conteggio dei riferimenti, la gestione dei grafici di filtro non è necessaria in qualsiasi caso, perché la gestione dei grafici di filtro controlla la durata del PID.

Poiché un PID è progettato in modo specifico per l'aggregazione da parte della gestione grafo dei filtri, potrebbe essere necessario applicare questo valore nel metodo del costruttore di PID. Verificare se il puntatore IUnknown esterno è NULL e, in tal caso, restituire il codice di errore VFW_E_NEED_OWNER. Vedere Codici errore e esito positivo. Inoltre, per impedire ad altri oggetti di aggregare il PID, è possibile eseguire una query sul puntatore IUnknown esterno per l'interfaccia IGraphBuilder . Restituisce un codice di errore se l'oggetto non espone IGraphBuilder.