DirectX 9 und Wiedergabe von AVI-Dateien
-
Nabend!
Ich bin gerade auf der Suche nach einem guten Tut, in dem erklärt wird, wie ich in eine DirectX-Anwendung das Abspielen von AVI-Filmen unter bekomme. Leider wurde ich nicht so richtig fündig.
Ich programmiere in C++, verwende DirectX 9c.
Funktioniert das überhaupt, daß man AVI-Filme problemlos in einer DX-Anwendung abspielen läßt? Sollte schon oder?!
Hat jemand ein paar gute Tipps, können auch Bücherhinweise sein. Ich wäre für jeden Hinweis dankbar.Grüße
-
sollte in Verbindung mit DirectShow gehen
-
Jo mit DirectShow ist das recht einfach und man findet auch einige Tutorials, doch ist DirectShow schon ein kleines Weilchen nicht mehr Besstandteil von DirectX.
Entweder musst du dir die entsprechendne Dateien seperato irgendwie runterladen oder du weichst auf andere Techniken aus.
So wie ich es mitbekommen habe wäre die Microsoftalternative VFW - Video for Windows.
Daneben gibt es jedoch auch einige freie Bibliotheken.
-
Es gibt die Möglichkeit mit Hilfe von DirectShow auf eine Texture zu rendern. Funktioniert soweit ganz gut - so lange es alleine läuft
Nun habe ich meine VideoRenderer-Klasse in mein Projekt integriert, will das Video abspielen und es läuft nur ein paar Sekunden, dann wird das 3DDevice zurück gesetzt und initialisiert meine Engine neu.
Meine Vermutung geht in Richtung, daß irgendwas mit den Render- oder Texture-States nicht stimmt, sobald das Video ausgegeben werden soll.
Wie gesagt, solange nur das Video und irgendein Mesh ausgegeben werden soll, läufts - zumindestens funktioniert mein kleines Testprogramm ohne Probleme.@Video for Windows: Bei Wiki laß ich, daß es sich um eine alte Schnittstelle handelt, die durch DS abgelöst wird? Ist das richtig?
Und was für freie Bibliotheken gibt es in dem Bereich? Das Video muß mir auf eine Texture ausgegeben werden. Meine Klasse hat z.B. den großen Nachteil, sobald es sich um kein unkomprimiertes Video handelt, öffnet DS ein seperates Fenster, das ist natürlich nicht Sache des Erfinders.
-
Wenn du es direkt über DirectShow und den VMR9 machen willst, musst du sicherstellen, dass der VMR9 nicht im "mixing mode" läuft.
Tut er das nämlich, dann verstellt er dir einige Einstellungen im Device, während du damit arbeitest.Du kannst aber auch den SampleGrabber + Null Renderer verwenden, und die Daten dann selbst in eine Textur hochladen.
Idealerweise solltest du dir die Daten dabei im YV12 geben lassen, dann in drei Texturen hochladen (je eine für Y U und V), und dann die Frabraumkonvertierung YUV->RGB in einem Pixel-Shader machen.
Wenn du den SampleGrabber nämlich zwingst dir ein RGB Bild zu geben, dann ist das a) langsamer und b) bekommst du kein schönes Chroma Upsampling.
-
Oooooooooooooh! Da haust Du ja gleich mit Begriffen um Dich.
Wie stell ich denn sicher, daß der VMR9 nicht im mixing Modus läuft?Den Rest muß ich mir morgen mal in Ruhe angucken, vielen Dank für Deine Hilfe!
Ach kannst Du mir zufällig noch ein Tut empfehlen wo das alles nochmal gut erklärt wird, vor allem das mit dem SampleGrabber + Null Renderer?
Dabei war ich so stolz, daß das mit dem Texture-Renderer klappte ...Gute Nacht an alle!
-
SiMMeOne schrieb:
Wie stell ich denn sicher, daß der VMR9 nicht im mixing Modus läuft?
Wenn ich das noch wüsste, hätte ich es dazugeschrieben
BTW: kann auch sein dass es *nur* im Mixing-Mode geht, also genau anders rum. Bin mir da jetzt nichtmehr sicher.Ach kannst Du mir zufällig noch ein Tut empfehlen wo das alles nochmal gut erklärt wird, vor allem das mit dem SampleGrabber + Null Renderer?
Nö, leider. Gibt aber einige Beispiele zum Thema SampleGrabber im Internet zu finden, vielleicht ist da was leicht verständliches für dich dabei.