AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Schnellere Alternative zu Avisynth/Vfw möglich?
Thema durchsuchen
Ansicht
Themen-Optionen

Schnellere Alternative zu Avisynth/Vfw möglich?

Ein Thema von Garfield · begonnen am 29. Okt 2005 · letzter Beitrag vom 29. Apr 2006
 
grizzly

Registriert seit: 10. Dez 2004
150 Beiträge
 
Delphi XE4 Professional
 
#21

Re: Schnellere Alternative zu Avisynth/Vfw möglich?

  Alt 24. Nov 2005, 11:31
Mein Eindruck ist, daß AviSynth sich an der Framerate des Videos orientiert, und einfach die Bilder nicht schneller liefert als vorgesehen. Im Normalfall mit 25fps. (Vielleicht wegen Audio-Synchronisierung?)

Mit dem "OnIdle" wollte ich nur sehen, wie schnell es eigentlich gehen können sollte. Quick und dirty hab ich folgenden Routine eingetragen:
Delphi-Quellcode:
procedure Tfrm_Haupt.OnIdle(Sender: TObject; var done: boolean);
begin
 tb_Frame.position := tb_Frame.position+1;
 done := false;
end;
Und dann in Deiner FormCreate folgendes aufgerufen:
Application.onidle := OnIdle; Wenn man jetzt ein AviSynth-file lädt, dann wird dies sofort abgespielt. Und da hatte ich mich gewundert, daß das bei mir immer noch nur mit 25Hz lief und nicht mit allem was die Kiste her gab. Das habe ich erst erreicht, nachdem ich die Videoframerate im AVI selber hochgedreht habe (VirtualDUB). Deshalb die Vermutung, daß AviSynth selbstständig versucht, die Framerate einzuhalten.

Mit dieser Änderung kam dann das OnIdle Experiment auf gut 100Hz. Scrollen mit den Pfeiltasten kommt allerdings nur auf gut 30Hz, und das hat einen simplen anderen Grund: Die Tastaturwiederholrate!

Das mit dem scrollen muß anders laufen. Vielleicht so: Du mußt den wm_keydown Event für die links/rechts Pfeile (vk_Left, vk_right) abpassen, und dann solange auf Teufel komm raus scrollen, bis der wm_keyup event für diese Tasten kommt. Dann bist Du unabhängig von der Tastatuswiederholrate.

Ohne den Code zu testen, könnte so aussehen:
Delphi-Quellcode:
procedure Tfrm_Haupt.OnIdle(Sender: TObject; var done: boolean);
begin
 IF ScrollDir <> 0 then // Natürlich noch Grenzen abfangen!
   tb_Frame.position := tb_Frame.position+ScrollDir;
 done := false;
end;

procedure Tfrm_Haupt.AppMessage(var Msg: TMsg; var Handled: boolean);
begin
  if Msg.message = wm_keydown then
    begin
      if Msg.wParam = vk_Left
        then begin
          ScrollDir := -1;
          Handled := true;
        end;
      if Msg.wParam = vk_Right
        then begin
          ScrollDir := +1;
          Handled := true;
        end;
    end;
  if Msg.message = wm_keyup then
    begin
      if Msg.wParam = vk_Left
        then begin
          ScrollDir := 0;
          Handled := true;
        end;
      if Msg.wParam = vk_Right
        then begin
          ScrollDir := 0;
          Handled := true;
        end;
    end;
end;
Und dann in Deiner FormCreate folgendes aufgerufen:
Delphi-Quellcode:
   Application.onidle := OnIdle;
   Application.OnMessage := AppMessage;
Aber natürlich: Das könnte dann sogar zu hektisch werden. Vielleicht doch via TimeGetTime nachsehen, wann der letzte Frame geholt wurde, um damit selbst eine gewisse Geschwindigkeitskontrolle zu haben.

Aber auch: Das ganz funktioniert nur, wenn man AviSynth überreden kann, die Frames ohne Zeitverzögerung herauszugeben.


Gruß
Michael

PS.: Der OnIdle wird automatisch ausgelöst wann immer das System den Eindruck hat, die Software hätte gerade nix zu tun. Das ist also eine gute Stelle, "nichts tun" zu verhindern, aber auch die Maschine nicht zu überfordern...
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 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