Freigeben über


DMO-Wrapperfilter

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Mit dem DMO-Wrapperfilter kann eine DirectShow-Anwendung ein DirectX Media Object (DMO) in einem Filterdiagramm verwenden. Der Filter umschließt die DMO und verarbeitet alle Details der Verwendung des DMO, z. B. das Übergeben von Daten an und von der DMO. Außerdem aggregiert der Filter die DMO, sodass die Anwendung den Filter für alle COM-Schnittstellen abfragen kann, die von DMO verfügbar gemacht werden.

Bezeichnung Wert
Filterschnittstellen IBaseFilter, IDMOWrapperFilter, IPersistStream
Eingabeheftmedientypen Siehe Hinweise
Eingabenadelschnittstellen IMemInputPin, IPin, IQualityControl
Ausgabeheftmedientypen Siehe Hinweise
Ausgabepinschnittstellen IAMStreamConfig, IAMVideoCompression, IMediaPosition, IMediaSeeking, IPin, IQualityControl
CLSID filtern CLSID_DMOWrapperFilter
Eigenschaftenseite CLSID Keine Eigenschaftenseite
Ausführbare Datei Qasf.dll
Verdienst Siehe Hinweise
Filterkategorie Siehe Hinweise

 

Bemerkungen

Einschränkungen

Für den DMO-Wrapper gelten die folgenden Einschränkungen:

  • DmOs mit null Eingaben, mehreren Eingaben oder null Ausgaben werden nicht unterstützt. (DmOs mit einer Eingabe und mehreren Ausgaben werden unterstützt.)
  • Benutzerdefinierte Transporte werden nicht unterstützt. Der gesamte Datentransport erfolgt über die IMemInputPin-Schnittstelle .
  • Die IMediaObjectInPlace-Schnittstelle wird nicht verwendet. die gesamte Verarbeitung erfolgt mit IMediaObject-Methoden .

Pins

Für jeden Eingabestream im DMO erstellt der Filter einen entsprechenden Eingabenadel. Für jeden Ausgabestream wird ein entsprechender Ausgabenadel erstellt. Welche Medientypen jeder Pin unterstützt, hängt vom DMO ab.

Encoderschnittstellen

Wenn es sich bei dem DMO um einen Video- oder Audioencoder handelt, macht der Ausgabenadel die IAMStreamConfig-Schnittstelle verfügbar. Wenn es sich bei dem DMO um einen Videoencoder handelt, macht der Ausgabenadel auch die IAMVideoCompression-Schnittstelle verfügbar. In beiden Fällen, wenn die DMO die Schnittstelle unterstützt, delegiert der Pin an die DMO. Andernfalls stellt der Pin eine eigene Implementierung bereit.

Streaming

Der Filter verwendet die IMemInputPin-Schnittstelle , um das gesamte Streaming zu verarbeiten. IAsyncReader-Verbindungen werden nicht unterstützt. Der Filter ruft IMediaObject::P rocessOutput auf dem DMO nur auf, wenn er Daten von Upstream empfängt (einschließlich Benachrichtigungen zum Ende des Datenstroms). Daher werden keine DMOs mit null Eingabedatenströmen unterstützt.

Suchen

Alle Suchanforderungen werden über den ersten Eingabenadel des DMO-Wrappers an den Upstream-Filter übergeben. Für DMOs mit mehreren Ausgaben bedeutet dies, dass der Upstream-Filter möglicherweise mehrere Suchanforderungen empfängt, wenn die Anwendung das Diagramm sucht.

Verdienst

DirectShow weist allen DMOs den Standardwert MERIT_NORMAL + 0x800 zu. Dieser Wert liegt zwischen MERIT_NORMAL und MERIT_PREFERRED. Decoderfilter haben in der Regel einen Wert von MERIT_NORMAL. Daher wählt der Filterdiagramm-Manager in der Regel einen DMO-Decoder über einen Decoderfilter aus. Um den Standardwert zu überschreiben, fügen Sie dem Registrierungsschlüssel des DMO in HKEY_CLASSES_ROOT\CLSID einen Registrierungseintrag hinzu. Fügen Sie einen DWORD-Wert mit dem Namen "Merit" ein, dessen Wert den Wert angibt.

Category

Der DMO-Wrapperfilter wird in keiner Kategorie angezeigt. Wenn ein DMO umschließt, wird es in der DirectShow-Kategorie angezeigt, die der Kategorie des DMO entspricht, unter dem Namen des DMO.

Puffer

Der DMO-Wrapperfilter übergibt Medienpuffer an die DMO, die die IMediaBuffer-Schnittstelle verfügbar machen.

In Windows Vista oder höher machen die Medienpuffer auch die IServiceProvider-Schnittstelle verfügbar. Die DMO kann diese Schnittstelle verwenden, um einen Zeiger auf das Medienbeispiel abzurufen, das dem Puffer zugeordnet ist. Verwenden Sie den Dienstbezeichner IID_IMediaSample. Eine Video-DMO kann die IMediaSample2-Schnittstelle des Medienbeispiels verwenden, um Interlace-Flags für das Beispiel festzulegen. Der folgende Code zeigt, wie Sie den Zeiger auf das Medienbeispiel abrufen:

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();
}

Weitere Informationen zu Beispiel-Interlace-Flags finden Sie unter AM_SAMPLE2_PROPERTIES Structure.

Qualitätslenkung

Wenn die DMO die IDMOQualityControl-Schnittstelle verfügbar macht, übersetzt der Filter IQualityControl::Notify-Aufrufe an seinem Ausgabepin in IDMOQualityControl::SetNow-Aufrufe auf der DMO. Der rtNow-Parameter von SetNow wird als Summe der Elemente TimeStamp und Late der Quality-Struktur berechnet.

Verwenden des Fiters in GraphEdit

In GraphEdit wird der DMO-Wrapperfilter nicht unter seinem eigenen Namen angezeigt. Stattdessen wird jede registrierte DMO unter der entsprechenden Filterkategorie aufgeführt. Wenn Sie eine DMO über das Dialogfeld Filter einfügen hinzufügen, erstellt GraphEdit den DMO-Wrapperfilter und konfiguriert ihn für die Verwendung dieses DMO.

DirectShow-Filter

DirectX-Medienobjekte