Freigeben über


DMO Wrapperfilter

[Das dieser Seite zugeordnete Feature DirectShow-ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngineund Audio/Video Capture in Media Foundationersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code MediaPlayer-, IMFMediaEngine und Audio-/Videoaufnahme in Media Foundation anstelle von DirectShow-verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, um die neuen APIs zu verwenden, falls möglich umgeschrieben werden.]

Mit dem DMO Wrapper-Filter kann eine DirectShow-Anwendung ein DirectX Media Object (DMO) in einem Filterdiagramm verwenden. Der Filter umschließt das 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 vom DMO verfügbar gemacht werden.

Etikett Wert
Filterschnittstellen IBaseFilter, IDMOWrapperFilter, IPersistStream
Eingabe-Pin-Medientypen Siehe Hinweise
Eingabe-Pin-Schnittstellen IMemInputPin, IPin, IQualityControl
Ausgabe-Pin-Medientypen Siehe Hinweise
Ausgabeheftschnittstellen IAMStreamConfig, IAMVideoCompression, IMediaPosition, IMediaSeeking, IPin, IQualityControl
Filter CLSID CLSID_DMOWrapperFilter
Eigenschaftenseite CLSID Keine Eigenschaftenseite
Ausführbar Qasf.dll
Merit Siehe Hinweise
Filterkategorie Siehe Hinweise

 

Bemerkungen

Begrenzungen

Der DMO-Wrapper hat die folgenden Einschränkungen:

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

Stecknadeln

Für jeden Eingabedatenstrom im DMO erstellt der Filter einen entsprechenden Eingabenadel. Für jeden Ausgabedatenstrom wird eine entsprechende Ausgabenadel erstellt. Die Medientypen, die von den einzelnen Pins unterstützt werden, hängen vom DMO ab.

Encoderschnittstellen

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

Strömend

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

Suchend

Alle Suchanforderungen werden an den Upstreamfilter übergeben, über den ersten Eingabenadel im DMO-Wrapper. Bei DMOs mit mehreren Ausgaben bedeutet dies, dass der Upstreamfilter möglicherweise mehrere Suchanforderungen empfängt, wenn die Anwendung das Diagramm anfordert.

Verdienst

DirectShow weist allen DMOs einen Standardwert von MERIT_NORMAL + 0x800 zu. Dieser Wert liegt zwischen MERIT_NORMAL und MERIT_PREFERRED. Decoderfilter haben in der Regel einen Leistungswert von MERIT_NORMAL. Daher wählt der Filterdiagramm-Manager in der Regel einen DMO-Decoder über einen Decoderfilter aus. Um den Standardwert außer Kraft zu setzen, fügen Sie im HKEY_CLASSES_ROOT\CLSIDeinen Registrierungseintrag zum Registrierungsschlüssel des DMO hinzu. Fügen Sie einen DWORD- Wert namens "Merit" ein, dessen Wert die Verdienste angibt.

Kategorie

Der DMO Wrapper-Filter wird nicht selbst in einer Kategorie angezeigt. Wenn ein DMO umbrochen wird, wird es in der DirectShow-Kategorie angezeigt, die der DMO-Kategorie entspricht, unter dem Namen des DMO.

Puffer

Der DMO Wrapper-Filter ü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. Ein Video-DMO kann die IMediaSample2 Schnittstelle des Medienbeispiels verwenden, um Interlace-Flags für das Beispiel festzulegen. Der folgende Code zeigt, wie der Zeiger auf das Medienbeispiel abgerufen wird:

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 Interlace-Flags pro Beispiel finden Sie unter AM_SAMPLE2_PROPERTIES Structure.

Qualitätskontrolle

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

Verwenden des Fiters in GraphEdit

In GraphEdit wird der DMO-Wrapper-Filter 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