Freigeben über


DMO-Architektur

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

In diesem Abschnitt wird die allgemeine Architektur eines DMO beschrieben.

Streams

Ein DMO ist ein Objekt, das m Eingaben annimmt und n Ausgaben erzeugt. Die Ein- und Ausgaben werden als Streams bezeichnet. Jede DMO verfügt über mindestens einen Stream. Streams sind keine Objekte; Auf sie wird einfach in der DMO anhand der Indexnummer verwiesen. Die Anzahl der Streams wird zur Entwurfszeit festgelegt.

Medientypen

Alle Daten werden mithilfe eines Medientyps eingegeben, der definiert, wie der Inhalt der Daten interpretiert wird. Beispielsweise ist 320 x 240 240 RGB-Video ein Typ; 44,1 Kilohertz (kHz) 16-Bit-Stereo-PCM-Audio ist ein weiterer Typ. Medientypen werden mithilfe der DMO_MEDIA_TYPE-Struktur beschrieben. Bevor der Client Daten verarbeiten kann, muss er den Medientyp für jeden Stream im DMO festlegen.

In der Regel kann ein Stream eine Reihe von Medientypen akzeptieren. Einige DMOs unterstützen eine größere Palette von Typen als andere. Die DMO-Schnittstellen definieren Methoden für den Client, um die unterstützten Typen zu ermitteln. Beispielsweise kann ein DMO RGB-Video in einer beliebigen Bittiefe unterstützen, während ein anderer nur 24-Bit-RGB unterstützt. Außerdem kann ein DMO auf bestimmte Kombinationen von Ein- und Ausgaben beschränkt sein. Wenn der Eingabetyp beispielsweise 16-Bit-Video ist, erfordert der Ausgabestream möglicherweise die gleiche Bittiefe. Der Client kann die bevorzugten Typen jedes Streams aufzählen und dann bestimmte Kombinationen testen.

Puffer

Im DMO-Standardmodell weist der Client separate Eingabepuffer und Ausgabepuffer zu. Er füllt die Eingabepuffer mit Daten und übermittelt sie an das DMO, und das DMO schreibt neue Daten in die Ausgabepuffer.

Optional kann ein DMO die "direkte" Verarbeitung unterstützen. Bei der direkten Verarbeitung schreibt der DMO die Ausgabe direkt in den Eingabepuffer über die ursprünglichen Daten. Bei der direkten Verarbeitung sind keine separaten Puffer mehr erforderlich. Auf der anderen Seite werden die ursprünglichen Daten geändert, was für einige Anwendungen möglicherweise nicht akzeptabel ist.

Das (nicht direkte) Standardpufferungsmodell wird über die IMediaObject-Schnittstelle unterstützt. Alle DMOs müssen diese Schnittstelle implementieren. Wenn ein DMO die direkte Verarbeitung unterstützt, macht er auch die IMediaObjectInPlace-Schnittstelle verfügbar. Der Client ist für die Zuweisung aller Puffer verantwortlich, sowohl für die Eingabe als auch für die Ausgabe.

Informationen zu DMOs