Wie kann ich access violation bei Avisynth verhindern ?

  • Hallo
    bei etwas fehlerhaftem videomaterial(beispiel disk hat lesefehler) kann es beim trancoden mithilfe von avisynth zu access violation an bestimmter adresse kommen.

    gibt es bei avisynth eine option die sowas ignoriert?

  • Nein - weil AviSynth ja die Decodierarbeit gar nicht durchführt. Das übernehmen abhängig vom Quell-Typ:

    - bei AviSource: ein VfW-Codec
    - bei DirectShowSource: ein DirectShow-Decoderfilter
    - bei MPEG-Decoder-Plugins: dieses AviSynth-Plugin

    Wenn also der eine Decoder abstürzt, dann kannst du nur versuchen, einen anderen Decoder zu finden. Aber AviSynth bleibt immer der Stabilität des jeweils verwendeten Decoders ausgeliefert. Im Grunde ist AviSynth ja sogar stabil: Es berichtet dir nur über den Absturz, anstatt noch selber mitgerissen zu werden.

  • Ich habe mal in einem Fall eines defekten DVB-Streams die MPEG2Dec.dll ausgetauscht; auf Avisynth.org waren mehrere angegeben, natuerlich auch MPEG2Dec3.dll von Nic usw.

    Eine Version war laut Angaben in der Filter-Tabelle stabil im Transport-Stream-Parsing, die habe ich letztendlich auch genommen um diesen defekten Stream frameserven zu koennen.

  • Im Grunde ist AviSynth ja sogar stabil

    Uh blubb, echt?

    Also, sobald man mit conditionals arbeitet, wird extrem wackelig....
    nee nee.

    AVISYnth ist nur stabil, wenn man einfache, lineare sachen macht und nicht zig Instanzen eines Filters aufruft.

  • Im Grunde, das impliziert doch fast schon die Verwandschaft mit dem Radio-Eriwanschen Im Prinzip ... ;)

  • Danke schön. Ich versuche hier, einem Nutzer die Ursache von Problemen mit Grundlagen zu erklären, und ihr streitet um Ausnahmefälle bei Profi-Skripten, die ja nun wirklich die Grenzen der Möglichkeiten ausloten.

    Außerdem weiß ich nicht so recht, ob die Instabilitäten bei multiplen Instanzen nun am AviSynth-Kern liegen, oder an nicht-reentranter Programmierung der Plugin-DLLs. ;)

  • Siehst du - aber über AviSynth meckern! ;)


    Reentrante ("wieder-aufrufbare") Programmierung - bedeutet zusammengefasst etwa: So programmieren, dass die selbe Funktion gleichzeitig mehrfach verwendet werden kann, ohne dass Daten, die in der einen Instanz verändert werden, die andere Instanz durcheinander bringen.

    Das war z.B. schon zu DOS-Zeiten eine böse Falle bei Interrupt-Programmierung: Wenn eine Routine eine Unterbrechung noch bearbeitete, während schon die nächste gleiche Unterbrechung wieder die gleiche Routine startete. Und bei Multi-Threading potenziert sich das Risiko.

    Erfordert z.B. ganz strenge Verwendung lokaler Variablen (die bei jeder Instanz neu reserviert werden) - globale Variablen bergen immer das Risiko, dass die eine Instanz liest, was eine andere geschrieben hat. Und es gibt noch mehr Beispiele dafür, wann man Funktionen nicht sicher bei Multi-Threading verwenden kann.

  • wenn ich die stelle mit VD rausschneide und die avi mit direct stream copy parse, kan ich fehlerfrei zu mpeg2 encoden.

    wenn ich die fehlerhafte avi aber mit VD reencode zu avi, kommt kein bildfehler, nur halt wenn ich mit avisynth zu mpeg2 verarbeite kommt dieser access violationfehler,
    das problem dann ist, dass der fehler über das ganze bildmaterial bis zum ende zusehen ist, statt diese paar frames die zerstört sind

Jetzt mitmachen!

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