Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi MediaInfoDll + Schleife sehr langsam (https://www.delphipraxis.net/147485-mediainfodll-schleife-sehr-langsam.html)

MaToBe 9. Feb 2010 20:59


MediaInfoDll + Schleife sehr langsam
 
Guten Abend die Herren,

ich bin gerade dabei für ein kleines Programm Videoinformationen aus meinen Videos zu lesen. Dies löse ich mit der MediaInfo.dll und folgendem Code:

Delphi-Quellcode:
procedure TForm1.VideoDataRead;
var
  Handle : Cardinal;
  I : integer;
  X : integer;
begin
  for I := 0 to StringGrid1.RowCount - 1 do
                StringGrid1.Rows[I].Clear();

  StringGrid1.Cells[0,0] := 'Name';
  StringGrid1.Cells[1,0] := 'Länge';
  StringGrid1.Cells[2,0] := 'Format';
  StringGrid1.Cells[3,0] := 'Dateigröße';
  StringGrid1.Cells[4,0] := 'Auflösung';

  for X := 1 to ValueListEditor1.RowCount -1 do
  begin
    Handle := MediaInfo_New();
    MediaInfo_Open(Handle,PChar(ValueListEditor1.Cells[1,X]));

    StringGrid1.Cells[0,X] := ValueListEditor1.Keys[X];
    StringGrid1.Cells[2,X]:=(MediaInfo_Get(Handle, 0, 0, 'Format/String', 1, 0) + ', ' + MediaInfo_Get(Handle, 0, 0, 'Format/Info', 1, 0));
    StringGrid1.Cells[3,X]:= MediaInfo_Get(Handle, 0, 0, 'FileSize/String4', 1, 0);
    StringGrid1.Cells[1,X]:= MediaInfo_Get(Handle, 0, 0, 'PlayTime/String3', 1, 0);
    StringGrid1.Cells[4,X]:= MediaInfo_Get(Handle, 1, 0, 'Width', 1, 0)+ ' x '
                            + MediaInfo_Get(Handle, 1, 0, 'Height', 1, 0);
  end;
end;
Es funktioniert prinzipiell einwandfrei, mit Ausnahme des Umstandes, dass allein für 11 Video-Dateien (.avi) etwa 1 ganze Minute gebraucht wird, um die 4 Informationen pro Datei auszulesen und in das StringGrid zu schreiben. Woran kann das liegen?? Mein Rechner ist nich der langsammste, falls das damit zusammenhängt (AMD X2 6000+ und 4 GB Ram).

Zur Information: Im ValueListEditor liegt als Keys die Namen der Dateien und als Value der jeweilige Pfad zur Datei.

MFG
MaToBe

sundance 10. Feb 2010 12:27

Re: MediaInfoDll + Schleife sehr langsam
 
Ich habe jetzt zwar deinen Code nicht ausprobiert, aber mir ist folgendes aufgefallen:
Du durchläufst in jedem Schleifendurchgang
Delphi-Quellcode:
Handle := MediaInfo_New();
Dafür fehlt das entsprechende Gegenstück dazu:
Delphi-Quellcode:
procedure MediaInfo_Close(Handle: Cardinal) cdecl stdcall;
Vielleicht läuft es ja schon dadurch schneller, wenn man MediaInfo_New() nur einmal vor der Schleife ausführt und das Handle für jede Datei wiederverwendet...

Ich glaube nicht, dass es an der DLL liegt; wenn man z.B. ein einer Eingabeaufforderung die CLI von mediainfo, die ja dieselbe DLL verwendet, mit einer Reihe von Dateien beschäftigt, geht das ziemlich schnell:
Delphi-Quellcode:
c:\Programme\MediaInfo\MediaInfoCLI.exe --Inform=Video;%Width%\n *.mkv
erledigt das in weniger als einer Sekunde...

.sundance.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 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