Frage

Ich bin der Umgang derzeit mit Windows Media Foundation. Doch aufgrund einiger Probleme mit dem Microsoft H.264-Decoder und einige fehlenden Decoder für benutzerdefiniertes Format, würde ich gerne wissen, ob es möglich wäre, einen Directshow-Decoder direkt mit CLSID zu instanziiert und baut um ihn herum einen Proxy, dass Exposes IMFTransform einen Decoder für Media Foundation zu erhalten. So, hier ist meine Frage:

Kann ich einen Directshow-Filter instanziiert (Decoder vorzugsweise) direkt und verwenden sie zum Dekodieren (das heißt einige komprimierten Rahmen setzen und unkomprimiert diejenigen bekommen) eine MFT zu erstellen?

Ich weiß, wie man die Filter instanziiert selbst seine CLSID verwenden. Allerdings habe ich keine Ahnung, wie die tatsächliche Decodierungsfunktionalität verwenden.

Irgendwelche Ideen, Hinweise, Links, was geschätzt wird. Danke,

J.

War es hilfreich?

Lösung

(Disclaimer:. Ich habe noch nie wirklich getan, aber ich sehe keinen technischen Grund, es nicht getan werden kann, so YMMV)

Wenn der Decoder ein DMO-Filter ist, dann wird es viel einfacher sein - Sie es durch IMediaObject . Das ist nicht wirklich viel anders aus, wie Directshow verwendet DMOs; es einfach Wraps mit einem anderen der DMO-Filter Transformation, die Griffe der Medientyp Verhandlung und Probe Gang, aber es gibt nichts hindert Sie wirklich von diesem in Ihrer eigenen Anwendung zu tun.

Es gibt einen Haken: für IMediaObject :: Process und IMediaObject :: Process, werden Sie Ihre eigenen Puffer-Klasse müssen die Geräte IMediaBuffer . Aber es ist eine ziemlich grundlegende Schnittstelle, so dass ich glaube nicht, dass Sie zu viel Mühe haben es umzusetzen. Hier ist eine grundlegende Implementierung .

Für die regelmäßige Directshow Filter, es wird tatsächlich viel schwieriger sein, weil die meisten Directshow-Filter wirklich auf eine externe grafische Darstellung zur Verfügung stehen (typischer Fall: alle der Directshow Art setzt die Existenz dieses Graphen Vielseitigkeit) . Wenn Sie wirklich ein einzelnes DShow Filterstandalone verwenden mögen, würden Sie wahrscheinlich die gesamten Filtergraphen wickeln müssen, und haben dann ein benutzerdefinierten Quellenfilter zu Futterproben in. Sie das Beispiel Grabber verwenden könnten (oder ein benutzerdefinierten Render-Filter) zu yank Proben aus dem Diagramm und setzen auf den Rest der Anwendung. (Eine Art von verrückter Idee wäre selbst in einer DMO-Filterimplementierung diese Grafik zu wickeln, und dann IMediaObject, um es zu reden verwenden - dies könnte schwierig sein, jedoch)

Zum Glück die meisten Decoder sind in der Regel als DMO Filter implementiert werden, so dass ich denke, es gibt eine hohe Wahrscheinlichkeit, dass Sie nur IMediaObject verwenden können.

Andere Tipps

Ich bin mir nicht sicher, warum Sie wollen würde, dies zu tun. Sie wollen nicht wirklich ein Filterleben außerhalb eines Graphen.

Wenn Sie nicht über die herkömmliche Datei / Netzwerk Quellenfilter oder die traditionellen Renderer verwenden möchten, können Sie Puffer Renderer schreiben und Quellenfilter puffern, dass Sie passieren Zeiger auf, und erhalten Zeiger aus. Dann können Sie das ganze Durcheinander in ein Diagramm fallen und es laufen, und die Verwendung des Decoders so ziemlich direkt sonst ohne etwas bekommen. Dies wäre nicht schwer zu tun. Der Decoder wahrscheinlich erwartet einen PES-Paketstrom though.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top