Filtro wrapper DMO

[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.

Il filtro DMO Wrapper consente a un'applicazione DirectShow di usare un oggetto DMO (DirectX Media Object ) all'interno di un grafico di filtro. Il filtro esegue il wrapping dell'oggetto DMO e gestisce tutti i dettagli dell'uso di DMO, ad esempio il passaggio di dati a e dall'oggetto DMO. Inoltre, il filtro aggrega l'oggetto DMO, in modo che l'applicazione possa eseguire query sul filtro per tutte le interfacce COM esposte da DMO.

Etichetta Valore
Interfacce di filtro IBaseFilter, IDMOWrapperFilter, IPersistStream
Tipi di supporti pin di input Vedere la sezione Osservazioni
Interfacce pin di input IMemInputPin, IPin, IQualityControl
Tipi di supporti di pin di output Vedere la sezione Osservazioni
Interfacce pin di output IAMStreamConfig, IAMVideoCompression, IMediaPosition, IMediaSeeking, IPin, IQualityControl
Filtro CLSID CLSID_DMOWrapperFilter
Pagina delle proprietà CLSID Nessuna pagina delle proprietà
File eseguibile Qasf.dll
Merito Vedere la sezione Osservazioni
Categoria filtro Vedere la sezione Osservazioni

 

Commenti

Limitazioni

DMO Wrapper presenta le limitazioni seguenti:

  • Non supporta dmo con zero input, più input o zero output. Supporta le operazioni dmo con un input e più output.
  • Non supporta i trasporti personalizzati. Tutto il trasporto dati viene eseguito tramite l'interfaccia IMemInputPin .
  • Non usa l'interfaccia IMediaObjectInPlace ; tutte le operazioni di elaborazione vengono eseguite usando i metodi IMediaObject .

Segnaposto

Per ogni flusso di input nell'oggetto DMO, il filtro crea un pin di input corrispondente. Per ogni flusso di output, crea un pin di output corrispondente. I tipi di supporti supportati da ogni pin dipendono dall'oggetto DMO

Interfacce del codificatore

Se DMO è un codificatore video o un codificatore audio, il pin di output espone l'interfaccia IAMStreamConfig . Se DMO è un codificatore video, il pin di output espone anche l'interfaccia IAMVideoCompression . In entrambi i casi, se il DMO supporta l'interfaccia, il pin delega all'oggetto DMO. In caso contrario, il pin fornisce la propria implementazione.

Streaming

Il filtro usa l'interfaccia IMemInputPin per gestire tutti i flussi. Non supporta le connessioni IAsyncReader . Il filtro chiama IMediaObject::P rocessOutput nella DMO solo quando riceve dati da upstream (incluse le notifiche end-of-stream). Pertanto, non supporta dmo con flussi di input zero.

Riercare

Tutte le richieste di ricerca vengono passate al filtro upstream, tramite il primo pin di input nel wrapper DMO. Per dmo di più output, questo significa che il filtro upstream potrebbe ricevere più richieste di ricerca quando l'applicazione cerca il grafico.

Merito

DirectShow assegna tutti gli oggetti DMO un valore di merito predefinito di MERIT_NORMAL + 0x800 . Questo valore rientra tra MERIT_NORMAL e MERIT_PREFERRED. I filtri decodificatori hanno in genere un valore di merito di MERIT_NORMAL. Pertanto, la gestione dei grafici di filtro seleziona in genere un decodificatore DMO su un filtro decodificatore. Per eseguire l'override del valore di merito predefinito, aggiungere una voce del Registro di sistema alla chiave del Registro di sistema DMO in HKEY_CLASSES_ROOT\CLSID. Includere un valore DWORD denominato "Merit" il cui valore specifica il merito.

Category

Il filtro Wrapper DMO non viene visualizzato da solo in nessuna categoria. Quando esegue il wrapping di un DMO, viene visualizzato nella categoria DirectShow che corrisponde alla categoria DMO, sotto il nome della DMO.

Buffer

Il filtro DMO Wrapper passa i buffer multimediali all'oggetto DMO che espone l'interfaccia IMediaBuffer .

In Windows Vista o versioni successive, i buffer multimediali espongono anche l'interfaccia IServiceProvider. DMO può usare questa interfaccia per ottenere un puntatore all'esempio multimediale associato al buffer. Usare l'identificatore del servizio IID_IMediaSample. Un DMO video può usare l'interfaccia IMediaSample2 dell'esempio multimediale per impostare i flag interlacciati nell'esempio. Il codice seguente illustra come ottenere il puntatore all'esempio multimediale:

IServiceProvider *pSp = NULL;
IMediaSample2 *pSample2 = NULL;
HRESULT hr = S_OK;

hr = pBuffer->QueryInterface(IID_IServiceProvider, (void**)&pSp);
if (SUCCEEDED(hr))
{
    hr = pSp->QueryService(
        IID_IMediaSample,  // Service identifier.
        IID_IMediaSample2, // Interface identifier.
        (void**)&pSample2
        );
    if (SUCCEEDED(hr))
    {
        // Set flags (not shown).
        pSample2->Release();
    }
    pSp->Release();
}

Per altre informazioni sui flag interlace di esempio, vedere AM_SAMPLE2_PROPERTIES Struttura.

Controllo qualità

Se la DMO espone l'interfaccia IDMOQualityControl , il filtro converte le chiamate IQualityControl::Notify nel pin di output in IDMOQualityControl::SetNow chiama DMO. Il parametro rtNow di SetNow viene calcolato come somma dei membri TimeStamp e Late della struttura Quality .

Uso del fiter in GraphEdit

In GraphEdit il filtro Wrapper DMO non viene visualizzato sotto il proprio nome. Ogni DMO registrato viene invece elencato nella categoria di filtro appropriata. Quando si aggiunge un DMO tramite la finestra di dialogo Inserisci filtri , GraphEdit crea il filtro Wrapper DMO e lo configura per l'uso di tale DMO.

Filtri DirectShow

Oggetti multimediali DirectX