DirectShow - AVI auf Textur rendern



  • hallo,

    Ich will ein AVI auf LPDIRECT3DTEXTURE8 rendern, habe mir das Texture3D Beispiel im SDK schon angeguckt.. verstehe das aber nicht wirklich. Hat jemand ein simples kleines Beispiel oder ein Tutorial? Kann auch nur Code sein, fummel mich dann da selber durch.

    Vielen Dank!



  • Hehe, genau das wird in meinem Buch gemacht 🙂
    Also ein "simples Beispiel" gibt es zu dem Thema wohl nicht, weil das nicht so einfach ist. Prinzipiell musst Du wie folgt vorgehen:

    - Erstelle eine eigene Klasse für Deinen Video-Renderer. Die Klasse leitest Du von der Klasse CBaseVideoRenderer ab.
    - Implementiere die Methoden CheckMediaFormat und SetMediaFormat. Die erste wird aufgerufen, um zu prüfen, welches Bildformat für die Videodaten OK ist (also z.B. R5G6B5, R8G8B8 usw.) und die zweite wird aufgerufen, wenn DirectShow sich ein Format ausgesucht hat. An der Stelle solltest Du dann die Textur erstellen.
    - In der DoRenderSample-Methode musst Du die ankommenden Videodaten verarbeiten. Also Textur sperren, Pixel für Pixel durchgehen und die Videodaten in das Format der Textur umrechnen (z.B. R8G8B8 -> R5G6B5).
    - Nun hast Du Deinen Filter. Erstelle einen Filter-Graphen. Füge einen Source-Filter hinzu, mit der abzuspielenden Videodatei. Erstelle eine Instanz Deines Filters. Finde dann den Output-Pin des Source-Filters und rufe seine Render-Methode auf. DirectShow verbindet dann den Pin mit Deinem Filter.
    - Dann noch die üblichen Schnittstellen wie IMediaControl abfragen und Du kannst das Video abspielen.

    [ Dieser Beitrag wurde am 12.02.2003 um 00:06 Uhr von TomasRiker editiert. ]



    (NEU!) Die Klasse tbVideo:
    Nun kann die TriBase-Engine auch Videos abspielen! Dabei wird praktisch jedes Format unterstützt. Das beste ist, dass die Videos nicht direkt auf dem Bildschirm abgespielt werden, sondern auf einer Direct3D-Textur! So kann der Programmierer frei entscheiden, was er mit dem Video macht. Die Engine konvertiert die Farben automatisch in die Formate R8G8B8, X8R8G8B8, A8R8G8B8, R5G6B5, X1R5G5B5 und A1R5G5B5.
    *

    und nun muss ich bis April warten und mir Tag für Tag die Beschreibung der Klasse durchlesen *zitter*

    😉



  • Hehe 🙂



  • Bei Nehe gibts dazu IMHO ein Sample



  • TomasRiker willst du nicht Werbung für dein Buch machen und genau diese Klasse als Beispiel hier posten? 😃



  • Hallo, ich bin neidisch auf dich weil du so ein gutes Buch rausbringst. :o

    Gruß, Stefan



  • Original erstellt von <Neider>:
    Hallo, ich bin neidisch auf dich weil du so ein gutes Buch rausbringst. :o
    Gruß, Stefan

    Du kennst es ja noch gar nicht.

    @personenkult:
    Wäre das nicht ein wenig unklug? 😃



  • ja schon.. war aber doch ein Versuch wert oder? 😃



  • so nun habe ich es erstmal mit dem IVideoWindow Objekt gelöst.. ich spiele mein Video nun ab in der mitte des Screens mit

    IVideoWindow* m_pVidWin;
    m_pVidWin->SetWindowPosition();

    was auch wunderbar funktioniert.. nun will ich aber die Farbe des Rahmens (das was rings um das Video ist) ändern, was ich laut MSDN mit put_put_BorderColor() machen kann..

    funktioniert aber nicht.. muss ich da noch irgendwas beachten?? 😕

    Danke Danke!!


Anmelden zum Antworten