DMO-Grundlagen (Microsoft Media Foundation)

Dieses Thema bietet eine kurze Übersicht über DMOs, die sich auf Windows Media Codecs beziehen. Weitere Informationen zu DMOs finden Sie unter DirectX-Medienobjekte.

Ein DMO ist ein COM-Objekt, das Daten transformiert. Sie übergeben Daten an sie, und es werden die transformierten Daten zurückgegeben. Bei einem Codec-Encoder-DMO geben Sie unkomprimierte Mediendaten ein, und der DMO liefert komprimierte Mediendaten. Der Hauptvorteil der Verwendung von DMOs besteht darin, dass alle die gleiche Basisschnittstelle implementieren, IMediaObject, was die Arbeit mit ihnen vereinfacht, da Sie dasselbe Objekt unabhängig vom Typ der durchgeführten Transformation verwenden können.

Da an jeder Art von Datentransformation Variablen beteiligt sind, muss die Audio- und Videotransformation die breite Palette möglicher Medienkonfigurationen berücksichtigen. Die Windows Media Audio- und Video-Codecs unterstützen auch eine Reihe von speziellen Features, die Sie mithilfe des DMO konfigurieren können müssen.

Im Allgemeinen werden die Variableninformationen, die von den Codec-DMOs zum Komprimieren und Dekomprimieren digitaler Medien benötigt werden, auf eine von drei Arten übermittelt:

  • Legen Sie den Eingabetyp für die DMO fest, um die Merkmale der nicht komprimierten Medien, die Sie an einen Encoder-DMO übergeben, und die Merkmale der komprimierten Medien zu übermitteln, die Sie an einen Decoder-DMO übergeben.
  • Legen Sie den Ausgabetyp auf dem DMO fest, um die Merkmale der komprimierten Medien zu übermitteln, die von einem Encoder-DMO übermittelt werden, und die Merkmale der unkomprimierten Medien, die von einem Decoder-DMO übermittelt werden.
  • Konfigurieren Sie mithilfe der Methoden der IPropertyBag-Schnittstelle andere Einstellungen, die die verschiedenen Features der Codec-DMOs als Eigenschaften unterstützen. IPropertyBag ist eine COM-Standardschnittstelle, die von allen Codec-DMOs unterstützt wird.

Darüber hinaus werden einige Codecfeatures mithilfe anderer Schnittstellen verwaltet, die für die Codec-DMOs spezifisch sind. Diese Schnittstellen werden für jeden Codec im Abschnitt Codec-Objekte aufgeführt.

Eingabe- und Ausgabetypen sind spezifisch für Eingabe- und Ausgabedatenströme. Jeder Stream stellt eine diskrete Darstellung des Inhalts dar. Beispielsweise verfügt der Windows Media Video-Encoder-DMO über einen einzelnen Eingabedatenstrom und zwei Ausgabedatenströme. Der Eingabestream akzeptiert nicht komprimierte Videobeispiele. Der erste der beiden Ausgabedatenströme liefert komprimierte Beispiele. die andere stellt unkomprimierte Beispiele bereit. Die einzelnen Beispiele in einem Ausgabestream stellen den gleichen Inhalt wie die entsprechenden Beispiele im anderen Stream dar, aber jeder Stream liefert diese Beispiele in einem anderen Format.

Jeder Stream (Eingabe oder Ausgabe) unterstützt einen oder mehrere Medientypen. Ein Medientyp oder -format wird durch eine DMO_MEDIA_TYPE-Struktur beschrieben. Sie können die DMO nach den Typen abfragen, die von einem Ausgabestream unterstützt werden, indem Sie IMediaObject::GetOutputType aufrufen. Diese Methode gibt einen gültigen (in einigen Fällen jedoch teilweise unvollständigen) Ausgabetyp für diesen Stream zurück. Sie können die unterstützten Medientypen für einen Ausgabestream aufzählen, indem Sie getOutputType wiederholt aufrufen und den type-Parameter mit jedem Aufruf erhöhen. Wenn der von Ihnen übergebene Typindex außerhalb der Grenzen liegt, gibt die Methode DMO_E_NO_MORE_ITEMS zurück. Eingabeformate können mit der IMediaObject::GetInputType-Methode auf die gleiche Weise aufgezählt werden.

Die Typen, die von der DMO aufgelistet werden, sind nur die "bevorzugten" Typen, andere Typen werden jedoch möglicherweise unterstützt. Sie können einen Ausgabetyp überprüfen, indem Sie IMediaObject::SetOutputType aufrufen. Verwenden Sie IMediaObject::SetInputType , um einen Eingabetyp zu überprüfen. Beide Methoden geben DMO_E_TYPE_NOT_ACCEPTED zurück, wenn die von Ihnen übergebene DMO_MEDIA_TYPE Struktur ungültig ist. Einige DMOs erfordern, dass Sie einen Ausgabetyp festlegen, bevor Sie Eingabetypen auflisten. Die Windows Media Audio- und Video-Codec-DMOs verfügen alle über Ein- und Ausgänge, die eine interdependente Überprüfung aufweisen. Das heißt, der von Ihnen festgelegte Ausgabetyp legt die Validierungskriterien für den Eingabetyp fest. Es gibt auch einige Eigenschaften, die die gültigen Eingabe- und Ausgabetypen ändern, wenn sie festgelegt sind. Aus diesem Grund sollten Sie alle gewünschten Eigenschaften für die DMO festlegen, bevor Sie Typen auflisten.

Wenn Sie die Ausgabe- und Eingabetypen für die DMO festgelegt haben, können Sie mit der Verarbeitung von Beispielen beginnen. Jedes Eingabebeispiel wird mithilfe eines Aufrufs von IMediaObject::P rocessInput an den Codec übergeben, und jedes Ausgabebeispiel wird vom Codec übermittelt, wenn Sie IMediaObject::P rocessOutput aufrufen.

Arbeiten mit Codec-DMOs