![]() |
AVISYNTH_C Port
Myrsloik hat AVISYNTH_C nach Delphi portiert. In der Source sind auch 2 Beispiel-DLLs enthalten. Somit ist es nun auch möglich Filter für AVISynth in Delphi leichter zu coden.
Hier noch mal der original Text zu diesem Port: Zitat:
![]() Myrsloik hat noch ein paar Beispiele gecodet. Somit ist es einfacher für Euch avisynth_c in Euer Programm einzubauen. Wie man AVISYNTH_C in Delphi benützt:
Delphi-Quellcode:
uses avisynth_c
var avsval:AVS_Value; begin if OpenDialog1.Execute then begin //call avisouce with the selected filename avsval:=avs_invoke(env,'AVISource',avs_new_value_string(PChar(OpenDialog1.FileName))); //check for errors, only AVS_Values containing clips need to be freed //which it won't here if it's an error if avs_is_error(avsval) then raise EAviSynthCException.Create(avs_as_error(avsval)); //get a clip from the AVS_Value clip:=avs_take_clip(avsval,env); //release the AVS_Value since it contained a clip, releasing an AVS_Value //without a clip does nothing avs_release_value(avsval); //get video information and adjust window vi:=avs_get_video_info(clip); TrackBar1.Max:=vi.num_frames-1; ClientWidth:=vi.width; ClientHeight:=vi.height+TrackBar1.Height; with Image1.Picture.Bitmap do begin Width:=vi.width; Height:=vi.height; if avs_is_rgb32(vi) then PixelFormat:=pf32bit else if avs_is_rgb24(vi) then PixelFormat:=pf24bit end; TrackBar1Change(nil); end; end; ![]() |
Re: AVISYNTH_C Port
Sieht interessant aus. Ist leider noch nicht ganz vollständig. Wenn zum Beispiel der Decompressor fehlt, bekommt man eine Schutzverletzung in der User32.dll.
Nachtrag: Der Fehler tritt bei der Function ext_avs_invoke auf. |
Re: AVISYNTH_C Port
Zitat:
Ein Beispiel: Das Script enthält die Textzeile
Code:
Nach dem Parsen hat man die Variablen mit den Werten
AVISource ("D:\Beispiel.avi")
Delphi-Quellcode:
Dann heißt der Aufruf
Source_Funktion := 'AVISource';
Source_Datei := 'D:\Beispiel.avi';
Delphi-Quellcode:
Bei Myrsloik's avisynth_pascal_v4 bekommt man nicht auswertbare Fehlermeldungen aber das Bild mit der Fehlermeldung.
avsval := avs_invoke (env,
PChar(Source_Funktion), avs_new_value_string(PChar(Spurce_Datei))); Nachtrag: ![]() ![]() |
Re: AVISYNTH_C Port
Du kannst den Fehler als Text oder Video darstellen.
Hier mein altes Sample: ![]() Errorcode von v4:
Delphi-Quellcode:
Errorcode von v3:
procedure CheckForErrors(v: AVS_Value);
begin if avs_is_error(v) then raise EAviSynthCException.Create(avs_as_error(v)); end;
Delphi-Quellcode:
Wenn man v schreibt wirds ein Video. Wenn man avsval lässt kommt der string.
EAviSynthCException = class(Exception);
if avs_is_error(avsval) then raise EAviSynthCException.Create(avs_as_error(avsval)); |
Re: AVISYNTH_C Port
Hallo Amnon82,
die Schutzverletzung in der User32.Dll trat nur bei der Verwendung von 'AVISource' auf. Allerdings nicht bei jeder Compilation. Ist kein Decompressor vorhanden, sondern nur ein DirectShowFilter, kann man anstelle von AVISource DirectShowSource verwenden. Alternativ zur Auswertung von avs_is_error(v) bietet sich avsval.vtype an. Bei 'c' wurde ein Clip gefunden und man bekommt über avsval.vclip den Pointer. Bei 'e' liegt ein Fehler vor und man bekommt über avsval.vstring die Fehlermeldung. Sinnvoll erscheint mir, zuerst die Funktion 'Import' zu verwenden. Dabei sollte man sicherstellen, dass nur Textdateien geladen werden. Bei der Verwendung einer Avidatei kann es eine Weile dauern, bis diese geladen ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz