CAviFile Problem



  • Hallo,
    ich benutze dieses CAviFile von codeproject http://codeproject.com/KB/graphics/createmovie.aspx

    Man ruft das ganze so auf:

    CAviFile  avi("Output.Avi", mmioFOURCC('D','I','V','X'), 1);
    

    Damit ich (solange die Applikation aktiv ist) auf das fertige Video zugreifen kann, muss ich den destructor aufrufen.

    Nun kann ich leider weder mit new oder mit dem selben Aufruf ein neues avi CAviFile erzeugen.
    Ich habe auch versucht (wie sonst üblich) CAviFile im header der Applikation zu deklarieren, und dann in der cpp Datei damit zu arbeiten, doch dann schimpft er weil der Konstruktoraufruf falsch ist.

    Die einzige möglichkeit wie es nun überhaupt (1mal) funktioniert ist, das es ganz oben in der cpp Datei, wie auf codeproject beschrieben, deklariert ist, ich somit in der einen Methode die Bilder hinzufügen kann, und in der anderen dann den Destruktor aufrufen kann.

    Aber ich hab leider keinen Plan wie ich dann ein neues CAviFile erzeugen kann.

    Hat jemand von euch schonmal damit gearbeitet, oder kann mir einer sagen wie ich das (oder wo) ganze aufrufen muss, damit ich nicht jedes mal die Applikation neu starten muss, um ein neues avi erzeugen zu können ?



  • Multiplex schrieb:

    Hallo,
    ich benutze dieses CAviFile von codeproject http://codeproject.com/KB/graphics/createmovie.aspx

    Man ruft das ganze so auf:

    CAviFile  avi("Output.Avi", mmioFOURCC('D','I','V','X'), 1);
    

    Damit ich (solange die Applikation aktiv ist) auf das fertige Video zugreifen kann, muss ich den destructor aufrufen.

    Nachdem der Destruktor aufgerufen wurde, kannst du NICHT mehr auf dein Objekt zugreifen - und normalerweise solltest du ihn auch nicht explizit aufrufen.

    Nun kann ich leider weder mit new oder mit dem selben Aufruf ein neues avi CAviFile erzeugen.
    Ich habe auch versucht (wie sonst üblich) CAviFile im header der Applikation zu deklarieren, und dann in der cpp Datei damit zu arbeiten, doch dann schimpft er weil der Konstruktoraufruf falsch ist.

    Die einzige möglichkeit wie es nun überhaupt (1mal) funktioniert ist, das es ganz oben in der cpp Datei, wie auf codeproject beschrieben, deklariert ist, ich somit in der einen Methode die Bilder hinzufügen kann, und in der anderen dann den Destruktor aufrufen kann.

    Dann erklär doch mal genauer, was du eigentlich vorhast. Zur Not mußt du dein CAviFile lokal in der Funktion anlegen, in einer Schleife mit Werten füllen und am Ende der Funktion freigeben lassen - oder einen Zeiger verwenden.



  • Nachdem der Destruktor aufgerufen wurde, kannst du NICHT mehr auf dein Objekt zugreifen - und normalerweise solltest du ihn auch nicht explizit aufrufen.

    Also, das CAviFile erzeugt aus Bitmaps ein AVI File. (z.b. Video.avi)
    Wenn dann die Applikation beendet wird, wird ja normalerweise immer automatisch der Destruktor aufgerufen. Erst danach kann man auf das avi File z.B. mit dem Mediaplayer zugreifen (weil dort erst die Bilder an den avi Header geklatscht werden, und das Video.avi abgeschlossen wird.
    Da eben mein Tool auch videos abspielen kann, will ich gleich dort das Video ansehen. Damit das geht muss ich eben den Destruktor des CAviFiles aufrufen.
    Nachdem man das Video angesehen hat, kann man entscheiden, ob es OK ist, oder ob man ein neues Video.avi erstellt haben will. Logischerweise geht das ja nicht mehr, da ich den Destruktor bereits aufgerufen habe.

    Aber wie kann ich nun (ohne mein Tool zu schliessen) einfach wieder ein neues CAviFile initialisieren ? Oder wie "schliesse ich das Video ab" so dass ich den Destruktor nicht explizit aufrufen muss? ( Es gibt keine CloseVideo funktion oder sowas eben nur: Konstruktor und AddBitmap 😞


Anmelden zum Antworten