Vorteile von DMOs

DMOs bieten die folgenden Vorteile:

  • Sie sind im Allgemeinen kleiner und einfacher als DirectShow-Filter, da sie weniger Funktionalität unterstützen.
  • Sie sind flexibler als DirectShow-Filter, da sie kein Filterdiagramm erfordern. Sie können sie mit DirectShow verwenden, wenn Sie die von DirectShow zur Verfügung gestellten Dienste benötigen, z. B. Synchronisierung, intelligente Verbindung, automatische Verarbeitung des Datenflusses und Threadverwaltung. Clients, die diese Dienste nicht benötigen, können direkt auf DMOs zugreifen.
  • DMOs führen immer eine synchrone Datenverarbeitung durch, wodurch viele Threadingprobleme vermieden werden, die Sie berücksichtigen müssen, wenn Sie einen Filter schreiben.
  • Im Gegensatz zu herkömmlichen ACM- und VCM-Codecs basieren DMOs auf dem Component Object Model (COM), sodass sie über QueryInterface erweitert werden können.
  • DMOs unterstützen ein allgemeineres Streamingmodell als ACM- oder VCM-Codecs. Wie DirectShow-Filter können DMOs mehrere Eingaben und ausgaben unterstützen.

Aus diesen Gründen werden DMOs jetzt als Lösung zum Schreiben von Encodern, Decodern und Audioeffekten empfohlen. Abhängig von den Anforderungen der Anwendung sind auch viele andere Szenarien möglich.

Unterschiede zwischen DMOs und DirectShow-Filtern

DirectShow-Filter können nicht außerhalb eines DirectShow-Filterdiagramms funktionieren. In DirectShow vermittelt der Filter Graph Manager zwischen der Anwendung und den Filtern. DirectShow-Filter erledigen den Großteil der zum Streamen von Daten erforderlichen Arbeit, einschließlich:

  • Zuordnen von Puffern.
  • Aushandeln von Medientypen und Verbindungen mit anderen Filtern.
  • Pushen von Daten durch das Filterdiagramm.
  • Senden von Ereignissen an den Filter Graph Manager.
  • Synchronisieren mehrerer Threads.

Im Gegensatz dazu führt ein DMO keine dieser Vorgänge aus. Stattdessen liegen diese Arten von Aufgaben in der Verantwortung des Clients, der die DMO verwendet. Der Client ordnet Puffer zu, füllt sie mit Daten auf und übermittelt sie an die DMO. Der DMO verarbeitet die Daten, und der Client ruft die resultierenden Ausgabepuffer ab.

Informationen zu DMOs