Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Schnellere Alternative zu Avisynth/Vfw möglich? (https://www.delphipraxis.net/55961-schnellere-alternative-zu-avisynth-vfw-moeglich.html)

Garfield 29. Okt 2005 16:40


Schnellere Alternative zu Avisynth/Vfw möglich?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

für einen Bekannten habe ich ein Tool erstellt, welches einen Player auf Grundlage dieses Tipps aus dem Swiss Delphi Center zur Wiedergabe von AviSynth-Scripten enthält.

Beim Test hat er festgestellt, dass es beim Scrollen mit den Cursortasten (Links = zurück, Rechts = vor) ab und zu zu Stillständen kommt, während es in VirtualDubMod flüssiger funktioniert. Nun stellt sich die Frage, ob mein Player beschleunigt werden kann? Zum Beispiel, indem man die einzelnen Frames nicht über Vfw sondern direkt von der AviSynth.Dll abfordert. Ich weiß allerdings nicht wie.

Im Anhang ist das Tool (reduziert auf den Player) als Source und kompiliert. Ich arbeite mit Delphi 7 Personal Edition.

Anmerkung, damit niemand schreibt: "Dann nimm doch VDM": Es werden mehrere Tools für die Bearbeitung des AviSynth-Scriptes benötigt, deren benötigte Funktionen in dem Tool vereint werden.

Garfield 30. Okt 2005 15:37

Re: Schnellere Alternative zu Avisynth/Vfw möglich?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bei http://forum.gleitz.info/ habe ich die angehängte Unit gefunden, mit welcher ich aber nicht zurechtkomme.

Garfield 30. Okt 2005 18:59

Re: Schnellere Alternative zu Avisynth/Vfw möglich?
 
Leider konnte mir in der kurzen Zeit noch niemand helfen. Ich bitte ich um Verständnis, dass ich erst in 12 Tagen wieder vorbeischauen kann, da ich auf Montage gehe und mir dort kein Internetanschluss zur Verfügung steht.

Garfield 11. Nov 2005 10:29

Re: Schnellere Alternative zu Avisynth/Vfw möglich?
 
Habe wohl wieder ein zu spezielles Thema erwischt. Viele werden den TMediaPlayer oder das DSPack verwenden. Ist hier allerdings nicht das richtige. Auf http://aquaplaning.20m.com/ gibt es das Programm AVSCompare mit AVSWrap.DLL. Dies wäre schon das richtige, nur ist die DLL fehlerhaft. Das heißt, das schnelle Abrufen aufeinanderfolgender Frames ist nur von Position 0 an möglich. Bei anderen Positionen bekommt man nur das Frame an dieser Position. Ausserdem bleibt die Wiedergabe nach einer Weile einfach stehen.

Garfield 13. Nov 2005 00:06

Re: Schnellere Alternative zu Avisynth/Vfw möglich?
 
Für Programmierforen wie unseres scheint diese Frage zu speziell zu sein. Das ist wohl auch der Grund dafür, dass bei Doom9.org und Gleitz.info Unterforen für Softwareentwicklung eingerichtet wurden. Da wird nun auch an der Lösung meines Problemes gearbeitet.

Garfield 15. Nov 2005 23:35

Re: Schnellere Alternative zu Avisynth/Vfw möglich?
 
Liste der Anhänge anzeigen (Anzahl: 1)
In der obigen Source ist leider ein Fehler enthalten. Wenn man die Cursortasten drückt, wird zwar die Position der Trackbar verändert, aber es wird kein Frame geholt. Unten ist das korrigierte Projekt.

Ausserdem wird die Position der Trackbar erst geändert, wenn das Bild neu gezeichnet wurde.

Garfield 19. Nov 2005 14:59

Re: Schnellere Alternative zu Avisynth/Vfw möglich?
 
Die Bremse liegt im wesentlichen in der Verwendung des TImage. Gibt es dazu eine schnellere Alternative?

dizzy 20. Nov 2005 00:08

Re: Schnellere Alternative zu Avisynth/Vfw möglich?
 
Mh, für diese Anwendung evtl. sowieso eine TPaintbox nehmen statt eines Images, oder schau dir mal die Graphics32 Komponenten an ( www.g32.org ), dort gibt es auch ein verbessertes TImage (TImage32) und eine Paintbox. Evtl. hilft das ja schon.

Garfield 20. Nov 2005 00:38

Re: Schnellere Alternative zu Avisynth/Vfw möglich?
 
An eine TPaintBox habe ich auch schon gedacht. Ich weiß nur nicht wie ich das hinbekomme, weil ich am Ende doch nur ein Handle eines TBitmaps habe.

Delphi-Quellcode:
procedure Tfrm_Haupt.HoleImage(FrameNumber: Integer; ABitmap: TBitmap);
begin
  GetFrame := AVIStreamGetFrameOpen(AVIStream, nil);
  BitmapInfoHeader := AVIStreamGetFrame(GetFrame, FrameNumber);
  bits := Pointer(Integer(BitmapInfoHeader) + SizeOf(TBitmapInfoHeader));

  DC_Handle := CreateDC('Display', nil, nil, nil);

  try
    hBmp := CreateDIBitmap(
    DC_Handle,
    BitmapInfoHeader^,
    CBM_INIT,
    bits,
    PBITMAPINFO(BitmapInfoHeader)^,
    DIB_RGB_COLORS);
  finally
    DeleteDC(DC_Handle);
  end;

  ABitmap.Handle := hBmp;
  AVIStreamGetFrameClose(GetFrame);

end;
In der Regel sind die Frames 32Bit und die Source ein AviSynth-Script. Ich werde mir die Graphics32 sofort ansehen, vielleicht bekomme ich damit hin. Wenn Beispiele dabei sollte es auf jeden Fall gehen.

Garfield 20. Nov 2005 11:16

Re: Schnellere Alternative zu Avisynth/Vfw möglich?
 
Das TImage32 scheitert daran, dass das Handle Property ist. Das Handle des Bitmap kann ihm nicht zugewiesen werden. An sonsten kann man mit den Graphics32 interessante Sachen machen.

Nachtrag:

Bildgröße und Farbtiefe sind bekannt. Kann man das Bild nicht direkt auf das Panel zeichnen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:11 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz