avsInfo,... Irgendwie sehe ich den Fehler nicht,...


  • Sobald ich avsInfo mit etwas füttere, was wirklich einen clip hat, beendet es sich nicht und mir ist nicht klar warum nicht. :/

    Cu Selur

    Ps.: Hab den Source auch mal angehängt


  • scheint zu gehen, crashed nur bei FFMpegSource2 Input,... (eventuell wegen dem Indexieren)

  • Ein Programmierer mit Erfahrung in C++ konnte allein in diesem Quelltext keine Gründe finden, vielleicht liegt es also eher an Konventionen, wie AviSynth aufzuräumen ist.

    Randnotiz: "cerr" ist eigentlich nur für wirkliche Fehlermeldungen da, Ausgaben ohne Dringlichkeit sollten nach "cout".

  • Einfach nur "delete"? ... Mir wird gerade im IRC zugeflüstert, dass da vielleicht so was wie "DeleteScriptEnvironment" existieren sollte. Auch wenn derjenige AviSynth überhaupt nicht kennt.

    Für "res" mag "delete" reichen, für "env" aber besser nicht.

  • Ja, mal schauen,.. wenig Lust da jetzt alles durch zu gehen was sich von 2.5 auf 2.6 geändert hat,.. einfach austauschen der avisynth.h klappt schon mal nicht,... -> mal schauen ob es irgendwo brauchbare Beispiele gibt die nicht nur an plugin-Entwickler gerichtet sind,..

    Cu Selur

  • Ja, mal schauen,.. wenig Lust da jetzt alles durch zu gehen was sich von 2.5 auf 2.6 geändert hat,.. einfach austauschen der avisynth.h klappt schon mal nicht,... -> mal schauen ob es irgendwo brauchbare Beispiele gibt die nicht nur an plugin-Entwickler gerichtet sind,..

    Cu Selur

    Schau Dir mal den Code von meinem AVSMeter an (<= Avisynth 2.58).

    Wenn Du die erweiterten Funktionen von 2.6 benutzen willst, musst Du mit dem 2.6 Header linken und "interface.cpp" in Dein Projekt einbinden.

    Im AVSMeter Thread auf Doom9 (EN) findest Du ausserdem Infos zu Problemen mit "delete env;".

    2 Mal editiert, zuletzt von Groucho2004 (7. Februar 2012 um 23:59)

  • Resultat:
    - Avisynth 2.6: finde keine 'interface.cpp'
    - Avisynth 2.5 :

    verwende folgenden code:


    der auch wunderbar klappt so lange das Avisynth Skript einwandfrei ist, hat das AvisynthSkript aber ne Macke schmiert mir das Ganze bei:
    m_res = m_env->Invoke("Import", infile);
    um die Ohren und mir ist nicht klar warum das Ganze nicht gecatched wird,...

    Sieht jemand den Fehler?

    Cu Selur

  • Resultat:
    - Avisynth 2.6: finde keine 'interface.cpp'
    - Avisynth 2.5 :

    verwende folgenden code:

    Code
    try {  QLibrary avsDLL("avisynth.dll");  if (!avsDLL.isLoaded() && !avsDLL.load()) { //guckt ob die dll schon geladen ist, wenn nicht wird sie geladen    throw AvisynthError("Could not load avisynth.dll!");  }  IScriptEnvironment* (*CreateScriptEnvironment)(int version) = (IScriptEnvironment*(*)(int)) avsDLL.resolve("CreateScriptEnvironment"); //holf die CreateScriptEnvironment aus der dll  m_env = CreateScriptEnvironment(AVISYNTH_INTERFACE_VERSION); //erstellt ein IScriptEnvironment  if (!m_env) { //bricht ab falls das Environment nicht erstellt werden konnte    throw AvisynthError("Could not create IScriptenvironment,...");  }  const char* infile = m_currentInput.toUtf8(); //wandelt den Inputnamen in ein einen char* um  try {    AVSValue as_version;    as_version = m_env->Invoke("VersionString", AVSValue(&as_version, 0)); //holt die aktuelle Version     m_version = as_version.AsString(); //speichert die Version als String für spätere Vverwendung  } catch (IScriptEnvironment::NotFound) { //falls das IScriptEnvironment nicht da gewesen sein sollte wird abgebrochen    throw AvisynthError("Could get the current version,..");  }  m_res = m_env->Invoke("Import", infile); //Importiert das aktuelle File (klappt wenn das File okay, ist ansonsten crashed es hier :/)  m_clip = m_res.AsClip(); //holt sich einen Clip  m_inf = m_clip->GetVideoInfo(); //holt sich die Infos zum Clip  if (!m_inf.HasVideo()) { //falls der Clip keinen Videostream hat wird abgebrochen    throw AvisynthError("Input has no video stream,...");  }} catch (AvisynthError err) { //sollte alle AvisynthError catchen,..  cout << "Avisynth error: " << err.msg << endl;  return;} catch (...) { //sollte alles andere catchen,..  cout << "unknown error" << endl;  return;}m_end = m_inf.num_frames; //holt sich die Anzahl der Frames des Scriptesthis->showFrame(0); //ruft eine andere Methode auf, die das erste Frame anzeigt


    der auch wunderbar klappt so lange das Avisynth Skript einwandfrei ist, hat das AvisynthSkript aber ne Macke schmiert mir das Ganze bei:
    m_res = m_env->Invoke("Import", infile);
    um die Ohren und mir ist nicht klar warum das Ganze nicht gecatched wird,...

    Sieht jemand den Fehler?

    Cu Selur

    Wieso ist das hier:

    Code
    m_end = m_inf.num_frames; //holt sich die Anzahl der Frames des Scriptes
    this->showFrame(0); //ruft eine andere Methode auf, die das erste Frame anzeigt


    ausserhalb der try/catch statements?

    Resultat:
    - Avisynth 2.6: finde keine 'interface.cpp'


    Ist in "src\core"

  • Zitat

    ausserhalb der try/catch statements?


    wenn er da angekommen ist sollte eigentlich alles gegessen sein, ändert auch nichts am Absturz bei kaputten Skripten,.. (da schmiert er ja auch schon vorher ab :()

    Zitat

    Ist in "src\core"


    werde ich mir morgen mal schnappen.

  • Avisynth 2.6: mit der nun geladenen 'interface.cpp' klappt es auch mit dem Avisynth 2.6 interface.
    Generell: Anwendung crashed immer noch in der:

    Code
    m_res = m_env->Invoke("Import", infile);


    Zeile, wenn das Skript was geladen ist, nicht einwandfrei arbeitet :/

    Cu Selur

    Ps.: andere Unschönheit ist, dass das Erstellen eines IScriptEnvironments nicht klappt wenn ich gegen das Aivsynth 2.6er Interface gehe, aber eine Avisynth 2.5 dll lade. ;)

  • Generell: Anwendung crashed immer noch in der:

    Code
    m_res = m_env->Invoke("Import", infile);


    Keine Ahnung, vielleicht mag das Avisynth API kein QT. :D

    Du solltest das mal im Avisynth Development Thread auf Doom9 (en) posten. IanB kann dir da wahrscheinlich besser helfen.

    andere Unschönheit ist, dass das Erstellen eines IScriptEnvironments nicht klappt wenn ich gegen das Aivsynth 2.6er Interface gehe, aber eine Avisynth 2.5 dll lade. ;)


    Das ist normal. Wenn du in der avisynth.h "enum { AVISYNTH_INTERFACE_VERSION = 5 };" auf "enum { AVISYNTH_INTERFACE_VERSION = 3 };" aenderst, funktioniert es. Dann kannst du aber nicht die neuen 2.6 Funktionen benutzen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!